Постим сюда только готовые и оформленные кнопки!
                                           
- все вопросы, замечания, обсуждения тут:
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.

ВСЕ КНОПКИ В МОЁМ СООБЩЕНИИ ДЛЯ FIREFOX

-------------------------------------------------------------------------------------------------------------------------
Qick About:Config

Иконка

data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAANkE3LLaAgAAAlZJREFUeJx9kd9LU2EYxz9n50zc2abbcbl+6XTahRYhlKFC2EVEFIFSUEIgRKt/oMsu6qIrvepGEOyqsItAQoisMJJAyX5oUzeGuinlXE63/DU3z87poiWb077w8ry8PN/P8z7PI5DR4OBgUtO0bfaQwWAQI5HIl7a2tmvAYl6CxWJpVVVV3+8kEgk9EAjoPT09n4CiHHgm6ntVztbGxgbt7e31XV1drwHHbsB/JUkSqqoSjUbxeDyNHR0d/cBBACHTQks8Hu/7ZxgemWBiehOzRUGQRJLrK5AKUneymnQ6jd1up7m5+W44HO6Wsivpus7zF0OUuU9w++YBossJ1hMqir2S+R/V+LxjXLl8BpPJhCAIIkAOwOebIRIv4bQi09s/jUEAo2igqjyFrVhmIVZCMBimttadN0QAup+O4J/bYuBjiNGxCP3vZvEGlnG7itjcTCLLRfT2fcuZTw5gaibOyzcTjE8tcelcBbLJSHJL5fETL7Pz68wtrPF1MrI/QC4Q2E5peH2/0NLQcqEau01m4EOISX+MtbUkBca/G9c0LR/QUKcgigI/F1eRTRL+mRXeDoWQJAPvR+bwBZdoqLPv/4MbVxtxlSxT4TpEfDWFKAhUlhVjsxWSRGTrt5/rrU35gHQ6DYDVaqXzfhPOwhCj3yOUH1U4f7aKU8dLcRhDPLpXj9VqRdf1HU/OGjVNo6bmGJ0PD/NqYJjJz+OgQ2lpIZ0PLmI2m9F1faf/PIDD4UDTNBRFwXPrSA44W6Io7tyFTHQ5nc47WlbmblPWuwAQi8WeAb4/5F0JMc+AnhQAAAAASUVORK5CYII=


Код "ссылка"

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%0D%0A%20%20%3Cname%3Eabout%3Aconfig%3C/name%3E%0D%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAANkE3LLaAgAAAlZJREFUeJx9kd9LU2EYxz9n50zc2abbcbl+6XTahRYhlKFC2EVEFIFSUEIgRKt/oMsu6qIrvepGEOyqsItAQoisMJJAyX5oUzeGuinlXE63/DU3z87poiWb077w8ry8PN/P8z7PI5DR4OBgUtO0bfaQwWAQI5HIl7a2tmvAYl6CxWJpVVVV3+8kEgk9EAjoPT09n4CiHHgm6ntVztbGxgbt7e31XV1drwHHbsB/JUkSqqoSjUbxeDyNHR0d/cBBACHTQks8Hu/7ZxgemWBiehOzRUGQRJLrK5AKUneymnQ6jd1up7m5+W44HO6Wsivpus7zF0OUuU9w++YBossJ1hMqir2S+R/V+LxjXLl8BpPJhCAIIkAOwOebIRIv4bQi09s/jUEAo2igqjyFrVhmIVZCMBimttadN0QAup+O4J/bYuBjiNGxCP3vZvEGlnG7itjcTCLLRfT2fcuZTw5gaibOyzcTjE8tcelcBbLJSHJL5fETL7Pz68wtrPF1MrI/QC4Q2E5peH2/0NLQcqEau01m4EOISX+MtbUkBca/G9c0LR/QUKcgigI/F1eRTRL+mRXeDoWQJAPvR+bwBZdoqLPv/4MbVxtxlSxT4TpEfDWFKAhUlhVjsxWSRGTrt5/rrU35gHQ6DYDVaqXzfhPOwhCj3yOUH1U4f7aKU8dLcRhDPLpXj9VqRdf1HU/OGjVNo6bmGJ0PD/NqYJjJz+OgQ2lpIZ0PLmI2m9F1faf/PIDD4UDTNBRFwXPrSA44W6Io7tyFTHQ5nc47WlbmblPWuwAQi8WeAb4/5F0JMc+AnhQAAAAASUVORK5CYII%3D%5D%5D%3E%3C/image%3E%0D%0A%20%20%3Cmode%3E0%3C/mode%3E%0D%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B/*Initialization%20Code*/%5D%5D%3E%3C/initcode%3E%0D%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*CODE*/%0AgetBrowser%20%28%29.%20selectedTab%20%3D%20getBrowser%20%28%29.%20addTab%20%28%22about%3Aconfig%22%29%5D%5D%3E%3C/code%3E%0D%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0D%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0D%0A%20%20%3Cattributes/%3E%0D%0A%3C/custombutton%3E


Код кнопки

getBrowser (). selectedTab = getBrowser (). addTab ("about:config")


-------------------------------------------------------------------------------------------------------------------------
Block Site Button
Кнопка для дополнения BlockSite. Данная кнопка выводит запрос на добавление текущей страницы в список блокировки и вносит её туда в случае подтверждения.
Иконка

data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAACXBIWXMAAAsRAAALEQF/ZF+RAAAAGHRFWHRTb2Z0d2FyZQBQYWludC5ORVQgdjMuMzap5+IlAAACu0lEQVQ4T21Ta0hTYRg+23GbOm+TdFZejrk5L6hked3QJkIr9YdYQRA2QrcpZqbRn6SICEN/RBT9EIJWoNSPLiKUIizDa1OPHqeZIGhBRqKzpsVZ1tPZEYdzO/D+ON/3Ps/zPe9FQOz5egOj9U7h1vl/gj/HAsESTuFfYklMEKxw6x13br76DY/3Yvj/YUkC1e8fR9vOVmGj8xl+FxbBLpRgjZTgl4DEF7EAHeEE7kQRNBeUB8m4KJEaizxsX3/+Gmut9zEWfQQjKjXGj5+BVXcKlpRsDAbIsEKKwATwJHYPElqkoje7e7FyrQW0shA3CAKcgkdY8ovQJ5WBO9whoflX2MgU/deaZqzfbAOjPOYFdBFNGi9hOK8Qm0ISPUEhnC1yx46emCFTLM5HZtjkWT6VGWMDRnO1YA1G9EXsx1tNAfqlUnCFdVmxEPMx3GVdA2yKIi91m+EyxnKKeHC/Kg1WUx2f8zQslLdyV87ZXDyQCwensFBR60EwW92IidxiOGtqMZCYjnHTRfd9T2kJlv22bRCLwalwhB/EfPE5d8JcdRMm83RgG5swnJQJ2ljvQd5TdhKrpHCb4COpAisQYVqh5ZPmq65gOr8EbPN1DMWmYoor4N6OPJGF8Ba4GoBgyGSLQyjFnCQOTFYpZtRlYG/dxgiVgWlDgxfY1eJBWSiWAsjtIk75Jek/SSj8lMdhVqUBq78Aa0w6ZgyNPlv66lA8HFx0yEUuAj0/C1axkv4emwxotZjYlwRrjs6ncleCEguZmWCSKX6k3eM8KlZQA/7x9uWjGjjKT4NJU4NbKozqKjB0ohwvgyPwIU+DjcpKMAVZ3qPsYnrvT1F9gdH0iCIdKwYT0N6O1ZY2/HjwEDCb8bnehI6MGN/LtHuzuoOi9C9CIiydYTK8UeegqyAb9yJFaI0SWNyedwH+A+D1pJXWZfRiAAAAAElFTkSuQmCC


Код "ссылка"

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%0D%0A%20%20%3Cname%3EBlockSite%3C/name%3E%0D%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAACXBIWXMAAAsRAAALEQF/ZF+RAAAAGHRFWHRTb2Z0d2FyZQBQYWludC5ORVQgdjMuMzap5+IlAAACu0lEQVQ4T21Ta0hTYRg+23GbOm+TdFZejrk5L6hked3QJkIr9YdYQRA2QrcpZqbRn6SICEN/RBT9EIJWoNSPLiKUIizDa1OPHqeZIGhBRqKzpsVZ1tPZEYdzO/D+ON/3Ps/zPe9FQOz5egOj9U7h1vl/gj/HAsESTuFfYklMEKxw6x13br76DY/3Yvj/YUkC1e8fR9vOVmGj8xl+FxbBLpRgjZTgl4DEF7EAHeEE7kQRNBeUB8m4KJEaizxsX3/+Gmut9zEWfQQjKjXGj5+BVXcKlpRsDAbIsEKKwATwJHYPElqkoje7e7FyrQW0shA3CAKcgkdY8ovQJ5WBO9whoflX2MgU/deaZqzfbAOjPOYFdBFNGi9hOK8Qm0ISPUEhnC1yx46emCFTLM5HZtjkWT6VGWMDRnO1YA1G9EXsx1tNAfqlUnCFdVmxEPMx3GVdA2yKIi91m+EyxnKKeHC/Kg1WUx2f8zQslLdyV87ZXDyQCwensFBR60EwW92IidxiOGtqMZCYjnHTRfd9T2kJlv22bRCLwalwhB/EfPE5d8JcdRMm83RgG5swnJQJ2ljvQd5TdhKrpHCb4COpAisQYVqh5ZPmq65gOr8EbPN1DMWmYoor4N6OPJGF8Ba4GoBgyGSLQyjFnCQOTFYpZtRlYG/dxgiVgWlDgxfY1eJBWSiWAsjtIk75Jek/SSj8lMdhVqUBq78Aa0w6ZgyNPlv66lA8HFx0yEUuAj0/C1axkv4emwxotZjYlwRrjs6ncleCEguZmWCSKX6k3eM8KlZQA/7x9uWjGjjKT4NJU4NbKozqKjB0ohwvgyPwIU+DjcpKMAVZ3qPsYnrvT1F9gdH0iCIdKwYT0N6O1ZY2/HjwEDCb8bnehI6MGN/LtHuzuoOi9C9CIiydYTK8UeegqyAb9yJFaI0SWNyedwH+A+D1pJXWZfRiAAAAAElFTkSuQmCC%5D%5D%3E%3C/image%3E%0D%0A%20%20%3Cmode%3E0%3C/mode%3E%0D%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B/*Initialization%20Code*/%5D%5D%3E%3C/initcode%3E%0D%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*CODE*/%0Avar%20Cc%20%3D%20Components.%20classes%3B%0Avar%20Ci%20%3D%20Components.%20interfaces%3B%0Avar%20NSISSI%20%3D%20Ci.%20nsISupportsString%3B%0Avar%20newLocation%20%3D%20prompt%20%28%22%u0414%u043E%u0431%u0430%u0432%u043B%u0435%u043D%u0438%u0435%20%u0441%u0430%u0439%u0442%u0430%20%u0432%20%u0447%u0451%u0440%u043D%u044B%u0439%20%u043B%u0438%u0441%u0442%22%2C%20getBrowser%20%28%29.%20contentDocument.%20location.%20href%29%3B%0Aif%20%28%21newLocation%29%20return%3B%0Avar%20blockedWebsitesArray%3B%0Avar%20BlockSitePrefBranch%20%3D%20Cc%20%5B%22@mozilla.org/preferences-service%3B1%22%5D.%20getService%20%28Ci.%20nsIPrefService%29.%20getBranch%28%22BlockSite.%22%29%3B%0Aif%20%28BlockSitePrefBranch.%20prefHasUserValue%20%28%22locations%22%29%29%0A%7B%0A%20%20%20%20blockedWebsitesString%20%3D%20BlockSitePrefBranch.%20getComplexValue%20%28%22locations%22%2C%20NSISSI%29.%20data%3B%0A%20%20%20%20blockedWebsitesArray%20%3D%20blockedWebsitesString.%20split%20%28%22%7C%7C%7C%22%29%3B%0A%7D%0Aelse%0A%7B%0A%20%20%20%20blockedWebsitesArray%20%3D%20new%20Array%28%29%3B%0A%7D%0AblockedWebsitesArray.%20push%20%28newLocation%29%3B%0Avar%20locationNsIString%20%3D%20Cc%20%5B%22@mozilla.org/supports-string%3B1%22%5D.%20createInstance%20%28NSISSI%29%3B%0AlocationNsIString.%20data%20%3D%20blockedWebsitesArray.%20join%20%28%22%7C%7C%7C%22%29%3B%0ABlockSitePrefBranch.%20setComplexValue%20%28%22locations%22%2C%20NSISSI%2C%20locationNsIString%29%3B%5D%5D%3E%3C/code%3E%0D%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0D%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%u041A%u043D%u043E%u043F%u043A%u0430%20%u0434%u043E%u0431%u0430%u0432%u043B%u044F%u0435%u0442%20%u0442%u0435%u043A%u0443%u0449%u0438%u0439%20%u0441%u0430%u0439%u0442%20%u0432%20%u0441%u043F%u0438%u0441%u043E%u043A%20%u0434%u043E%u043F%u043E%u043B%u043D%u0435%u043D%u0438%u044F%20BlockSite%5D%5D%3E%3C/help%3E%0D%0A%20%20%3Cattributes/%3E%0D%0A%3C/custombutton%3E


Код кнопки

var Cc = Components. classes;
var Ci = Components. interfaces;
var NSISSI = Ci. nsISupportsString;
var newLocation = prompt ("Добавление сайта в чёрный лист", getBrowser (). contentDocument. location. href);
if (!newLocation) return;
var blockedWebsitesArray;
var BlockSitePrefBranch = Cc ["@mozilla.org/preferences-service;1"]. getService (Ci. nsIPrefService). getBranch("BlockSite.");
if (BlockSitePrefBranch. prefHasUserValue ("locations"))
{
    blockedWebsitesString = BlockSitePrefBranch. getComplexValue ("locations", NSISSI). data;
    blockedWebsitesArray = blockedWebsitesString. split ("|||");
}
else
{
    blockedWebsitesArray = new Array();
}
blockedWebsitesArray. push (newLocation);
var locationNsIString = Cc ["@mozilla.org/supports-string;1"]. createInstance (NSISSI);
locationNsIString. data = blockedWebsitesArray. join ("|||");
BlockSitePrefBranch. setComplexValue ("locations", NSISSI, locationNsIString);


-------------------------------------------------------------------------------------------------------------------------
DownloadFolder
С помощью данной кнопки открывается папка, куда сохраняются загрузки.
Иконка

data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGeYUxB9wAAACBjSFJNAACHCAAAjBsAAPxxAACE0wAAeY0AAO8KAAA8/QAAIDcIc+hqAAABu2lDQ1BJQ0MgUHJvZmlsZQAAOMuVks8rRFEUx7/viSkhycxCqZckC6aXsbBisPAji2lSfmQz8+YZamZc973xY8fGkrJgQxEb5Q+QlLEkOyWyHbKSUiKm59x3MaWGnHq9z/l2z733fM8FirQIYwkVQDJl83BPlzY8Mqp5rlCKGnhRj8qIYbHOUGgABeP5Eor4XzSLve5KVk6zr5nc0ol/yzdwcIvfo5zTgYCiEVfHJbcKjkruFTxrM5t4TLAxEYkRM+ImPhjuJt4grohL3hcclXwkeMaIi9pzYj0Vm0wRvxO3xUzLAFRx1qLBOK1RD4iDyeQU7a++EDcKL+Q15x6Ajm3S1/Pa0Bqw3w549/JaQ5iuSNphNq89+Vx/FN+ZNR5ocSWljAPFL47zVAt4DoEcd5y3TcfJ7QJF10Bm2kjzmU+PFDUA/JXLPmUu5+ESCrH0wg0d2MlQP4T9QWBzgfqgpOoGCJE2GIQaCHx90jc5O0s8mGgibTKufw8UFsLoQRc0RJFAGiYYOPSCFf8P25xze+2eYvN8Mj5ha5308kytL2X4m7QWXW/7vV7OWERJJbBapy6ULR+n7x9/rvsAMCGEevwX0AsAAAAYdEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My4zNqnn4iUAAAJKSURBVDhPrZPtS1NhGMbnQMTo5Wuf+mYf+hCtKVYQqymZ86WVklGtgTJFG9KWmyT0ZpiZzDWrOZ3bmqAxQ526OXtZFEhZrG26qWtlIsFDLehfuLrPqYWHxCA6cPFc58D9u1/O/YhE/+kR52rdM7lNI2yPfpTt1o+wHO0j/hR4HX1v8LBdGucM5RWvzZ1VcmOSqVxRlNuiUFijkFvC/Cnw9yM4bHqLfOMYo+CstYDssjYfq3BEUGSbQwEFSk0h/hR4AkjaZ5Hf7OUA2QLAsZt+Vj0Uh9IRQ2l/DIU9c/y51pf0zfOVrQs43u5ntZ4FVDjj/wao7Jhi6sEYlM4YiilTnvkdXwUnaddPz7Wz99ab9Ss41RlgF70JqAeXcNK9CIU9hnKHsJoNWzhjmmYtviRqPe+hIoiSWjnhivOQ9Dw2BKjvPGHNE0nUDXOABI72zvMQrpI8c/jvLdR0P2WdwRU0Ty5DO/oBqqEEzlElVQOL/ExK7fNQ2MKQm2kGxtE/f2PdvWes++UqrgZW0DSxDA21UkM6S5AyCi66/RgHDC5ILzghaej/Qnu0SbAH561BZnmxiuvTKzCMf+SzVz9cwumBBcjvhiC75EZv6DuujcdRbOx5RcGZAkCj7Tl78PozuoKraJ36BP1IEo00Dw2BKvtoQy8PoXWCgg3WWVFm5jYKzkgDOLO1yOgOqU2Br1Ud/pSyzZcquOJNFZJkLWMpiW44Jam3fzuis0REYvGOX2v8+zJxZgsph7SPdJAkIx0SKmM/ve8kbSdtTt/GH8YgtdZVWZNAAAAAAElFTkSuQmCC


Код "ссылка"

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%0D%0A%20%20%3Cname%3EDownloadFolder%3C/name%3E%0D%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGeYUxB9wAAACBjSFJNAACHCAAAjBsAAPxxAACE0wAAeY0AAO8KAAA8/QAAIDcIc+hqAAABu2lDQ1BJQ0MgUHJvZmlsZQAAOMuVks8rRFEUx7/viSkhycxCqZckC6aXsbBisPAji2lSfmQz8+YZamZc973xY8fGkrJgQxEb5Q+QlLEkOyWyHbKSUiKm59x3MaWGnHq9z/l2z733fM8FirQIYwkVQDJl83BPlzY8Mqp5rlCKGnhRj8qIYbHOUGgABeP5Eor4XzSLve5KVk6zr5nc0ol/yzdwcIvfo5zTgYCiEVfHJbcKjkruFTxrM5t4TLAxEYkRM+ImPhjuJt4grohL3hcclXwkeMaIi9pzYj0Vm0wRvxO3xUzLAFRx1qLBOK1RD4iDyeQU7a++EDcKL+Q15x6Ajm3S1/Pa0Bqw3w549/JaQ5iuSNphNq89+Vx/FN+ZNR5ocSWljAPFL47zVAt4DoEcd5y3TcfJ7QJF10Bm2kjzmU+PFDUA/JXLPmUu5+ESCrH0wg0d2MlQP4T9QWBzgfqgpOoGCJE2GIQaCHx90jc5O0s8mGgibTKufw8UFsLoQRc0RJFAGiYYOPSCFf8P25xze+2eYvN8Mj5ha5308kytL2X4m7QWXW/7vV7OWERJJbBapy6ULR+n7x9/rvsAMCGEevwX0AsAAAAYdEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My4zNqnn4iUAAAJKSURBVDhPrZPtS1NhGMbnQMTo5Wuf+mYf+hCtKVYQqymZ86WVklGtgTJFG9KWmyT0ZpiZzDWrOZ3bmqAxQ526OXtZFEhZrG26qWtlIsFDLehfuLrPqYWHxCA6cPFc58D9u1/O/YhE/+kR52rdM7lNI2yPfpTt1o+wHO0j/hR4HX1v8LBdGucM5RWvzZ1VcmOSqVxRlNuiUFijkFvC/Cnw9yM4bHqLfOMYo+CstYDssjYfq3BEUGSbQwEFSk0h/hR4AkjaZ5Hf7OUA2QLAsZt+Vj0Uh9IRQ2l/DIU9c/y51pf0zfOVrQs43u5ntZ4FVDjj/wao7Jhi6sEYlM4YiilTnvkdXwUnaddPz7Wz99ab9Ss41RlgF70JqAeXcNK9CIU9hnKHsJoNWzhjmmYtviRqPe+hIoiSWjnhivOQ9Dw2BKjvPGHNE0nUDXOABI72zvMQrpI8c/jvLdR0P2WdwRU0Ty5DO/oBqqEEzlElVQOL/ExK7fNQ2MKQm2kGxtE/f2PdvWes++UqrgZW0DSxDA21UkM6S5AyCi66/RgHDC5ILzghaej/Qnu0SbAH561BZnmxiuvTKzCMf+SzVz9cwumBBcjvhiC75EZv6DuujcdRbOx5RcGZAkCj7Tl78PozuoKraJ36BP1IEo00Dw2BKvtoQy8PoXWCgg3WWVFm5jYKzkgDOLO1yOgOqU2Br1Ud/pSyzZcquOJNFZJkLWMpiW44Jam3fzuis0REYvGOX2v8+zJxZgsph7SPdJAkIx0SKmM/ve8kbSdtTt/GH8YgtdZVWZNAAAAAAElFTkSuQmCC%5D%5D%3E%3C/image%3E%0D%0A%20%20%3Cmode%3E0%3C/mode%3E%0D%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B/*Initialization%20Code*/%5D%5D%3E%3C/initcode%3E%0D%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*CODE*/%0Afunction%20startProcess%20%28path%2C%20args%29%0A%7B%0Avar%20file%20%3D%20Components.%20classes%5B%22@mozilla.org/file/local%3B1%22%5D.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20createInstance%20%28Components.interfaces.nsILocalFile%29%3B%0A%20%20%20%20var%20process%20%3D%20Components.%20classes%20%5B%22@mozilla.org/process/util%3B1%22%5D.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20createInstance%20%28Components.%20interfaces.%20nsIProcess%29%3B%0A%20%20%20%20file.%20initWithPath%20%28path%29%3B%0A%20%20%20%20if%20%28args%20%3D%3D%20%22%22%29%0A%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20file.%20launch%20%28%29%3B%0A%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20%7D%0A%20%20%20%20process.%20init%20%28file%29%3B%0A%20%20%20%20if%20%28%21this.%20pid%29%0A%20%20%20%20%20%20%20%20this.%20pid%20%3D%20%5B%5D%3B%0A%20%20%20%20this.%20pid.%20push%20%28process.%20run%20%28false%2C%20%5Bargs%5D%2C%201%29%29%3B%20%0A%7D%0Afunction%20getPref%20%28pName%29%0A%7B%0A%20%20%20%20var%20prefs%20%3D%20Components.%20classes%20%5B%22@mozilla.org/preferences-service%3B1%22%5D.%0A%20%20%20%20%20%20%20%20%20%20%20%20getService%20%28Components.%20interfaces.%20nsIPrefBranch%29%3B%0A%20%20%20%20var%20res%20%3D%20%22%22%3B%0A%20%20%20%20try%0A%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20res%20%3D%20prefs.%20getComplexValue%20%28%22browser.download.%22%20+%20pName%2C%20Components.%20interfaces.%20nsILocalFile%29%3B%0A%20%20%20%20%7D%20catch%20%28e%29%20%7B%7D%3B%0A%20%20%20%20return%20res%3B%0A%7D%0Avar%20folderList%20%3D%20custombuttonsUtils.%20getPrefs%20%28%22browser.download.folderList%22%29%3B%0Avar%20fileLoc%20%3D%20Components.%20classes%20%5B%22@mozilla.org/file/directory_service%3B1%22%5D.%0A%20%20%20%20%20%20%20%20%20%20getService%20%28Components.%20interfaces.%20nsIProperties%29%3B%0Avar%20desk%20%3D%20fileLoc.%20get%20%28%22Desk%22%2C%20Components.%20interfaces.%20nsILocalFile%29%3B%0Avar%20dnldMgr%20%3D%20Components.%20classes%5B%22@mozilla.org/download-manager%3B1%22%5D.%0A%20%20%20%20%20%20%20%20%20%20getService%28Components.interfaces.nsIDownloadManager%29%3B%0Avar%20ddd%20%3D%20dnldMgr.%20defaultDownloadsDirectory%3B%0Avar%20dir%20%3D%20%22%22%3B%0Aif%20%28folderList%20%3D%3D%200%29%20//%20desktop%0A%20%20%20%20dir%20%3D%20desk.%20path%3B%0Aelse%20if%20%28folderList%20%3D%3D%201%29%20//%20default%20downloads%20directory%0A%20%20%20%20dir%20%3D%20ddd.%20path%3B%0Aelse%0A%7B%0A%20%20%20%20dir%20%3D%20getPref%20%28%22dir%22%29%20%7C%7C%20getPref%20%28%22downloadDir%22%29%20%7C%7C%20getPref%20%28%22lastDir%22%29%20%7C%7C%20getPref%20%28%22defaultFolder%22%29%20%7C%7C%20%22%22%3B%0A%20%20%20%20if%20%28%21dir%29%0A%20%20%20%20%20%20%20%20dir%20%3D%20fileLoc.%20get%20%28%22DfltDwnld%22%2C%20Components.%20interfaces.%20nsILocalFile%29%3B%0A%20%20%20%20dir%20%3D%20dir.%20path%3B%0A%7D%0AstartProcess%20%28dir%2C%20%22%22%29%3B%5D%5D%3E%3C/code%3E%0D%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0D%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0D%0A%20%20%3Cattributes/%3E%0D%0A%3C/custombutton%3E


Код кнопки

function startProcess (path, args)
{
var file = Components. classes["@mozilla.org/file/local;1"].
               createInstance (Components.interfaces.nsILocalFile);
    var process = Components. classes ["@mozilla.org/process/util;1"].
                  createInstance (Components. interfaces. nsIProcess);
    file. initWithPath (path);
    if (args == "")
    {
        file. launch ();
        return;
    }
    process. init (file);
    if (!this. pid)
        this. pid = [];
    this. pid. push (process. run (false, [args], 1));
}
function getPref (pName)
{
    var prefs = Components. classes ["@mozilla.org/preferences-service;1"].
            getService (Components. interfaces. nsIPrefBranch);
    var res = "";
    try
    {
        res = prefs. getComplexValue ("browser.download." + pName, Components. interfaces. nsILocalFile);
    } catch (e) {};
    return res;
}
var folderList = custombuttonsUtils. getPrefs ("browser.download.folderList");
var fileLoc = Components. classes ["@mozilla.org/file/directory_service;1"].
          getService (Components. interfaces. nsIProperties);
var desk = fileLoc. get ("Desk", Components. interfaces. nsILocalFile);
var dnldMgr = Components. classes["@mozilla.org/download-manager;1"].
          getService(Components.interfaces.nsIDownloadManager);
var ddd = dnldMgr. defaultDownloadsDirectory;
var dir = "";
if (folderList == 0) // desktop
    dir = desk. path;
else if (folderList == 1) // default downloads directory
    dir = ddd. path;
else
{
    dir = getPref ("dir") || getPref ("downloadDir") || getPref ("lastDir") || getPref ("defaultFolder") || "";
    if (!dir)
        dir = fileLoc. get ("DfltDwnld", Components. interfaces. nsILocalFile);
    dir = dir. path;
}
startProcess (dir, "");


--------------------------------------------------------------------------------------------------------
Qick Bookmarks
Кнопка для "одноразового" хранения закладок. Для того чтобы сохранить закладку: достаточно перетащить вкладку на кнопку. При этом вкладка закроется а закладка на неё появится в списке кнопки. При открытии закладки она убирается из списка. Открытые страницы проматываются к тому месту, где они были сохранены. Удалить закладку можно щёлкнув на неё правой кнопкой мыши. Для того чтобы открыть все закладки из кнопки нужно нажать на кнопку средней кнопкой мыши.
Иконка
Тёмный вариант

data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAABh0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjM2qefiJQAAA7dJREFUOE+tlF1Im3cUxpOgOBE/5khxGPCzZiaamaiJXzFq/DbqmyCa4CdoNEr8SFBnTRs76CZ2sq5IhxM1Y5OpMMQLdzE2GELvdreb7WIvnevawZBmbBc2lvns/P+gtOzN3QKHvLwJP55znnMeueylj8PhsB0fH7/WU61W+O262MjjnxQ4+0t+++E/zx/9HXOhUChk5+fnskgkgouLC1lMTAxiY2NlhYWFP+zs7Pz8Mos/19XViWazGaEPFnD27fs4/XwM4S99eC/gg9/vx8jICKxWK2pra9HY2Ii2tjZ0dnaChKz8B8ZeNDQ0iOXl5fj4phunn7kR3p/Ei4f3sDTvRVdXF0wmE6qqqjiwqakJvb29mJ+fx/DwsDSQ/iQajUbc87sQ/sKD8++W8eJ4BcPODhQVFYH9VllZyVW63W4EAgEEg0H2LA1sbm4W9Xo97k478fzrJUS+eRfhkAstRjUHlpaWcuDQ0BB8Ph9Xt7i4GB3IFBYUFOCOtxtnX91A+NNenLyTic2VG9ja2sL29jb29/dxdHTE6xI6OjoqrZBaEdVqNW6NtCO87cRvt3V4cisPn9wNYmNjg0MPDg5weHjIa3Jykps1NjYmDSSHxaysLPjsJjxdLsfTJQ3+fFCP+3cWsLa2hs3NTezu7vLa29uDx+PhUPqWBpKLYlJSEjxNWvy+bMSzj8x4dt+ClcA0VldXsb6+zttmFQqFmLsYHx+PDiRDRFpeOMtUOP2wCqerpDKoxpBgxcDAAFfEWpydncXc3BwGBwe521EVajQakW2/w3ANfywb+PweTSth1mXxHbRYLGhtbYXdbkd3dzffQ+Y4qZRuOScnR6RTgkOvxJOb1/GLPw2/zqlQUZhztTJsqS+hPT096Ovrw8TEhDQwPT1djIuLg/3tVJzMpuOEYEylUZMJUn+13Oxa6ExBe4v29vboLSuVSjE+Ph4OAjJljxcyeTEgBQAMBsMr53d5z1FbTk5OFhMSEkjhG/h+PA0+yzX86FXCpM28upSKigo+y/r6erS0tKCjowNer1e6ZVInJiYmwpT9Okqup4FmClvRm9C/lY3i4mKUlZWBpRFrl4WDzWbjBk1NTUkDyRCRVEKlUoEteF5eHrRa7SvBUFNTA0olbgyLLpZCdILSQLlcLqakpCAjIwO5ubnIz8+HTqdDSUkJWKxVV1fzpLk0g3IQTqcTMzMz0kCKRGtqamonqRNInUBBIRDMTnNz0NzsBLOTOoHUCaROIHWCy+US+vv7syUD9v94+S8Q4DBE9A8P2gAAAABJRU5ErkJggg==

Светлый вариант

data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAABJ0QAASdEBBfyrlQAAABh0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjM2qefiJQAAA6xJREFUOE+llHtMW2UYxl0hzZjxNl22JZt/q/9o3JwUilVijE7HyOyMEJlOZC1YIolpFuKMW+aSaaKyjRDYcGioYYNlJUxIh6w3DmVt6WXtWUsZdEgLpZfTewuFo4/nFDBZNsDML3mSNyfv98vzfO+bk/PIQ5z6dx8reSKPk7jjpxMPcf3eK88+w93oaNs/3ntid+P/hm3kcnJbpS99+fdoM0Kao5mSwq3PMVDOfwGzTSuNnO8P7Th96+I71rHuT6mE5du/4LkETMng00gzjiuHJvVNAuVHgs377gNzntyybdsnx+T8b1q8rx1v8Ww//LWc8/jT29/etXmrqb3UgImfgJl2wN8JzF4GvL8gQ55E58nCM089mpv7L/Dg+wfeGrje52hsanLzmgcg7SdxlFFBixINZ8+4BxS9jr6eq3dvq44DnkYGehGYbmXqc2j/8cBpBrThHnc1oiphOhmHyXoLvOYb+EJBoo4R77wKhE6HVCKKZCwM51ADELgKRNRAWMm4vISu81XS+6KywFQ8ihGzBfmMK1GvHeI+EvkXNMvAGAI+L/40n8PoyGXoNL2Q/fzd735XZ3qw55jsgcBEjILBZEJhqxofX7Oj9IoFuy6oQQwNIRYOwOWwYlgth8/jxvTUBHj5r768983dO7+q2yd6IDAeCcIwYsR7HVoIOvR4sW0Ihb+qoFT+AcrvBRWYRjirGfi8k1ngqutSI64SRik/9EY9Dso1KOkxYD+jD68RUKtvIBL0IRKaRTTkB9vn93lQwMtfC3hkCWi4iTqVDhK1EdXXByEl9BjUqrKRY+Eg4pFQVkH/DAPkrQ78vFokjDIO9Pph/GA14JSsHWc7ZGiwGUEQGsSjFBLMlNlJJ+MRUEE/+AXrANlIw8METvzWhqnJcQRnp3GKqXW6wSyEXZ10MsYojggVAp9fsLpDSY1YyAJJmxlWs3EpXjQEp8OOUSeZBc2lEphLJzGfTiEWDaOIz18bGF55eCqQfSc2IrubrCMWNj+XQmZ+DguZeSTiMRQVFa0FrBaGgzPMFGeX3VHLMZecrcAWFzKgFxeQSibWBn5WefgDm8W4aLeaaNJmoW/brbSDtNFOB0m7nA56zDVKj98Zoycmxum7bjftcrkWi4uLX1l1DysrK/MqKip21tbWviASifeUl5e/sZc5AoGglBVbM99eF4vFeyQSyfNlZWU76uvruev+B81m8waCIHIUCgVXLpfndXV1bWLV3d2d19/fz9VqtTnrQf4BL3nIboFXhZoAAAAASUVORK5CYII=


Код "ссылка" (тёмный вариант)

Код "ссылка" (светлый вариант)

Код кнопки - Инициализация!!!

/*Initialization Code*/
var profileDir = Components.classes["@mozilla.org/file/directory_service;1"]
    .getService(Components.interfaces.nsIProperties)
    .get("ProfD", Components.interfaces.nsILocalFile)
    .path;
var path = profileDir + "/tabbookmarks.xml";
this. loadInBackground = true;
this. reload = true;

this. handleDragOver = function (event)
{
    var dt = event. dataTransfer;
    var tab = dt. mozGetDataAt (TAB_DROP_TYPE, 0);
    if (!tab)
        return;
    event. preventDefault ();
    event. stopPropagation ();
    return dt. effectAllowed = dt. dropEffect = "link";
}

this. handleDrop = function (event)
{
    var dt = event. dataTransfer;
    var url = dt. mozGetDataAt ("text/x-moz-text-internal", 0);
    var tab = dt. mozGetDataAt (TAB_DROP_TYPE, 0);
    this. addMenuitem (tab, url);
};

this. __defineGetter__
(
    "ss",
    function ()
    {
        delete this.ss;
        return this.ss = Components.classes["@mozilla.org/browser/sessionstore;1"]
            .getService(Components.interfaces.nsISessionStore);
    }
);

this. __defineGetter__
(
    "ios",
    function ()
    {
        delete this.ios;
        return this.ios = Components.classes["@mozilla.org/network/io-service;1"]
            .getService(Components.interfaces.nsIIOService);
    }
);

this. addMenuitem = function (tab, url)
{
    var label = tab. label;
    var image = tab. image;

    var menu = this. menu;
    var mi = document. createElement ("menuitem");
    mi. setAttribute ("label", label);
    mi. setAttribute ("tab_data", this.ss.getTabState(tab));
    mi. setAttribute ("tooltiptext", url);
    mi. className = "menuitem-iconic bookmark-item";
    image && mi. setAttribute ("image", "moz-anno:favicon:" + image.replace(/#-moz-resolution=16,16$/, ""));
    menu. appendChild (mi);
    this. type = "menu";
    this. flushMenu (menu);

    var br = gBrowser;
    //if (br. tabContainer. childNodes. length > 1)
        //br. removeTab (tab);
        setTimeout(function() {
            br. removeTab (tab);
        }, 0);
};

this. deleteMenuitem = function (menuitem, dontFlush)
{
    var menu = this. menu;
    menu. removeChild (menuitem);
    this. checkEmpty (menu);
    !dontFlush && this. flushMenu (menu);
};

this. checkEmpty = function (menu)
{
    if (menu. getElementsByTagName ("menuitem"). length > 0)
        return;
    menu. hidePopup ();
    this. type = "";
};

this. flushMenu = function (menu)
{
    menu = menu || this. menu;
    var xs = new XMLSerializer ();
    var xmenu = xs. serializeToString (menu);
    var suc = Components. classes ["@mozilla.org/intl/scriptableunicodeconverter"].
              createInstance (Components. interfaces. nsIScriptableUnicodeConverter);
    suc. charset = "UTF-8";
    xmenu = suc. ConvertFromUnicode (xmenu);
    custombuttons. writeFile (path, xmenu);
};

this. getMenu = function (event)
{
    var menu = this. menu;
    if (menu)
        this. removeChild (menu);
    menu = "";
    try
    {
        file = Components. classes ["@mozilla.org/file/local;1"].
               createInstance (Components. interfaces. nsILocalFile);
        file. initWithPath (path);
        var fis = Components. classes ["@mozilla.org/network/file-input-stream;1"].
                  createInstance (Components. interfaces. nsIFileInputStream);
        fis.init (file, 0x01, 00004, null);
        var sis = Components. classes ["@mozilla.org/scriptableinputstream;1"].
                  createInstance (Components. interfaces. nsIScriptableInputStream);
        sis. init (fis);
        menu = sis. read (sis. available ());
        sis. close ();
        var suc = Components. classes ["@mozilla.org/intl/scriptableunicodeconverter"].
                  createInstance (Components. interfaces. nsIScriptableUnicodeConverter);
        suc. charset = "UTF-8";
        menu = suc. ConvertToUnicode (menu);
        //menu = new XML (menu) || "";
        menu = new DOMParser (). parseFromString (menu, "application/xml"). documentElement;
    }
    catch (e)
    {
        menu = "";
    }
    if (!menu)
    {
        //menu =
        //<menupopup xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
        //       onclick="this. parentNode. openTab (event);"/>
        menu = document.createElement("menupopup");
        menu.setAttribute("onclick", "this. parentNode. openTab (event);");
    }
    //menu = new DOMParser (). parseFromString (menu. toXMLString (), "application/xml"). documentElement;
    this. appendChild (menu);
    if (menu. getElementsByTagName ("menuitem"). length > 0)
        this. type = "menu";
    this. orient = "horizontal";
    return menu;
};

this. __defineGetter__
(
    "menu",
    function ()
    {
        return this. getElementsByTagName("menupopup") [0] || null;
    }
);

this. openTab = function (event, mi)
{
    mi = mi || event. target;
    var bg = event ? this. loadInBackground : true;
    var menu = mi. parentNode;
    if (!event || event. button < 2)
    {
        var tab;
        if (event && event. button == 0)
            tab = gBrowser. mCurrentTab;
        else
            tab = gBrowser. loadOneTab("about:blank", null, null, null, bg, false);
        menu. hidePopup ();
        var tabData = mi. getAttribute ("tab_data");
        if(this.reload && !this.ios.offline) {
            //var wn = Components.interfaces.nsIWebNavigation;
            //gBrowser.getBrowserForTab(tab).reloadWithFlags(wn.LOAD_FLAGS_BYPASS_PROXY | wn.LOAD_FLAGS_BYPASS_CACHE);
            tab.linkedBrowser.addProgressListener(this.progressListener);
        }
        this.ss.setTabState(tab, tabData);

        // Following is part of Session Bookmarks 0.2.1pre - 2013-04-01
        // https://github.com/Infocatcher/Custom_Buttons/tree/master/Session_Bookmarks
        if(
            tab != gBrowser.selectedTab // Should be loaded automatically in this case
            && (
                tab.getAttribute("pending") == "true" // Gecko >= 9.0
                || tab.linkedBrowser.contentDocument.readyState == "uninitialized"
                // || tab.linkedBrowser.__SS_restoreState == 1
            )
        ) {
            tab.linkedBrowser.reload();
            // Show "Connecting…" instead of "New Tab"
            // (disable browser.sessionstore.restore_on_demand to see this bug)
            gBrowser.setTabTitleLoading && gBrowser.setTabTitleLoading(tab);
        }
    }
    else
        event. stopPropagation ();
    //this. deleteMenuitem (mi, !event);
    setTimeout(function() {
        this. deleteMenuitem (mi, !event);
    }.bind(this), 0);
};

this.progressListener = {
    // Part of Session Bookmarks 0.2.1pre - 2013-04-01
    // https://github.com/Infocatcher/Custom_Buttons/tree/master/Session_Bookmarks
    // Based on code of Session Manager 0.7.5
    QueryInterface: function(aIID) {
        if(
            aIID.equals(Components.interfaces.nsIWebProgressListener)
            || aIID.equals(Components.interfaces.nsISupportsWeakReference)
            || aIID.equals(Components.interfaces.nsISupports)
        )
            return this;
        throw Components.results.NS_NOINTERFACE;
    },
    onStateChange: function(aWebProgress, aRequest, aFlag, aStatus) {
        try {
            if(aRequest.name == "about:blank")
                return;
        }
        catch(e) { // view-source: protocol
            if(e.name != "NS_ERROR_NOT_IMPLEMENTED")
                Components.utils.reportError(e);
        }
        var wpl = Components.interfaces.nsIWebProgressListener;
        if(aFlag & wpl.STATE_START) // Force load to bypass cache
            aRequest.loadFlags |= aRequest.LOAD_BYPASS_CACHE;
        else if(aFlag & wpl.STATE_STOP && aFlag & wpl.STATE_IS_NETWORK)
            aWebProgress.chromeEventHandler.removeProgressListener(this);
    },
    onLocationChange: function(aProgress, aRequest, aURI) {},
    onProgressChange: function(aWebProgress, aRequest, curSelf, maxSelf, curTot, maxTot) {},
    onStatusChange:   function(aWebProgress, aRequest, aStatus, aMessage) {},
    onSecurityChange: function(aWebProgress, aRequest, aState) {}
};

this. onclick = function (event)
{
    if (event. button != 1 || event. target != this)
        return;
    var menu = this. menu;
    var mis = menu. getElementsByTagName ("menuitem");
    while (mis. length)
        this. openTab (null, mis[0]);
    this. flushMenu (menu);
};
this.oncontextmenu = function(e) {
    if(
        !e.shiftKey && !e.ctrlKey && !e.altKey && !e.metaKey
        && e.target.localName == "menuitem"
    )
        e.preventDefault();
};

this. setAttribute ("ondragdrop", "return this. handleDrop (event);");
this. setAttribute ("ondragover", "return this. handleDragOver (event);");
this. setAttribute ("onmouseover", "if (event. target == this) this. getMenu (event);");
this. getMenu ();

Bookmarks Menu (Firefox)
Немного более функциональная кнопка для доступа к закладкам.
По левому клику мышкой - открывается меню закладок.
По среднему клику мышкой - открытие диалога добавления в закладки.
По правому клику мышкой - открывается слева боковая панель закладок.
Shift+правый клик - меню кнопки.

Bookmarks Menu
Код кнопки

Выделить код

Код:

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%0D%0A%20%20%3Cname%3EBookmarks%3C/name%3E%0D%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/image%3E%0D%0A%20%20%3Cmode%3E0%3C/mode%3E%0D%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bvar%20menu%20%3D%20document.%20getElementById%20%28%22bookmarksMenuPopup%22%29.%20cloneNode%20%28true%29%3B%0Afunction%20delId%28node%29%20%7B%0A%20%20%20%20node.removeAttribute%28%22id%22%29%3B%0A%20%20%20%20Array.forEach%28node.childNodes%2C%20delId%29%3B%0A%7D%0AdelId%28menu%29%3B%0Athis.%20appendChild%20%28menu%29%3B%0A//this.%20type%20%3D%20%22menu-button%22%3B%0A//this.%20orient%20%3D%20%22horizontal%22%3B%0Athis.%20setAttribute%20%28%22popup%22%2C%20menu.%20id%20%3D%20%22cbBookmarks-%22%20+%20this.%20id%29%3B%0A%0Athis.%20onclick%20%3D%20function%20%28event%29%0A%7B%0A%20%20%20%20if%20%28event.%20button%20%3D%3D%201%29%0A%20%20%20%20%7B%0A%20%20%20%20%09if%20%28event.%20originalTarget.%20nodeName%20%21%3D%20%22toolbarbutton%22%29%0A%20%20%20%20%09%20%20%20%20return%3B%0A%20%20%20%20%20%20%20%20PlacesCommandHook.bookmarkCurrentPage%28true%2C%20PlacesUtils.bookmarksMenuFolderId%29%3B%0A%20%20%20%20%7D%0A%20%20%20%20else%20if%20%28event.%20button%20%3D%3D%202%29%0A%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20if%20%28event.%20shiftKey%20%7C%7C%20%28event.%20originalTarget.%20nodeName%20%21%3D%20%22toolbarbutton%22%29%29%0A%20%20%20%20%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20%20%20%20%20toggleSidebar%28%27viewBookmarksSidebar%27%29%3B%0A%20%20%20%20%20%20%20%20event.%20preventDefault%20%28%29%3B%0A%20%20%20%20%20%20%20%20event.%20stopPropagation%20%28%29%3B%0A%20%20%20%20%7D%0A%7D%3B%5D%5D%3E%3C/initcode%3E%0D%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*CODE*/%5D%5D%3E%3C/code%3E%0D%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0D%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0D%0A%20%20%3Cattributes/%3E%0D%0A%3C/custombutton%3E

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

Выделить код

Код:

var menu = document. getElementById ("bookmarksMenuPopup"). cloneNode (true);
function delId(node) {
    node.removeAttribute("id");
    Array.forEach(node.childNodes, delId);
}
delId(menu);
this. appendChild (menu);
//this. type = "menu-button";
//this. orient = "horizontal";
this. setAttribute ("popup", menu. id = "cbBookmarks-" + this. id);

this. onclick = function (event)
{
    if (event. button == 1)
    {
        if (event. originalTarget. nodeName != "toolbarbutton")
            return;
        PlacesCommandHook.bookmarkCurrentPage(true, PlacesUtils.bookmarksMenuFolderId);
    }
    else if (event. button == 2)
    {
        if (event. shiftKey || (event. originalTarget. nodeName != "toolbarbutton"))
            return;
        toggleSidebar('viewBookmarksSidebar');
        event. preventDefault ();
        event. stopPropagation ();
    }
};

Иконка (взята из расширения Personal Menu)

Выделить код

Код:

data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAgZJREFUeNqMkztoVEEUhv+7m2sgChJsFLXIFpqAUUyRRsS10UIhTToLAzaWWrvg2tnZCCJYBGwUJCgSbSMqoo2yplgbH0ExnSDmzsydl/+cfUjCLmbg3JnDzPnOf87MzWKMaDQapwDUrbVzeZ4f54zvu6ZgSgdNU6XlbGVtrENJcz7g84NmNoLOqNOa5xau4ujEXmxnzCw0Ze4BxFtevIW728i8eP1yHySAarWKGAMqWYba5DRK5xnguxAnQMOyjLFor76XwFR6H2DLUhzvPaohIjCLJ8TRD95xzczOir91VNKnJMDaZJYyPSwDLAFHDu5hYPItvO1Aepk3AbRR0FpToqZ8KyUk2PyJSYxkkQqt+CnJQAVGaWhFiCpQsk5DRWdnahgbzXHh9DR2sNCSAE/Q1iE9UAzMuj2oT+3H+dlD/QOzhw+IPXrRwtM3q/j5YwCgKP4QUJH6lt+28erjV9y8dKZ/6Nq9Z3jX/iYNHViCLgqRr4oNKG2weyyXzaWXLZkn9o3DpSY7N6QENjCVEEKAI2B85yiu3H6MT2vrWFr5gJPHarwBJ/sDAUmB9IBvwCqDJ69b7Djvn5LXqOr+83UJHgowWnVfF+B4lV4eTwrwHfPddRwCcLyiJEH2eVUhuH9BzBpT9ug5dx7RxeadzQAeXCGgDu5v/P713z/xy8MbWW/9V4ABABX3fg9RweLRAAAAAElFTkSuQmCC


Кнопка истории (Firefox)
Кнопка служит для быстрого доступа к истории посещения (не путать с закрытыми вкладами - здесь выводятся посещенные адреса)
Левый клик мышью - выводит список последних 37-и последних адресов
Средний клик мышью - Открывается весь журнал посещений в отдельном окне.
Правый клик мышью - Открывается история посещений слева в боковой панели.
Shift+правый клик - меню кнопки.
[spoiler=Кнопка истории]Код кнопки

Выделить код

Код:

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%0D%0A%20%20%3Cname%3EHistory%3C/name%3E%0D%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/image%3E%0D%0A%20%20%3Cmode%3E0%3C/mode%3E%0D%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bvar%20menu%20%3D%20document.%20getElementById%20%28%22goPopup%22%29.%20cloneNode%20%28true%29%3B%0Afor%20%28var%20i%20%3D%200%3B%20i%20%3C%20menu.%20childNodes.%20length%3B%20i++%29%0A%7B%0A%20%20%20%20if%20%28menu.%20childNodes%20%5Bi%5D.%20hasAttribute%20%28%22id%22%29%29%0A%20%20%20%20%20%20%20%20menu.%20childNodes%20%5Bi%5D.%20setAttribute%20%28%22hidden%22%2C%20%22true%22%29%3B%0A%7D%0Amenu.%20setAttribute%20%28%22place%22%2C%20%22type%3D0%26sort%3D4%26maxResults%3D37%22%29%3B%0Afunction%20delId%28node%29%20%7B%0A%20%20%20%20node.removeAttribute%28%22id%22%29%3B%0A%20%20%20%20Array.forEach%28node.childNodes%2C%20delId%29%3B%0A%7D%0AdelId%28menu%29%3B%0Athis.%20appendChild%20%28menu%29%3B%0A//this.%20type%20%3D%20%22menu%22%3B%0A//this.%20orient%20%3D%20%22horizontal%22%3B%0Athis.%20setAttribute%20%28%22popup%22%2C%20menu.%20id%20%3D%20%22cbHistory-%22%20+%20this.%20id%29%3B%0A%0Athis.%20onclick%20%3D%20function%20%28event%29%0A%7B%0A%20%20%20%20var%20node%20%3D%20event.%20originalTarget.%20node%3B%0A%20%20%20%20if%20%28%28event.%20button%20%3C%202%29%20%26%26%20node%29%0A%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20PlacesUIUtils.%20markPageAsTyped%20%28node.%20uri%29%3B%0A%20%20%20%20%20%20%20%20openUILink%20%28node.%20uri%2C%20event%2C%20false%2C%20true%29%3B%0A%20%20%20%20%7D%0A%20%20%20%20else%20if%20%28event.%20button%20%3D%3D%201%29%0A%20%20%20%20%20%20%20%20PlacesCommandHook.showPlacesOrganizer%28%27History%27%29%3B%0A%20%20%20%20else%20if%20%28event.%20button%20%3D%3D%202%29%0A%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20if%20%28event.%20shiftKey%20%7C%7C%20%28event.%20originalTarget.%20nodeName%20%21%3D%20%22toolbarbutton%22%29%29%0A%20%20%20%20%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20%20%20%20%20toggleSidebar%20%28%22viewHistorySidebar%22%29%3B%0A%20%20%20%20%20%20%20%20event.%20preventDefault%20%28%29%3B%0A%20%20%20%20%20%20%20%20event.%20stopPropagation%20%28%29%3B%0A%20%20%20%20%7D%0A%7D%3B%5D%5D%3E%3C/initcode%3E%0D%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*CODE*/%5D%5D%3E%3C/code%3E%0D%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0D%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0D%0A%20%20%3Cattributes/%3E%0D%0A%3C/custombutton%3E

Инициализация
(количество выводимых последних адресов посещений настраивается путем редактирования строки - menu. setAttribute ("place", "type=0&sort=4&maxResults=37");)

Выделить код

Код:

var menu = document. getElementById ("goPopup"). cloneNode (true);
for (var i = 0; i < menu. childNodes. length; i++)
{
    if (menu. childNodes [i]. hasAttribute ("id"))
        menu. childNodes [i]. setAttribute ("hidden", "true");
}
menu. setAttribute ("place", "type=0&sort=4&maxResults=37");
function delId(node) {
    node.removeAttribute("id");
    Array.forEach(node.childNodes, delId);
}
delId(menu);
this. appendChild (menu);
//this. type = "menu";
//this. orient = "horizontal";
this. setAttribute ("popup", menu. id = "cbHistory-" + this. id);

this. onclick = function (event)
{
    var node = event. originalTarget. node;
    if ((event. button < 2) && node)
    {
        PlacesUIUtils. markPageAsTyped (node. uri);
        openUILink (node. uri, event, false, true);
    }
    else if (event. button == 1)
        PlacesCommandHook.showPlacesOrganizer('History');
    else if (event. button == 2)
    {
        if (event. shiftKey || (event. originalTarget. nodeName != "toolbarbutton"))
            return;
        toggleSidebar ("viewHistorySidebar");
        event. preventDefault ();
        event. stopPropagation ();
    }
};

Иконка (также позаимствована из расширения Personal Menu)

Выделить код

Код:

data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAwlJREFUeNpUk99LFFEUx79zZ2dnRncdd13dpEJtWX/3UKBFPx6Cgt6i8KGXoKKHLIKK8r0XISN705fAf0ACI3qIXiKJskj6QRIlmVhCurq/dGfmzp3p3EkXugwz3Ln3fM85n3OOEgQBtte9B+Oq7wdHa2rMM/FYbb9h6Bl5btvOfKm8MWPb9iNFUV7evjEotm2UbYG798eao1FtqK1194W6eMzinEP4W+J0hzEVpVK5sPR7eYLORoZuXlmuCkjjeLx2vCO755QQApwMrYYE4rqGTYfDFQHWV9fAfCmk4MfPxalKpTIoRdRaK61qmnanpyt73nE5ahIWevftxY4daQwPj+LA8ZNoaW1GKp0GpYFysYSEZXUWikV1+tXMc0Y5H2lr2XVJCB+xZD26e7ugqmqVy9zsO3Duww8UdHR3Ip5sAPcEmhqbLlH0RxgBG7Csupjr+8h2ZuliAI/EBO3l8oUHKe64Hhn6aO9sh1AYTMOMRaPRAUa0+ziFnkglwcizoHwpKogtuCyihf8k0I0Kh2lqxIeiIMiGbvQxQ9czHnnTAgmPPCtB1UCuF8+eQlGVUJQHPgwtAlVGRXtil2HhtSCsVLj+hU9pULiplIXFhQW8fzNL9VLoUcI78lxWT9pEqDnmCUHKDhgCOvD5vwgcV+Di1WvYf/Ajnj15jM2Kg8OHDoQCHCz0yD0+z6g0b2WTrK/k4DkiVJWUZSSViof2nm4cPnYCG8U80vU1yBds5HO5kBc5f8voNVkql8tUT3z/+g2ayqBTnpRuyERWRXo+d/Y0HC7w4dMXMGLguk7Z8/gko7yml34tP5T55VdWMfd5TrYnGhMmMmkLbY11aKw3sVrYxPTrWRRXV8CojGtrOWkzHbbyyOhYs2ma47t37jzFyYugdq1LJom2IPo+XKgorOWgeB5USncl92fKceywlavDJEUikcgQddgF0zAsl3rDD6sTQLJnjMF2nML6em5C+GKEJnL5v2ncHmfaH9V1/Ywe1fsjES0TUifajm3P0Dcc51vXL1fH+a8AAwBdk7sH+MV5ZQAAAABJRU5ErkJggg==

Add-on's (Firefox)
для быстрого доступа к пункту меню Инструменты - дополнения (Расширенный вариант) (работает только в Firefox 3.*)
Левый клик мышью - открывает окно дополнений.
Средний клик мышью - открывает дополнения слева в боковой панели.
Crtl+Средний клик мышью - открывает дополнения в новой вкладке.
Правый клик мышью - отображается меню в виде списка всех дополнений и быстрым доступом к настройкам выбранного дополнения.

Add-on's
Код кнопки

Выделить код

Код:

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%0D%0A%20%20%3Cname%3E%u0414%u043E%u043F%u043E%u043B%u043D%u0435%u043D%u0438%u044F%3C/name%3E%0D%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/image%3E%0D%0A%20%20%3Cmode%3E0%3C/mode%3E%0D%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bthis.url2xul%20%3D%20%27chrome%3A//mozapps/content/extensions/extensions.xul%27%3B%0Athis.onClick%20%3D%20function%20%28e%29%20%7B%0A%20%20%20%20switch%20%28e.button%29%20%7B%0A%20%20%20%20case%200%3A%0A%20%20%20%20%20%20%20%20try%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20BrowserOpenAddonsMgr%28%29%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20catch%28e%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20BrowserOpenExtensions%28%27extensions%27%29%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20case%201%3A%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20%28e.ctrlKey%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20t%20%3D%20gBrowser.mTabs%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20current%20%3D%20content.document.location.href%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20i%20%3D%20t.length%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28current%20%3D%3D%20this.url2xul%29%20gBrowser.removeCurrentTab%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20else%20while%20%28true%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28--i%20%3C%200%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%20if%20%28current%20%3D%3D%20%27about%3Ablank%27%29%20//%20replace%20blank%20tab%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20loadURI%28this.url2xul%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%20else%20//%20add%20new%20tab%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%20gBrowser.selectedTab%20%3D%20gBrowser.addTab%28this.url2xul%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%20break%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28t%5Bi%5D.linkedBrowser.currentURI.spec%20%3D%3D%20this.url2xul%29%20//%20popup%20loaded%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%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%20gBrowser.selectedTab%20%3D%20gBrowser.tabContainer.childNodes%5Bi%5D%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%20break%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%20else%20openWebPanel%28this.tooltipText%2C%20this.url2xul%29%3B%0A%20%20%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%7D%3B%0A%7D%3B%0Athis.setAttribute%28%27onclick%27%2C%20%27this.onClick%28event%29%3B%27%29%3B%0A%0Aconst%20Cb%20%3D%20custombuttons%3B%0Aconst%20EXTENSION%20%3D%20Ci.nsIUpdateItem.TYPE_EXTENSION%3B%0A%0A%0A%0Afunction%20prop%28aElement%2C%20aString%29%20%7B%0A%20%20%20%20var%20emRDF%20%3D%20%22http%3A//www.mozilla.org/2004/em-rdf%23%22%3B%0A%20%20%20%20var%20arc%20%3D%20RDFService.GetResource%28emRDF%20+%20aString%29%3B%0A%20%20%20%20var%20target%20%3D%20extensionDS.GetTarget%28aElement%2C%20arc%2C%20true%29%3B%0A%20%20%20%20if%20%28target%20instanceof%20Ci.nsIRDFLiteral%29%20return%20target.Value%3B%0A%20%20%20%20if%20%28target%20instanceof%20Ci.nsIRDFInt%29%20return%20target.Value%3B%0A%20%20%20%20return%20null%3B%0A%7D%0A%0Avar%20cloneCBcontext%20%3D%20%7B%0A%20%20%20%20cloneItems%3A%20function%20%28aNode%2C%20aID%2C%20aSeparate%29%20%7B%0A%20%20%20%20%20%20%20%20var%20menupopup%20%3D%20document.getElementById%28aID%29.cloneNode%28true%29%3B%0A%20%20%20%20%20%20%20%20var%20menuitems%20%3D%20menupopup.childNodes.length%3B%0A%20%20%20%20%20%20%20%20for%20%28var%20i%20%3D%200%3B%20i%20%3C%20menuitems%3B%20i++%29%0A%20%20%20%20%20%20%20%20aNode.appendChild%28menupopup.firstChild%29%3B%0A%20%20%20%20%20%20%20%20if%20%28aSeparate%29%20aNode.appendChild%28document.createElement%28%22menuseparator%22%29%29%3B%0A%20%20%20%20%7D%2C%0A%20%20%20%20makeMenu%3A%20function%20%28aNode%29%20%7B%0A%20%20%20%20%20%20%20%20var%20m%20%3D%20aNode.appendChild%28document.createElement%28%22menu%22%29%29%3B%0A%20%20%20%20%20%20%20%20m.setAttribute%28%22label%22%2C%20%22Custom%20Button%22%29%3B%0A%20%20%20%20%20%20%20%20m.setAttribute%28%22oncommand%22%2C%20%22event.stopPropagation%28%29%22%29%3B%0A%20%20%20%20%20%20%20%20var%20mp%20%3D%20m.appendChild%28document.createElement%28%22menupopup%22%29%29%3B%0A%20%20%20%20%20%20%20%20cloneCBcontext.cloneItems%28mp%2C%20%22custombuttons-contextpopup%22%29%3B%0A%20%20%20%20%20%20%20%20aNode.insertBefore%28document.createElement%28%22menuseparator%22%29%2C%20m%29%3B%0A%20%20%20%20%7D%0A%7D%0A%0Aconst%20popupID%20%3D%20%22cbContext-extensionsButton%22%3B%0A%0Avar%20test%20%3D%20document.getElementById%28popupID%29%3B%0Aif%20%28test%29%20test.parentNode.removeChild%28test%29%3B%0A%0Avar%20main%20%3D%20document.getElementById%28%22mainPopupSet%22%29%3B%0Avar%20cPopup%20%3D%20main.appendChild%28document.createElement%28%22popup%22%29%29%3B%0AcPopup.id%20%3D%20popupID%3B%0AcPopup.setAttribute%28%22oncommand%22%2C%20%22event.stopPropagation%28%29%3B%20document.popupNode.openPrefs%28event%29%3B%22%29%0A%0Avar%20RDFService%20%3D%20Cc%5B%22@mozilla.org/rdf/rdf-service%3B1%22%5D.getService%28Ci.nsIRDFService%29%3B%0Avar%20Container%20%3D%20Cc%5B%22@mozilla.org/rdf/container%3B1%22%5D.getService%28Ci.nsIRDFContainer%29%3B%0Avar%20extensionDS%20%3D%20Cc%5B%22@mozilla.org/extensions/manager%3B1%22%5D.getService%28Ci.nsIExtensionManager%29.datasource%3B%0A%0Avar%20root%3B%0Atry%20%7B%0A%20%20%20%20root%20%3D%20RDFService.GetResource%28%22urn%3Amozilla%3Aitem%3Aroot%22%29%3B%0A%7D%20catch%28err%29%20%7B%0A%20%20%20%20root%20%3D%20RDFService.GetResource%28%22urn%3Amozilla%3Aextension%3Aroot%22%29%3B%0A%7D%0A%0AContainer.Init%28extensionDS%2C%20root%29%3B%0A%0Avar%20elements%20%3D%20Container.GetElements%28%29%3B%0Avar%20extensionArray%20%3D%20%5B%5D%3B%0Avar%20i%20%3D%20-1%3B%0Awhile%20%28elements.hasMoreElements%28%29%29%20%7B%0A%20%20%20%20i++%3B%0A%20%20%20%20var%20element%20%3D%20elements.getNext%28%29%3B%0A%20%20%20%20element.QueryInterface%28Components.interfaces.nsIRDFResource%29%3B%0A%20%20%20%20var%20prop_OptionsURL%20%3D%20prop%28element%2C%20%22optionsURL%22%29%3B%0A%20%20%20%20if%20%28prop%28element%2C%20%22type%22%29%20%3D%3D%20EXTENSION%20%26%26%20prop_OptionsURL%29%20%7B%0A%20%20%20%20%20%20%20%20var%20prop_name%20%3D%20prop%28element%2C%20%22name%22%29%3B%0A%20%20%20%20%20%20%20%20extensionArray%5Bi%5D%20%3D%20%5B%5D%3B%0A%20%20%20%20%20%20%20%20extensionArray%5Bi%5D%5B0%5D%20%3D%20prop_name.charAt%280%29.toUpperCase%28%29%20+%20prop_name.substr%281%29%3B%0A%20%20%20%20%20%20%20%20extensionArray%5Bi%5D%5B1%5D%20%3D%20prop_OptionsURL%3B%0A%20%20%20%20%20%20%20%20extensionArray%5Bi%5D%5B2%5D%20%3D%20prop%28element%2C%20%22userDisabled%22%29%3B%0A%20%20%20%20%20%20%20%20extensionArray%5Bi%5D%5B3%5D%20%3D%20prop%28element%2C%20%22version%22%29%3B%0A%20%20%20%20%20%20%20%20extensionArray%5Bi%5D%5B4%5D%20%3D%20prop%28element%2C%20%22iconURL%22%29%3B%0A%20%20%20%20%20%20%20%20if%20%28%21extensionArray%5Bi%5D%5B4%5D%29%20extensionArray%5Bi%5D%5B4%5D%20%3D%20%22chrome%3A//mozapps/skin/xpinstall/xpinstallItemGeneric.png%22%3B%0A%20%20%20%20%7D%0A%7D%0A%0AextensionArray.sort%28%29%3B%0A%0Avar%20features%20%3D%20%22chrome%2C%20dialog%20%3D%200%2C%20resizable%2C%20titlebar%2C%20toolbar%2C%20centerscreen%22%3B%0A%0Avar%20extCommand%20%3D%20%22window.openDialog%28%27ZZZ%27%2C%20%27%27%2C%20%27%22%20+%20features%20+%20%22%27%29%3B%22%3B%0A%0Afor%20%28var%20i%20%3D%200%3B%20i%20%3C%20extensionArray.length%3B%20i++%29%20%7B%0A%20%20%20%20var%20extArray%20%3D%20extensionArray%5Bi%5D%3B%0A%20%20%20%20try%20%7B%0A%20%20%20%20%20%20%20%20var%20mItem%20%3D%20document.createElement%28%22menuitem%22%29%3B%0A%20%20%20%20%20%20%20%20mItem.setAttribute%28%22label%22%2C%20extArray%5B0%5D%20+%20%22%20%22%20+%20extArray%5B3%5D%29%3B%0A%20%20%20%20%20%20%20%20if%20%28extArray%5B4%5D%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20mItem.setAttribute%28%22class%22%2C%20%22menuitem-iconic%20bookmark-item%22%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20mItem.setAttribute%28%22image%22%2C%20extArray%5B4%5D%29%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20if%20%28extArray%5B1%5D%29%20mItem.setAttribute%28%22oncommand%22%2C%20extCommand.replace%28%22ZZZ%22%2C%20extArray%5B1%5D%29%29%3B%0A%20%20%20%20%20%20%20%20if%20%28extArray%5B2%5D%29%20mItem.setAttribute%28%22disabled%22%2C%20true%29%3B%0A%20%20%20%20%20%20%20%20cPopup.appendChild%28mItem%29%3B%0A%20%20%20%20%7D%20catch%28e%29%20%7B%7D%0A%7D%0A%0AcloneCBcontext.makeMenu%28cPopup%29%3B%0Athis.setAttribute%28%22context%22%2C%20popupID%29%3B%0A%0Aif%20%28typeof%20Local_Install%20%21%3D%20%22object%22%29%20return%3B%0A%0Avar%20test%20%3D%20document.getElementById%28%22cbContext-extensions%22%29%3B%0Aif%20%28test%29%20test.parentNode.removeChild%28test%29%3B%0A%0Avar%20cbPopup%20%3D%20document.getElementById%28%22custombuttons-contextpopup-subCall%22%29.cloneNode%28true%29%3B%20//%20Cb%20context%0Avar%20subMenu%20%3D%20document.createElement%28%22menu%22%29%3B%0AsubMenu.setAttribute%28%22label%22%2C%20%22Custom%20Button%22%29%3B%0AsubMenu.appendChild%28cbPopup.lastChild%29%3B%0A%0Avar%20extensionsPopup%20%3D%20document.getElementById%28%22emb-context%22%29%3B%0Avar%20popup%20%3D%20extensionsPopup.cloneNode%28true%29%3B%0Apopup.id%20%3D%20%22cbContext-extensions%22%3B%0Apopup.appendChild%28document.createElement%28%22menuseparator%22%29%29%3B%0Apopup.appendChild%28subMenu%29%3B%0AextensionsPopup.parentNode.appendChild%28popup%29%3B%0A%0Athis.setAttribute%28%22context%22%2C%20popup.id%29%3B%5D%5D%3E%3C/initcode%3E%0D%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/code%3E%0D%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0D%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0D%0A%20%20%3Cattributes/%3E%0D%0A%3C/custombutton%3E

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

Выделить код

Код:

this.url2xul = 'chrome://mozapps/content/extensions/extensions.xul';
this.onClick = function (e) {
    switch (e.button) {
    case 0:
        try {
            BrowserOpenAddonsMgr();
        }
        catch(e) {
            BrowserOpenExtensions('extensions');
        }
        break;
    case 1:
        {
            if (e.ctrlKey) {
                var t = gBrowser.mTabs;
                var current = content.document.location.href;
                var i = t.length;
                if (current == this.url2xul) gBrowser.removeCurrentTab();
                else while (true) {
                    if (--i < 0) {
                        if (current == 'about:blank') // replace blank tab
                        loadURI(this.url2xul);
                        else // add new tab 
                        gBrowser.selectedTab = gBrowser.addTab(this.url2xul);
                        break;
                    };
                    if (t[i].linkedBrowser.currentURI.spec == this.url2xul) // popup loaded
                    {
                        gBrowser.selectedTab = gBrowser.tabContainer.childNodes[i];
                        break;
                    };
                };
            } else openWebPanel(this.tooltipText, this.url2xul);
        };
        break;
    };
};
this.setAttribute('onclick', 'this.onClick(event);');

const Cb = custombuttons;
const EXTENSION = Ci.nsIUpdateItem.TYPE_EXTENSION;



function prop(aElement, aString) {
    var emRDF = "http://www.mozilla.org/2004/em-rdf#";
    var arc = RDFService.GetResource(emRDF + aString);
    var target = extensionDS.GetTarget(aElement, arc, true);
    if (target instanceof Ci.nsIRDFLiteral) return target.Value;
    if (target instanceof Ci.nsIRDFInt) return target.Value;
    return null;
}

var cloneCBcontext = {
    cloneItems: function (aNode, aID, aSeparate) {
        var menupopup = document.getElementById(aID).cloneNode(true);
        var menuitems = menupopup.childNodes.length;
        for (var i = 0; i < menuitems; i++)
        aNode.appendChild(menupopup.firstChild);
        if (aSeparate) aNode.appendChild(document.createElement("menuseparator"));
    },
    makeMenu: function (aNode) {
        var m = aNode.appendChild(document.createElement("menu"));
        m.setAttribute("label", "Custom Button");
        m.setAttribute("oncommand", "event.stopPropagation()");
        var mp = m.appendChild(document.createElement("menupopup"));
        cloneCBcontext.cloneItems(mp, "custombuttons-contextpopup");
        aNode.insertBefore(document.createElement("menuseparator"), m);
    }
}

const popupID = "cbContext-extensionsButton";

var test = document.getElementById(popupID);
if (test) test.parentNode.removeChild(test);

var main = document.getElementById("mainPopupSet");
var cPopup = main.appendChild(document.createElement("popup"));
cPopup.id = popupID;
cPopup.setAttribute("oncommand", "event.stopPropagation(); document.popupNode.openPrefs(event);")

var RDFService = Cc["@mozilla.org/rdf/rdf-service;1"].getService(Ci.nsIRDFService);
var Container = Cc["@mozilla.org/rdf/container;1"].getService(Ci.nsIRDFContainer);
var extensionDS = Cc["@mozilla.org/extensions/manager;1"].getService(Ci.nsIExtensionManager).datasource;

var root;
try {
    root = RDFService.GetResource("urn:mozilla:item:root");
} catch(err) {
    root = RDFService.GetResource("urn:mozilla:extension:root");
}

Container.Init(extensionDS, root);

var elements = Container.GetElements();
var extensionArray = [];
var i = -1;
while (elements.hasMoreElements()) {
    i++;
    var element = elements.getNext();
    element.QueryInterface(Components.interfaces.nsIRDFResource);
    var prop_OptionsURL = prop(element, "optionsURL");
    if (prop(element, "type") == EXTENSION && prop_OptionsURL) {
        var prop_name = prop(element, "name");
        extensionArray[i] = [];
        extensionArray[i][0] = prop_name.charAt(0).toUpperCase() + prop_name.substr(1);
        extensionArray[i][1] = prop_OptionsURL;
        extensionArray[i][2] = prop(element, "userDisabled");
        extensionArray[i][3] = prop(element, "version");
        extensionArray[i][4] = prop(element, "iconURL");
        if (!extensionArray[i][4]) extensionArray[i][4] = "chrome://mozapps/skin/xpinstall/xpinstallItemGeneric.png";
    }
}

extensionArray.sort();

var features = "chrome, dialog = 0, resizable, titlebar, toolbar, centerscreen";

var extCommand = "window.openDialog('ZZZ', '', '" + features + "');";

for (var i = 0; i < extensionArray.length; i++) {
    var extArray = extensionArray[i];
    try {
        var mItem = document.createElement("menuitem");
        mItem.setAttribute("label", extArray[0] + " " + extArray[3]);
        if (extArray[4]) {
            mItem.setAttribute("class", "menuitem-iconic bookmark-item");
            mItem.setAttribute("image", extArray[4]);
        }
        if (extArray[1]) mItem.setAttribute("oncommand", extCommand.replace("ZZZ", extArray[1]));
        if (extArray[2]) mItem.setAttribute("disabled", true);
        cPopup.appendChild(mItem);
    } catch(e) {}
}

cloneCBcontext.makeMenu(cPopup);
this.setAttribute("context", popupID);

if (typeof Local_Install != "object") return;

var test = document.getElementById("cbContext-extensions");
if (test) test.parentNode.removeChild(test);

var cbPopup = document.getElementById("custombuttons-contextpopup-subCall").cloneNode(true); // Cb context
var subMenu = document.createElement("menu");
subMenu.setAttribute("label", "Custom Button");
subMenu.appendChild(cbPopup.lastChild);

var extensionsPopup = document.getElementById("emb-context");
var popup = extensionsPopup.cloneNode(true);
popup.id = "cbContext-extensions";
popup.appendChild(document.createElement("menuseparator"));
popup.appendChild(subMenu);
extensionsPopup.parentNode.appendChild(popup);

this.setAttribute("context", popup.id);

Иконка

Выделить код

Код:

data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAFfKj/FAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAMAUExURf///wIBAQAAAAECB21yoAAAAAAAAG1yoFVloQAAAwAAAAEBAwAAAFJkoWV1rQAAAAAAAEthonN4pHJ5pmtzoxUMBwAAAEUmEyQVDF9vphAVIZObvxAUIJWewZxaMKWv0AhVAHF+sBcdKDwjE5NXNI2Tt2F1rl52sCQuSFp1tmZ5sYaMspdaOzghE5edwAxdAYKazi84T1BnmWF8t7S50omdzG6CsJpkPm+JwHSNwniOwH+YzHiQw5pkT5FYL49tcHaUyY6KoLO30HtIKKq63n2Yyrm81AhVAApYABdrARtxAR10AUiWMFifQbe60YGe0GB4oJer0qZfJ5Wz3qi52pCz5b/Dz9LW54ir3ZljPrWckcnQ45Z7mqFlMIyp0pzD9L7Z+d/k9wAAABBlARt5Ax58Bh5/AyKGBCOIBCiBDyiSBC2VCi6cBTKKGDOlBjSoBjqrDT6oFUCrFkGOKkGWJkKuF0yF00yyI06WN1e3MF2vQF6hSGCkSmOV12O8P2SpTWWX12/BT3S3WnW6W3bBWXiza3mo6XzAYn3HX3+eyYWy54nGcou26YvNcIy26JG57JKy2ZfPiZnTgp1+lJ7G9p7MmqO/56PWjqaNnKqbuqrS+7LW2bLa/7Te/7Xe/7aGcbbZ/bdLJLjX+Lje/7rX97rb6LrewLrf/7zb/7zg/72Ve73a0L58PsA+BcDf/MLe58O6vMPi/8WLU8WSaMXp0Mbk/8e9v8fe+Mji88jk/8nl/8qLVcqmSsrl/8vY5Mvl/8yDQcyZZ8yolMzn/83p/86CN87q/8+bONFfKNOIa9TRz9WHOtaZWNePSNzS0t3u9d30/9/y/+L08+PDs+Po8Obz/+fQyefv/em/rer1/+zArOzaifLo6fP2+vX2+fbXMvbyxvf///jrovv///z///36+P/0mP//8v///+np6erq6uvr6+zs7O3t7e7u7u/v7/Dw8PHx8fLy8vPz8/T09PX19fb29vf39/j4+Pn5+fr6+vv7+/z8/P39/f7+/v///y0MWcAAAAABdFJOUwBA5thmAAABFUlEQVR42mJgYGBgqAQAAAD//2JgYGBufgcAAAD//2Jk8LZ4xcSgtIYJAAAA//9iYGBgYGBkqPl3jqmC9fcNRobSXeYAAAAA//9iZmBgYKgwP87AyMBQI/jlx5+PjAzF7P///DrwkZnhODfb5pv2LAAxoIBuBgYGRgaGahbWD1+nMzEwiHP+YmZnYPFi/vbt55epDEz//3/7+fM/AwPT9i0/v0xgyGdgYWB494/h5y8GAJljbIMwDEXBw3akUEQUtJkoLUNkgRRILBKE2IwtUID4+X+liSteedKdXqyJ4dK9AEIF8RT3c8Ctl7SaXO9HAkgfrSbPuTgHrudiZnLXb67K1HjOFoJbeSaA5ejfO4xtMv62DQBrzlvofJ5duQAAAABJRU5ErkJggg==

Поиск по текущему сайту (Firefox)
Позволяет произвести поиск по текущему сайту в Google или Яндексе.
Ctrl+Левый клик мышью - поиск произвольной фразы в Google на текущем сайте.
Ctrl+Правый клик мышью - поиск произвольной фразы в Яндексе на текущем сайте.
Если на странице есть выделенный текст, то:
- Левый клик мышью - поиск выделенного фрагмента по текущему сайту в Google, результаты в фоновой вкладке.
- Правый клик мышью - поиск выделенного фрагмента по текущему сайту в Яндексе, результаты в фоновой вкладке.
При отсутствии выделения - правый клик мышью вызывает меню кнопки.

Поиск по текущему сайту
Код кнопки

Выделить код

Код:

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%0D%0A%20%20%3Cname%3E%u041F%u043E%u0438%u0441%u043A%20%u043F%u043E%20%u0441%u0430%u0439%u0442%u0443%3C/name%3E%0D%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/image%3E%0D%0A%20%20%3Cmode%3E0%3C/mode%3E%0D%0A%20%20%3Cinitcode%3Ethis.%20searchGoogle%20%3D%20function%20%28text%2C%20url%2C%20encode%29%0D%0A%7B%0D%0A%20%20%20%20if%20%28encode%29%0D%0A%20%20%20%20%7B%0D%0A%20%20%20%20%20%20%20%20text%20%3D%20escape%20%28convertFromUnicode%20%28%22UTF-8%22%2C%20text%29%29%3B%0D%0A%20%20%20%20%20%20%20%20url%20%3D%20encodeURIComponent%20%28url%29%3B%0D%0A%20%20%20%20%7D%0D%0A%20%20%20%20var%20searchUrl%20%3D%20%22http%3A//www.google.com/search%3Fas_q%3D%22%20+%20text%20+%20%22%26amp%3Bas_sitesearch%3D%22%20+%20url%3B%0D%0A%20%20%20%20getBrowser%20%28%29.%20addTab%20%28searchUrl%29%3B%0D%0A%7D%3B%0D%0A%0D%0Athis.%20searchYandex%20%3D%20function%20%28text%2C%20url%2C%20encode%29%0D%0A%7B%0D%0A%20%20%20%20if%20%28encode%29%0D%0A%20%20%20%20%7B%0D%0A%20%20%20%20%20%20%20%20text%20%3D%20escape%20%28convertFromUnicode%20%28%22UTF-8%22%2C%20text%29%29%3B%0D%0A%20%20%20%20%20%20%20%20url%20%3D%20encodeURIComponent%20%28url%29%3B%0D%0A%20%20%20%20%7D%0D%0A%20%20%20%20var%20searchUrl%20%3D%20%22http%3A//yandex.ru/yandsearch%3Frpt%3Drad%26amp%3Btext%3D%22%20+%20text%20+%20%22%26amp%3Bserverurl%3D%22%20+%20url%3B%0D%0A%20%20%20%20getBrowser%20%28%29.%20addTab%20%28searchUrl%29%3B%0D%0A%7D%3B%0D%0A%0D%0Athis.%20showSearchDialog%20%3D%20function%20%28callback%2C%20url%29%0D%0A%7B%0D%0A%20%20%20%20XML.%20ignoreProcessingInstructions%20%3D%20false%3B%0D%0A%20%20%20%20var%20dialog%20%3D%20%26lt%3B%26gt%3B%0D%0A%20%20%20%20%20%20%20%20%26lt%3B%3Fxml-stylesheet%20href%3D%22chrome%3A//global/skin/%22%3F%26gt%3B%0D%0A%20%20%20%20%20%20%20%20%26lt%3B%3Fxml-stylesheet%20href%3D%22resource%3A//gre/res/html.css%22%3F%26gt%3B%0D%0A%20%20%20%20%20%20%20%20%26lt%3Bdialog%20xmlns%3D%22http%3A//www.mozilla.org/keymaster/gatekeeper/there.is.only.xul%22%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20id%3D%22dlg02%22%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20title%3D%22Custom%20Buttons%22%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20onload%3D%22windowController.init%28%29%22%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20ondialogaccept%3D%22return%20windowController.accept%28%29%3B%22%26gt%3B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%26lt%3Bscript%20type%3D%22application/x-javascript%22%26gt%3B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%26lt%3B%21%5BCDATA%5B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20windowController%20%3D%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20init%3A%20function%20%28%29%0D%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%7B%0D%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%20var%20stb%20%3D%20document.%20getElementById%20%28%22sitetb%22%29%3B%0D%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%20stb.%20value%20%3D%20window.%20arguments%20%5B1%5D%3B%0D%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%20window.%20sizeToContent%20%28%29%3B%0D%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%7D%2C%0D%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%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20accept%3A%20function%20%28%29%0D%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%7B%0D%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%20var%20text%20%3D%20document.%20getElementById%20%28%22texttb%22%29.%20value%3B%0D%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%20var%20url%20%3D%20document.%20getElementById%20%28%22sitetb%22%29.%20value%3B%0D%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%20window.%20arguments%20%5B0%5D%20%28text%2C%20url%2C%20true%29%3B%0D%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%7D%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%3B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5D%5D%26gt%3B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%26lt%3B/script%26gt%3B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%26lt%3Bvbox%20flex%3D%221%22%26gt%3B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%26lt%3Bgrid%26gt%3B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%26lt%3Bcolumns%26gt%3B%0D%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%26lt%3Bcolumn/%26gt%3B%0D%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%26lt%3Bcolumn%20flex%3D%221%22/%26gt%3B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%26lt%3B/columns%26gt%3B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%26lt%3Brows%26gt%3B%0D%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%26lt%3Brow%20align%3D%22center%22%26gt%3B%0D%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%26lt%3Blabel%20value%3D%22%u0418%u0441%u043A%u0430%u0442%u044C%20%u0442%u0435%u043A%u0441%u0442%22/%26gt%3B%0D%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%26lt%3Btextbox%20id%3D%22texttb%22%20flex%3D%221%22/%26gt%3B%0D%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%26lt%3B/row%26gt%3B%0D%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%26lt%3Brow%20align%3D%22center%22%26gt%3B%0D%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%26lt%3Blabel%20value%3D%22%u0421%u0430%u0439%u0442%22/%26gt%3B%0D%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%26lt%3Btextbox%20id%3D%22sitetb%22%20flex%3D%221%22/%26gt%3B%0D%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%26lt%3B/row%26gt%3B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%26lt%3B/rows%26gt%3B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%26lt%3B/grid%26gt%3B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%26lt%3B/vbox%26gt%3B%0D%0A%20%20%20%20%20%20%20%20%26lt%3B/dialog%26gt%3B%0D%0A%20%20%20%20%26lt%3B/%26gt%3B%3B%0D%0A%20%20%20%20window.%20openDialog%20%28%22data%3Aapplication/vnd.mozilla.xul+xml%2C%22%20+%20dialog.%20toXMLString%20%28%29%2C%20%22%22%2C%20%22chrome%2Cdependent%2Cminimizable%2Cresizable%3Dyes%2Ccenterscreen%2Cdialog%3Dyes%22%2C%20callback%2C%20url%29%3B%0D%0A%7D%3B%0D%0A%0D%0Athis.%20onclick%20%3D%20function%20%28event%29%0D%0A%7B%0D%0A%20%20%20%20var%20focusedWindow%20%3D%20document.%20commandDispatcher.%20focusedWindow%3B%0D%0A%20%20%20%20var%20text%20%3D%20focusedWindow.%20getSelection%20%28%29.%20toString%20%28%29%3B%0D%0A%20%20%20%20var%20doc%20%3D%20getBrowser%20%28%29.%20contentDocument%3B%0D%0A%20%20%20%20try%20%7B%20var%20url%20%3D%20doc.%20location.%20hostname%3B%20%7D%0D%0A%20%20%20%20%20%20catch%28e%29%20%7B%20var%20url%20%3D%20%22%22%3B%20%7D%0D%0A%20%20%20%20if%20%28event.%20ctrlKey%29%0D%0A%20%20%20%20%7B%0D%0A%20%20%20%20%20%20%20%20if%20%28event.%20button%20%3D%3D%200%29%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20this.%20showSearchDialog%20%28this.%20searchGoogle%2C%20url%29%3B%0D%0A%20%20%20%20%20%20%20%20else%20if%20%28event.%20button%20%3D%3D%202%29%0D%0A%20%20%20%20%20%20%20%20%7B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20event.%20preventDefault%20%28%29%3B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20event.%20stopPropagation%20%28%29%3B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20this.%20showSearchDialog%20%28this.%20searchYandex%2C%20url%29%3B%0D%0A%20%20%20%20%20%20%20%20%7D%0D%0A%20%20%20%20%20%20%20%20return%3B%0D%0A%20%20%20%20%7D%0D%0A%20%20%20%20if%20%28%21text%20%7C%7C%20event.%20shiftKey%29%0D%0A%20%20%20%20%20%20%20%20return%3B%0D%0A%20%20%20%20var%20charset%20%3D%20doc.%20characterSet%3B%0D%0A%20%20%20%20try%0D%0A%20%20%20%20%7B%0D%0A%20%20%20%20%20%20%20%20charset%20%3D%20PlacesUtils.%20history.%20getCharsetForURI%20%28makeURI%20%28doc.%20location.%20href%29%29%3B%0D%0A%20%20%20%20%7D%20catch%20%28e%29%20%7B%7D%0D%0A%20%20%20%20if%20%28charset%29%0D%0A%20%20%20%20%7B%0D%0A%20%20%20%20%20%20%20%20text%20%3D%20escape%20%28convertFromUnicode%20%28charset%2C%20text%29%29%3B%0D%0A%20%20%20%20%20%20%20%20url%20%3D%20escape%20%28convertFromUnicode%20%28charset%2C%20url%29%29%3B%0D%0A%20%20%20%20%7D%0D%0A%20%20%20%20else%0D%0A%20%20%20%20%7B%0D%0A%20%20%20%20%20%20%20%20text%20%3D%20encodeURIComponent%20%28text%29%3B%0D%0A%20%20%20%20%20%20%20%20url%20%3D%20encodeURIComponent%20%28url%29%3B%0D%0A%20%20%20%20%7D%0D%0A%20%20%20%20var%20searchURL%20%3D%20%22%22%3B%0D%0A%20%20%20%20if%20%28event.%20button%20%3D%3D%202%29%0D%0A%20%20%20%20%7B%0D%0A%20%20%20%20%20%20%20%20event.%20preventDefault%20%28%29%3B%0D%0A%20%20%20%20%20%20%20%20event.%20stopPropagation%20%28%29%3B%0D%0A%20%20%20%20%20%20%20%20this.%20searchYandex%20%28text%2C%20url%2C%20false%29%3B%0D%0A%20%20%20%20%7D%0D%0A%20%20%20%20else%20if%20%28event.%20button%20%3D%3D%200%29%0D%0A%20%20%20%20%20%20%20%20this.%20searchGoogle%20%28text%2C%20url%2C%20false%29%3B%0D%0A%7D%3B%3C/initcode%3E%0D%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*CODE*/%5D%5D%3E%3C/code%3E%0D%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0D%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0D%0A%20%20%3Cattributes/%3E%0D%0A%3C/custombutton%3E

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

Выделить код

Код:

this. searchGoogle = function (text, url, encode)
{
    if (encode)
    {
        text = escape (convertFromUnicode ("UTF-8", text));
        url = encodeURIComponent (url);
    }
    var searchUrl = "http://www.google.com/search?as_q=" + text + "&as_sitesearch=" + url;
    getBrowser (). addTab (searchUrl);
};

this. searchYandex = function (text, url, encode)
{
    if (encode)
    {
        text = escape (convertFromUnicode ("UTF-8", text));
        url = encodeURIComponent (url);
    }
    var searchUrl = "http://yandex.ru/yandsearch?rpt=rad&text=" + text + "&serverurl=" + url;
    getBrowser (). addTab (searchUrl);
};

this. showSearchDialog = function (callback, url)
{
    XML. ignoreProcessingInstructions = false;
    var dialog = <>
        <?xml-stylesheet href="chrome://global/skin/"?>
        <?xml-stylesheet href="resource://gre/res/html.css"?>
        <dialog xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
                id="dlg02"
                title="Custom Buttons"
                onload="windowController.init()"
                ondialogaccept="return windowController.accept();">
            <script type="application/x-javascript">
                <![CDATA[
                    var windowController =
                    {
                        init: function ()
                        {
                            var stb = document. getElementById ("sitetb");
                            stb. value = window. arguments [1];
                            window. sizeToContent ();
                        },
                        
                        accept: function ()
                        {
                            var text = document. getElementById ("texttb"). value;
                            var url = document. getElementById ("sitetb"). value;
                            window. arguments [0] (text, url, true);
                        }
                    };
                ]]>
            </script>
            <vbox flex="1">
                <grid>
                    <columns>
                        <column/>
                        <column flex="1"/>
                    </columns>
                    <rows>
                        <row align="center">
                            <label value="Искать текст"/>
                            <textbox id="texttb" flex="1"/>
                        </row>
                        <row align="center">
                            <label value="Сайт"/>
                            <textbox id="sitetb" flex="1"/>
                        </row>
                    </rows>
                </grid>
            </vbox>
        </dialog>
    </>;
    window. openDialog ("data:application/vnd.mozilla.xul+xml," + dialog. toXMLString (), "", "chrome,dependent,minimizable,resizable=yes,centerscreen,dialog=yes", callback, url);
};

this. onclick = function (event)
{
    var focusedWindow = document. commandDispatcher. focusedWindow;
    var text = focusedWindow. getSelection (). toString ();
    var doc = getBrowser (). contentDocument;
    try { var url = doc. location. hostname; }
      catch(e) { var url = ""; }
    if (event. ctrlKey)
    {
        if (event. button == 0)
            this. showSearchDialog (this. searchGoogle, url);
        else if (event. button == 2)
        {
            event. preventDefault ();
            event. stopPropagation ();
            this. showSearchDialog (this. searchYandex, url);
        }
        return;
    }
    if (!text || event. shiftKey)
        return;
    var charset = doc. characterSet;
    try
    {
        charset = PlacesUtils. history. getCharsetForURI (makeURI (doc. location. href));
    } catch (e) {}
    if (charset)
    {
        text = escape (convertFromUnicode (charset, text));
        url = escape (convertFromUnicode (charset, url));
    }
    else
    {
        text = encodeURIComponent (text);
        url = encodeURIComponent (url);
    }
    var searchURL = "";
    if (event. button == 2)
    {
        event. preventDefault ();
        event. stopPropagation ();
        this. searchYandex (text, url, false);
    }
    else if (event. button == 0)
        this. searchGoogle (text, url, false);
};

Иконка

Выделить код

Код:

data:image/png;base64,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

Преобразование из латиницы в кириллицу и наоборот
Кнопка служит для преобразования набранного текста в другой раскладке клавиатуры. Например, набранное "ащкгьюьщяшддф-кгыышфющкп" преобразуется "forum.mozilla-russia.org".
Для преобразования необходимо поставить курсор в нужное поле ввода. При наличии выделения - преобразовывается только выделенная часть.

Преобразование из латиницы в кириллицу
Код кнопки

Выделить код

Код:

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%0D%0A%20%20%3Cname%3EURLCorrector%3C/name%3E%0D%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/image%3E%0D%0A%20%20%3Cmode%3E0%3C/mode%3E%0D%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bthis.noSelUseFullText%20%3D%20true%3B%0Athis.convTableForward%20%3D%20%7B%0A%20%20%20%20%22%5C%22%22%3A%20%22@%22%2C%0A%20%20%20%20%22%3A%22%3A%20%22%5E%22%2C%0A%20%20%20%20%22%3B%22%3A%20%22%24%22%2C%0A%20%20%20%20%22%3F%22%3A%20%22%26%22%2C%0A%20%20%20%20%22%2C%22%3A%20%22%3F%22%2C%0A%20%20%20%20%22/%22%3A%20%22%7C%22%2C%0A%20%20%20%20%22.%22%3A%20%22/%22%2C%0A%20%20%20%20%22%u044D%22%3A%20%22%27%22%2C%0A%20%20%20%20%22%u0431%22%3A%20%22%2C%22%2C%0A%20%20%20%20%22%u044E%22%3A%20%22.%22%2C%0A%20%20%20%20%22%u0416%22%3A%20%22%3A%22%2C%0A%20%20%20%20%22%u0436%22%3A%20%22%3B%22%2C%0A%20%20%20%20%22%u0411%22%3A%20%22%3C%22%2C%0A%20%20%20%20%22%u042E%22%3A%20%22%3E%22%2C%0A%20%20%20%20%22%u042D%22%3A%20%22%5C%22%22%2C%0A%20%20%20%20%22%u0445%22%3A%20%22%5B%22%2C%0A%20%20%20%20%22%u044A%22%3A%20%22%5D%22%2C%0A%20%20%20%20%22%u0451%22%3A%20%22%60%22%2C%0A%20%20%20%20%22%u0425%22%3A%20%22%7B%22%2C%0A%20%20%20%20%22%u042A%22%3A%20%22%7D%22%2C%0A%20%20%20%20%22%u0401%22%3A%20%22%7E%22%2C%0A%20%20%20%20%22%u2116%22%3A%20%22%23%22%2C%0A%20%20%20%20%22%u0424%22%3A%20%22A%22%2C%0A%20%20%20%20%22%u0444%22%3A%20%22a%22%2C%0A%20%20%20%20%22%u0418%22%3A%20%22B%22%2C%0A%20%20%20%20%22%u0438%22%3A%20%22b%22%2C%0A%20%20%20%20%22%u0421%22%3A%20%22C%22%2C%0A%20%20%20%20%22%u0441%22%3A%20%22c%22%2C%0A%20%20%20%20%22%u0412%22%3A%20%22D%22%2C%0A%20%20%20%20%22%u0432%22%3A%20%22d%22%2C%0A%20%20%20%20%22%u0423%22%3A%20%22E%22%2C%0A%20%20%20%20%22%u0443%22%3A%20%22e%22%2C%0A%20%20%20%20%22%u0410%22%3A%20%22F%22%2C%0A%20%20%20%20%22%u0430%22%3A%20%22f%22%2C%0A%20%20%20%20%22%u041F%22%3A%20%22G%22%2C%0A%20%20%20%20%22%u043F%22%3A%20%22g%22%2C%0A%20%20%20%20%22%u0420%22%3A%20%22H%22%2C%0A%20%20%20%20%22%u0440%22%3A%20%22h%22%2C%0A%20%20%20%20%22%u0428%22%3A%20%22I%22%2C%0A%20%20%20%20%22%u0448%22%3A%20%22i%22%2C%0A%20%20%20%20%22%u041E%22%3A%20%22J%22%2C%0A%20%20%20%20%22%u043E%22%3A%20%22j%22%2C%0A%20%20%20%20%22%u041B%22%3A%20%22K%22%2C%0A%20%20%20%20%22%u043B%22%3A%20%22k%22%2C%0A%20%20%20%20%22%u0414%22%3A%20%22L%22%2C%0A%20%20%20%20%22%u0434%22%3A%20%22l%22%2C%0A%20%20%20%20%22%u042C%22%3A%20%22M%22%2C%0A%20%20%20%20%22%u044C%22%3A%20%22m%22%2C%0A%20%20%20%20%22%u0422%22%3A%20%22N%22%2C%0A%20%20%20%20%22%u0442%22%3A%20%22n%22%2C%0A%20%20%20%20%22%u0429%22%3A%20%22O%22%2C%0A%20%20%20%20%22%u0449%22%3A%20%22o%22%2C%0A%20%20%20%20%22%u0417%22%3A%20%22P%22%2C%0A%20%20%20%20%22%u0437%22%3A%20%22p%22%2C%0A%20%20%20%20%22%u0419%22%3A%20%22Q%22%2C%0A%20%20%20%20%22%u0439%22%3A%20%22q%22%2C%0A%20%20%20%20%22%u041A%22%3A%20%22R%22%2C%0A%20%20%20%20%22%u043A%22%3A%20%22r%22%2C%0A%20%20%20%20%22%u042B%22%3A%20%22S%22%2C%0A%20%20%20%20%22%u044B%22%3A%20%22s%22%2C%0A%20%20%20%20%22%u0415%22%3A%20%22T%22%2C%0A%20%20%20%20%22%u0435%22%3A%20%22t%22%2C%0A%20%20%20%20%22%u0413%22%3A%20%22U%22%2C%0A%20%20%20%20%22%u0433%22%3A%20%22u%22%2C%0A%20%20%20%20%22%u041C%22%3A%20%22V%22%2C%0A%20%20%20%20%22%u043C%22%3A%20%22v%22%2C%0A%20%20%20%20%22%u0426%22%3A%20%22W%22%2C%0A%20%20%20%20%22%u0446%22%3A%20%22w%22%2C%0A%20%20%20%20%22%u0427%22%3A%20%22X%22%2C%0A%20%20%20%20%22%u0447%22%3A%20%22x%22%2C%0A%20%20%20%20%22%u041D%22%3A%20%22Y%22%2C%0A%20%20%20%20%22%u043D%22%3A%20%22y%22%2C%0A%20%20%20%20%22%u042F%22%3A%20%22Z%22%2C%0A%20%20%20%20%22%u044F%22%3A%20%22z%22%2C%0A%20%20%20%20__proto__%3A%20null%0A%7D%3B%0A%0Athis.convTableBackward%20%3D%20%7B%20__proto__%3A%20null%20%7D%3B%0Afor%28var%20c%20in%20this.convTableForward%29%0A%20%20%20%20this.convTableBackward%5Bthis.convTableForward%5Bc%5D%5D%20%3D%20c%3B%0A%0Athis.insertText%20%3D%20function%28ta%2C%20text%2C%20noFocus%29%20%7B%0A%20%20%20%20var%20editor%20%3D%20ta.QueryInterface%28Components.interfaces.nsIDOMNSEditableElement%29%0A%20%20%20%20%20%20%20%20.editor%0A%20%20%20%20%20%20%20%20.QueryInterface%28Components.interfaces.nsIPlaintextEditor%29%3B%0A%20%20%20%20if%28editor.flags%20%26%20editor.eEditorReadonlyMask%29%0A%20%20%20%20%20%20%20%20return%3B%0A%0A%20%20%20%20var%20sTop%20%3D%20ta.scrollTop%3B%0A%20%20%20%20var%20sHeight%20%3D%20ta.scrollHeight%3B%0A%20%20%20%20var%20sLeft%20%3D%20ta.scrollLeft%3B%0A%20%20%20%20//%20var%20sWidth%20%3D%20ta.scrollWidth%3B%0A%0A%20%20%20%20if%28noFocus%29%20%7B%0A%20%20%20%20%20%20%20%20var%20val%20%3D%20ta.value%3B%0A%20%20%20%20%20%20%20%20var%20ss%20%3D%20ta.selectionStart%3B%0A%20%20%20%20%20%20%20%20ta.value%20%3D%20val.substring%280%2C%20ss%29%20+%20text%20+%20val.substring%28ta.selectionEnd%29%3B%0A%20%20%20%20%20%20%20%20var%20se%20%3D%20ss%20+%20text.length%3B%0A%20%20%20%20%20%20%20%20ta.selectionStart%20%3D%20se%3B%0A%20%20%20%20%20%20%20%20ta.selectionEnd%20%3D%20se%3B%0A%20%20%20%20%7D%0A%20%20%20%20else%20%7B%0A%0A%20%20%20%20%20%20%20%20if%28text%29%0A%20%20%20%20%20%20%20%20%20%20%20%20editor.insertText%28text%29%3B%0A%20%20%20%20%20%20%20%20else%0A%20%20%20%20%20%20%20%20%20%20%20%20editor.deleteSelection%280%29%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20ta.scrollTop%20%3D%20sTop%20+%20%28ta.scrollHeight%20-%20sHeight%29%3B%0A%20%20%20%20ta.scrollLeft%20%3D%20sLeft%3B%20//%20+%20%28ta.scrollWidth%20-%20sWidth%29%3B%0A%7D%3B%0Athis.inPrimaryLayout%20%3D%20function%28s%29%20%7B%0A%20%20%20%20var%20c%3B%0A%20%20%20%20for%28var%20i%20%3D%200%2C%20l%20%3D%20s.length%3B%20i%20%3C%20l%3B%20i++%29%20%7B%0A%20%20%20%20%20%20%20%20c%20%3D%20s.charAt%28i%29%3B%0A%20%20%20%20%20%20%20%20if%28c%20in%20this.convTableForward%29%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20true%3B%0A%20%20%20%20%20%20%20%20if%28c%20in%20this.convTableBackward%29%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20false%3B%0A%20%20%20%20%7D%0A%20%20%20%20return%20false%3B%0A%7D%3B%0Athis.switchKeybLayout%20%3D%20function%28convTable%2C%20s%29%20%7B%0A%20%20%20%20var%20r%20%3D%20%22%22%2C%20c%3B%0A%20%20%20%20for%28var%20i%20%3D%200%2C%20l%20%3D%20s.length%3B%20i%20%3C%20l%3B%20i++%29%20%7B%0A%20%20%20%20%20%20%20%20c%20%3D%20s.charAt%28i%29%3B%0A%20%20%20%20%20%20%20%20r%20+%3D%20c%20in%20convTable%20%3F%20convTable%5Bc%5D%20%3A%20c%3B%0A%20%20%20%20%7D%0A%20%20%20%20return%20r%3B%0A%7D%3B%0Athis.switchSelKeybLayout%20%3D%20function%28s%29%20%7B%0A%20%20%20%20try%20%7B%0A%20%20%20%20%20%20%20%20var%20ta%20%3D%20document.commandDispatcher.focusedElement%3B%0A%20%20%20%20%20%20%20%20var%20val%20%3D%20ta.value%3B%0A%20%20%20%20%20%20%20%20var%20sel%20%3D%20val.substring%28ta.selectionStart%2C%20ta.selectionEnd%29%3B%0A%20%20%20%20%7D%0A%20%20%20%20catch%28e%29%20%7B%0A%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20%7D%0A%20%20%20%20if%28this.noSelUseFullText%20%26%26%20%21sel%29%20%7B%0A%20%20%20%20%20%20%20%20ta.selectionStart%20%3D%200%3B%0A%20%20%20%20%20%20%20%20ta.selectionEnd%20%3D%20val.length%3B%0A%20%20%20%20%20%20%20%20sel%20%3D%20val%3B%0A%20%20%20%20%7D%0A%20%20%20%20if%28%21sel%29%0A%20%20%20%20%20%20%20%20return%3B%0A%0A%20%20%20%20sel%20%3D%20this.switchKeybLayout%28%0A%20%20%20%20%20%20%20%20this.inPrimaryLayout%28sel%29%20%3F%20this.convTableForward%20%3A%20this.convTableBackward%2C%0A%20%20%20%20%20%20%20%20sel%0A%20%20%20%20%29%3B%0A%20%20%20%20this.insertText%28ta%2C%20sel%29%3B%0A%7D%3B%5D%5D%3E%3C/initcode%3E%0D%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5Bthis.switchSelKeybLayout%28%29%3B%5D%5D%3E%3C/code%3E%0D%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5BAlt+z%5D%5D%3E%3C/accelkey%3E%0D%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0D%0A%20%20%3Cattributes/%3E%0D%0A%3C/custombutton%3E

Код

Выделить код

Код:

this.switchSelKeybLayout();

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

Выделить код

Код:

this.noSelUseFullText = true;
this.convTableForward = {
    "\"": "@",
    ":": "^",
    ";": "$",
    "?": "&",
    ",": "?",
    "/": "|",
    ".": "/",
    "э": "'",
    "б": ",",
    "ю": ".",
    "Ж": ":",
    "ж": ";",
    "Б": "<",
    "Ю": ">",
    "Э": "\"",
    "х": "[",
    "ъ": "]",
    "ё": "`",
    "Х": "{",
    "Ъ": "}",
    "Ё": "~",
    "№": "#",
    "Ф": "A",
    "ф": "a",
    "И": "B",
    "и": "b",
    "С": "C",
    "с": "c",
    "В": "D",
    "в": "d",
    "У": "E",
    "у": "e",
    "А": "F",
    "а": "f",
    "П": "G",
    "п": "g",
    "Р": "H",
    "р": "h",
    "Ш": "I",
    "ш": "i",
    "О": "J",
    "о": "j",
    "Л": "K",
    "л": "k",
    "Д": "L",
    "д": "l",
    "Ь": "M",
    "ь": "m",
    "Т": "N",
    "т": "n",
    "Щ": "O",
    "щ": "o",
    "З": "P",
    "з": "p",
    "Й": "Q",
    "й": "q",
    "К": "R",
    "к": "r",
    "Ы": "S",
    "ы": "s",
    "Е": "T",
    "е": "t",
    "Г": "U",
    "г": "u",
    "М": "V",
    "м": "v",
    "Ц": "W",
    "ц": "w",
    "Ч": "X",
    "ч": "x",
    "Н": "Y",
    "н": "y",
    "Я": "Z",
    "я": "z",
    __proto__: null
};

this.convTableBackward = { __proto__: null };
for(var c in this.convTableForward)
    this.convTableBackward[this.convTableForward[c]] = c;

this.insertText = function(ta, text, noFocus) {
    var editor = ta.QueryInterface(Components.interfaces.nsIDOMNSEditableElement)
        .editor
        .QueryInterface(Components.interfaces.nsIPlaintextEditor);
    if(editor.flags & editor.eEditorReadonlyMask)
        return;

    var sTop = ta.scrollTop;
    var sHeight = ta.scrollHeight;
    var sLeft = ta.scrollLeft;
    // var sWidth = ta.scrollWidth;

    if(noFocus) {
        var val = ta.value;
        var ss = ta.selectionStart;
        ta.value = val.substring(0, ss) + text + val.substring(ta.selectionEnd);
        var se = ss + text.length;
        ta.selectionStart = se;
        ta.selectionEnd = se;
    }
    else {

        if(text)
            editor.insertText(text);
        else
            editor.deleteSelection(0);
    }

    ta.scrollTop = sTop + (ta.scrollHeight - sHeight);
    ta.scrollLeft = sLeft; // + (ta.scrollWidth - sWidth);
};
this.inPrimaryLayout = function(s) {
    var c;
    for(var i = 0, l = s.length; i < l; i++) {
        c = s.charAt(i);
        if(c in this.convTableForward)
            return true;
        if(c in this.convTableBackward)
            return false;
    }
    return false;
};
this.switchKeybLayout = function(convTable, s) {
    var r = "", c;
    for(var i = 0, l = s.length; i < l; i++) {
        c = s.charAt(i);
        r += c in convTable ? convTable[c] : c;
    }
    return r;
};
this.switchSelKeybLayout = function(s) {
    try {
        var ta = document.commandDispatcher.focusedElement;
        var val = ta.value;
        var sel = val.substring(ta.selectionStart, ta.selectionEnd);
    }
    catch(e) {
        return;
    }
    if(this.noSelUseFullText && !sel) {
        ta.selectionStart = 0;
        ta.selectionEnd = val.length;
        sel = val;
    }
    if(!sel)
        return;

    sel = this.switchKeybLayout(
        this.inPrimaryLayout(sel) ? this.convTableForward : this.convTableBackward,
        sel
    );
    this.insertText(ta, sel);
};

Иконка

Выделить код

Код:

data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQEAYAAABPYyMiAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAADaSURBVHja7FXRDYIwEL1nGEBdBTaQDQyMQEcARymughOAIzDL+VEu9CoYE2Pxw/fzcrTkvbteryCylpmZNkKiQyCuPPOONkby7KmqYggDbUtEtHkFPAPGAEQAMPPQO2Z2XJR6fY3TTP8XsrULBnykmeauc1yc38vrsNexMbrJJV41IEIi3F6n7+UkcPzCEfiQRuxu2ki4Po7SujoOISWXfXWjFudBJBlKvMZD/zqvPNf7l26W0w0qkJ8c3wd9ZsLNZblHPriOugJA3DnwA5PwbyAJXwKZ0bHwGAAE21lZASOQtgAAAABJRU5ErkJggg==


Рестарт (Firefox, TB)
Левый клик - рестарт с окном подтвеждения
Alt+левый клик - рестарт без подтверждения

Рестарт
Код кнопки

Выделить код

Код:

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%0D%0A%20%20%3Cname%3ERestart%20%28with%20confirmation%29%3C/name%3E%0D%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/image%3E%0D%0A%20%20%3Cmode%3E0%3C/mode%3E%0D%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B//%20*****%20VARS%20*****%20//%0A%0Avar%20prompts%20%3D%20Components.classes%5B%22@mozilla.org/embedcomp/prompt-service%3B1%22%5D%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.getService%28Components.interfaces.nsIPromptService%29%3B%0A%0A%0A%0A%0A//%20*****%20FUNCTIONS%20*****%20//%0A%0Afunction%20createBrandingBundle%28%29%20%7B%0A%20%20%20%20var%20myBrandingPath%20%3D%20null%3B%0A%20%20%20%20var%20myStringBundleService%20%3D%20Components.classes%5B%22@mozilla.org/intl/stringbundle%3B1%22%5D%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.getService%28Components.interfaces.nsIStringBundleService%29%3B%0A%20%20%20%20%0A%20%20%20%20myBrandingPath%20%3D%20%22chrome%3A//branding/locale/brand.properties%22%0A%20%20%20%20return%20myStringBundleService.createBundle%28myBrandingPath%29%3B%0A%7D%0A%0A%0Afunction%20getWindowType%28%29%20%7B%0A%20%20%20%20//%20Relies%20on%20Branding%20Code%20so%20can%20not%20be%20run%20on%20startup%0A%20%20%20%20var%20myBrandStrings%20%3D%20createBrandingBundle%28%29%3B%0A%20%20%20%20var%20thisBrandShortName%20%3D%20myBrandStrings.GetStringFromName%28%22brandShortName%22%29%0A%20%20%20%20switch%20%28thisBrandShortName%29%20%7B%0A%20%20%20%20%20%20case%20%22Mozilla%20Thunderbird%22%3A%0A%20%20%20%20%20%20case%20%22Shredder%22%3A%0A%20%20%20%20%20%20case%20%22Thunderbird%22%3A%0A%20%20%20%20%20%20%20%20return%20%22mail%3A3pane%22%3B%0A%20%20%20%20%20%20case%20%22Nvu%22%3A%0A%20%20%20%20%20%20%20%20return%20%22composer%3Ahtml%22%3B%0A%20%20%20%20%20%20case%20%22Calendar%22%3A%0A%20%20%20%20%20%20case%20%22Sunbird%22%3A%0A%20%20%20%20%20%20%20%20return%20%22calendarMainWindow%22%3B%0A%20%20%20%20%20%20case%20%22eMusic%20Download%20Manager%22%3A%0A%20%20%20%20%20%20case%20%22eMusic%20Remote%22%3A%0A%20%20%20%20%20%20%20%20return%20%22emusic%3Awindow%22%3B%0A%20%20%20%20%20%20case%20%22Songbird%22%3A%0A%20%20%20%20%20%20%20%20return%20%22Songbird%3AMain%22%3B%0A%20%20%20%20%20%20default%3A%0A%20%20%20%20%20%20%20%20return%20%22navigator%3Abrowser%22%3B%0A%20%20%20%20%7D%0A%7D%0A%0A%0Afunction%20Restart%28%29%0A%7B%0A%20%20%20%20//%20Notify%20all%20windows%20that%20an%20application%20quit%20has%20been%20requested.%0A%20%20%20%20var%20os%20%3D%20Components.classes%5B%22@mozilla.org/observer-service%3B1%22%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.getService%28Components.interfaces.nsIObserverService%29%3B%0A%20%20%20%20var%20cancelQuit%20%3D%20Components.classes%5B%22@mozilla.org/supports-PRBool%3B1%22%5D%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.createInstance%28Components.interfaces.nsISupportsPRBool%29%3B%0A%20%20%20%20os.notifyObservers%28cancelQuit%2C%20%22quit-application-requested%22%2C%20%22restart%22%29%3B%0A%0A%20%20%20%20//%20Something%20aborted%20the%20quit%20process.%0A%20%20%20%20if%20%28cancelQuit.data%29%0A%20%20%20%20%20return%20false%3B%0A%0A%20%20%20%20var%20wm%20%3D%20Components.classes%5B%22@mozilla.org/appshell/window-mediator%3B1%22%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.getService%28Components.interfaces.nsIWindowMediator%29%3B%0A%20%20%20%20var%20windows%20%3D%20wm.getEnumerator%28%22%22%29%3B%0A%0A%20%20%20%20var%20windowType%20%3D%20getWindowType%28%29%3B%0A%0A%20%20%20%20while%20%28windows.hasMoreElements%28%29%29%20%7B%0A%20%20%20%20%20%20var%20myConfigWindow%20%3D%20windows.getNext%28%29.QueryInterface%28Components.interfaces.nsIDOMWindowInternal%29%3B%0A%20%20%20%20%20%20if%20%28myConfigWindow.document.documentElement.getAttribute%28%22windowtype%22%29%20%21%3D%20windowType%29%20%7B%0A%20%20%20%20%20%20%20%20%20myConfigWindow.close%28%29%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%0A%20%20%20%20if%20%28%22@zeniko/crashrecoveryservice%3B1%22%20in%20Components.classes%29%20%7B%0A%20%20%20%20%20%20nsPreferences.setBoolPref%28%22extensions.crashrecovery.resume_session_once%22%2C%20true%29%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20var%20appStartup%20%3D%20Components.interfaces.nsIAppStartup%3B%0A%20%20%20%20Components.classes%5B%22@mozilla.org/toolkit/app-startup%3B1%22%5D%0A%20%20%20%20%20%20.getService%28appStartup%29.quit%28appStartup.eRestart%20%7C%20appStartup.eAttemptQuit%29%3B%0A%0A%20%20%20%20return%20true%3B%0A%7D%0A%0A%0A%0A%0A//%20*****%20MOUSE%20HANDLING%20*****%20//%0A%0Athis.leftclick%20%3D%20function%28evt%29%20%7B%0A%20%20var%20RestartProceed%20%3D%20prompts.confirm%28null%2C%20%22Restart%20Firefox%22%2C%20%22%u041F%u0435%u0440%u0435%u0437%u0430%u043F%u0443%u0441%u0442%u0438%u0442%u044C%20%u043F%u0440%u0438%u043B%u043E%u0436%u0435%u043D%u0438%u0435%3F%22%29%3B%0A%20%20if%20%28RestartProceed%29%20%7B%0A%20%20%20%20Restart%28%29%3B%0A%20%20%7D%0A%7D%0A%0Athis.aleftclick%20%3D%20function%28evt%29%20%7B%0A%20%20Restart%28%29%3B%0A%7D%0A%0A%0A%0A%0A//%20*****%20INITIALISATION%20*****%20//%0A%0Athis.tooltipText%20%3D%20%22Restart%22%3B%0Athis.style.opacity%20%3D%20%27.85%27%3B%0A%0Athis.setAttribute%28%22onclick%22%2C%22custombuttons.gQuot.mHandler%28event%2C%20this%29%22%29%3B%0Athis.setAttribute%28%27ondblclick%27%2C%20%27gQuot%28event%2C%20this%29%27%29%3B%0A%0A%0A%0A%0A//%20*****%20ATTRIBUTES%20*****%20//%0A%0Athis.setAttribute%28%27author%27%2C%27Rawny%2C%20zooot%27%29%3B%0Athis.setAttribute%28%27version%27%2C%274%27%29%3B%0Athis.setAttribute%28%27homepage%27%2C%20%27http%3A//custombuttons2.com/forum/buttons/buttons-database/restart-session-restore.html%27%29%3B%0Athis.setAttribute%28%27dependency%27%2C%27FF2.0*%2C%20FL1.0*%2C%20TB2.0*%2C%20CB2%202.0.5*%27%29%3B%0Athis.setAttribute%28%27status%27%2C%27Complete%27%29%3B%0Athis.setAttribute%28%27public%27%2Ctrue%29%5D%5D%3E%3C/initcode%3E%0D%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/code%3E%0D%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0D%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5BLeft%20%20%20%20%20%20%20%20%3D%20Restart%20application%20with%20confirmation%20dialogue%0AAlt+Left%20%3D%20Restart%20application%5D%5D%3E%3C/help%3E%0D%0A%20%20%3Cattributes/%3E%0D%0A%3C/custombutton%3E

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

Выделить код

Код:

// ***** VARS ***** //

var prompts = Components.classes["@mozilla.org/embedcomp/prompt-service;1"]
                        .getService(Components.interfaces.nsIPromptService);




// ***** FUNCTIONS ***** //

function createBrandingBundle() {
    var myBrandingPath = null;
    var myStringBundleService = Components.classes["@mozilla.org/intl/stringbundle;1"]
                        .getService(Components.interfaces.nsIStringBundleService);
    
    myBrandingPath = "chrome://branding/locale/brand.properties"
    return myStringBundleService.createBundle(myBrandingPath);
}


function getWindowType() {
    // Relies on Branding Code so can not be run on startup
    var myBrandStrings = createBrandingBundle();
    var thisBrandShortName = myBrandStrings.GetStringFromName("brandShortName")
    switch (thisBrandShortName) {
      case "Mozilla Thunderbird":
      case "Shredder":
      case "Thunderbird":
        return "mail:3pane";
      case "Nvu":
        return "composer:html";
      case "Calendar":
      case "Sunbird":
        return "calendarMainWindow";
      case "eMusic Download Manager":
      case "eMusic Remote":
        return "emusic:window";
      case "Songbird":
        return "Songbird:Main";
      default:
        return "navigator:browser";
    }
}


function Restart()
{
    // Notify all windows that an application quit has been requested.
    var os = Components.classes["@mozilla.org/observer-service;1"]
                     .getService(Components.interfaces.nsIObserverService);
    var cancelQuit = Components.classes["@mozilla.org/supports-PRBool;1"]
                              .createInstance(Components.interfaces.nsISupportsPRBool);
    os.notifyObservers(cancelQuit, "quit-application-requested", "restart");

    // Something aborted the quit process.
    if (cancelQuit.data)
     return false;

    var wm = Components.classes["@mozilla.org/appshell/window-mediator;1"]
                     .getService(Components.interfaces.nsIWindowMediator);
    var windows = wm.getEnumerator("");

    var windowType = getWindowType();

    while (windows.hasMoreElements()) {
      var myConfigWindow = windows.getNext().QueryInterface(Components.interfaces.nsIDOMWindowInternal);
      if (myConfigWindow.document.documentElement.getAttribute("windowtype") != windowType) {
         myConfigWindow.close();
      }
    }

    if ("@zeniko/crashrecoveryservice;1" in Components.classes) {
      nsPreferences.setBoolPref("extensions.crashrecovery.resume_session_once", true);
    }

    var appStartup = Components.interfaces.nsIAppStartup;
    Components.classes["@mozilla.org/toolkit/app-startup;1"]
      .getService(appStartup).quit(appStartup.eRestart | appStartup.eAttemptQuit);

    return true;
}




// ***** MOUSE HANDLING ***** //

this.leftclick = function(evt) {
  var RestartProceed = prompts.confirm(null, "Restart Firefox", "Перезапустить приложение?");
  if (RestartProceed) {
    Restart();
  }
}

this.aleftclick = function(evt) {
  Restart();
}




// ***** INITIALISATION ***** //

this.tooltipText = "Restart";
this.style.opacity = '.85';

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




// ***** ATTRIBUTES ***** //

this.setAttribute('author','Rawny, zooot');
this.setAttribute('version','4');
this.setAttribute('homepage', 'http://custombuttons2.com/forum/buttons/buttons-database/restart-session-restore.html');
this.setAttribute('dependency','FF2.0*, FL1.0*, TB2.0*, CB2 2.0.5*');
this.setAttribute('status','Complete');
this.setAttribute('public',true)

Иконка

Выделить код

Код:

data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAABh0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjM2qefiJQAAA6hJREFUOE9VkwtMU1cYx/+9tYAKWAYixWXjIQpYBGEF3AZoNKEyLeCiDQ+dBidjQHj4qHEoyLYw0KCTQUarqLQisGRmG+CCo0zEGljXAI0dr0InJpDNER/Lqin026GajJ3kl3Puyf1+93+/nMPD4pGpFYLHSbxErnJ3Hr3HA3lbbXa71U6WpzbSzv9tU8NORvB5TzFPfmyu/688XStakae7LFWO/pXcYqF930/RwbYpkn8zSYnqMYqq+438ywzTyOr5Ghndb7nk3/uO/2Gv7aUgXesrKuzvKPrpj7lDHQ9pd+sEpTSbKXURu1rMlNJkpo01921LP+p9kHx9cm79CT0BaV2eHvn3mg53/Wk/1P6QZOylheL3WyZIdt3sYGG9sOfYZ/JtjWN0Vj9LkScNTHDgduKOhvEn+bdmSKoepyTNOIs8Tn4Vg+Sr6HewpmqIpEycxARJTLaT/VZ53yxFnPyV4F3Y25bWNk2bNWaKaRijmEujtLyw5wmSGlQIzZQiJEPKkzXdWHpYZxOrRknSOEFvt/xOBXdnab2ij+D/cdczWdsM+dWN0Ju1I+R2VEdI+KqGdcaLwWHLpQDsbG1Dds8cFCxy2RCtrB0n2a1HFJj/M0F05A6FaaZI8IWJBBX3iZP/YEVQntjR3PgrTth6rRMZP9pQzL52jDXtExb71AAFXZ4k770dBHn7MqqyeFDeIOhgH2iTGtaQGvg6BJLzexBZ1YzwzzXYwAj9VIOQ8pesO61BRGUL4tUuzz+zuFG2ASS/DYprBvlXI+fVAVnGZk/Gax6pEItzESnJhTh8H4LWJsN/hQRvIKx6SX+JyYmy9Bzt6gbtYYTW4YFPBT7wLIe3sBRebB0XW++cd84YvP+CMSJZadoUd6QzKNzvBEvqnoucvTfdX5QYRQ5BRi8oS4f5ba14HK3CgETFv7P7hmsnK26sN8VUKI1xRXWGd9KTVT5bndNYOucdCAwo57ouDL9rLzAIKVMHytFjvsiAZ0cNmC4bdB86P7xGqxyOblaZ4quVxoTjxe1r93vlI5ZLgDMgAMelYsu6SlfjGVO4/ZRxFRUYOLvCiOenTdyjs8O+IxfNUXevmjd/ywS1xzqDS18vdpIjAsLF91DAbUdiYKlz94H2gBcKvZAqx1bO1Vh8HistoWaVOeaXMl3IzZQrqy+uLuZnIwyrWDHvfzeZPQgEsdiwPA3Hgytd9NEqNyvjH0m928zGL90HAkqWnHPaDik/CiLHAXs1/gU8lc1wSyvYVQAAAABJRU5ErkJggg==

Stop All Tabs (Firefox)
Автор: Yan.
Останавливает загрузку текущей вкладки + дополнительно позволяет останавливать фоновую загрузку всех вкладок.

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

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3EStop%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH1gkPDzESY3gWcgAAAqFJREFUeNplkz1sE0kYhp9dZzfBXq8HYpQUBxjOinQUVhBQRKIB3XFSjkgIAlQUAV1/6VPS5yip0FFCwU8kBxSJSG7QFXBgCayDIEwgQPjd7Np79s7uDIWDiXOfNBppPj2v3u9nDDbEpdzAqOtkFp1MWmx8x4BGM/RW/ebPf/itB4DekPoO57dtXTw2dULYfQriBJK4c8cxkWExd/WO//D9p/ELjegeoLoCXfj8KWF/eQuvlkFKiNaPlDA8TLTrR+auLfSIpLrw76eFHXxg6e8aq6GJSMWk0Mh2zNPWFtZWPpA32hQPHej3l99NjsioUomSFdN1MovHzk0K21tl6d4Ttl/8i+L1BapBmjCMqMbbKM5X2H7lBs+erGDUakycOOzuFdkykDGdTFrYtobXy0jTJl0oYAlB6WaZ2q4xSrfmsYQgXSggtzjIF3VSzYCsk3aBnAl0GiUlxWxM9fg40vOwhGD/5ctYQiA9j0fjRynITyil0bo7BKsjkMQQxVhofur7QnV6umeK1elpRoKXmIBSCrTq5r47iCQybFGTgtLsbI9AaXaWf7M7acsYlSi00t0FMDHWHUjJUtOmdHO+a/v+1FS3nNHyAi/tPEmyyUGjGXqR7oOhIaymT1ivd2r+7Sgj98s8Gv8F6XmE9TpmsIa9ewfazRE0Qh/A+NMd2P9DfuvdiTO/uvbzpzx7/Ao54FCIP5NC04pi6lYeM/Ao7Bmkf1+JuRsV/9bKx7NX/pMPUrfb8bsRGVX8+pvJ4qGD/YO6Re7zW3SiSJIEnSiybZ/B3cOb4X+AtW9/wZxx7LHRocHyxMkjbioMQOtOs7RCK4V2c5thD2gaG5ptzjj22F6RLa8vSc93Cxqhf/uj3wMDyqA3TCAD5ACL/4cE1r7BAF8BBX1jYyT/fJkAAAAASUVORK5CYII%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bthis.StopAll%3Dfunction%28%29%7B%0A%20try%7B%0A%20%20for%20%28var%20i%3D0%3Bi%3CgBrowser.browsers.length%3Bi++%29%7B%0A%20%20%20%20gBrowser.browsers%5Bi%5D.stop%28%29%3B%0A%20%20%7D%0A%20%7Dcatch%28ex%29%20%7B%7D%0A%7D%0A%20var%20nMItem%3Dfunction%28label%2Cimg%2Cobj%29%7B%0A%20%20%20var%20m%3Ddocument.createElement%28%27menuitem%27%29%3B%0A%20%20%20m.setAttribute%28%27label%27%2Clabel%29%3B%0A%20%20%20m.f%3Dobj.StopAll.bind%28obj%29%3B%0A%20%20%20m.setAttribute%28%27oncommand%27%2C%27this.f%28%29%27%29%3B%0A%20%20%20m.setAttribute%28%27image%27%2Cimg%29%3B%0A%20%20%20m.setAttribute%28%27class%27%2C%27menuitem-iconic%27%29%3B%0A%20%20%20return%20m%3B%0A%20%7D%0A%0A%20var%20mP%3Ddocument.createElement%28%27menupopup%27%29%3B%0A%20mP.appendChild%28nMItem%28%27Stop%20All%20Tabs%27%2Cthis.image%2Cthis%29%29%3B%0A%0A%20this.appendChild%28mP%29%3B%0A%20this.type%3D%22menu-button%22%3B%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5BBrowserStop%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%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

Пиктограмма:

Выделить код

Код:

data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH1gkPDzESY3gWcgAAAqFJREFUeNplkz1sE0kYhp9dZzfBXq8HYpQUBxjOinQUVhBQRKIB3XFSjkgIAlQUAV1/6VPS5yip0FFCwU8kBxSJSG7QFXBgCayDIEwgQPjd7Np79s7uDIWDiXOfNBppPj2v3u9nDDbEpdzAqOtkFp1MWmx8x4BGM/RW/ebPf/itB4DekPoO57dtXTw2dULYfQriBJK4c8cxkWExd/WO//D9p/ELjegeoLoCXfj8KWF/eQuvlkFKiNaPlDA8TLTrR+auLfSIpLrw76eFHXxg6e8aq6GJSMWk0Mh2zNPWFtZWPpA32hQPHej3l99NjsioUomSFdN1MovHzk0K21tl6d4Ttl/8i+L1BapBmjCMqMbbKM5X2H7lBs+erGDUakycOOzuFdkykDGdTFrYtobXy0jTJl0oYAlB6WaZ2q4xSrfmsYQgXSggtzjIF3VSzYCsk3aBnAl0GiUlxWxM9fg40vOwhGD/5ctYQiA9j0fjRynITyil0bo7BKsjkMQQxVhofur7QnV6umeK1elpRoKXmIBSCrTq5r47iCQybFGTgtLsbI9AaXaWf7M7acsYlSi00t0FMDHWHUjJUtOmdHO+a/v+1FS3nNHyAi/tPEmyyUGjGXqR7oOhIaymT1ivd2r+7Sgj98s8Gv8F6XmE9TpmsIa9ewfazRE0Qh/A+NMd2P9DfuvdiTO/uvbzpzx7/Ao54FCIP5NC04pi6lYeM/Ao7Bmkf1+JuRsV/9bKx7NX/pMPUrfb8bsRGVX8+pvJ4qGD/YO6Re7zW3SiSJIEnSiybZ/B3cOb4X+AtW9/wZxx7LHRocHyxMkjbioMQOtOs7RCK4V2c5thD2gaG5ptzjj22F6RLa8vSc93Cxqhf/uj3wMDyqA3TCAD5ACL/4cE1r7BAF8BBX1jYyT/fJkAAAAASUVORK5CYII=

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

Выделить код

Код:

this.StopAll=function(){
 try{
  for (var i=0;i<gBrowser.browsers.length;i++){
    gBrowser.browsers[i].stop();
  }
 }catch(ex) {}
}
 var nMItem=function(label,img,obj){
   var m=document.createElement('menuitem');
   m.setAttribute('label',label);
   m.f=obj.StopAll.bind(obj);
   m.setAttribute('oncommand','this.f()');
   m.setAttribute('image',img);
   m.setAttribute('class','menuitem-iconic');
   return m;
 }

 var mP=document.createElement('menupopup');
 mP.appendChild(nMItem('Stop All Tabs',this.image,this));

 this.appendChild(mP);
 this.type="menu-button";

Код:

Выделить код

Код:

BrowserStop();


27-03-2010 23:32:57
Инвертировать выделение (Firefox)
Автор: Anton.
Позволяет инвертировать выделение (менять местами выделенные области). Незаменимая вещь для пользователей расширений типа Scrapbook (обсуждение функционала, обсуждение кнопки).
скрытый текст
Код кнопки:

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3E%u0418%u043D%u0432%u0435%u0440%u0442%u0438%u0440%u043E%u0432%u0430%u0442%u044C%20%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u0438%u0435%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%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/*Initialization%20Code*/%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*CODE*/%0A%0Afunction%20notNull%20%28x%29%20x%20%21%3D%20null%3B%0Afunction%20compareRanges%20%28r1%2C%20r2%29%0A%7B%0A%20%20%20%20return%20r1.%20compareBoundaryPoints%20%28Range.%20START_TO_START%2C%20r2%29%3B%0A%7D%0Avar%20doc%20%3D%20gBrowser.%20contentDocument%3B%0Avar%20win%20%3D%20document.%20commandDispatcher.%20focusedWindow%3B%0Avar%20sel%20%3D%20win.%20getSelection%20%28%29.%20QueryInterface%20%28Components.%20interfaces.%20nsISelectionPrivate%29%3B%0Avar%20ranges%20%3D%20%5B%5D%3B%0Avar%20i%2C%20j%3B%0Afor%20%28i%20%3D%200%3B%20i%20%3C%20sel.%20rangeCount%3B%20i++%29%0A%20%20%20%20ranges.%20push%20%28sel.%20getRangeAt%20%28i%29.%20cloneRange%20%28%29%29%3B%0Aranges.%20sort%20%28compareRanges%29%3B%0Avar%20range1%2C%20range2%3B%0Avar%20css%2C%20cse%2C%20ces%2C%20cee%3B%0Afor%20%28i%20%3D%200%3B%20i%20%3C%20ranges.%20length%3B%20i++%29%0A%7B%0A%20%20%20%20range1%20%3D%20ranges%20%5Bi%5D%3B%0A%20%20%20%20if%20%28%21range1%29%0A%20%20%20%20%20%20%20%20continue%3B%0A%20%20%20%20if%20%28range1.%20collapsed%29%0A%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20ranges%20%5Bi%5D%20%3D%20null%3B%0A%20%20%20%20%20%20%20%20continue%3B%0A%20%20%20%20%7D%0A%20%20%20%20for%20%28j%20%3D%20i%20+%201%3B%20j%20%3C%20ranges.%20length%3B%20j++%29%0A%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20range2%20%3D%20ranges%20%5Bj%5D%3B%0A%20%20%20%20%20%20%20%20if%20%28%21range2%29%0A%20%20%20%20%20%20%20%20%20%20%20%20continue%3B%0A%20%20%20%20%20%20%20%20css%20%3D%20range1.%20compareBoundaryPoints%20%28Range.%20START_TO_START%2C%20range2%29%3B%0A%20%20%20%20%20%20%20%20cse%20%3D%20range1.%20compareBoundaryPoints%20%28Range.%20START_TO_END%2C%20range2%29%3B%0A%20%20%20%20%20%20%20%20ces%20%3D%20range1.%20compareBoundaryPoints%20%28Range.%20END_TO_START%2C%20range2%29%3B%0A%20%20%20%20%20%20%20%20cee%20%3D%20range1.%20compareBoundaryPoints%20%28Range.%20END_TO_END%2C%20range2%29%3B%0A%20%20%20%20%20%20%20%20if%20%28%28css%20%3C%3D%200%29%20%26%26%20%28cee%20%3E%3D%200%29%29%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20ranges%20%5Bj%5D%20%3D%20null%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20continue%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20if%20%28%28css%20%3C%3D%200%29%20%26%26%20%28cse%20%3E%3D%200%29%20%26%26%20%28cee%20%3C%3D%200%29%29%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20range1.%20setEnd%20%28range2.%20endContainer%2C%20range2.%20endOffset%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20ranges%20%5Bj%5D%20%3D%20null%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20continue%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%20%20if%20%28range1.%20collapsed%29%0A%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20ranges%20%5Bi%5D%20%3D%20null%3B%0A%20%20%20%20%20%20%20%20continue%3B%0A%20%20%20%20%7D%0A%7D%0Aranges%20%3D%20ranges.%20filter%20%28notNull%29%3B%0Asel.%20startBatchChanges%20%28%29%3B%0Asel.%20removeAllRanges%20%28%29%3B%0Avar%20range%20%3D%20doc.%20createRange%20%28%29%3B%0Asel.%20addRange%20%28range%29%3B%0Arange.%20setStartBefore%20%28doc.%20body.%20firstChild%29%3B%0Afor%20%28i%20%3D%200%3B%20i%20%3C%20ranges.%20length%3B%20i++%29%0A%7B%0A%20%20%20%20range.%20setEnd%20%28ranges%20%5Bi%5D.%20startContainer%2C%20ranges%20%5Bi%5D.%20startOffset%29%3B%0A%20%20%20%20if%20%28range.%20collapsed%29%0A%20%20%20%20%20%20%20%20sel.%20removeRange%20%28range%29%3B%0A%20%20%20%20range%20%3D%20doc.%20createRange%20%28%29%3B%0A%20%20%20%20sel.%20addRange%20%28range%29%3B%0A%20%20%20%20range.%20setStart%20%28ranges%20%5Bi%5D.%20endContainer%2C%20ranges%20%5Bi%5D.%20endOffset%29%3B%0A%7D%0Arange.%20setEndAfter%20%28doc.%20body.%20lastChild%29%3B%0Aif%20%28range.%20collapsed%29%0A%20%20%20%20sel.%20removeRange%20%28range%29%3B%0Aif%20%28sel.%20rangeCount%20%3D%3D%200%29%0A%20%20%20%20sel.%20addRange%20%28doc.%20createRange%20%28%29%29%3B%0Asel.%20endBatchChanges%20%28%29%3B%0Awin.%20blur%20%28%29%3B%0Awin.%20focus%20%28%29%3B%0A//sel.%20deleteFromDocument%20%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%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

Пиктограмма:

Выделить код

Код:

data:image/png;base64,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

Код:

Выделить код

Код:

function notNull (x) x != null;
function compareRanges (r1, r2)
{
    return r1. compareBoundaryPoints (Range. START_TO_START, r2);
}
var doc = gBrowser. contentDocument;
var win = document. commandDispatcher. focusedWindow;
var sel = win. getSelection (). QueryInterface (Components. interfaces. nsISelectionPrivate);
var ranges = [];
var i, j;
for (i = 0; i < sel. rangeCount; i++)
    ranges. push (sel. getRangeAt (i). cloneRange ());
ranges. sort (compareRanges);
var range1, range2;
var css, cse, ces, cee;
for (i = 0; i < ranges. length; i++)
{
    range1 = ranges [i];
    if (!range1)
        continue;
    if (range1. collapsed)
    {
        ranges [i] = null;
        continue;
    }
    for (j = i + 1; j < ranges. length; j++)
    {
        range2 = ranges [j];
        if (!range2)
            continue;
        css = range1. compareBoundaryPoints (Range. START_TO_START, range2);
        cse = range1. compareBoundaryPoints (Range. START_TO_END, range2);
        ces = range1. compareBoundaryPoints (Range. END_TO_START, range2);
        cee = range1. compareBoundaryPoints (Range. END_TO_END, range2);
        if ((css <= 0) && (cee >= 0))
        {
            ranges [j] = null;
            continue;
        }
        if ((css <= 0) && (cse >= 0) && (cee <= 0))
        {
            range1. setEnd (range2. endContainer, range2. endOffset);
            ranges [j] = null;
            continue;
        }
    }
    if (range1. collapsed)
    {
        ranges [i] = null;
        continue;
    }
}
ranges = ranges. filter (notNull);
sel. startBatchChanges ();
sel. removeAllRanges ();
var range = doc. createRange ();
sel. addRange (range);
range. setStartBefore (doc. body. firstChild);
for (i = 0; i < ranges. length; i++)
{
    range. setEnd (ranges [i]. startContainer, ranges [i]. startOffset);
    if (range. collapsed)
        sel. removeRange (range);
    range = doc. createRange ();
    sel. addRange (range);
    range. setStart (ranges [i]. endContainer, ranges [i]. endOffset);
}
range. setEndAfter (doc. body. lastChild);
if (range. collapsed)
    sel. removeRange (range);
if (sel. rangeCount == 0)
    sel. addRange (doc. createRange ());
sel. endBatchChanges ();
win. blur ();
win. focus ();
//sel. deleteFromDocument ();

Disable/enable windows titlebar with drag ability (кроме панели вкладок) (Firefox)
При добавлении кнопки окно Firefox потеряет виндовый тайтлбар и рамки (все, даже общая вокруг окна, что я думаю мог бы кто-нибудь исправить) по бокам и снизу, но его станет можно перетаскивать за любую панель кроме таббара и персональных панелей (это можно исправить добавив id нужных тулбаров в строку, где они все перечислены).

скрытый текст
Установка кнопки

Выделить код

Код:

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%u043E%u0441%u0442%u043E%u044F%u043D%u043D%u043E%20%u0432%u044B%u043A%u043B%u044E%u0447%u0435%u043D%u043D%u044B%u0439%20Chrome-%u0437%u0430%u0433%u043E%u043B%u043E%u0432%u043E%u043A%20-%20%u043F%u043E%u043A%u0430%u0437%u0430%u0442%u044C%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAUVJREFUeNqkUz1PwzAQPUedmBCDw8pEg1IJdiREV/4H8Bf4GcnGxsKEQGKDlXYrIgtF7Bk8gQqUJG6wD9tJ81UhIL3Ivvh09+75WUcQEZaxju/7h8qftqw/As/zsGpCLSklpl9qCYHJLMXjE6/wD49j49nLO+raPwHo9RZxnHwm+DqNkU0+CoDOnMvF5fW/uO/2+5kGelNdYWVtFQ7294qE0X0AO9u9WhFRn7abwbAUsYnMGAP9Ms3XIYTUzjwVxlt6qybTdQq2bQNKUem8aELKCkAeNEAqHoYhjJ+ei2QkPzPJriDzRCEMMqUUoiguC3QHK/MIuAgw5TNziDmHIAigyb1oaumQVQPINcgoCBTgui44TreGgPM/dZemuIZBkis6GJXdN7Y24fZu+PssGAkkQtfptRsmPRBX52eth4ksO87fAgwAwhDaXBPgKF4AAAAASUVORK5CYII%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%20document.getElementById%28%22main-window%22%29.setAttribute%28%27hidechrome%27%2C%27true%27%29%3B%0A%20%0Awindow.restore%28%29%3B%0Awindow.maximize%28%29%3B%0Awindow.restore%28%29%3B%0A%0Athis.drag%3D%20function%28%29%20%7B%0A%20%20if%28window%5B%22bDragW%22%5D%20%29%0A%20%20%20%20return%3B%0Avar%20Ctrls%20%3D%20%5B%27PersonalToolbar%27%2C%20%27toolbar-menubar%27%2C%27nav-bar%27%2C%20%27status-bar%27%2C%20%27FindToolbar%27%5D%3B%0A%20%20try%20%7B%0A%20%20%20%20%20Components.utils.import%28%27resource%3A//gre/modules/WindowDraggingUtils.jsm%27%29%3B%0A%0A%20%20%20%20%20for%28i%3D0%3B%20i%3CCtrls.length%3B%20i++%29%20%7B%0A%20%20%20%20%20%20%20ctrlW%20%3D%20document.getElementById%28Ctrls%5Bi%5D%29%3B%0A%20%20%20%20%20%20%20if%20%28%21ctrlW%29%20continue%3B%0A%20%20%20%20%20%20%20try%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20var%20bDragW%20%3D%20new%20WindowDraggingElement%28ctrlW%2C%20window%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20DragW.mouseDownCheck%3Dfunction%28e%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20return%20%20WinState%3D%3D0%0A%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%7Dcatch%28e%29%7B%7D%0A%20%20%20%20%20%20%7D%0A%20%20%20%7Dcatch%28e%29%7B%7D%0Awindow%5B%22bDragW%22%5D%3Dtrue%0A%7D%0Athis.drag%28%29%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5Bvar%20mainWindow%20%3D%20document.getElementById%28%22main-window%22%29%3B%0Avar%20chromeattrib%3DmainWindow.getAttribute%28%27hidechrome%27%29%0A%0A%0Athis.togglechrome%20%3D%20function%28%29%20%7B%0A%20%20if%28chromeattrib%3D%3D%27true%27%29%20%7B%0A%20%20document.getElementById%28%22main-window%22%29.setAttribute%28%27hidechrome%27%2C%27false%27%29%3B%0Awindow.restore%28%29%3B%0Awindow.maximize%28%29%3B%0Awindow.restore%28%29%3B%0A%20%20%20%20%20%20this.checked%3Dtrue%3B%0A%20this.image%3D%22data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAUVJREFUeNqkUz1PwzAQPUedmBCDw8pEg1IJdiREV/4H8Bf4GcnGxsKEQGKDlXYrIgtF7Bk8gQqUJG6wD9tJ81UhIL3Ivvh09+75WUcQEZaxju/7h8qftqw/As/zsGpCLSklpl9qCYHJLMXjE6/wD49j49nLO+raPwHo9RZxnHwm+DqNkU0+CoDOnMvF5fW/uO/2+5kGelNdYWVtFQ7294qE0X0AO9u9WhFRn7abwbAUsYnMGAP9Ms3XIYTUzjwVxlt6qybTdQq2bQNKUem8aELKCkAeNEAqHoYhjJ+ei2QkPzPJriDzRCEMMqUUoiguC3QHK/MIuAgw5TNziDmHIAigyb1oaumQVQPINcgoCBTgui44TreGgPM/dZemuIZBkis6GJXdN7Y24fZu+PssGAkkQtfptRsmPRBX52eth4ksO87fAgwAwhDaXBPgKF4AAAAASUVORK5CYII%3D%22%3B%20%0A%20%20%7D%0A%20%20else%20%7B%20%20%0A%20%20%20document.getElementById%28%22main-window%22%29.setAttribute%28%27hidechrome%27%2C%27true%27%29%3B%0A%20%20%0Awindow.restore%28%29%3B%0Awindow.maximize%28%29%3B%0Awindow.restore%28%29%3B%0A%20%20%20%20%20this.image%3D%22data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAR5JREFUeNpi/P//PwMlgImBQsCyc+/eGiDdTIbes0C8mYWDg6PZztqafBeAiDffsUuGxkeBaWnvcAy5CWH+EAM+fvpE0BYpfWMU/rOLZzED8dyxvWCMDYA0dBvIgDGyZrALPgFd8P/fPwZ3Z2ewwMuv/xkYgfR/BvzR++8fRJ7l569fDH///mPYuXc/WEDP1B6ighFVQ0xVI4ShbgCm/v/9iwjEf38QLnj67hfYdjT9DP+hGmHgD8iA/4wQA/4COcD0AJbQ0LdiYCQicf7985eBkRHqApBpVmZGYIk3X//CFcmoqEMYNy9ghoG7MyigIAaA/PPqEyxC/oI9wAgkG7ILoAHKiBYs/xn+AcMNJqY0Z9Giu+QmZcYBz40AAQYAXyBzO2qih9QAAAAASUVORK5CYII%3D%22%3B%0A%20%20%20%20this.checked%3Dfalse%3B%0A%20%20%7D%0A%7D%0Athis.togglechrome%28%29%3B%0A%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B********************************************************************%20%20%20%20%20%20%20%20%0A%0A%20Toggles%20window%20chrome%20for%20your%20browser.%20%20%20%20%20%20%20%20%20%0A%20Makes%20the%20window%20almost%20chromeless%20meaning%20no%20titlebar%20%20%20%20%20%20%20%20%20%0A%20but%20taskbar%20should%20still%20be%20accessible.%20%20%20%20%20%20%20%20%20%0A%0A%20Convenient%20for%20going%20fullscreen%20without%20losing%20all%20%20%20%20%20%20%20%20%20%0A%20those%20useful%20toolbars%20and%20the%20windows%20taskbar.%20%20%20%20%20%20%20%20%0A%0A%20By%20default%20this%20button%20makes%20the%20browser%20startup%20chromeless%20%20%20%20%20%20%20%20%20%0A%20you%20can%20change%20this%20by%20commenting%20out%20the%20appropriately%20marked%20%20%20%20%20%20%20%20%20%0A%20line%20of%20code%20in%20the%20button%27s%20initialization%20tab.%20%20%20%20%20%20%20%20%20%0A%0A********************************************************************%20%20%20%20%20%20%20%20%0A%0A%20Directly%20Clicking%20on%20the%20Button%20does%20the%20following%3A%20%20%20%20%20%20%20%20%0A%0A%20%20%20%20%20L%20%3D%20Toggles%20Chrome%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20Any%20Other%20Click%20%3D%20Custom%20Buttons%20Context%20Menu%20%20%20%20%20%20%20%20%0A%0A********************************************************************%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

Код:

Выделить код

Код:

var mainWindow = document.getElementById("main-window");
var chromeattrib=mainWindow.getAttribute('hidechrome')


this.togglechrome = function() {
  if(chromeattrib=='true') {
  document.getElementById("main-window").setAttribute('hidechrome','false');
window.restore();
window.maximize();
window.restore();
      this.checked=true;
 this.image="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAUVJREFUeNqkUz1PwzAQPUedmBCDw8pEg1IJdiREV/4H8Bf4GcnGxsKEQGKDlXYrIgtF7Bk8gQqUJG6wD9tJ81UhIL3Ivvh09+75WUcQEZaxju/7h8qftqw/As/zsGpCLSklpl9qCYHJLMXjE6/wD49j49nLO+raPwHo9RZxnHwm+DqNkU0+CoDOnMvF5fW/uO/2+5kGelNdYWVtFQ7294qE0X0AO9u9WhFRn7abwbAUsYnMGAP9Ms3XIYTUzjwVxlt6qybTdQq2bQNKUem8aELKCkAeNEAqHoYhjJ+ei2QkPzPJriDzRCEMMqUUoiguC3QHK/MIuAgw5TNziDmHIAigyb1oaumQVQPINcgoCBTgui44TreGgPM/dZemuIZBkis6GJXdN7Y24fZu+PssGAkkQtfptRsmPRBX52eth4ksO87fAgwAwhDaXBPgKF4AAAAASUVORK5CYII="; 
  }
  else {  
   document.getElementById("main-window").setAttribute('hidechrome','true');
  
window.restore();
window.maximize();
window.restore();
     this.image="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAR5JREFUeNpi/P//PwMlgImBQsCyc+/eGiDdTIbes0C8mYWDg6PZztqafBeAiDffsUuGxkeBaWnvcAy5CWH+EAM+fvpE0BYpfWMU/rOLZzED8dyxvWCMDYA0dBvIgDGyZrALPgFd8P/fPwZ3Z2ewwMuv/xkYgfR/BvzR++8fRJ7l569fDH///mPYuXc/WEDP1B6ighFVQ0xVI4ShbgCm/v/9iwjEf38QLnj67hfYdjT9DP+hGmHgD8iA/4wQA/4COcD0AJbQ0LdiYCQicf7985eBkRHqApBpVmZGYIk3X//CFcmoqEMYNy9ghoG7MyigIAaA/PPqEyxC/oI9wAgkG7ILoAHKiBYs/xn+AcMNJqY0Z9Giu+QmZcYBz40AAQYAXyBzO2qih9QAAAAASUVORK5CYII=";
    this.checked=false;
  }
}
this.togglechrome();

Код "инициализации"

Выделить код

Код:

document.getElementById("main-window").setAttribute('hidechrome','true');
 
window.restore();
window.maximize();
window.restore();

this.drag= function() {
  if(window["bDragW"] )
    return;
var Ctrls = ['PersonalToolbar', 'toolbar-menubar','nav-bar', 'status-bar', 'FindToolbar'];
  try {
     Components.utils.import('resource://gre/modules/WindowDraggingUtils.jsm');

     for(i=0; i<Ctrls.length; i++) {
       ctrlW = document.getElementById(Ctrls[i]);
       if (!ctrlW) continue;
       try {
           var bDragW = new WindowDraggingElement(ctrlW, window);
           DragW.mouseDownCheck=function(e) {
             return  WinState==0
           }
      }catch(e){}
      }
   }catch(e){}
window["bDragW"]=true
}
this.drag()


p.s.: код кнопки основан на коде 4-ой кнопки из этого поста + доработан автором foxiFrame basic'а (добавленный код - одна из функций которое выполняет это же дополнение, возможно вам стоит посмотреть и его (там больше функций))
p.p.s.: если использовать эту кнопку в сочетании с
1. 4-ой кнопкой этого поста (Меню делает иконкой)
+ 2. кнопку из этого поста (титульник страницы на панель)
+ 3. первые 3 кнопки из этого поста (скрыть, развернуть и закрыть окно) (их ещё бы можно переделать сделав их похожими на дефолтные виндовые (как в вин висте и вин 7)
= то можно разместить все эти кнопки на 1 панели меню: лого кнопку - слева (клик по ней - вызывает меню), потом титульник страницы, потом изменяемый интервал, потом кнопки "свернуть", "развернуть" и "закрыть" (они будут справа) - то получится хорошо сэкономить место на экране, за счёт убирания виндовой рамки и тайтлбара + функциональность вся остаётся, и можно ещё на свободное место перетащить другие КБ кнопки (между тайтлбаром и кнопками свернуть-развернуть-закрыть).

Minimize/Maximize/Close window (win7 aero style) (Firefox)
Тут уже эти кнопки были выложены (на 1-ой странице), но мне захотелось прикрутить к ним другие иконки, стилизованные под win7 aero, разница только в этом.

Свернуть окно (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%u0421%u0432%u0435%u0440%u043D%u0443%u0442%u044C%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3Evar%20cssStr%20%3D%20%26lt%3B%21%5BCDATA%5B%0A%09%09%25button%25%20%7B%0A%09%09%09list-style-image%3A%20url%28%22data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAAB0AAAATCAYAAABsmQZ/AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAfdEVYdFNvZnR3YXJlAFBhaW50Lk5FVCA/Pz8/Pz8gMy41LjXnygNhAAAESUlEQVRIS42VWU9bVxDH7zcCRYqagmNsyEPf2+apjRS1SgMGQonAJixp8G5sMAQCMSGRmtKGhMV4t8GkEomxDV4wUOOVpdBHvsK/c861ARM/cKWfZs42/zn3nntGODw6QmPTHZye/oed3T3s7l2wR/7e3j+XKI2V5zFbBRangp1Sm+zR0TGEsujJ6akoWuaS+Hkil8a/CFxNiIldgYseHLKdNoGLVpnE+yhgqjRWtuLcXeqv5HIMNvfquCh6cAh5YxPfdiyeQJxgtkw8nqxox2KV45fb8QStTySrQ3HYWKF4AKFQPIRM1oh8oYhQKHLBRjU/jM8hkVCZjTA2GOEIwoxIFBGC2TKRyCb1MaLI5fIQ8vkipFI5HZZ9+P1BkUA1u0pjlQQCqwisrGKFsRrEanANQcbaR6yd8zf5F7AzI2QyBdTXNyCZ3MHysreE58J3sD7WZrgJF8fhIJxuOF0euAiPxwuv1wefzw+fP0AJlgis0CYYlDCxvZ2CkE7nceuWFJubSczN2b/g/Xs7RJY4c3OLZBfw4cMi5ueXML+whMVFO+z2ZSw7nJSEi5Jww+X2wM3xilBSbo+PnxlhdzeHmzclFMSJzs4BPH78FF1dIt3dvxHMH8CP99rw7d0H1+L+Tx0wGEwwmoZg4phLWCg5B4Tt7Qxu3KjD7OwSWlpUUBCtCrIKJVpblWhrUxFKLnbdh81Vq7XQaHTQaHXQ6vTQcQxYoDcjJBP7qK39Gm/fLuCXB11obu4muigBEYWimxLp4qJnZ2fXoiyqZqIaPUerNXC4aCKeRk3NLRJdwsOHSrQ0K0mktEu2U6K1tZuLnpycXAsuqmEiRtqlkXZogl7PGMICfX8hkUijtuYrvHvnpNfYj/ZHfXjE6OjDr50X/HBPca3vyQTv/9wBrcECvXEYBuMIYeUYTVYs2V30epNpfpAW5t3o6dFDqdRAqWKooSLb06NGzxMNVGRVqkHqf0b+IJ70qtHbr0XfgA5PnxkxqB6CVs9ERmEyj2OIMFsmYBl+QUye43D6IaRS+5DLv6H/zg+zeYoOwAh9fEIjWi3ztcPUFhlUmzkarQUa3TB0erYLUYgFt47aMPZ8BmPjM3g+8RrjL95wJkp4fWsQ1tejdHA60N7eQf9WELbpWb7IOjqNEcI6RjDf+hKWkSke2Mwhn7WtUzTPhtHxVxiffINJ2++Ymv4DL1/NwjbzJ6Zf/wUbwSwj+PETBPasr4cgl92hk9rOr7NYLEX3ZOyccDhGd+sWQhtRunej+PQ5Ugn1hTY26a6lNdEEoltJbDJi20QKW0TZMp+LsodVk/7eAXz/3V00yhspCYJbORUEORqkMty+LYVEIqFrU4K6uvoK6qlfQuNSmtfQIONrWCGRUYyrnIsyJ53O4Pj4XxEqdQxW8o6o5rISWCwWkc8XeKXIZnOcTCaLTDaLbC6HHI2xalUoHPASVqQKVmTrrvA/8KJW0ZMmlNcAAAAASUVORK5CYII%3D%22%29%20%21important%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-moz-box-shadow%3A%20none%20%21important%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%20background%3A%20none%20%21important%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%20border%3A%200%20%21important%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%20padding%3A%200%20%21important%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%20margin%3A%200%20%21important%3B%0A%09%09%7D%0A%09%09%25button%25%3Ahover%2C%20%25button%25%3A-moz-window-inactive%3Ahover%20%7B%0A%09%09%09list-style-image%3A%20url%28%22data%3Aimage/png%3Bbase64%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%3D%22%29%20%21important%3B%0A%09%09%7D%0A%09%09%25button%25%3Aactive%20%7B%0A%09%09%09list-style-image%3A%20url%28%22data%3Aimage/png%3Bbase64%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%3D%3D%22%29%20%21important%3B%0A%09%09%7D%0A%09%09%25button%25%3A-moz-window-inactive%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%20list-style-image%3A%20url%28%22data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAAB0AAAATCAYAAABsmQZ/AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAOwgAADsIBFShKgAAAAB90RVh0U29mdHdhcmUAUGFpbnQuTkVUID8/Pz8/PyAzLjUuNefKA2EAAASTSURBVEhLjZV5UxNZFMX7E47LUDJWqSMuKMqIUzpCICFrJ+mkO+l0d/aQhcgeCGZYZFVAdGY+h3/7Fc6c+xLQ8i+66lf3Lfe9c959L6AdHBxiZOQh1jrryDnegDwjyeXhDKJte8hmXeIo7KyNnO0wx4GTc5nnwnUL8PIl5AtlFIoVFEs1lMpzKFXqKFcbirX1TWg7u+9x5+49LCwuI21mFKaZhWkRxnSaYxekLKQEw2RMI50yYaYtWFxjWRlkLBu2MkLzNOB6RWXCowmvWKWRKpZX16H1elsYHr6NZmseup6EHjcQj6eQSBqKuPT1FPRYkpHzjHosoZB+Ii4YSDJXzKRpQsxaVg4ZqQwrZEu13CJyXgkLS2vQ1je6GBq6hVqtjmAoQqIIhWIIh/UBbLMvYyHOhUkkHOFchJHtSBTRiI5oVFemxWQimaIJE0mpSpoVyziwaCCT9dB+uwRN7vL69ZusfxXTM7OKGX8Q/kCoj7T9gzgTQoBjfcIIzIYxq4jQkEBTykACURqIqYqlYaQySjzF8jfnF6GtrHbwy7Ub6vInp/yY8s0QiX74pmcZA31kjvimA5ieDtJcH3+gb1AZoQGpVijEKkXiiESTSlxPiLhF8SwazTa05RURvUnRCt5M+vGGApMCBd6QyamAihcoAyLMUytYBWGGJ/fL6YMRzPIqghQO8dR9YQM6y50wLMw1KLra2cC1G0PqeU/yBBdM+dgWZMw3+32cfZ8IUWCGZRX8FPIHoxQkFAwMBEMsczhmUDSFOE+aMDKYk5N2uj3cHBpGpdbkBlESo+MoN/2Oj+1791/g11ujV+L3BxOXYrGEyVNaiLO0RtpGQ+50s7eDW7/dQb21gFA0pQhGjJ9IKrGrfpKr81RxI8sXbMMwHT4iF6mMh1Z7GdrW7j5u37mP1sIq3eQUOpP1pK2IJTMK2ejbt29XQnJT2bzCzBZg5YrIOCVknTLaix1o7w8+4O7IYyytbsLkpGmX+LsqcEEB6cFCcSgbff369UpIbtatwPZIvoJcvgYnPwe3WMcidbTDj2cYeTyGTncbTqEOuzCnkmyvhqxXHVDBo6evrnSfIjg69hfcUh1eqXFJvtxEodzCSqcH7ePZFzwd/xMb73ZQmmsjX2mRJvKlJlwmuuUGHG4gmwiqzbFLmOtJfrWFwgW1ebbbiqJivh9rbaxtbEE7/fIfXr72ocsH1WivotxYoDhhQoEU1QY0UqVTFX+G8yr3LdcRiUL9BzheFji2xoqyvOdIWg6K/PfT/fs9WrzoanMJlcYiF4qBtyiyAkqc5OlaomoPojInOSIqa0h5wEVfTIhohxXV5NvdP8b4xGveYxGdzW1s7R2jt3OAd9v76G7tKTMbPWGX7KiF6xLJOsf69HO6gqz5iU32hXfbe31R+Q6OT9Xv6BX/FD55PoEnzybweOwF+YOPaBwPnzzHg1HhGR+eMPYD/bH+/HOV+0gxrtbKHheMsn0pqoQ/nOHk/F98/PQP5IF9OP2C45PPODo5h7xymRdz+0cn2Dv8AekfcZxzB8dnOGSe5B+dfFIcC6fnAz7jf77nyyVS9zSnAAAAAElFTkSuQmCC%22%29%20%21important%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%5D%5D%26gt%3B%0A%09.toString%28%29%0A%09.replace%28/%25button%25/g%2C%20%22%23%22%20+%20this.id%29%3B%0Avar%20cssURI%20%3D%20this._cssURI%20%3D%20makeURI%28%20//%20chrome%3A//global/content/contentAreaUtils.js%0A%09%22data%3Atext/css%2C%22%0A%09+%20encodeURIComponent%28cssStr%29%0A%29%3B%0Athis.setSheet%20%3D%20function%28cssURI%2C%20addFlag%29%20%7B%0A%09var%20sss%20%3D%20Components.classes%5B%22@mozilla.org/content/style-sheet-service%3B1%22%5D%0A%09%09.getService%28Components.interfaces.nsIStyleSheetService%29%3B%0A%09if%28sss.sheetRegistered%28cssURI%2C%20sss.USER_SHEET%29%20%26amp%3B%26amp%3B%20%21addFlag%29%0A%09%09sss.unregisterSheet%28cssURI%2C%20sss.USER_SHEET%29%3B%0A%09if%28addFlag%29%0A%09%09sss.loadAndRegisterSheet%28cssURI%2C%20sss.USER_SHEET%29%3B%0A%7D%0Athis.setSheet%28cssURI%2C%20true%29%3B%0Athis.onDestroy%20%3D%20function%28%29%20%7B%0A%09this.setSheet%28this._cssURI%2C%20false%29%3B%0A%7D%3B%20%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5Bwindow.minimize%28%29%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

Код

Выделить код

Код:

window.minimize()

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

Выделить код

Код:

var cssStr = <![CDATA[
        %button% {
            list-style-image: url("1pic") !important;
                        -moz-box-shadow: none !important;
                        background: none !important;
                        border: 0 !important;
                        padding: 0 !important;
                        margin: 0 !important;
        }
        %button%:hover, %button%:-moz-window-inactive:hover {
            list-style-image: url("2pic") !important;
        }
        %button%:active {
            list-style-image: url("3pic") !important;
        }
        %button%:-moz-window-inactive {
                        list-style-image: url("4pic") !important;
                }
    ]]>
    .toString()
    .replace(/%button%/g, "#" + this.id);
var cssURI = this._cssURI = makeURI( // chrome://global/content/contentAreaUtils.js
    "data:text/css,"
    + encodeURIComponent(cssStr)
);
this.setSheet = function(cssURI, addFlag) {
    var sss = Components.classes["@mozilla.org/content/style-sheet-service;1"]
        .getService(Components.interfaces.nsIStyleSheetService);
    if(sss.sheetRegistered(cssURI, sss.USER_SHEET) && !addFlag)
        sss.unregisterSheet(cssURI, sss.USER_SHEET);
    if(addFlag)
        sss.loadAndRegisterSheet(cssURI, sss.USER_SHEET);
}
this.setSheet(cssURI, true);
this.onDestroy = function() {
    this.setSheet(this._cssURI, false);
};

Развернуть/восстановить окно (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%u0420%u0430%u0437%u0432%u0435%u0440%u043D%u0443%u0442%u044C%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%3Evar%20sId%20%3D%20%22__customButtonsStyle__%22%20+%20this.id%3B%20//%20Unique%20style%20%22id%22%0Avar%20cssStr%20%3D%20%26lt%3B%26gt%3B%26lt%3B%21%5BCDATA%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%25button%25%20%7B%0A%09%09%09list-style-image%3A%20url%28%22data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABsAAAATCAIAAADu5eFvAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAfdEVYdFNvZnR3YXJlAFBhaW50Lk5FVCA/Pz8/Pz8gMy41LjXnygNhAAADeElEQVQ4T43U/1PaZhwH8Pxd3beiod2Prnrurnfbfpp33bqz7qQKCCEQQgJJgCRY+aKzTrer3e1LLVrYJu02IgExAsGVL4Far3abv+w/2D4JGpzecXvudbmH557PO58nR4LgXu/JyUm1qhpqF9XUmlo3qWpdrZsO1PqBvnIGth2+PEI8Hvws8VIc3OMssV+pJxpZPUaceUs90eVy/6X3eDmupseZif3WzMTT7vqHqNUPD48Qh8N5/Pr13p7SUzbAhKQio+MTA5B0VNmvKErfnrKvdbrIzMzsq1fHBblYKABZnxgg65+BAzYUiyW5R9avBbnUbLWRO1NT3e6L7e3cBf8nMZd7tq17asj9vJ2rqSoyOTmpaZ1s9scMyPSZiZcP3msd1rPZn/SqbPaJYSuTUSr7yO3bn7Va7XR66wIo+NsYMNl6kjGdX09vbj5Ob26k0xvpx4/SGz+kN0rlXWR0dGxnpxAMMueEYA6VfxgDJgzDmc6vB2iapCmCIr0U4Q34wPq3D5GRkffyecnvD5BkAK5+goQrQZBQeWSMy6c213Ev7sY9LtzlxJ123D6L21fXVyHxRi+RIP4DgjoDB2xwezAnNmfHHDPYzF3MZsOmVx7cR0ZujOWlAkkGDTTpp/0GKGgOHLDB5XFD4qzbftdts7mnp7HPlx8sw3MclySZoiMUHdZR4QDFgVuf2gb/wyduTWE4Poe7HJgTerTpPdpW1u8jY+M3ZbnMcvdYbp7h5kNsjAGMGAKsyLAiywGeYaMMGwkxXDDEUEEmQNF+MgDPHPf73D5szutyep0On2PtmzXk/ZsflcvV2PwXQIwtCeISLywK4iKvSwliUhATQizBiwu8EOMFMcoL4WiEC4cZlgsxDBWiA0GSoAiC8vpo78Pv15EPPvxYqRwkF78GidRXidRaHCTBaiL1pWElnlqOp5biyeRCMr6QWIjdi4nzohATeDEaFcJhnuWiISYSZKL0o83vkImJT46P/yztVs7ZL5aAUtxVSrq94m65WCrBuyvDu1uUCnJ+p5CXdn7VSb/kpWf5/NPfeqQcYr32ruG61dqHWq+j6DWDFbUCFEWHhlHLMPrO8PDbQ0NvAYvlTd1V8MYpy5WrlitIp/ui0wFdAN8iTQOdM1pbA+221mprjVb791b7oNlSm80aaDSqjeenms+rTfjZqIB/AUBg8dI6uaMqAAAAAElFTkSuQmCC%22%29%20%21important%3B%0A%09%09%09-moz-box-shadow%3A%20none%20%21important%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%20background%3A%20none%20%21important%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%20border%3A%200%20%21important%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%20padding%3A%200%20%21important%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%20margin%3A%200%20%21important%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%09%25button%25%3Ahover%2C%20%25button%25%3A-moz-window-inactive%3Ahover%20%7B%0A%09%09%09list-style-image%3A%20url%28%22data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABsAAAATCAIAAADu5eFvAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAfdEVYdFNvZnR3YXJlAFBhaW50Lk5FVCA/Pz8/Pz8gMy41LjXnygNhAAAEV0lEQVQ4T61Sa0xadxy9n/Zhn7ZlbmnX2laxDgVBrTNK26Vdui9LmiVLmmVJF5M+nMV1VSuiDGNx6BSk+ACFaFVUVBAQlJdQUJha54OHl6eCFkTro6XOR0H3+k8716SJ2YeenPxz7vmf37n3l1woo0ZgD/zWORHonlwUmpZEphUJvCqF16T2Z3JnUOkCfK5yv6Tcvb6vgalwBvvtwT74aS+8CqYE5qXuqUWDdw26Wit+w43fsCRvuPHr2l6rP/jg0XzLmI83vtA+udhpWhJYV4iVjV9duXkIC2lNInhNYF3tMj3pmFxsH/eDBr17GbpSLTH5njUMergGT5NxrnnkceuYv208ALr+OhQg0GVa7pgI8MYWmkcfNw7PgYYBeBn6kiEc8axUKu10lZ2hcTG1s3WDs2zD3P9p5A776o3zdUOe6oezTK2brnZIJhegy3ShcWaZKp0uk9kqFPZKpZsx4GbqPAeNry++/+nAZw15a3RehmaWpnZXKhxl/baecR/0BU2gdy6RhFNkkblEar0ns5fJHT+r3WDg+R6AqDHO7bN6aP5Vv0o7U6meKVM4KX12itRKFls6RuagpAJutWr66C3e8e87TuZ0xhAEcSQJliwDk0/2AMR5un6f5+iDr/opVFVSiRxFksQWiKJy+JG3O65xdRD2bkOV3PLu9ab3M1s+xPOO3eFHEYQfE8Vg0r+H17c+8NEl8jiSNJogjMzpPoLnRWS2XmVrIGw+BzS+d+MBeD6a3XY8ryuK2IMgS0GR91CAAJqijCPLogk9J3K7P8K3RWTyvmVroUQCl6GcjviuGbwkMod/giSOKpdHMdVgwH0oQCCOoYkrV8QWyU7lCU/9wD+Cb8to0EHJBE6tGj6e3X4S7FsojqYqYmrUiEb9pwX0w//wi3er0PWGhCoN6p4CWSiNAaV3Oq83GqAzBE79gA2R232aKI6nKpD3tSiuIZ4/huw1xSrNCK0VoYMRetsBYx7CyAErWmZGC6eS28aS2cZEmhZLUaKJUmS+GN86CqUUcLg6F6aoN7FUlczUJXN+SeJPJsksWI09YdCFGpmNG3cjJ2f2CTRwsEPuMzpHigJO7bGkt07gWMZ0mi6Nokwi9+d2/ArhyC2Nxvm0Ug2ONojjjpzlT6X1wWm6mdRhb8qUDwv7MY4AxvkvHQHgpJp86Y/mcQbvBbXrosj2WavpAmv0fIX+HFVLFE1Dl1tGBd6tetsyx7PK9gfpKxv5wS3c1ouYUOjY7k7E7zvv/LH79p8v+daeAM4HuzuR4fDp7dDZ9W3i6gYzsM6ef8pyrlAtQehSdd/nbE0KgRV/rRidRcHklGMK6Jii+5hiJqakJqG0DvVTHYr6H4EDfHCL/ZGZSKxKzKvA4KkJN0pQGaRP8usu1aogrnOjxrFJs29RbS+Kp0OF06E8a+i2OZxtCePN4VumMN60k2XZASfQWeZ/TuCDW5ABSZAvhkNglm7frnVscl2bfwMRUdfJvwX5CQAAAABJRU5ErkJggg%3D%3D%22%29%20%21important%3B%0A%0A%0A%09%09%7D%0A%09%09%25button%25%3Aactive%20%7B%0A%09%09%09list-style-image%3A%20url%28%22data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABsAAAATCAIAAADu5eFvAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAfdEVYdFNvZnR3YXJlAFBhaW50Lk5FVCA/Pz8/Pz8gMy41LjXnygNhAAAEaklEQVQ4T2PIn7vl1I2H/WsOTlh3cPKGQ9M2HZ2x+eisbSfm7jg1b+fphbvPANGi3WehaM/ZRUC0+yxQcP6u0/N2npqz/QRQPVDX5I2HgSZsPnGVIWvuViqbmDqb2iYmzNx88PLdhkU7mpbsbF22q2P5nq6V+3rXHsip7g4OS8OD8qp7Jq473Lf2YNeqfR0r9rYu2w00YeWB8wxRUzfuPHszf9r6wukbSmZuKp+zuXLe1tqF24Fm/ccLgAoal+ysW7ijav7WijlbSmdtBpoADH2G0InrNh2/Ete5NLFreUrvyvT+VVmT1uRNW0eMicUzNgGdkj15TfqE1UC9iV0rJq0/xBAyYe3Go5dj2hbFty9J7FqW0rMifcKqrKlr4SZiehzidKB43rQN2ZPXZkxYldK7Aqg3vn3pxLUHGPy7Vq7eeyawdEpQ2dSQymlh9XPDWxdE9C4FavgABkBG5NItkUu3Qkhk8eiepZFtCyPq54bVzAqpnB5cPrVr4TYG/YzWzunLuDXceDQ9+QwDBKwjBd2ShIOygTpfgAGQIVzSAkfI4uK+WWKO8SIWYUKGgXy6vrxaXpF5TQw6KQ1tUxazKNqzKTlxaHlxmQZzO8Tw+oBi+TEYYPoaLi7ongJ0AdAdPFpeHGpu7MrOoZm1DDqpTW1Tl7AqObKruHDq+XJZhXO7JfEE5wANuocXABUI+GQIOMTxmQbz6PhwqrtzqLiEZtUx6KY2t09bxq7qzqnjw20RzuOWwhOSz5tcDdRwCy8AmRhVKuCbyQ801DiYR9uHU8MzPKeZQTeluWvmSh4tX16TMD7HJH7/PP64Kv7iNvPscvwp3CK1RDi1Xji0RNg9Tcgqht8giFfHPyq/DWRiz+y1AkZhgraJwl7ZwpGVwrltws2ThabOE1y0hH/jar5dG/j2bISiXRv4N60WWrJUeOYCkfbpYsXdYvH1Yv6Fok5pwuYxwkZhscU9DHrJzf3zN4paJYi6ZokHl4knt4pXTRKfsEBs8UrRDRuE9+8QOrFL6NReCBI+sRsoIrpxg/iy1RJTFkk1zJDO7pKOqJHyLpCwTxO3TEismMRgmNnZt2SHpGOmlE+xdGSjTH6/TNsc6TkrpdZtlNyzU+LMQfFLR8SuHYUgIBsoIrl3l/T6TbIL1sh3L5Qvnyof3y4fUCnrlidtn5HSMIfBbfLOpdde9+w803vkUtfF2y13H+c9f2Xy/r3C18+SP78J//7B//cn199fEMT27zeQ5P/zU/jXd6lvXxQ/fDR9+Tr//tPWK/e6Tl3rPnip7sAdhogVp+0612omNsn55yrF12oU9mo1ztLpW6ozY63WvI3qi7eqLN+usGqnwsqd8it3Kq7cqbx8u9qirZrzNmnNWK81YbVW21L1qgUqeTNlkyZrFi+PXH+dYeaNz5Oufem+9rXl6ve6yz8qLv8ouvQj78LPnIs/sy/8zDoPRL8yL/4CkkB25gUQCRQHygLVAFUC1ddd+QHU233t26TrX2be/AIAOtNJcCPMEfcAAAAASUVORK5CYII%3D%22%29%20%21important%3B%0A%0A%09%09%7D%0A%09%09%25button%25%3A-moz-window-inactive%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%20list-style-image%3A%20url%28%22data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABsAAAATCAIAAADu5eFvAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAOwgAADsIBFShKgAAAAB90RVh0U29mdHdhcmUAUGFpbnQuTkVUID8/Pz8/PyAzLjUuNefKA2EAAAOASURBVDhPjZTbbts2GID1jgV2U2RZ29WZk9pODKfJ2qBDgcSWZUnUgaIo6uT4JCd14vrsxG6dQ5EUe4Rd7GY3u9wbbD8lI8tQwBjxgSB/kZ/In5SEvf2D8XRO3XCJlzQCm/m24xPmW9SzqG/ankFc3WIaZshwVN1WdaIgLCNTVg1AQZxavSUUdn8ejS8J9f8FRBREPqYetl2DMBBxl8lUw5F1W9ZIBVmSYkqKIcmaVEGSvKRaawj5wt5gNDWJ+0As4i6TMIMvykEmRaaj6BR0FUTKiiXKpijrYkUrSagkqWJMWVKDsCbkdgq9wVg3qY4djsVgUYblZrbfPPkutYL0q9elsloU5YRSjO8fC5lcvtsbIJ0gw4a1aCb3wrrA9ffKAgOORPVIlI9KQKVYkgDPD4WtzM55dwA5VnTC823QhP9nVA5L8mGpEiMdFSXX48bts25fhlPTuFQxaMKD8duNJ0tP1ngogjGBSxPjzll3wHWapei2YjgKHILBd/1XXKBR0aiE7DKyRBU/jhclrVhGRRGyqcTIHuTxVTZ//nG43LLpIOyomKnYhZl/xoUbdVpBXCoh8jhekg1+4gkVjl9tCJmd3W5/DJcDYbgoroY9jfjI8mHmH3H5dtcPcQluJbLgbgJyzHE9ErYL+/3RhUF8wwYCgwamA3UIot9XFhgAyYE7D8cIXxGgmbTR+iDkd98OxzPLCS1Wxew4pmaxGkz4bWWBAZrlA7rlGQD/Rlir3REK++9G08+2W+d4QCMhV3i3+oZn8wcmDTl2gG2fQ9z2SUd4/eaXyeXCCZqcEGgBNGjFEV5Tv8nf4daJ2wAst44ZUDOdKqYJsZF42GJR+4Ow9/b9dHbFwug/VKHbSnCCCNTJO2jQtP0m8ZpczWpcZ4fYDkzim5iZmLYgj/sH76fza/c4cqttxonVVehC3XKrrTjYdkLwRvEOIrDbXMqNBgkgiTp24c+g6aTRiLjx5u7X/niW0BvPe1CPoAFc9jkQnwP80Wj2ERjOuoOL8/6k0x2fng1OOr32abd9ch61O1F0KqQ2M6nNXEw2tZU0cql0dlmnsxub2Y2t3JLN3EaaP335U+ZFauvZj+n15xvf//Bybf3F2tqzp0/XAWFxe3d1e7+4vYc6aXx+1E2C11++JlwBt18XN/eL67v54svs083F7Gpy8WkyncFvezicDIaTfwBi5Z9t02GZKAAAAABJRU5ErkJggg%3D%3D%22%29%20%21important%3B%0A%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%20%20%20%20%20%3Aroot%5Bsizemode%3D%22maximized%22%5D%20%25button%25%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%20list-style-image%3A%20url%28%22data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABsAAAATCAMAAABWWYYKAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAMAUExURTw/OTw/Oj0/PD4/PTxAOTxAOj1BOz5BPUBAPkBBP0FBQEFCQUNDQkNDQ0JCREJDRU5OT05PUE9QUlBRUlFRVFJUWFVXXVNWZlpbYGJiZmtrbG1tbmdrc2lsd29vcGtteXV2dnl5enx8fX+AgH+IhoGBgYKDhoCEhIGEhYKEhoOEh4CGhYGGhoKGh4SEhoSEh4SGh4OGjoSFiIWFiYWGiYWGioeHi4eHjICIhoGIh4GIiIOIioGLiIKLiYKLioOKi4eIioWJjIeIjoWLjYeLj4aPjIaOjYePjoiIiomJi4iKi4iJj4iKjImKjYqKjoyMjoyOj4eJkoiKkIiKk4qLlIiPkIuPk4uMlIyNlYSQi4aQjIeRjomTj4iVjomVj4qTkYuXko2RlY+Rl4yUlI+Vl5CRmpCSmJGTmpKTm5KTnJGVmZOUnJOUnZOWnJSXnJWYnpeZn5aXoZaYoZiaoZiaoqqsrautrqqur62wsa60tLOztbS0tbS1trS1t7W2uLO5t7e4ubi5urm5vLm6vLy8vby9vr2+v76+wL6+wb/FwL/GwMDFwcHFw8DHwcHHw8PExcLGxcTExcbGxsXGx8TFyMXGyMbGycfHy8bIycfIysjJy8jKysnKy8jJzcnKzMnKzczMzczNzs3Nz83Ozs3Oz8vL0M7P0M7P0c3O09TXz9TYz9DR0tHS0tHS09LS1NLT1dPU1dTW0NbX0dfX09TY0NXZ0dbZ09jY1NjY1dnZ1tra19nZ2dvb2Nvb2dvb2tra29rb3Nvc29zc3d3e3+Hh4eHh4uHi4+Tk5eTk5+bm5urq6urq6/Pz8////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDTYekAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAfdEVYdFNvZnR3YXJlAFBhaW50Lk5FVCA/Pz8/Pz8gMy41LjXnygNhAAABsElEQVQoU2NQPb0aCNasWbN27dp169ZtQIBjDMpgudVQqXXrkeWUTkGlAsWhIHjDhvUgcJRB8eSCBQsXLlqyRPwsFIgvX7YMiJYdZlA4PnXq1BkzDGG6xM+Kz5kzCwQOMMgdbmlpbW1D6Dor3gEC7R0bGKQPNTQ0NDYiyzWDQFPTagap/VVV1TW14mfOgEwFkmfE6+rqaoFgMYPwJAcHD09f8VOnxAP8QeQpcT9fHx8fL58KBoF+NU09fRPx48fFPRxA5HFxAwMdTR1NzTIGwYlaWvpGJuJHjoDMBJJHxHV1NTXU1TVKGYSmGBubmpmLH4ICcXEZXR1tDW1toJzINCcnJ+8g8d1QIO5obaVraaGjYlnOIDo9JCQ8PEIe5ndZF2d7W1sbG1u7CgaxpampqZmZOTk52dkZ6WlJiWGh7m6uUZFR0ZUMEisKi4qKSkpKiouLC/LzcrNSkuNj4uJi4xLqGSRPzAWC+UAwb87smTOmTp7Q093Z2dXV2zeBgZ8PAnh5eXi4ubk4OZiZGBkZWFhY2dgZDoDB/v0H9+3ds2vXzh3bN2/auHHjylVbtm4DADma44ANPgZaAAAAAElFTkSuQmCC%22%29%20%21important%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%20%20%20%20%20%3Aroot%5Bsizemode%3D%22maximized%22%5D%20%25button%25%3Ahover%2C%20%3Aroot%5Bsizemode%3D%22maximized%22%5D%20%25button%25%3A-moz-window-inactive%3Ahover%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%20list-style-image%3A%20url%28%22data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABsAAAATCAIAAADu5eFvAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAfdEVYdFNvZnR3YXJlAFBhaW50Lk5FVCA/Pz8/Pz8gMy41LjXnygNhAAAEcElEQVQ4T62SWVCaVxiG/6te9KZpOjGZqok2Lrj+uMUlTpPptL3ptL3oTDrTTDKtrYlo61JxwV3BuOFOjGgVLW4sigrKoijGolbhBwREiKiIWAXFGOtS7XaENuNF6fSi77zzzTfPme8935k50Od19AXTi6659R6JiY5sMJGtPqW5X2npV+9wNNbhReBdrnaXo31uN+iBARzSWNlq66Bym6U0MxEzTbbRI92Y0Fuge/V9/3PiZ49ZjhKziS2f3Hnwj84htjjc8dN61rxxt2V6hTJjaJ81UiWmTmSDpthizFtA1h8OBI561TtMpYWmMHcjP3VITNTZNZAwpt2E7tSyEMNOw9hSo2ipeWK5RbxKmTakPmp0tJ39GlC75eYu6SZ1dr1t2tg6tdo0qSdPLPFVm9DHlYwp/VbZsKqcqyYKNFUjuvrxZ/++nT2xeXqN/MNqw8RK/fhS9aiuWrBYzlP3SY3QR0T6U90mvl9BGFCWDKlKhxcr+dr/ktgwuUIS6WuF+kqBroy7WDakJgwq6bMG6IMK2phmI4suzWbI8ljyggEVgaMGifs2nX/7S2LnVWNLxBFdGU9H4CwUDqoKWIpspqxDvAwFpZNruPNX4ijOCd9fTeq4jqWhcL1gwGwTaG6WjUaXC88TOw8v5gXjh+G8QR8c0yONfi2xAyR8QRZCMLaxgi1/Lab5YmzrJUzbm4kdblgaGDDZBJoQAj+0WHCe2DlcMOSby/bOZLml9jgndTnFUV6Pbb1L4kNobCORI7/w5XcXYymX49udU7rcMhhgwGDT+Ve/JHYeUMzzLeB4ZYFEmktS1xVMG0i4SxKAVzdVDs+/8aD1MqbdJbnTFcd0f8QBA3oHst9xG1uOejKOIvK9CWyPTNbVlG7Xr6lOmLb7DaNQcBq5jqd0SaBeS+p0y2S644c8anlgRutA4Oh6n8S7ewbVOun3WORXwfPJH/TK6HVP7nZNpMY0iaCQdHKDQP1Wco9nRq8PnoOqGvEli97JqHL0w28X1qH4Cv8BmR9dgm6fQpNEAWU8/3y2T1qvVyodQxFDoelksnAxEMeCi4aDqoTBjZNBnZKgATl6ZCFQpPUTP/Od0/lIz6rdgMAibYhwIWRoPowhC6f8GF4/fqNUEJo/GJjNSqbOQFE5lObJlfBCQWT5WBRZHNUhjWArI4S6cPFyqNSAVhlhjQleNJ1VmwG5gRgip1ciJ5be5i7cYihutc5F1z2NKuFHFHHTGXLow7Yp+vLBE/UWWW95vGYlmvfTdg9uHhx5Hh+7nJ5c+vXkwm+nr/5++srfBj0gTqcnrr8cex4eRe8dZFheVK8/J61YSJqtYrkVeq+W/X7DSFgayTcmNwBTBKeUwOkVcFY1nFcDF9QF4kn+BJJ/sa3aGkAAPzvNqUZnVMLflgTG4wO+yve9jwtLrX+3jgvVyLbKkW2CzJqH7OGQfazs5yTZQQJyGC87wiB/+aGtj5MePbTVOOkhBjnASPa/ke6lSK1pkm3c3GbunBE/u1o6u/wn4EzJPzPchgUAAAAASUVORK5CYII%3D%22%29%20%21important%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%20%20%20%20%20%3Aroot%5Bsizemode%3D%22maximized%22%5D%20%25button%25%3Aactive%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%20list-style-image%3A%20url%28%22data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABsAAAATCAIAAADu5eFvAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAfdEVYdFNvZnR3YXJlAFBhaW50Lk5FVCA/Pz8/Pz8gMy41LjXnygNhAAAEa0lEQVQ4T2PIn7vl1I2H/WsOTlh3cPKGQ9M2HZ2x+eisbSfm7jg1b+fphbvPANGi3WehaM/ZRUC0+yxQcP6u0/N2npqz/QRQPVDX5I2HgSZsPnGVIWvuViqbmDobp4lF9f3BYWlYUXFDP043JszcfPDy3YZFO5qW7Gxdtqtj+Z6ulft61x7oX3cIaNZ/HAAoNXnDkYnrDvetPdi1al/Hir2ty3YDTVh54DxD1NSNO8/ezJ+2vnD6hpKZm8rnbK6ctzWltA2X6yDWAMmWZXsal+ysW7ijav7WijlbSmdtBpoADH2G0InrNh2/Ete5NLFreUrvyvT+VVmT1uB3HcTEktmbi2dsAjole/Ka9AmrgXoTu1ZMWn+IIWTC2o1HL8e0LYpvX5LYtSylZ0X6hFXEmJg/a1PetA3Zk9dmTFiV0rsCqDe+fenEtQcY/LtWrt57JrB0SlDZ1JDKaWH1c8NbFwBN/AwGyH6Hi0DEoyeujO5ZGtm2MKJ+bljNrJDK6cHlU7sWbmPQz2jtnL6MW8ONR9OTzzBAwDpS0C0JqOEVGAAZwsXNwiUtyCIQcbGwfHHfLDHHeBGLMCHDQD5dX14tr8i8JgadlIa2KYtZFO3ZlJw4tLy4TIO5HWKAGp6CAZDBm1fPm9+ALAIRFwjMEnRPAboA6A4eLS8ONTd2ZefQzFoGndSmtqlLWJUc2VVcOPV8uazCucFufAgGyL6Gi0DEBcILBHwyBBzi+EyDeXR8ONXdOVRcQrPqGHRTm9unLWNXdefU8eG2COdxS+EJyQdquIsDQOwwTy3mz6wXiCoV8M3kBxpqHMyj7cOp4Rme08ygm9LcNXMlj5Yvr0kYn2MSv38ef1wVUM9NHAAoxTd9tkDnFKHKbuHUeuHQEmH3NCGrGH6DIF4d/6j8NpCJPbPXChiFCdomCntlC0dWCue2WWZW4Erh5jWNQkuWCs9cINI+Xay4Wyy+Xsy/UNQpTdg8RtgoLLa4h0Evubl//kZRqwRR1yzx4DLx5FbxqkniExaILV4pumGD8P4dQid2CZ3aC0HCJ3YDRUQ3bhBftlpiyiKphhnS2V3SETVS3gUS9mnilgmJFZMYDDM7+5bskHTMlPIplo5slMnvl2mbIz1npdS6jZJ7dkqcOSh+6YjYtaMQBGQDRST37pJev0l2wRr57oXy5VPl49vlAypl3fKk7TNSGuYwuE3eufTa656dZ3qPXOq6eLvl7uO8569M3r9X+PpZ8uc34d8/+P/+5Pr7C4LY/v0Gkvx/fgr/+i717Yvih4+mL1/n33/aeuVe16lr3Qcv1R24wxC+/KRd51rNxCY5/1yl+FqNwl6txlk6fUt1ZqzVmrdRffFWleXbFVbtVFi5U37lTsWVO5WXb1dbtFVz3iatGeu1JqzWaluqXrVAJW+mbNJkzeLl4WuvMky98q7v8oeOy5+aLn2pufit/OK3wovfc8//yLnwI+v8TwjKuIDOyL7wA6gGqLL84negLqBeoAn9lz9Mu/IeAMWpR92z3Hb3AAAAAElFTkSuQmCC%22%29%20%21important%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%20%20%20%20%20%3Aroot%5Bsizemode%3D%22maximized%22%5D%20%25button%25%3A-moz-window-inactive%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%20list-style-image%3A%20url%28%22data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABsAAAATCAMAAABWWYYKAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAMAUExURVNWZmRlaGRlaWVmaWZnamdna2hoamhoa2lpbHN1f3t7f3R3gXV5gnd6hH19gH9/gX+Agn+Ag4CBg4CCg4CChIGChZeZnpiZnpianpqan5ucn5mboJqcoJucoZudopueopydoJycoZ2dop2eoZ6fop2eo52fpJ+gop6go5+gpJ6gpZ+hpqCgo6CgpKGhpaGipKKipaGipqGip6KkpqKkp6GjqKKkqKKkqaKlqqOmqKOmqaKmqqOmq6SlqKSlqaSmqKSmqaSmqqSnq6SnrKWoq6aorKWoraaprqeqrKeqraaqrqeqr6iprKiqramqrqiqr6qsr6ersKirsKmssKuusa6usq+ws66wtK+xtbCxs7CxtLGytLKytbKytrGzt7S0trS0t7K0uLS2ubS3ura4vLe5vbi6vbq6vri8vri8v7y8v729wL6/wb6/wr7Awr/Aw8DAw8DAxMHCxcTEx9nZ2d3d3eHh4eXl5erq6vPz8////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACTgHqwAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAfdEVYdFNvZnR3YXJlAFBhaW50Lk5FVCA/Pz8/Pz8gMy41LjXnygNhAAABj0lEQVQoU03Q+1vSUBzH8Y86M7WLmAoEGcQlm6FswhmYjJ25YYJCcVFDpxSlpWzgJW5/vWc8M3v/8N0Pr+d7dp6DxXY6IRIiKVTT94vFymN/sGClNxIkTTXtM6MvVZbDv0e2kVY0/RmcnjMrl7+WzvHKIonEpqrvYuiEERUKv+BiRqj2bwtDMCoUdnI/MWdliEz1x60hyiWb9CYzklG03P9Wyud3cttqEy4zm1X0IgYD+ypsDlBkS9vq1g/2P0WhzPp91Cr27COf09Wt1KfvmLcUqjLr9VCt2rMHXaOplCSNTKbaPrpd+0w2u6CbkpQUxVPMm7Isq3v46wTMkmRSWOX5I8y1iJiRKe6cIAoCz/Mr0eghXl7F19bEzOzDi03HPkRYb5ff1PDiMhpZicUFQYgL8fVYJBwKBP1+v8/nq2Dm4l0wGAp/tHsfDgZee70ej8ftXloqYebWME4M46zRaJwZhnFcr387qLEODut4OjXJcdyTKTuOm5gYe2h8HDc313ajT6fTsUyz1TJNi9W+B4ppe7qJG0ieAAAAAElFTkSuQmCC%22%29%20%21important%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%5D%5D%26gt%3B%26lt%3B/%26gt%3B%0A%20%20%20%20.toString%28%29%0A%20%20%20%20.replace%28/%25button%25/g%2C%20%22%23%22%20+%20this.id%29%3B%0A%0Afunction%20sheet%28cssStr%2C%20removeFlag%29%20%7B%0A%20%20%20%20var%20cc%20%3D%20Components.classes%3B%0A%20%20%20%20var%20sss%20%3D%20cc%5B%22@mozilla.org/content/style-sheet-service%3B1%22%5D%0A%20%20%20%20%20%20%20%20.getService%28Components.interfaces.nsIStyleSheetService%29%3B%0A%20%20%20%20var%20ios%20%3D%20cc%5B%22@mozilla.org/network/io-service%3B1%22%5D%0A%20%20%20%20%20%20%20%20.getService%28Components.interfaces.nsIIOService%29%3B%0A%20%20%20%20var%20data%20%3D%20%22data%3Atext/css%2C%22%20+%20encodeURIComponent%28cssStr%29%3B%0A%20%20%20%20var%20uri%20%3D%20ios.newURI%28data%2C%20null%2C%20null%29%3B%0A%20%20%20%20if%28sss.sheetRegistered%28uri%2C%20sss.USER_SHEET%29%29%0A%20%20%20%20%20%20%20%20sss.unregisterSheet%28uri%2C%20sss.USER_SHEET%29%3B%0A%20%20%20%20if%28removeFlag%29%0A%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20sss.loadAndRegisterSheet%28uri%2C%20sss.USER_SHEET%29%3B%0A%20%20%20%20window%5BsId%5D%20%3D%20cssStr%3B%0A%7D%0Aif%28%21%28sId%20in%20window%29%29%0A%20%20%20%20sheet%28cssStr%29%3B%0Aelse%20if%28window%5BsId%5D%20%21%3D%20cssStr%29%20%7B%0A%20%20%20%20sheet%28window%5BsId%5D%2C%20true%29%3B%0A%20%20%20%20sheet%28cssStr%29%3B%0A%7D%20%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5Bif%28window.windowState%20%3D%3D%201%29%0Awindow.restore%28%29%3B%0Aelse%20if%28window.windowState%20%3D%3D%203%29%0Awindow.maximize%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%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

Код

Выделить код

Код:

if(window.windowState == 1)
window.restore();
else if(window.windowState == 3)
window.maximize();

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

Выделить код

Код:

var sId = "__customButtonsStyle__" + this.id; // Unique style "id"
var cssStr = <><![CDATA[
                %button% {
            list-style-image: url("1pic") !important;
            -moz-box-shadow: none !important;
                        background: none !important;
                        border: 0 !important;
                        padding: 0 !important;
                        margin: 0 !important;

                }
        %button%:hover, %button%:-moz-window-inactive:hover {
            list-style-image: url("2pic") !important;


        }
        %button%:active {
            list-style-image: url("3pic") !important;

        }
        %button%:-moz-window-inactive {
                        list-style-image: url("4pic") !important;

                }
                :root[sizemode="maximized"] %button% {
                        list-style-image: url("5pic") !important;
                }
                :root[sizemode="maximized"] %button%:hover, :root[sizemode="maximized"] %button%:-moz-window-inactive:hover {
                        list-style-image: url("6pic) !important;
                }
                :root[sizemode="maximized"] %button%:active {
                        list-style-image: url("7pic") !important;
                }
                :root[sizemode="maximized"] %button%:-moz-window-inactive {
                        list-style-image: url("8pic") !important;
                }
    ]]></>
    .toString()
    .replace(/%button%/g, "#" + this.id);

function sheet(cssStr, removeFlag) {
    var cc = Components.classes;
    var sss = cc["@mozilla.org/content/style-sheet-service;1"]
        .getService(Components.interfaces.nsIStyleSheetService);
    var ios = cc["@mozilla.org/network/io-service;1"]
        .getService(Components.interfaces.nsIIOService);
    var data = "data:text/css," + encodeURIComponent(cssStr);
    var uri = ios.newURI(data, null, null);
    if(sss.sheetRegistered(uri, sss.USER_SHEET))
        sss.unregisterSheet(uri, sss.USER_SHEET);
    if(removeFlag)
        return;
    sss.loadAndRegisterSheet(uri, sss.USER_SHEET);
    window[sId] = cssStr;
}
if(!(sId in window))
    sheet(cssStr);
else if(window[sId] != cssStr) {
    sheet(window[sId], true);
    sheet(cssStr);
}


Закрыть Окно/Firefox (ЛКМ/СКМ) (Firefox)
ЛКМ Закрывает Окно
СКМ Закрывает 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%u0417%u0430%u043A%u0440%u044B%u0442%u044C%20%u041E%u043A%u043D%u043E%5CFirefox%20%28%u041B%u041A%u041C%5C%u0421%u041A%u041C%29%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3Ethis.onclick%20%3D%20function%28event%29%20%7B%0A%20%20%20%20if%28event.button%20%3D%3D%200%29%20%7B%0A%20%20%20%20%20%20%20%20window.close%28%29%3B%0A%20%20%20%20%7D%0A%20%20%20%20else%20if%28event.button%20%3D%3D%201%29%20%7B%0A%20%20%20%20%20%20%20%20goQuitApplication%28%29%3B%0A%20%20%20%20%7D%0A%20%20%20%20else%20if%28event.button%20%3D%3D%202%20%26amp%3B%26amp%3B%20%21event.ctrlKey%20%26amp%3B%26amp%3B%20%21event.shiftKey%20%26amp%3B%26amp%3B%20%21event.altKey%20%26amp%3B%26amp%3B%20%21event.metaKey%29%20%7B%0A%20%20%20%20%20%20%20%20%0A%20%20%20%20%7D%0A%7D%3B%0Avar%20cssStr%20%3D%20%26lt%3B%21%5BCDATA%5B%0A%09%09%25button%25%20%7B%0A%09%09%09list-style-image%3A%20url%28%22data%3Aimage/png%3Bbase64%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%22%29%20%21important%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-moz-box-shadow%3A%20none%20%21important%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%20background%3A%20none%20%21important%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%20border%3A%200%20%21important%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%20padding%3A%200%20%21important%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%20margin%3A%200%20%21important%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%09%25button%25%3Ahover%2C%20%25button%25%3A-moz-window-inactive%3Ahover%20%7B%0A%09%09%09list-style-image%3A%20url%28%22data%3Aimage/png%3Bbase64%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%3D%22%29%20%21important%3B%0A%09%09%7D%0A%09%09%25button%25%3Aactive%20%7B%0A%09%09%09list-style-image%3A%20url%28%22data%3Aimage/png%3Bbase64%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%22%29%20%21important%3B%0A%09%09%7D%0A%09%09%25button%25%3A-moz-window-inactive%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%20list-style-image%3A%20url%28%22data%3Aimage/png%3Bbase64%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%3D%3D%22%29%20%21important%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%5D%5D%26gt%3B%0A%09.toString%28%29%0A%09.replace%28/%25button%25/g%2C%20%22%23%22%20+%20this.id%29%3B%0Avar%20cssURI%20%3D%20this._cssURI%20%3D%20makeURI%28%20//%20chrome%3A//global/content/contentAreaUtils.js%0A%09%22data%3Atext/css%2C%22%0A%09+%20encodeURIComponent%28cssStr%29%0A%29%3B%0Athis.setSheet%20%3D%20function%28cssURI%2C%20addFlag%29%20%7B%0A%09var%20sss%20%3D%20Components.classes%5B%22@mozilla.org/content/style-sheet-service%3B1%22%5D%0A%09%09.getService%28Components.interfaces.nsIStyleSheetService%29%3B%0A%09if%28sss.sheetRegistered%28cssURI%2C%20sss.USER_SHEET%29%20%26amp%3B%26amp%3B%20%21addFlag%29%0A%09%09sss.unregisterSheet%28cssURI%2C%20sss.USER_SHEET%29%3B%0A%09if%28addFlag%29%0A%09%09sss.loadAndRegisterSheet%28cssURI%2C%20sss.USER_SHEET%29%3B%0A%7D%0Athis.setSheet%28cssURI%2C%20true%29%3B%0Athis.onDestroy%20%3D%20function%28%29%20%7B%0A%09this.setSheet%28this._cssURI%2C%20false%29%3B%0A%7D%3B%20%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.onclick = function(event) {
    if(event.button == 0) {
        window.close();
    }
    else if(event.button == 1) {
        goQuitApplication();
    }
    else if(event.button == 2 && !event.ctrlKey && !event.shiftKey && !event.altKey && !event.metaKey) {
        
    }
};
var cssStr = <![CDATA[
        %button% {
            list-style-image: url("1pic") !important;
                        -moz-box-shadow: none !important;
                        background: none !important;
                        border: 0 !important;
                        padding: 0 !important;
                        margin: 0 !important;
                }
        %button%:hover, %button%:-moz-window-inactive:hover {
            list-style-image: url("2pic") !important;
        }
        %button%:active {
            list-style-image: url("3pic") !important;
        }
        %button%:-moz-window-inactive {
                        list-style-image: url("4pic") !important;
                }
    ]]>
    .toString()
    .replace(/%button%/g, "#" + this.id);
var cssURI = this._cssURI = makeURI( // chrome://global/content/contentAreaUtils.js
    "data:text/css,"
    + encodeURIComponent(cssStr)
);
this.setSheet = function(cssURI, addFlag) {
    var sss = Components.classes["@mozilla.org/content/style-sheet-service;1"]
        .getService(Components.interfaces.nsIStyleSheetService);
    if(sss.sheetRegistered(cssURI, sss.USER_SHEET) && !addFlag)
        sss.unregisterSheet(cssURI, sss.USER_SHEET);
    if(addFlag)
        sss.loadAndRegisterSheet(cssURI, sss.USER_SHEET);
}
this.setSheet(cssURI, true);
this.onDestroy = function() {
    this.setSheet(this._cssURI, false);
};


Код кнопок был взят с предыдущей страницы этого топика + часть кода была доработана Infocatcher-ом, а картинки были сделаны мной (украдены скриншотами из винды).

Кнопка сокрытия/показа нативного Windows тайтлаба находится тут.

Вставка символа (Firefox 1 — Firefox 19). Более новая версия кнопки — здесь.
Авторы: Anton, Infocatcher.
Позволяет выбирать различные специальные символы из выпадающего списка и вставлять их в любые поля ввода (обсуждение кнопки).

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

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3E%u0412%u0441%u0442%u0430%u0432%u043A%u0430%20%u0441%u0438%u043C%u0432%u043E%u043B%u0430%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAABBklEQVRIie3TvyvFURzG8RfXpMggmZAyqTswGYWFbP4AkkEWkc2MktWsDCaDQRlMVovFIIuIgRSKQX4N389wh28393zHe586nfo8n/O8zzmdQ0N1qxZ0/aOvN3pr1i6u0F2lZwAP2E4BlPGMS4zjGO94xSEmcYcb9KQAYBgv+MU3znGBn6jdoz81HNrwiCcMVdRHZae5RqkIYE620/kcbz28sSKAnQjpy/FGwlsuAtiIkMEcbyK8xSKA6QjZzPH2wysXAZRwiy+soB2d2IrwsyLhsBRBHzFXjrcAz6SGz8re+x46sIYj2SdbkD3hU3zKrrJmreIAzVV6WnGCqRQANKUubKjO9AcmPDqZdHOMswAAAABJRU5ErkJggg%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%20menu%20%3D%20%3Cmenupopup%20xmlns%3D%22http%3A//www.mozilla.org/keymaster/gatekeeper/there.is.only.xul%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20oncommand%3D%22this.parentNode.handleMenuCommand%28event%29%22%3E%0A%20%20%20%20%3Ctoolbarbutton%20value%3D%22%A4%22/%3E%0A%20%20%20%20%3Ctoolbarbutton%20value%3D%22%A6%22/%3E%0A%20%20%20%20%3Ctoolbarbutton%20value%3D%22%A7%22/%3E%0A%20%20%20%20%3Ctoolbarbutton%20value%3D%22%A9%22/%3E%0A%20%20%20%20%3Ctoolbarbutton%20value%3D%22%AB%22/%3E%0A%20%20%20%20%3Ctoolbarbutton%20value%3D%22%BB%22/%3E%0A%20%20%20%20%3Ctoolbarbutton%20value%3D%22%AC%22/%3E%0A%20%20%20%20%3Ctoolbarbutton%20value%3D%22%AE%22/%3E%0A%20%20%20%20%3Ctoolbarbutton%20value%3D%22%B0%22/%3E%0A%20%20%20%20%3Ctoolbarbutton%20value%3D%22%B1%22/%3E%0A%20%20%20%20%3Ctoolbarbutton%20value%3D%22%B5%22/%3E%0A%20%20%20%20%3Ctoolbarbutton%20value%3D%22%B6%22/%3E%0A%20%20%20%20%3Ctoolbarbutton%20value%3D%22%u2014%22/%3E%0A%20%20%20%20%3Ctoolbarbutton%20value%3D%22%u2018%22/%3E%0A%20%20%20%20%3Ctoolbarbutton%20value%3D%22%u2019%22/%3E%0A%20%20%20%20%3Ctoolbarbutton%20value%3D%22%u201C%22/%3E%0A%20%20%20%20%3Ctoolbarbutton%20value%3D%22%u201D%22/%3E%0A%20%20%20%20%3Ctoolbarbutton%20value%3D%22%u2022%22/%3E%0A%20%20%20%20%3Ctoolbarbutton%20value%3D%22%u2030%22/%3E%0A%20%20%20%20%3Ctoolbarbutton%20value%3D%22%u2039%22/%3E%0A%20%20%20%20%3Ctoolbarbutton%20value%3D%22%u203A%22/%3E%0A%20%20%20%20%3Ctoolbarbutton%20value%3D%22%u2122%22/%3E%0A%3C/menupopup%3E%3B%0A%0Amenu%20%3D%20custombuttonsUtils.%20makeXML%20%28menu%29%3B%0Athis.%20appendChild%20%28menu%29%3B%0Athis.%20value%20%3D%20menu.%20firstChild.%20getAttribute%20%28%22value%22%29%3B%0A%0Athis.%20makePNG%20%3D%20function%20%28text%2C%20height%29%0A%7B%0A%20%20%20%20var%20h%20%3D%20height%3B%0A%20%20%20%20var%20cw%20%3D%2024%2C%20ch%20%3D%2024%3B%0A%20%20%20%20var%20canvas%20%3D%20%3Ccanvas%20xmlns%3D%22http%3A//www.w3.org/1999/xhtml%22%20width%3D%7Bcw%7D%20height%3D%7Bch%7D%20style%3D%22display%3Anone%3B%22%3E%3C/canvas%3E%3B%0A%20%20%20%20cw%20-%3D%202%3B%0A%20%20%20%20ch%20-%3D%202%3B%0A%20%20%20%20canvas%20%3D%20custombuttonsUtils.%20makeXML%20%28canvas%29%3B%0A%20%20%20%20this.%20appendChild%20%28canvas%29%3B%0A%20%20%20%20var%20ctxt%20%3D%20canvas.%20getContext%20%28%222d%22%29%3B%0A%20%20%20%20ctxt.%20clearRect%20%280%2C%200%2C%20cw%2C%20ch%29%3B%0A%20%20%20%20ctxt.%20font%20%3D%20h%20+%20%22pt%20times%20bold%22%0A%20%20%20%20var%20m%20%3D%20ctxt.%20measureText%20%28text%29%3B%0A%20%20%20%20m%20%3D%20%28cw%20-%20m.%20width%29%20/%202.0%3B%0A%20%20%20%20h%20%3D%20ch%20-%20%28ch%20-%20h%29%20/%202.0%3B%0A%20%20%20%20ctxt.%20fillText%20%28text%2C%20m%2C%20h%29%3B%0A%20%20%20%20var%20uri%20%3D%20canvas.%20toDataURL%20%28%22image/png%22%2C%20%22%22%29%3B%0A%20%20%20%20this.%20removeChild%20%28canvas%29%3B%0A%20%20%20%20return%20uri%3B%0A%7D%3B%0A%0Athis.%20image%20%3D%20this.%20makePNG%20%28this.%20value%2C%2016%29%3B%0A%0Avar%20mi%2C%20val%3B%0Afor%20%28var%20i%20%3D%200%3B%20i%20%3C%20menu.%20childNodes.%20length%3B%20i++%29%0A%7B%0A%20%20%20%20mi%20%3D%20menu.%20childNodes%20%5Bi%5D%3B%0A%20%20%20%20val%20%3D%20mi.%20getAttribute%20%28%22value%22%29%3B%0A%20%20%20%20val%20%3D%20this.%20makePNG%20%28val%2C%2012%29%3B%0A%20%20%20%20mi.%20setAttribute%20%28%22image%22%2C%20val%29%3B%0A%7D%0A%0Athis.%20insertText%20%3D%20function%20%28text%29%0A%7B%0A%20%20%20%20var%20command%20%3D%20%22cmd_insertText%22%3B%0A%20%20%20%20var%20controller%20%3D%20document.%20commandDispatcher.%20getControllerForCommand%20%28command%29%3B%0A%20%20%20%20if%20%28controller%20%26%26%20controller.%20isCommandEnabled%20%28command%29%29%0A%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20controller%20%3D%20controller.%20QueryInterface%20%28Components.%20interfaces.%20nsICommandController%29%3B%0A%20%20%20%20%20%20%20%20var%20params%20%3D%20Components.%20classes%20%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%20createInstance%20%28Components.%20interfaces.%20nsICommandParams%29%3B%0A%20%20%20%20%20%20%20%20params.%20setStringValue%20%28%22state_data%22%2C%20text%29%3B%0A%20%20%20%20%20%20%20%20controller.%20doCommandWithParams%20%28command%2C%20params%29%3B%0A%20%20%20%20%7D%0A%7D%3B%0A%0Athis.%20handleMenuCommand%20%3D%20function%20%28event%29%0A%7B%0A%20%20%20%20event.%20stopPropagation%20%28%29%3B%0A%20%20%20%20var%20mi%20%3D%20event.%20originalTarget%3B%0A%20%20%20%20var%20text%20%3D%20mi.%20getAttribute%20%28%22value%22%29%3B%0A%20%20%20%20this.%20image%20%3D%20this.%20makePNG%20%28text%2C%2016%29%3B%0A%20%20%20%20this.%20value%20%3D%20text%3B%0A%20%20%20%20this.%20insertText%20%28text%29%3B%0A%7D%3B%0A%0Athis.%20type%20%3D%20%22menu-button%22%3B%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5Bthis.%20insertText%20%28this.%20value%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

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

Выделить код

Код:

var menu = <menupopup xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
              oncommand="this.parentNode.handleMenuCommand(event)">
    <toolbarbutton value="¤"/>
    <toolbarbutton value="¦"/>
    <toolbarbutton value="§"/>
    <toolbarbutton value="©"/>
    <toolbarbutton value="«"/>
    <toolbarbutton value="»"/>
    <toolbarbutton value="¬"/>
    <toolbarbutton value="®"/>
    <toolbarbutton value="°"/>
    <toolbarbutton value="±"/>
    <toolbarbutton value="µ"/>
    <toolbarbutton value="¶"/>
    <toolbarbutton value="—"/>
    <toolbarbutton value="‘"/>
    <toolbarbutton value="’"/>
    <toolbarbutton value="“"/>
    <toolbarbutton value="”"/>
    <toolbarbutton value="•"/>
    <toolbarbutton value="‰"/>
    <toolbarbutton value="‹"/>
    <toolbarbutton value="›"/>
    <toolbarbutton value="™"/>
</menupopup>;

menu = custombuttonsUtils. makeXML (menu);
this. appendChild (menu);
this. value = menu. firstChild. getAttribute ("value");

this. makePNG = function (text, height)
{
    var h = height;
    var cw = 24, ch = 24;
    var canvas = <canvas xmlns="http://www.w3.org/1999/xhtml" width={cw} height={ch} style="display:none;"></canvas>;
    cw -= 2;
    ch -= 2;
    canvas = custombuttonsUtils. makeXML (canvas);
    this. appendChild (canvas);
    var ctxt = canvas. getContext ("2d");
    ctxt. clearRect (0, 0, cw, ch);
    ctxt. font = h + "pt times bold"
    var m = ctxt. measureText (text);
    m = (cw - m. width) / 2.0;
    h = ch - (ch - h) / 2.0;
    ctxt. fillText (text, m, h);
    var uri = canvas. toDataURL ("image/png", "");
    this. removeChild (canvas);
    return uri;
};

this. image = this. makePNG (this. value, 16);

var mi, val;
for (var i = 0; i < menu. childNodes. length; i++)
{
    mi = menu. childNodes [i];
    val = mi. getAttribute ("value");
    val = this. makePNG (val, 12);
    mi. setAttribute ("image", val);
}

this. insertText = function (text)
{
    var command = "cmd_insertText";
    var controller = document. commandDispatcher. getControllerForCommand (command);
    if (controller && controller. isCommandEnabled (command))
    {
            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 (command, params);
    }
};

this. handleMenuCommand = function (event)
{
    event. stopPropagation ();
    var mi = event. originalTarget;
    var text = mi. getAttribute ("value");
    this. image = this. makePNG (text, 16);
    this. value = text;
    this. insertText (text);
};

this. type = "menu-button";

Код:

Выделить код

Код:

this. insertText (this. value);

GetChkView Addons(Firefox)
ЛКМ => Открыть базу дополнений в интернете (те https://addons.mozilla.org/ru/firefox/)
СКМ => Проверить обновление дополнений
(не работает в FF 7 )
ПКМ => Открыть установленные дополнения
Shift+ПКМ => Меню настройки кнопки. Будьте аккуратны в использовании модификаторов, см. обработчик this.oncontextmenu

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

Выделить код

Код:

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%3EGetChkView%20Addons%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/gif%3Bbase64%2CR0lGODlhJQAaAPcAAAAAAAA7KAA/ND0+ACM5LAA5UjFSBztEJwpXQwxVWwVJZBRTfiFPXzdLVj5+W38dEnooB3oxAE5aBlpmFEdkKmhWAmdAI2Z2N3h4MkNCSEFbQkRXaExhdlptZ1N/cnNYR3FdXHlqSXB/VmZiYWZ2dnRyYypugTh7pUFvkVh1iFR8lmF7kj+1K1WTM06oMWmCGnqbJmy3NVKWR12Dbk6kQGSDRX+XQWyBcG+edGSxWH6nb367bXu7dUnKNmPENlnORWrRUnbDZ3TkXXrmZUmKl1aHi1yImk+Ot0uTokiQtleMoVyOs1WWrFictmODgmeOnXeHgnCLlH2RiGWVpGKas3iXpWq/hG2yn3Osg3OivVuaw12oymaqxmy41XapyHmxy3iz0XDBh3jDmH/K6pUWCoooE4A3AIk1GpYlAIQxLqkVAaktBJBTJ5ZQNpt7FoV2NZF2J71MHKZSLrNXJrhXNq5rFLRiKLloML13Ibt2PZNbUoxpSY1uXJ50W4l0YZ1qZ6l2SaJ+Xrt2RbN6cMQ6FstHCM1XFttXDNdaG99dI9xpFsllI8dmO8hxK8lyNddpJNVyJONZKOFlGOFmIOJ9Ncx6QNV/QoOcCouUJ5aNKJmKNauCKLykILGqNru6Lo+GQ42SXJqMTYWDboKDfpWNZp6PcpS6S4mvdqaMRKqTTaqVVrabS6GNdbqMar6TcbS0VLupebSwaY7fX4nJc47vdarKTaHkfdCpKNSsM+G7Ks2DS8mPX9CAQcyefdWyTtG0VsmuZ8ygfeGffOnGPOXSLv7XMd7KacPueubPRe3EW/bXRvvSU+7Ua+jwd4KYm5iKgYSds421iI2npo6zuaGhlaGxvre7xJDEhY3ri5LjhpronJv8i5jzlLb+mq7ioo7CzY7M24TG4I7W7o/U85jM4pDR5Zvf9KTY7dubgMCwjMS3lNa0m8yzqOqyieizo9LDnN3MrtfFtd3RuOjGvcXO08ndwdXOxN3cytvb29Tj0OXHxeHYyeXZ1fLMwwAAAAAAACH5BAEAAP8ALAAAAAAlABoAAAj/AP8JHEiwoMGDCBMehJZiRYoq1egpnHgQxRIv5M6ByZKiwSh7FBPGi2eNgwovX76UMzduY5QSIdSFPNirT4YNzpxJqwJO3BguVJyQAvZr1UyC8QQJ4vOMVSlRUr412dIlXJEDb5gxU5Xu6L91dihZquQozx5q0750WcuFAQEMxnytkkcRn8BgjRTpVbSIjR8oU7hsGaxlighNuJK9qytwF6S9eu+4gmKkSZITC44oufHp1jJY/Gbqerz3ka5AJKYQUaCggIkiGmINW6ZqX8h2vCA/ctSqxBMmSBIICIDAAYVXypShinfbkV5JhtBA+EDCiBIiV8SEscLDRidlw1DB/wspbNFeNGjOgEjB3gMWbdyw2cLEqViuVHQpopvzSBGiNWvQoccIHcyAgwxAbLONC7V4QgwyodwTkjtyLCKJJIUUYggjgFywQxBB0CIiLUDEcEkzoEhIUT9txHGhJIccsoYZEnTTzTYiDiEEELTEcEwN9cw0yBqJvOhfBAPM0kI2tAwxBBA/COFDDEFcM9M8Z8SByIWKPNIIHBMY0EKTQED5Q5lAzHLUIGWsEQkiiEyiCB6bZPICiVD2oCcLaXqlRxlkELKGhnW4kQkMspT5g54/nKmmnw+QoYYaaFRgSgtoxhBDo0DkkIOVXv0zSBpkkAGBBLOU6YILLbTgAhBBeDATTagC8cPOH2lYYICZrJ5yzas80FoQP/qwU4MMNNAggw75RCODDLMKG1I+0labUEAAOw%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*/%0A%0A//%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20%u0431%u0430%u0437%u0443%20%u0434%u043E%u043F%u043E%u043B%u043D%u0435%u043D%u0438%u0439%20%u0432%20%u0438%u043D%u0442%u0435%u0440%u043D%u0435%u0442%u0435%0Afunction%20lbMouse%28%29%7B%0AgetBrowser%20%28%29.%20selectedTab%20%3D%20getBrowser%20%28%29.%20addTab%20%28%22https%3A//addons.mozilla.org/ru/firefox/%22%29%0A%7D%3B%0A%0A//%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20%u0443%u0441%u0442%u0430%u043D%u043E%u0432%u043B%u0435%u043D%u043D%u044B%u0435%20%u0434%u043E%u043F%u043E%u043B%u043D%u0435%u043D%u0438%u044F%0Afunction%20rbMouse%28%29%7B%0Atry%7B%20BrowserOpenAddonsMgr%28%29%3B%20%7D%20catch%28e%29%20%7B%20BrowserOpenExtensions%28%27extensions%27%29%3B%20%7D%0A%7D%3B%0A%0A//%u041F%u0440%u043E%u0432%u0435%u0440%u0438%u0442%u044C%20%u043E%u0431%u043D%u043E%u0432%u043B%u0435%u043D%u0438%u0435%20%u0434%u043E%u043F%u043E%u043B%u043D%u0435%u043D%u0438%u0439%0Afunction%20mbMouse%28%29%7B%0AcheckForUpdates%28%29%3B%0Avar%20win%20%3D%20BrowserOpenAddonsMgr%20%28%29%3B%0A%0Avar%20doc%20%3D%20win.%20document%3B%0Acmd%20%3D%20doc.%20getElementById%20%28%22extensions-view%22%29%3B%0Aif%20%28%21cmd%29%0A%20%20%20%20win.%20addEventListener%20%28%22load%22%2C%20function%20%28event%29%20%7B%20setTimeout%20%28function%20%28%29%20%7B%20win.%20document.%20getElementById%20%28%22extensions-view%22%29.%20doCommand%20%28%29%3B%20%7D%2C%20200%29%3B%20%7D%2C%20false%29%3B%0Aelse%0A%20%20%20%20cmd.%20doCommand%20%28%29%3B%0A%09cmd2%20%3D%20doc.%20getElementById%20%28%22cmd_checkUpdatesAll%22%29%3B%0Aif%20%28%21cmd2%29%0A%20%20%20%20win.%20addEventListener%20%28%22load%22%2C%20function%20%28event%29%20%7B%20setTimeout%20%28function%20%28%29%20%7B%20win.%20document.%20getElementById%20%28%22cmd_checkUpdatesAll%22%29.%20doCommand%20%28%29%3B%20%7D%2C%20500%29%3B%20%7D%2C%20false%29%3B%0Aelse%0A%20%20%20%20cmd2.%20doCommand%20%28%29%3B%0A%7D%3B%0A%0Afunction%20BrowserOpenAddonsMgr%28aPane%29%0A%7B%0A%20%20const%20EMTYPE%20%3D%20%22Extension%3AManager%22%3B%0A%20%20var%20wm%20%3D%20Components.classes%5B%22@mozilla.org/appshell/window-mediator%3B1%22%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.getService%28Components.interfaces.nsIWindowMediator%29%3B%0A%20%20var%20theEM%20%3D%20wm.getMostRecentWindow%28EMTYPE%29%3B%0A%20%20if%20%28theEM%29%20%7B%0A%20%20%20%20theEM.focus%28%29%3B%0A%20%20%20%20return%20theEM%3B%0A%20%20%7D%0A%0A%20%20const%20EMURL%20%3D%20%22chrome%3A//mozapps/content/extensions/extensions.xul%22%3B%0A%20%20const%20EMFEATURES%20%3D%20%22chrome%2Cmenubar%2Cextra-chrome%2Ctoolbar%2Cdialog%3Dno%2Cresizable%22%3B%0A%20%20return%20window.openDialog%28EMURL%2C%20%22%22%2C%20EMFEATURES%29%3B%0A%7D%3B%0A%0Athis.tooltipText%20%3D%20%22Left%20%20%20%20%3D%3E%20%u0414%u043E%u043F%u043E%u043B%u043D%u0435%u043D%u0438%u044F%20%u0432%20%u0438%u043D%u0442%u0435%u0440%u043D%u0435%u0442%u0435%20%5CnMiddle%20%3D%3E%20%u041F%u0440%u043E%u0432%u0435%u0440%u0438%u0442%u044C%20%u043D%u0430%u043B%u0438%u0447%u0438%u0435%20%u043E%u0431%u043D%u043E%u0432%u043B%u0435%u043D%u0438%u0439%20%5CnRight%20%20%20%3D%3E%20%u0423%u0441%u0442%u0430%u043D%u043E%u0432%u043B%u0435%u043D%u043D%u044B%u0435%20%u0434%u043E%u043F%u043E%u043B%u043D%u0435%u043D%u0438%u044F%22%3B%0Athis.onclick%20%3D%20function%28event%29%20%7B%0A%20%20%20%20if%28event.button%20%3D%3D%200%29%20%7B%0A//%20%u0414%u0435%u0439%u0441%u0442%u0432%u0438%u0435%20%u043F%u0440%u0438%20%u043A%u043B%u0438%u043A%u0435%20%u041B%u041A%u041C%0AlbMouse%28%29%3B%0A%20%20%20%20%7D%0A%20%20%20%20else%20if%28event.button%20%3D%3D%201%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%0AmbMouse%28%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%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%0ArbMouse%28%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%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%0A/*%0Athis.setFlLDC%20%3D%20false%3B%0Athis.setAttribute%28%27onclick%27%2C%20%27gQuot%28event%2C%20this%29%27%29%3B%0Athis.setAttribute%28%27ondblclick%27%2C%20%27gQuot%28event%2C%20this%29%27%29%3B%0Athis.pause%20%3D%20function%20%28ms%29%7B%0Avar%20date%20%3D%20new%20Date%28%29%3B%0Avar%20curDate%20%3D%20null%3B%0Ado%20%7B%20curDate%20%3D%20new%20Date%28%29%3B%20%7D%0Awhile%28curDate-date%20%3C%20ms%29%3B%0A%7D%3B%0A%0A//%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20%u0443%u0441%u0442%u0430%u043D%u043E%u0432%u043B%u0435%u043D%u043D%u044B%u0435%20%u0434%u043E%u043F%u043E%u043B%u043D%u0435%u043D%u0438%u044F%0Athis.leftDclick%20%3D%20function%28event%29%20%7B%0Athis.setFlLDC%20%3D%20true%3B%0Atry%7B%20BrowserOpenAddonsMgr%28%29%3B%20%7D%20catch%28e%29%20%7B%20BrowserOpenExtensions%28%27extensions%27%29%3B%20%7D%0Athis.pause%20%281000%29%3B%0Athis.setFlLDC%20%3D%20false%3B%0A%7D%3B%0A*/%0A%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

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

Выделить код

Код:

/*Initialization Code*/

//Открыть базу дополнений в интернете
function lbMouse(){
getBrowser (). selectedTab = getBrowser (). addTab ("https://addons.mozilla.org/ru/firefox/")
};

//Открыть установленные дополнения
function rbMouse(){
try{ BrowserOpenAddonsMgr(); } catch(e) { BrowserOpenExtensions('extensions'); }
};

//Проверить обновление дополнений
function mbMouse(){
checkForUpdates();
var win = BrowserOpenAddonsMgr ();

var doc = win. document;
cmd = doc. getElementById ("extensions-view");
if (!cmd)
    win. addEventListener ("load", function (event) { setTimeout (function () { win. document. getElementById ("extensions-view"). doCommand (); }, 200); }, false);
else
    cmd. doCommand ();
    cmd2 = doc. getElementById ("cmd_checkUpdatesAll");
if (!cmd2)
    win. addEventListener ("load", function (event) { setTimeout (function () { win. document. getElementById ("cmd_checkUpdatesAll"). doCommand (); }, 500); }, false);
else
    cmd2. doCommand ();
};

function BrowserOpenAddonsMgr(aPane)
{
  const EMTYPE = "Extension:Manager";
  var wm = Components.classes["@mozilla.org/appshell/window-mediator;1"]
                     .getService(Components.interfaces.nsIWindowMediator);
  var theEM = wm.getMostRecentWindow(EMTYPE);
  if (theEM) {
    theEM.focus();
    return theEM;
  }

  const EMURL = "chrome://mozapps/content/extensions/extensions.xul";
  const EMFEATURES = "chrome,menubar,extra-chrome,toolbar,dialog=no,resizable";
  return window.openDialog(EMURL, "", EMFEATURES);
};

this.tooltipText = "Left    => Дополнения в интернете \nMiddle => Проверить наличие обновлений \nRight   => Установленные дополнения";
this.onclick = function(event) {
    if(event.button == 0) {
// Действие при клике ЛКМ
lbMouse();
    }
    else if(event.button == 1) {
        // Действие при клике СКМ
mbMouse();
    }
    else if(event.button == 2 && !event.ctrlKey && !event.shiftKey && !event.altKey && !event.metaKey) {
        // Действие при клике ПКМ без модификаторов
rbMouse();
    }
};
this.oncontextmenu = function(event) {
    if(event.button == 2 && !event.ctrlKey && !event.shiftKey && !event.altKey && !event.metaKey) {
        // Блокируем контекстное меню при клике ПКМ без модификаторов
        event.preventDefault();
        event.stopPropagation();
    }
};

/*
this.setFlLDC = false;
this.setAttribute('onclick', 'gQuot(event, this)');
this.setAttribute('ondblclick', 'gQuot(event, this)');
this.pause = function (ms){
var date = new Date();
var curDate = null;
do { curDate = new Date(); }
while(curDate-date < ms);
};

//Открыть установленные дополнения
this.leftDclick = function(event) {
this.setFlLDC = true;
try{ BrowserOpenAddonsMgr(); } catch(e) { BrowserOpenExtensions('extensions'); }
this.pause (1000);
this.setFlLDC = false;
};
*/

SaveSetOpenDocument(Firefox)
ЛКМ    => Сохранить как...
СКМ => Установить папку загрузки как текущую, те будет установлен путь который прописан в Настройках. За код спасибо  - Infocatcher
ПКМ   => Открыть файл
Shift+ПКМ => Меню настройки кнопки. Будьте аккуратны в использовании модификаторов, см. обработчик this.oncontextmenu

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

Выделить код

Код:

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%3ESaveSetOpenDocument%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%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%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*/%0A%0A//%u0421%u043E%u0445%u0440%u0430%u043D%u0438%u0442%u044C%20%u043A%u0430%u043A...%0Afunction%20lbMouse%28%29%7B%0AsaveDocument%28window.content.document%29%3B%0A%7D%3B%0A%0A//%u0423%u0441%u0442%u0430%u043D%u043E%u0432%u0438%u0442%u044C%20%u043F%u0430%u043F%u043A%u0443%20%u0437%u0430%u0433%u0440%u0443%u0437%u043A%u0438%20%u043A%u0430%u043A%20%u0442%u0435%u043A%u0443%u0449%u0443%u044E%0Afunction%20mbMouse%28%29%7B%0AApplication.prefs.setValue%28%22browser.download.lastDir%22%2C%20Application.prefs.getValue%28%22browser.download.dir%22%2C%20%22%22%29%29%3B%0A%7D%3B%20%20%20%20%20%20%20%20%0A%0A//%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20%u0444%u0430%u0439%u043B%0Afunction%20rbMouse%28%29%7B%0ABrowserOpenFileWindow%28%29%3B%0A%7D%3B%0A%0Athis.tooltipText%20%3D%20%22Left%20%20%20%20%3D%3E%20%u0421%u043E%u0445%u0440%u0430%u043D%u0438%u0442%u044C%20%u043A%u0430%u043A...%20%5CnMiddle%20%3D%3E%20%u0423%u0441%u0442%u0430%u043D%u043E%u0432%u0438%u0442%u044C%20%u043F%u0430%u043F%u043A%u0443%20%u0437%u0430%u0433%u0440%u0443%u0437%u043A%u0438%20%u043A%u0430%u043A%20%u0442%u0435%u043A%u0443%u0449%u0443%u044E%20%5CnRight%20%20%20%3D%3E%20%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20%u0444%u0430%u0439%u043B%22%3B%0Athis.onclick%20%3D%20function%28event%29%20%7B%0A%20%20%20%20if%28event.button%20%3D%3D%200%29%20%7B%0A//%20%u0414%u0435%u0439%u0441%u0442%u0432%u0438%u0435%20%u043F%u0440%u0438%20%u043A%u043B%u0438%u043A%u0435%20%u041B%u041A%u041C%0AlbMouse%28%29%3B%0A%20%20%20%20%7D%0A%20%20%20%20else%20if%28event.button%20%3D%3D%201%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%0AmbMouse%28%29%3B%20%20%20%20%20%20%20%20%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%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%0ArbMouse%28%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%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%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

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

Выделить код

Код:

/*Initialization Code*/

//Сохранить как...
function lbMouse(){
saveDocument(window.content.document);
};

//Установить папку загрузки как текущую
function mbMouse(){
Application.prefs.setValue("browser.download.lastDir", Application.prefs.getValue("browser.download.dir", ""));
};        

//Открыть файл
function rbMouse(){
BrowserOpenFileWindow();
};

this.tooltipText = "Left    => Сохранить как... \nMiddle => Установить папку загрузки как текущую \nRight   => Открыть файл";
this.onclick = function(event) {
    if(event.button == 0) {
// Действие при клике ЛКМ
lbMouse();
    }
    else if(event.button == 1) {
        // Действие при клике СКМ
mbMouse();        
    }
    else if(event.button == 2 && !event.ctrlKey && !event.shiftKey && !event.altKey && !event.metaKey) {
        // Действие при клике ПКМ без модификаторов
rbMouse();
    }
};
this.oncontextmenu = function(event) {
    if(event.button == 2 && !event.ctrlKey && !event.shiftKey && !event.altKey && !event.metaKey) {
        // Блокируем контекстное меню при клике ПКМ без модификаторов
        event.preventDefault();
        event.stopPropagation();
    }
};

ToolsBookmark (Firefox)
ЛКМ    => Добавить в закладки текущую страницу (с выбором куда добавлять)
СКМ => Скрыть/Показать панель закладок (при запуске браузера в состоянии ON)
ПКМ   => Открыть менеджер закладок
Shift+ПКМ => Меню настройки кнопки. Будьте аккуратны в использовании модификаторов, см. обработчик this.oncontextmenu

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

Выделить код

Код:

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%3EToolsBookmark%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//%u0414%u043E%u0431%u0430%u0432%u0438%u0442%u044C%20%u0432%20%u0437%u0430%u043A%u043B%u0430%u0434%u043A%u0438%20%u0442%u0435%u043A%u0443%u0449%u0443%u044E%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u0443%0Afunction%20lbMouse%28%29%7B%0Atry%20%7BPlacesCommandHook.bookmarkCurrentPage%28true%2C%20PlacesUtils.bookmarksMenuFolderId%29%3B%20%7D%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20catch%28e%29%20%7B%20addBookmarkAs%28document.getElementById%28%27content%27%29%29%3B%20%7D%0A%7D%3B%0A%0A//%u0421%u043A%u0440%u044B%u0442%u044C/%u041F%u043E%u043A%u0430%u0437%u0430%u0442%u044C%20%u043F%u0430%u043D%u0435%u043B%u044C%20%u0437%u0430%u043A%u043B%u0430%u0434%u043E%u043A%0Afunction%20mbMouse%28%29%7B%0Aconst%20ptId%20%3D%20%22PersonalToolbar%22%3B%0Avar%20pt%20%3D%20document.getElementById%28ptId%29%3B%0Avar%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%0Apt.setAttribute%28pt_hideAttr%2C%20pt.getAttribute%28pt_hideAttr%29%20%21%3D%20%22true%22%29%3B%0Adocument.persist%28ptId%2C%20pt_hideAttr%29%3B%0A%7D%3B%0A%0A//%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20%u043C%u0435%u043D%u0435%u0434%u0436%u0435%u0440%20%u0437%u0430%u043A%u043B%u0430%u0434%u043E%u043A%0Afunction%20rbMouse%28%29%7B%0Atry%20%7BPlacesCommandHook.showPlacesOrganizer%28%27AllBookmarks%27%29%3B%20%7D%0A%20%20%20%20%20%20%20%20%20%20catch%28e%29%20%7BtoOpenWindowByType%28%27bookmarks%3Amanager%27%2C%20%27chrome%3A//browser/content/bookmarks/bookmarksManager.xul%27%29%3B%20%7D%0A%7D%3B%0A%0A//%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20%u0438%u0437%u043D%u0430%u0447%u0430%u043B%u044C%u043D%u043E%0Aconst%20ptId%20%3D%20%22PersonalToolbar%22%3B%0Avar%20pt%20%3D%20document.getElementById%28ptId%29%3B%0Avar%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%0Apt.setAttribute%28pt_hideAttr%2C%20%22false%22%29%3B%0Adocument.persist%28ptId%2C%20pt_hideAttr%29%3B%0A%0Athis.tooltipText%20%3D%20%22Left%20%20%20%20%3D%3E%20%u0414%u043E%u0431%u0430%u0432%u0438%u0442%u044C%20%u0432%20%u0437%u0430%u043A%u043B%u0430%u0434%u043A%u0438%20%u0442%u0435%u043A%u0443%u0449%u0443%u044E%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u0443%20%5CnMiddle%20%3D%3E%20%u0421%u043A%u0440%u044B%u0442%u044C/%u041F%u043E%u043A%u0430%u0437%u0430%u0442%u044C%20%u043F%u0430%u043D%u0435%u043B%u044C%20%u0437%u0430%u043A%u043B%u0430%u0434%u043E%u043A%20%5CnRight%20%20%20%3D%3E%20%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20%u043C%u0435%u043D%u0435%u0434%u0436%u0435%u0440%20%u0437%u0430%u043A%u043B%u0430%u0434%u043E%u043A%22%3B%0A%0Athis.onclick%20%3D%20function%28event%29%20%7B%0A%20%20%20%20if%28event.button%20%3D%3D%200%29%20%7B%0A//%20%u0414%u0435%u0439%u0441%u0442%u0432%u0438%u0435%20%u043F%u0440%u0438%20%u043A%u043B%u0438%u043A%u0435%20%u041B%u041A%u041C%0AlbMouse%28%29%3B%0A%20%20%20%20%7D%0A%20%20%20%20else%20if%28event.button%20%3D%3D%201%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%0AmbMouse%28%29%3B%20%20%20%20%20%20%20%20%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%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%0ArbMouse%28%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%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%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

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

Выделить код

Код:

/*Initialization Code*/

//Добавить в закладки текущую страницу
function lbMouse(){
try {PlacesCommandHook.bookmarkCurrentPage(true, PlacesUtils.bookmarksMenuFolderId); } 
               catch(e) { addBookmarkAs(document.getElementById('content')); }
};

//Скрыть/Показать панель закладок
function mbMouse(){
const ptId = "PersonalToolbar";
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);
};

//Открыть менеджер закладок
function rbMouse(){
try {PlacesCommandHook.showPlacesOrganizer('AllBookmarks'); }
          catch(e) {toOpenWindowByType('bookmarks:manager', 'chrome://browser/content/bookmarks/bookmarksManager.xul'); }
};

//Открыть изначально
const ptId = "PersonalToolbar";
var pt = document.getElementById(ptId);
var pt_hideAttr = pt.getAttribute("type") == "menubar" ? "autohide" : "collapsed";
pt.setAttribute(pt_hideAttr, "false");
document.persist(ptId, pt_hideAttr);

this.tooltipText = "Left    => Добавить в закладки текущую страницу \nMiddle => Скрыть/Показать панель закладок \nRight   => Открыть менеджер закладок";

this.onclick = function(event) {
    if(event.button == 0) {
// Действие при клике ЛКМ
lbMouse();
    }
    else if(event.button == 1) {
        // Действие при клике СКМ
mbMouse();        
    }
    else if(event.button == 2 && !event.ctrlKey && !event.shiftKey && !event.altKey && !event.metaKey) {
        // Действие при клике ПКМ без модификаторов
rbMouse();
    }
};
this.oncontextmenu = function(event) {
    if(event.button == 2 && !event.ctrlKey && !event.shiftKey && !event.altKey && !event.metaKey) {
        // Блокируем контекстное меню при клике ПКМ без модификаторов
        event.preventDefault();
        event.stopPropagation();
    }
};

RestartHideQuit(Firefox 20)
ЛКМ    => Перезагрузить Mozilla FireFox
СКМ => В разработке (правка для FF 20) Показать/скрыть панель меню
ПКМ   => Выйти из Mozilla FireFox
Shift+ПКМ => Меню настройки кнопки. Будьте аккуратны в использовании модификаторов, см. обработчик this.oncontextmenu

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

Выделить код

Код:

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%3ERestartHideQuit%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%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%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*/%0A//%u0423%u0431%u0438%u0440%u0430%u0435%u043C%20%20%u0425%u0440%u043E%u043C-%u0437%u0430%u0433%u043E%u043B%u043E%u0432%u043E%u043A%0A/*%20%u0421%u043D%u044F%u0442%u044C%20%u043A%u043E%u043C%u043C%u0435%u0442%u0430%u0440%u0438%u0438%20%u0435%u0441%u043B%u0438%20%u0445%u043E%u0442%u0438%u043C%20%u0432%u044B%u043A%u043B%u044E%u0447%u0438%u0442%u044C%20%u0425%u0440%u043E%u043C.%0Adocument.getElementById%28%22main-window%22%29.setAttribute%28%27hidechrome%27%2C%27true%27%29%3B%0Awindow.restore%28%29%3B%0Awindow.maximize%28%29%3B%0Awindow.restore%28%29%3B%0A*/%0A%0A//%u0421%u043A%u0440%u044B%u0442%u044C%20%u0438%u0437%u043D%u0430%u0447%u0430%u043B%u044C%u043D%u043E%20%u043F%u0430%u043D%u0435%u043B%u044C%20%u043C%u0435%u043D%u044E%20%20%20%20%20%20%20%20%0Aconst%20tbId%20%3D%20%22toolbar-menubar%22%3B%0Avar%20tb%20%3D%20document.getElementById%28tbId%29%3B%0Avar%20tb_hideAttr%20%3D%20tb.getAttribute%28%22type%22%29%20%3D%3D%20%22menubar%22%20%3F%20%22autohide%22%20%3A%20%22collapsed%22%3B%0Atb.setAttribute%28tb_hideAttr%2C%20%22true%22%29%3B%0Adocument.persist%28tbId%2C%20tb_hideAttr%29%3B%0A%0Athis.tooltipText%20%3D%20%22Left%20%20%20%20%3D%3E%20%u041F%u0435%u0440%u0435%u0437%u0430%u0433%u0440%u0443%u0437%u0438%u0442%u044C%20Mozilla%20FireFox%20%5CnMiddle%20%3D%3E%20%u041F%u043E%u043A%u0430%u0437%u0430%u0442%u044C/%u0441%u043A%u0440%u044B%u0442%u044C%20%u043F%u0430%u043D%u0435%u043B%u044C%20%u043C%u0435%u043D%u044E%20%5CnRight%20%20%20%3D%3E%20%u0412%u044B%u0439%u0442%u0438%20%u0438%u0437%20Mozilla%20FireFox%22%3B%0A%0Athis.onclick%20%3D%20function%28event%29%20%7B%0A%20%20%20%20if%28event.button%20%3D%3D%200%29%20%7B%0A//%20%u0414%u0435%u0439%u0441%u0442%u0432%u0438%u0435%20%u043F%u0440%u0438%20%u043A%u043B%u0438%u043A%u0435%20%u041B%u041A%u041C%0A%20%20var%20appStartup%20%3D%20Components.classes%5B%22@mozilla.org/toolkit/app-startup%3B1%22%5D%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.getService%28Components.interfaces.nsIAppStartup%29%3B%0A%20%20appStartup.quit%28appStartup.eForceQuit%20%7C%20appStartup.eRestart%29%3B%0A%20%20%20%20%7D%0A%20%20%20%20else%20if%28event.button%20%3D%3D%201%29%20%7B%0A//%20%u0414%u0435%u0439%u0441%u0442%u0432%u0438%u0435%20%u043F%u0440%u0438%20%u043A%u043B%u0438%u043A%u0435%20%u0421%u041A%u041C%0A//%20%u041F%u043E%u043A%u0430%u0437%u0430%u0442%u044C/%u0441%u043A%u0440%u044B%u0442%u044C%20%u043F%u0430%u043D%u0435%u043B%u044C%20%u043C%u0435%u043D%u044E%0Aconst%20tbId%20%3D%20%22toolbar-menubar%22%3B%0Avar%20tb%20%3D%20document.getElementById%28tbId%29%3B%0Avar%20tb_hideAttr%20%3D%20tb.getAttribute%28%22type%22%29%20%3D%3D%20%22menubar%22%20%3F%20%22autohide%22%20%3A%20%22collapsed%22%3B%0Atb.setAttribute%28tb_hideAttr%2C%20tb.getAttribute%28tb_hideAttr%29%20%21%3D%20%22true%22%29%3B%0Adocument.persist%28tbId%2C%20tb_hideAttr%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%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%0AgoQuitApplication%28%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%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%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    => Перезагрузить Mozilla FireFox \nMiddle => В разработке (Показать/скрыть панель меню) \nRight   => Выйти из Mozilla FireFox";

this.onclick = function(event) {
    if(event.button == 0) {
// Действие при клике ЛКМ
  var appStartup = Components.classes["@mozilla.org/toolkit/app-startup;1"]
                             .getService(Components.interfaces.nsIAppStartup);
  appStartup.quit(appStartup.eForceQuit | appStartup.eRestart);
    }
    else if(event.button == 1) {
// Действие при клике СКМ
// Показать/скрыть панель меню
 
    }
    else if(event.button == 2 && !event.ctrlKey && !event.shiftKey && !event.altKey && !event.metaKey) {
        // Действие при клике ПКМ без модификаторов
goQuitApplication();
    }
};
this.oncontextmenu = function(event) {
    if(event.button == 2 && !event.ctrlKey && !event.shiftKey && !event.altKey && !event.metaKey) {
        // Блокируем контекстное меню при клике ПКМ без модификаторов
        event.preventDefault();
        event.stopPropagation();
    }
};

UpDownCenterPage(Firefox) Работает в FF7 и выше (Gecko 6.0)
Left    => Вверх/Вниз по странице
DLeft => Центрирование страницы
ПКМ => Меню настройки кнопки

Заменена на Page Navigation с большим функционалом и упрощена.

Подключиться к Интернету (только Windows) (Firefox, Thunderbird)

скрытый текст
Ссылка:

Выделить код

Код:

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%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%5B/*Initialization%20Code*/%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5Bvar%20credentials%20%3D%20%5B%22ConnectionName%22%2C%20%22Login%22%2C%20%22Password%22%5D%3B%0A%0Avar%20vbs%20%3D%20Components.classes%5B%22@mozilla.org/file/directory_service%3B1%22%5D%0A%09%09%09%09%09.getService%28Components.interfaces.nsIProperties%29%0A%09%09%09%09%09.get%28%22TmpD%22%2C%20Components.interfaces.nsIFile%29%3B%0A%0Avbs.append%28%22rasdial.vbs%22%29%3B%0A%0Alet%20stream%20%3D%20Components.classes%5B%22@mozilla.org/network/file-output-stream%3B1%22%5D%0A%09%09%09%09%09.createInstance%28Components.interfaces.nsIFileOutputStream%29%3B%0Astream.init%28vbs%2C%20-1%2C%20-1%2C%200%29%3B%0Alet%20converter%20%3D%20Components.classes%5B%22@mozilla.org/intl/converter-output-stream%3B1%22%5D%0A%09%09%09%09%09.createInstance%28Components.interfaces.nsIConverterOutputStream%29%3B%0Aconverter.init%28stream%2C%20%22UTF-8%22%2C%200%2C%200%29%3B%0Aconverter.writeString%0A%09%28%0A%09%22CreateObject%28%5C%22Wscript.Shell%5C%22%29.Run%20%5C%22rasdial%20%22%20+%0A%09credentials.join%28%22%20%22%29%20+%0A%09%22%5C%22%20%2C%200%2C%20True%22%0A%09%29%3B%20%0Aconverter.close%28%29%3B%0A%0Avar%20wcscript%20%3D%20Components.classes%5B%22@mozilla.org/file/local%3B1%22%5D%0A%09%09%09%09%09.createInstance%28Components.interfaces.nsILocalFile%29%3B%0Awcscript.initWithPath%28%22C%3A%5C%5CWINDOWS%5C%5Csystem32%5C%5Cwscript.exe%22%29%3B%20%0A%0Avar%20process%20%3D%20Components.classes%5B%22@mozilla.org/process/util%3B1%22%5D%0A%09%09%09%09%09.createInstance%28Components.interfaces.nsIProcess%29%3B%0Aprocess.init%28wcscript%29%3B%20%0Aprocess.run%28false%2C%20%5Bvbs.path%5D%2C%201%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

Собственно код:

Выделить код

Код:

var credentials = ["ConnectionName", "Login", "Password"];

var vbs = Components.classes["@mozilla.org/file/directory_service;1"]
                    .getService(Components.interfaces.nsIProperties)
                    .get("TmpD", Components.interfaces.nsIFile);

vbs.append("rasdial.vbs");

let stream = Components.classes["@mozilla.org/network/file-output-stream;1"]
                    .createInstance(Components.interfaces.nsIFileOutputStream);
stream.init(vbs, -1, -1, 0);
let converter = Components.classes["@mozilla.org/intl/converter-output-stream;1"]
                    .createInstance(Components.interfaces.nsIConverterOutputStream);
converter.init(stream, "UTF-8", 0, 0);
converter.writeString
    (
    "CreateObject(\"Wscript.Shell\").Run \"rasdial " +
    credentials.join(" ") +
    "\" , 0, True"
    ); 
converter.close();

var wcscript = Components.classes["@mozilla.org/file/local;1"]
                    .createInstance(Components.interfaces.nsILocalFile);
wcscript.initWithPath("C:\\WINDOWS\\system32\\wscript.exe"); 

var process = Components.classes["@mozilla.org/process/util;1"]
                    .createInstance(Components.interfaces.nsIProcess);
process.init(wcscript); 
process.run(false, [vbs.path], 1);


В первой строке кода кнопки нужно указать название подключения, логин и пароль.

Не более десяти вкладок! (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%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%5BtabLimiter%20%3D%20new%20function%28%29%20%7B%0A%0A%20%20%20%20this.boolean%20%3D%20true%3B%0A%0A%20%20%20%20this.extIEvents%20%3D%20Application.activeWindow.events%3B%0A%0A%20%20%20%20this.extIEventListener%20%3D%20function%28event%29%20%7B%0A%20%20%20%20%20%20%20%20if%20%28event.data.index%20%3E%209%29%20event.data.close%28%29%3B%0A%20%20%20%20%7D%3B%0A%0A%20%20%20%20this.addORremoveListener%20%3D%20function%20%28%29%20%7B%0A%20%20%20%20%20%20%20%20if%20%28this.boolean%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%7B%20this.extIEvents.addListener%28%22TabOpen%22%2C%20this.extIEventListener%29%3B%20%7D%0A%20%20%20%20%20%20%20%20else%0A%20%20%20%20%20%20%20%20%20%20%20%20%7B%20this.extIEvents.removeListener%28%22TabOpen%22%2C%20this.extIEventListener%29%3B%20%7D%0A%20%20%20%20%20%20%20%20this.boolean%20%3D%20%21this.boolean%3B%0A%20%20%20%20%7D%3B%0A%0A%20%20%20%20this.addORremoveListener%28%29%3B%0A%7D%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5BtabLimiter.addORremoveListener%28%29%3B%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

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

Выделить код

Код:

tabLimiter = new function() {

    this.boolean = true;

    this.extIEvents = Application.activeWindow.events;

    this.extIEventListener = function(event) {
        if (event.data.index > 9) event.data.close();
    };

    this.addORremoveListener = function () {
        if (this.boolean)
            { this.extIEvents.addListener("TabOpen", this.extIEventListener); }
        else
            { this.extIEvents.removeListener("TabOpen", this.extIEventListener); }
        this.boolean = !this.boolean;
    };

    this.addORremoveListener();
}

Собственно код (выключающий и обратно включающий ограничение):

Выделить код

Код:

tabLimiter.addORremoveListener();

Кодом инициализации кнопка запрещает открываться новым вкладкам, если их уже открыто больше десяти. Чтобы отключить ограничение, кнопку нужно нажать, чтобы включить обратно, нажать снова и т. д. При перезапуске текущее состояние ограничения не сохраняется.

Кнопочка в основном для самодисциплины, для борьбы с другими подвластными пользователями нужно использовать иные средства.

Открыть страницу в Internet Explorer  ( Firefox, Pale Moon )
Кнопка открывает текущую страницу в Internet Explorer.

ЛКМ => открыть текущую страницу в Internet Explorer.

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

Выделить код

Код:

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%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u0443%20%u0432%20Internet%20Explorer%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEhIAAAEAIACABQAAFgAAACgAAAASAAAAJAAAAAEAIAAAAAAAWAUAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABAAAAAgDAgAPAgECFwAAAQ8AAAAQBgEAIRUJADAVCAAxBgEAIwAAABIAAAERAgECGAMCABAAAAAJAAAABQAAAAIAAAABAAAABAIBAAwAAAINBgEAC0QrCVCScT6nxKFt1de2g+fXtoPnw6Ft1pJxPqhEKwlSBgEADQAAAg8CAQAOAAAABgAAAAIAAAAAAgEAAQAAAQBDJQANuIc7mfjSlvz+3q3/99en//PToP/z06D/99en//7erf/40pb8uIc7mUMlAA0AAAEAAgEAAQAAAAACAgABAAABAFQwABLpq03H8s6Y/+W8gf3itnX74rZ2+uK3evzit3r84rZ2+uO2dfvlvIH98s6Y/+mrTcdUMAASAAABAAICAAEAAAIBFAoAAM2QM6zovHv/3Kle+t+sYP3frmf+6rZp/+61Yv/utWL/6rZp/9+uZ/7fq2D83Kle+ei7e//NjzKsEwkAAAAAAgEAAAAAeUwJUuyvVf/Xnkn72qBJ/t2kTv/lo0DypG0ajnxPCU58TwlOpG0ajuWjQPLepU//26JK/tigS/3tsVf/e08LWAAAAAAfEQAAwYEZt9ubMv/VlCn71pcu/9eRIt9hOgEkAAAAAAIBAAICAQACAAAAAGA5ASbQjB/N05Eo5dGPJN3blyvvrHEUlwUBAABgOgAh35QZ7dKRIP/Vkh/81pMf/8aAD8OGVwt8i1sOkZBdDY6QXQ2Oi1sOj4NVDYK4dQqVzIIMpMd/DaHLgQymu3cKjjwlABJbOQVL4Z84/9abPP/Ymzr/2Js7/9udPv/npkD/56ZB/+emQf/npkH/56ZB/+imP//dnz7/2Zw9/9mcPP/XnD7/56M5/2I+BExdPQlV565Y/9yoW/7fql3/36xg/+CtYf3bqmL42qli+NqpYvjaqWL42qli+NqpYfjfrGH836tf/d6pXP3cp1r85q1X/1w8ClVfOwQ87Lpv++O5e//luHb+5bh3/+W5ef/yw3//+MV9//bEff/2xH3/+MV9//LDf//luXn/5bh3/+W4dv7juXv/7Lpu+187BDxOLAAM6rhr2uvJl//owIX87cmT/9WfT9V6Tg5WYkYfXWxMH2VsTB9lYkYfXXpODlbVn0/V7cmT/+jAhfzryZf/6rhr2k4sAAwAAAAArIA+j/3juP/ry5j679Gh//LQm/+qeS1/HA0ABAAAAQAAAAEAHA0AA6p4LX7y0Jv/79Gh/+vLmPr+47f/rIA9jwAAAAAAAAAATi4AIvvXnvD04sH/89ip/fXdtv//5rv/8ciH6dinWrjYp1q48ciH6f/mu//13bb/89ip/fXiwf/51p7wTi4AIwAAAAACAgIDAAAAAJhoIWP/8cr/9+nQ/ffhufv34778++vM///v0P//79D/++vM//fjvvz34bn79+nQ/f/wyv+mcCFjAAAAAAECAgMBAQAAAAACAhgKAAC2fShs/+3C/P//6//98dn+++zO/Prqyvr66sr6++zO/P3x2f7//+v//+3C/LZ9KGwYCgAAAAACAgEBAAAAAAAAAQEAAAEBAgMIAQAAWDgLNMqmbbT+58H3//fd///85P///OT///fd//7nwffKpm20WDgLNAgBAAAAAQIDAQAAAAAAAAAAAAAAAAAAAAEBAAACAQIDAAABAAYBAAByRQYrpnYqZqeCSYengkmHpnYqZnJFBisGAQAAAAABAAIBAgMBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%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%20path%20%3D%20%22C%3A%5C%5CProgram%20Files%5C%5CInternet%20Explorer%5C%5Ciexplore.exe%22%3B%0A%0Avar%20uri%20%3D%20gBrowser.currentURI.spec%3B%0Avar%20uri%20%3D%20/.%u0440%u0444/.test%28uri%29%20%3F%20Services.io.newURI%28uri%2C%20null%2C%20null%29.asciiSpec%20%3A%20uri%3B%20%20%0Avar%20file%20%3D%20Cc%5B%22@mozilla.org/file/local%3B1%22%5D.createInstance%28Ci.nsIFile%29%3B%0Afile.initWithPath%28path%29%3B%0A%21file.exists%28%29%20%26%26%20custombuttons.alertSlide%28self.label%2C%20%22%u0424%u0430%u0439%u043B%20%u043D%u0435%20%u0441%u0443%u0449%u0435%u0441%u0442%u0432%u0443%u0435%u0442%22%29%3B%0Avar%20process%20%3D%20Cc%5B%22@mozilla.org/process/util%3B1%22%5D.createInstance%28Ci.nsIProcess%29%3B%0Aprocess.init%28file%29%3B%0Aprocess.run%28false%2C%20%5Buri%5D%2C%201%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

Код:

Выделить код

Код:

var path = "C:\\Program Files\\Internet Explorer\\iexplore.exe";

var uri = gBrowser.currentURI.spec;
var uri = /.рф/.test(uri) ? Services.io.newURI(uri, null, null).asciiSpec : uri;  
var file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile);
file.initWithPath(path);
!file.exists() && custombuttons.alertSlide(self.label, "Файл не существует");
var process = Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess);
process.init(file);
process.run(false, [uri], 1);

Hide scrollbar ( Firefox 3.6+ ) от 26.05.2013.
Отключает или включает полосу прокрутки( scrollbar ) на новых страницах и в текущей странице.

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

Выделить код

Код:

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%3EHide%20scrollbar%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAGABoAwAAFgAAACgAAAAQAAAAIAAAAAEAGAAAAAAAQAMAAAAAAAAAAAAAAAAAAAAAAAAI0OAI0OAI0OAJ0OAJ0OAJ0OAI0OAI0OAI0OAI0OAI0OEJ0OAJ0OAJ0OEI0OAI0OAI0OAI0OAIz+AIzt8Izt8Hz98I0OAI0OAI0OAI0OAIz+AIzt8Izt8Iz98I0OAI0OAI0OAAz9842uaq7/So7/Rv4+wAzt8J0OAP0eEAzd5D2+if7vOv8PVo4uwEz+AIz+AJ0OAAzd9X3+r///////+18fUAzd4J0OAT0uEAy9xw4+34/v7///+m7/QIzt8J0OAJ0OAAzd9S3+r///////+m7vQAzd4J0OAS0uEAzN1m4ezu/P3///+c7fMHzt8J0OAI0OABz98n1uRy5O1w4u1K2+gCz98J0OAM0eAAzt8u1+Rr4ux35O5G2+cGz98I0eAI0OAJ0OAEzuAAy90Ay90Czd4H0OAI0OAH0OAK0OADzt8Ay9wAy9wAzd4J0OAI0OAI0OAI0OAL0OAS0uET0uEP0eEI0OAI0OAI0OAH0OAM0eES0uET0uEP0uEI0OAI0OAI0OAI0OAI0OAJ0OAJ0OAJ0OAI0OAI0OAI0OAI0OAJ0OAJ0OAJ0OAJ0OAI0OAI0OAI0OAI0OAE0N8Azd4Azd4Czt8J0OAJ0OAI0OAJ0OADz98Azd4Azd4Azt8H0OAI0OAI0OAAzt882ua48fa08PV15e4Azt4J0OAP0uEAzd5J3Oit7/S+8vdv5OwHz98I0OEJ0OAAzd9X3+r///////+08fUAzd4J0OAT0uEAy9xw4+34/v7///+m7/QIzt8J0OAJ0OAAzd9X3+r///////+28fUAzd4J0OAT0uEAy9xx4+34/v7///+m7/QIzt8J0OAI0OAE0OAg1eNa4OpY4Os82ucDz98I0OAL0OABzt8m1uRU3upb4Oo52uYGz+AJ0OAI0OAI0OAF0OAAzd8Azd8Czt8I0OAI0OAI0OAK0OAD0N8Azd8Azd8Bz98I0OAI0OAI0OAI0OAI0OAJ0OAJ0OAJ0OAI0OAI0OAI0OAI0OAI0OAJ0OAJ0OAI0OAI0OAI0OAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%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%u0431%u044A%u044F%u0432%u043B%u044F%u0435%u043C%20%u043F%u0435%u0440%u0435%u043C%u0435%u043D%u043D%u044B%u0435%20%u0434%u043B%u044F%20%u044D%u0442%u043E%u0439%20%u0432%u043A%u043B%u0430%u0434%u043A%u0438%20................................%0Avar%20css%20%3D%20%22html%20%3E%20scrollbar%5Borient%3Dvertical%5D%20%7B%20visibility%3Acollapse%20%21important%7D%5Cn%22%3B%0Acss%20%3D%20css%20+%20%22html%20%3E%20scrollbar%5Borient%3Dhorizontal%5D%20%7B%20visibility%3Acollapse%20%21important%20%7D%22%3B%0Aconst%20sss%20%3D%20Cc%5B%22@mozilla.org/content/style-sheet-service%3B1%22%5D.getService%28Ci.nsIStyleSheetService%29%3B%20%20%0A%0Aconst%20icon%20%3D%20this.ownerDocument.getAnonymousElementByAttribute%28this%2C%20%22class%22%2C%20%22toolbarbutton-icon%22%29%3B%0A%0A%0A//%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%3D%20function%28e%29%20%7B%0A%0A%20%20%20%20%20if%20%28%20e.button%20%3D%3D%200%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20var%20uri%20%3D%20makeURI%28%22data%3Atext/css%2C%22%20+%20encodeURIComponent%28css%29%29%3B%0A%20%20%20%20%20%20%20%20%20%20var%20enabled%20%3D%20sss.sheetRegistered%28%20uri%2C%20sss.AGENT_SHEET%20%29%3B%0A%20%20%20%20%20%20%20%20%20%20enabled%20%3F%20sss.unregisterSheet%28%20uri%2C%20sss.AGENT_SHEET%20%29%20%3A%20sss.loadAndRegisterSheet%28%20uri%2C%20sss.AGENT_SHEET%20%29%3B%0A%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20this.style.filter%20%3D%20enabled%20%3F%20%22%22%20%3A%20%27url%28%22chrome%3A//mozapps/skin/extensions/extensions.svg%23greyscale%22%29%27%3B%0A%20%20%20%20%20%20%20%20%20%20icon.style.opacity%20%3D%20enabled%20%3F%20%22%22%20%3A%200.65%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20BrowserReload%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%3B%20%20%20%20%20%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

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

Выделить код

Код:

// Объявляем переменные для этой вкладки ................................
var css = "html > scrollbar[orient=vertical] { visibility:collapse !important}\n";
css = css + "html > scrollbar[orient=horizontal] { visibility:collapse !important }";
const sss = Cc["@mozilla.org/content/style-sheet-service;1"].getService(Ci.nsIStyleSheetService);  

const icon = this.ownerDocument.getAnonymousElementByAttribute(this, "class", "toolbarbutton-icon");


// Настройка функций кликов мыши для кнопки ................................
this.onclick = function(e) {

     if ( e.button == 0 ) {
          var uri = makeURI("data:text/css," + encodeURIComponent(css));
          var enabled = sss.sheetRegistered( uri, sss.AGENT_SHEET );
          enabled ? sss.unregisterSheet( uri, sss.AGENT_SHEET ) : sss.loadAndRegisterSheet( uri, sss.AGENT_SHEET );
          
          this.style.filter = enabled ? "" : 'url("chrome://mozapps/skin/extensions/extensions.svg#greyscale")';
          icon.style.opacity = enabled ? "" : 0.65   
          
          BrowserReload();
          };     
};

Search and open( Firefox )
Ищет выделенный текст или текст из буфера обмена в текущем поисковике в новой вкладке, открывает адрес из буфера обмена или выделенный адрес на странице(например любой Код кнопки: на этой странице) в новой активной вкладке. Открывает выделенные на странице ссылки или с запросом на подтверждение все ссылки на странице в новых вкладках

ЛКМ =>  искать выделенный текст или текст из буфера обмена в текущем поисковике в новой активной вкладке,
СКМ => открыть выделенные ссылки или все ссылки на странице,
ПКМ => открыть адрес находящийся в буфере обмена или выделенный адрес в тексте на странице в новой активной вкладке
Ctrl+ПКМ => открыть контекстное меню.

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

Выделить код

Код:

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%3ESearch%20and%20open%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CAAABAAEAEBAAAAEAGABoAwAAFgAAACgAAAAQAAAAIAAAAAEAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADs9Pt8xetPtu9FsfFNtu%252BTzvb2%252B%252Fne4dFJeBw0egA%252FfAJAfAA8ewBBegAAAAD%252B%252FPtft98Mp%252BwWsfAVsvEbs%252FQeqvF8xO7%252F%252F%252F63yqkxdgM7gwE%252FggM%252BfQA%252BegBDeQDe7PIbotgQufcMufEPtfIPsvAbs%252FQvq%252Bfz%252Bf%252F%252B%252B%252FZKhR05hgBBhQI8hgBAgAI9ewD0%252B%252Fg3pswAtO8Cxf4Kw%252FsJvvYAqupKsNv%252B%252Fv7%252F%252FP5VkSU0iQA7jQA9hgBDgQU%252BfQH%252F%252Ff%252FQ6fM4sM4KsN8AteMCruIqqdbZ7PH8%252Fv%252Fg6Nc%252Fhg05kAA8jAM9iQI%252BhQA%252BgQDQu6b97uv%252F%252F%252F7V8Pqw3eiWz97q8%252Ff%252F%252F%252F%252F7%252FPptpkkqjQE4kwA7kAA5iwI8iAA8hQCOSSKdXjiyflbAkG7u2s%252F%252B%252F%252F39%252F%252F7r8utrqEYtjQE8lgA7kwA7kwA9jwA9igA9hACiWSekVRyeSgiYSBHx6N%252F%252B%252Fv7k7OFRmiYtlAA5lwI7lwI4lAA7kgI9jwE9iwI4iQCoVhWcTxCmb0K%252BooT8%252Fv%252F7%252F%252F%252FJ2r8fdwI1mwA3mQA3mgA8lAE8lAE4jwA9iwE%252BhwGfXifWvqz%252B%252Ff%252F58u%252Fev6Dt4tr%252B%252F%252F2ZuIUsggA7mgM6mAM3lgA5lgA6kQE%252FkwBChwHt4dv%252F%252F%252F728ei1bCi7VAC5XQ7kz7n%252F%252F%252F6bsZkgcB03lQA9lgM7kwA2iQktZToPK4r9%252F%252F%252F9%252F%252F%252FSqYK5UwDKZAS9WALIkFn%252B%252F%252F3%252F%252BP8oKccGGcIRJrERILYFEMwAAuEAAdX%252F%252Ff7%252F%252FP%252B%252BfDvGXQLIZgLEWgLOjlf7%252F%252F%252F%252F%252F%252F9QU90EAPQAAf8DAP0AAfMAAOUDAtr%252F%252F%252F%252F7%252B%252Fu2bCTIYwDPZgDBWQDSr4P%252F%252Fv%252F%252F%252FP5GRuABAPkAA%252FwBAfkDAPAAAesAAN%252F%252F%252B%252Fz%252F%252F%252F64g1C5VwDMYwK8Yg7y5tz8%252Fv%252FV1PYKDOcAAP0DAf4AAf0AAfYEAOwAAuAAAAD%252F%252FPvi28ymXyChTATRrIb8%252F%252F3v8fk6P8MAAdUCAvoAAP0CAP0AAfYAAO4AAACAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAQAA%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B//%20%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%3D%20function%28e%29%20%7B%0A%20%20%20%20%20%0A%20%20%20%20%20if%20%28%20e.button%20%3D%3D%200%20%29%20%7B%20//%20%u041B%u041A%u041C%20%0A%20%20%20%20%20%20%20%20%20%20var%20text%20%3D%20getSelect%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20if%20%28%20%21%21text%29%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20ss%20%3D%20Cc%5B%22@mozilla.org/browser/search-service%3B1%22%5D.getService%28Ci.nsIBrowserSearchService%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20submission%20%3D%20ss.currentEngine.getSubmission%28%20text%2C%20null%20%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20gBrowser.loadOneTab%28%20submission.uri.spec%2C%20null%2C%20null%2C%20submission.postData%2C%20true%2C%20false%20%29%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%3B%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20if%20%28%20e.button%20%3D%3D%201%20%29%20%7B%20//%20%u0421%u041A%u041C%20%20%0A%20%20%20%20%20%20%20%20%20%20var%20win%20%3D%20document.commandDispatcher.focusedWindow%2C%20doc%20%3D%20win.document%3B%0A%20%20%20%20%20%20%20%20%20%20var%20sel%20%3D%20doc%2C%20winSel%20%3D%20win.getSelection%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20if%20%28%20winSel.toString%28%29%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20sel%20%3D%20doc.createElement%28%27div%27%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20sel.appendChild%28%20winSel.getRangeAt%280%29.cloneContents%28%29%20%29%3B%0A%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%20var%20str%20%3D%20%27%27%2C%20links%20%3D%20sel.getElementsByTagName%28%27a%27%29%3B%0A%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20if%20%28%20links.length%20%3E%2016%20%26%26%20%21confirm%28%27%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20%27%20+%20links.length%20+%20%27%20%u0441%u0441%u044B%u043B%u043A%u0438%20%u0432%20%u043D%u043E%u0432%u044B%u0445%20%u0432%u043A%u043B%u0430%u0434%u043A%u0430%u0445%3F%27%29%20%29%20return%3B%0A%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20for%28%20var%20i%20%3D%200%2C%20lnk%3B%20lnk%20%3D%20links%5Bi%5D%3B%20i++%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%20lnk.href%29%20gBrowser.addTab%28%20lnk.href%20%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%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%20%7B%20//%20%u041F%u041A%u041C%20%0A%20%20%20%20%20%20%20%20%20%20e.preventDefault%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20var%20url%20%3D%20getSelect%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20if%20%28%20%21%21url%20%29%20gBrowser.loadOneTab%28%20url%2C%20null%2C%20null%2C%20null%2C%20false%2C%20false%20%29%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%7D%3B%20%20%20%20%20%20%20%20%0A%7D%3B%0A%0A%0A%0A//%20%u041E%u0431%u044A%u044F%u0432%u043B%u044F%u0435%u043C%20%u043F%u0435%u0440%u0435%u043C%u0435%u043D%u043D%u044B%u0435%20%u0434%u043B%u044F%20%u044D%u0442%u043E%u0439%20%u0432%u043A%u043B%u0430%u0434%u043A%u0438%20..................................................................................................%0Avar%20_this%20%3D%20this%3B%0Avar%20alertsService%20%3D%20Components.classes%5B%22@mozilla.org/alerts-service%3B1%22%5D.getService%28Components.interfaces.nsIAlertsService%29%3B%0A%0A%0A%0A/*%20%u0424%u0443%u043D%u043A%u0446%u0438%u044F%20%u043E%u0442%u0434%u0430%u0441%u0442%20%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u043D%u044B%u0439%20%u0442%u0435%u043A%u0441%u0442%20%u0438%u0437%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u044B%20%u0438%u043B%u0438%20%u0442%u0435%u043A%u0441%u0442%u043E%u0432%u043E%u0433%u043E%20%u043F%u043E%u043B%u044F%2C%20%0A%20%20%20%u0438%u043B%u0438%20%u0438%u0437%20%u0431%u0443%u0444%u0435%u0440%u0430%20%u043E%u0431%u043C%u0435%u043D%u0430%20%u0435%u0441%u043B%u0438%20%u0442%u0435%u043A%u0441%u0442%20%u043D%u0435%20%u0432%u044B%u0434%u0435%u043B%u0435%u043D%2C%20%u0435%u0441%u043B%u0438%20%u043D%u0435%u0442%20%u0442%u0435%u043A%u0441%u0442%u0430%20%u043E%u0442%u0434%u0430%u0441%u0442%20%27false%27%20..............%20*/%0Afunction%20getSelect%28%29%20%7B%0A%20%20//%20%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u043D%u044B%u0439%20%u0442%u0435%u043A%u0441%u0442%20%u0438%u0437%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u044B%20....%0A%20%20window.content.focus%28%29%3B%0A%20%20var%20selection%20%3D%20document.commandDispatcher.focusedWindow.getSelection%28%29.toString%28%29%3B%0A%0A%20%20//%20%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u043D%u044B%u0439%20%u0442%u0435%u043A%u0441%u0442%20%u0438%u0437%20%u0442%u0435%u043A%u0441%u0442%u043E%u0432%u043E%u0433%u043E%20%u043F%u043E%u043B%u044F%20....%0A%20%20if%20%28%20selection%20%3D%3D%20%27%27%20%29%20%7B%0A%20%20%20%20%20%20%20var%20theBox%20%3D%20document.commandDispatcher.focusedElement%3B%0A%20%20%20%20%20%20%20if%20%28%20theBox%20%26%26%20%28theBox.type%20%3D%3D%20%22text%22%20%7C%7C%20theBox.type%20%3D%3D%20%22textarea%22%29%20%29%20%7B%20%0A%20%20%20%20%20%20%20%20%20%20%20%20var%20startPos%20%3D%20theBox.selectionStart%3B%0A%09%20%20%20%20var%20endPos%20%3D%20theBox.selectionEnd%3B%0A%09%20%20%20%20var%20selection%20%3D%20theBox.value.substring%28startPos%2C%20endPos%29%3B%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%20%20%20%0A%20%20//%20%u0442%u0435%u043A%u0441%u0442%20%u0438%u0437%20%u0431%u0443%u0444%u0435%u0440%u0430%20%u043E%u0431%u043C%u0435%u043D%u0430%20....%0A%20%20if%20%28%20selection%20%3D%3D%20%27%27%20%29%20var%20selection%20%3D%20gClipboard.read%28%29%3B%0A%20%20%20%20%20%20%20%20%20%0A%20%20//%20%u0443%u0431%u0438%u0440%u0430%u0435%u043C%20%u043F%u0440%u043E%u0431%u0435%u043B%u044B%20%u0441%20%u043E%u0431%u043E%u0438%u0445%20%u043A%u043E%u043D%u0446%u043E%u0432%20%u0442%u0435%u043A%u0441%u0442%u0430%20....%0A%20%20if%20%28%20selection%20%21%3D%3D%20%27%27%20%29%20var%20selection%20%3D%20selection.toString%28%29.replace%28/%5E%5Cs+%7C%5Cs+%24/g%2C%22%22%29%3B%0A%20%20%0A%20%20if%20%28%20selection%20%3D%3D%20%27%27%29%20%7B%20%0A%20%20%20%20%20%20%20var%20str%20%3D%20%22%u0412%u044B%u0434%u0435%u043B%u0438%u0442%u0435%20%u0438%u043B%u0438%20%u0441%u043A%u043E%u043F%u0438%u0440%u0443%u0439%u0442%u0435%20%u0442%u0435%u043A%u0441%u0442%21%22%0A%20%20%20%20%20%20%20alertsService.showAlertNotification%28_this.image%2C%20_this.label%2C%20str%2C%20false%2C%20%22%22%2C%20null%2C%20%22%22%29%3B%0A%20%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%0A%20%20return%20%28%20selection%20%3D%3D%20%27%27%29%3F%20false%3A%20selection%3B%0A%7D%3B%0A%0A%0A//%20%u041F%u043E%u0434%u0441%u043A%u0430%u0437%u043A%u0430%20%u043A%u043D%u043E%u043F%u043A%u0438%20%u0438%20%u043E%u0442%u0441%u0442%u0443%u043F%20%u0441%u043F%u0440%u0430%u0432%u0430%20%u0443%20%u043A%u043D%u043E%u043F%u043A%u0438%20................................................%0Athis.tooltipText%20%3D%20%22Search%20and%20open%20%5Cn%u041B%3A%20%u0418%u0441%u043A%u0430%u0442%u044C%20%u0442%u0435%u043A%u0441%u0442%20%u0438%u0437%20%u0431%u0443%u0444%u0435%u0440%u0430%20%u043E%u0431%u043C%u0435%u043D%u0430%20/%20%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u043D%u044B%u0439%20%5Cn%u041C%3A%20%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20%u0432%u0441%u0435%20%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u043D%u044B%u0435%20%u0441%u0441%u044B%u043B%u043A%u0438%20%5Cn%u041F%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%20%u043E%u0431%u043C%u0435%u043D%u0430%20/%20%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u043D%u044B%u0439%22%3B%0A//this.setAttribute%28%22style%22%2C%20%22margin-right%3A%2010px%3B%22%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%5Bnull%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

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

Выделить код

Код:

//  Настройка функций кликов мыши для кнопки ...............................................
this.onclick = function(e) {
     
     if ( e.button == 0 ) { // ЛКМ 
          var text = getSelect();
          if ( !!text) 
               var ss = Cc["@mozilla.org/browser/search-service;1"].getService(Ci.nsIBrowserSearchService);
               var submission = ss.currentEngine.getSubmission( text, null );
               gBrowser.loadOneTab( submission.uri.spec, null, null, submission.postData, true, false );
          }; 
                  
     if ( e.button == 1 ) { // СКМ  
          var win = document.commandDispatcher.focusedWindow, doc = win.document;
          var sel = doc, winSel = win.getSelection();
          if ( winSel.toString() ) {
               var sel = doc.createElement('div');
               sel.appendChild( winSel.getRangeAt(0).cloneContents() );
               }
          var str = '', links = sel.getElementsByTagName('a');
          
          if ( links.length > 16 && !confirm('Открыть ' + links.length + ' ссылки в новых вкладках?') ) return;
          
          for( var i = 0, lnk; lnk = links[i]; i++ ) {
               if ( lnk.href) gBrowser.addTab( lnk.href );
               }    
          };
                   
     if ( e.button == 2 && !e.ctrlKey && !e.shiftKey && !e.altKey && !e.metaKey )  { // ПКМ 
          e.preventDefault();
          var url = getSelect();
          if ( !!url ) gBrowser.loadOneTab( url, null, null, null, false, false );             
          };        
};



// Объявляем переменные для этой вкладки ..................................................................................................
var _this = this;
var alertsService = Components.classes["@mozilla.org/alerts-service;1"].getService(Components.interfaces.nsIAlertsService);



/* Функция отдаст выделенный текст из страницы или текстового поля, 
   или из буфера обмена если текст не выделен, если нет текста отдаст 'false' .............. */
function getSelect() {
  // выделенный текст из страницы ....
  window.content.focus();
  var selection = document.commandDispatcher.focusedWindow.getSelection().toString();

  // выделенный текст из текстового поля ....
  if ( selection == '' ) {
       var theBox = document.commandDispatcher.focusedElement;
       if ( theBox && (theBox.type == "text" || theBox.type == "textarea") ) { 
            var startPos = theBox.selectionStart;
        var endPos = theBox.selectionEnd;
        var selection = theBox.value.substring(startPos, endPos);  
            }
       };
       
  // текст из буфера обмена ....
  if ( selection == '' ) var selection = gClipboard.read();
         
  // убираем пробелы с обоих концов текста ....
  if ( selection !== '' ) var selection = selection.toString().replace(/^\s+|\s+$/g,"");
  
  if ( selection == '') { 
       var str = "Выделите или скопируйте текст!"
       alertsService.showAlertNotification(_this.image, _this.label, str, false, "", null, "");
       };
    
  return ( selection == '')? false: selection;
};


// Подсказка кнопки и отступ справа у кнопки ................................................
this.tooltipText = "Search and open \nЛ: Искать текст из буфера обмена / выделенный \nМ: Открыть все выделенные ссылки \nП: Открыть адрес из буфера обмена / выделенный";
//this.setAttribute("style", "margin-right: 10px;");

Zoom( Firefox24 ) от 07.06.2016.
Даёт возможность менять масштаб страницы кликами на кнопке или колёсиком мыши на кнопке, можно переключать: изменения масштаба страницы или только текста на странице. Стандартная сплывающая подсказка у кнопки показывает текущий масштаб, при изменении масштаба кнопкой у кнопки сплывает подсказка с новым масштабом.

Скриншот:
8eaf149098cb47e5ecb3a5df0b2ba189.png

ЛКМ => Увеличить масштаб,
СКМ => Менять масштаб страницы или только текста на странице, соответственно меняется иконка копки,
ПКМ => Уменьшить масштаб,
Ctrl+ПКМ => Контекстное меню кнопки,
Колёсиком мыши => Менять масштаб.
Код кнопки и инициализации:
Код кнопки:

Выделить код

Код:

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%3EZoom%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAwElEQVQ4jd3RMWpCQRSF4S/iBtyCELHW1sIV6ALiRnQH4hJ0ByF2Ym8aG1Ml8Ji3ArXRDZhUA+bx3qCWHjgw3Jn57+XcF1fq0JXQF7vUvYxw4bfKGWHO4mFA9AfLJCAjdOhG9+jPWVxDmrSSgLIGGz4jYMwEaslQCtqyLdbuAgwYxvOJM9SrHscRoUFjwLDFKwTy97Igb93CG6P4p3KCQF6sHdhPma1YJwGBvF22phLdFeKTAv6F+MP3gf2R462AP7hdbq8C1bDsAAAAAElFTkSuQmCC%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%0A%20%20%20%20%20//%20%u0434%u0435%u0439%u0441%u0442%u0432%u0438%u0435%20%u043F%u0440%u0438%20%u043A%u043B%u0438%u043A%u0435%20%u041B%u041A%u041C%20....%0A%20%20%20%20%20if%20%28%20e.button%20%3D%3D%200%20%29%20FullZoom.enlarge%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20//%20%u0434%u0435%u0439%u0441%u0442%u0432%u0438%u0435%20%u043F%u0440%u0438%20%u043A%u043B%u0438%u043A%u0435%20%u0421%u041A%u041C%20....%20%20%20%20%0A%20%20%20%20%20if%20%28%20e.button%20%3D%3D%201%20%29%20cbu.setPrefs%28s%2C%20%21cbu.getPrefs%28s%29%29%3B%0A%20%20%20%20%20%0A%20%20%20%20%20//%20%u0434%u0435%u0439%u0441%u0442%u0432%u0438%u0435%20%u043F%u0440%u0438%20%u043A%u043B%u0438%u043A%u0435%20%u041F%u041A%u041C%20....%20%20%20%20%0A%20%20%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%20%20%20e.preventDefault%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20FullZoom.reduce%28%29%3B%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%0A%20%20%20%20%20showTooltip%28%29%3B%20%20%20%20%20%20%20%20%20%0A%7D%3B%0Athis.setAttribute%28%22ondblclick%22%2C%20%22event.preventDefault%28%29%22%29%3B%0A%0A%0A//%20%u041C%u0435%u043D%u044F%u0442%u044C%20%u043C%u0430%u0441%u0448%u0442%u0430%u0431%20%u043A%u043E%u043B%u0435%u0441%u0438%u043A%u043E%u043C%20%u043C%u044B%u0448%u0438%20%u043D%u0430%20%u043A%u043D%u043E%u043F%u043A%u0435%20..............%0Athis.onwheel%20%3De%3D%3E%20%7B%0A%20%20%20e.deltaY%20%3E%200%20%3F%20FullZoom.reduce%28%29%20%3A%20FullZoom.enlarge%28%29%3B%0A%20%20%20showTooltip%28%29%3B%0A%7D%3B%0A%0A%0A//%20%u0421%u043E%u0437%u0434%u0430%u0442%u044C%20%u043F%u043E%u0434%u0441%u043A%u0430%u0437%u043A%u0443%20%u0438%20%u043F%u043E%u043A%u0430%u0437%u044B%u0432%u0430%u0442%u044C%20%u0443%20%u043A%u043D%u043E%u043F%u043A%u0438%20%u043F%u0440%u0438%20%u0432%u044B%u0437%u043E%u0432%u0435%20%u0444%u0443%u043D%u043A%u0446%u0438%u0438%20..............%0Afunction%20showTooltip%28%29%20%7B%0A%20%20%20var%20tooltip%20%3D%20self.lastChild%3B%0A%20%20%20if%20%28%20%21tooltip%20%29%20%7B%0A%20%20%20%20%20%20%20%20tooltip%20%3D%20self.appendChild%28document.createElement%28%22tooltip%22%29%29%3B%0A%20%20%20%20%20%20%20%20tooltip.style.cssText%20%3D%20%22font-weight%3A%20bold%20%21important%3B%20color%3A%20red%20%21important%3B%22%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20self.tooltipText%20%3D%20%22%22%20%20%20%20%20%0A%20%20%20tooltip.label%20%3D%20Math.floor%28%28ZoomManager.zoom%20+%200.005%29%20*%20100%29%20+%20%22%25%22%3B%0A%20%20%20tooltip.showPopup%28self%2C%20-1%2C%20-1%2C%20%22popup%22%2C%20%22topleft%22%2C%20%22topright%22%29%3B%0A%20%20%20self.onmouseleave%20%3D%28%29%3D%3E%20%7B%20tooltip.hidePopup%28self.onmouseleave%20%3D%20null%29%3B%20self.tooltipText%20%3D%20self.label%20%7D%3B%0A%7D%3B%0A%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%27about%3Aconfig%27%20..............%0Avar%20s%20%3D%20%22browser.zoom.full%22%3B%0Afunction%20toggleImage%28%29%20%7B%0A%20%20%20self.image%20%3D%20cbu.getPrefs%28s%29%0A%20%20%20%3F%20%27data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACQklEQVQ4jaWSzUtUYRTGf+97rzM6V22YVBQJa1GbPjCiIMJFzaJNYosiiSAooV0ryWW7Nv0DiYXRJnAVtgqMaBEEFShJovmRM43jfDsfd+aO9973bWVIjBZ0ls/znIdzznPgP0vsRYxPvt/KFUqVRHLLS6RE36sXtxpqZSPwZP/A1aagdSBkRXqlGe7bTJcxgkev/LPB9ZsPxoslh0zOJpkqkUiWsLoHXzfSmo3AuhfsysYKxBNFFpezlIoFlG8DdADZfScYvv1oJpO1WVjK8PHTUj6+vpJWfhmUS0vn0Nu/rnDoyOmoXd0mnamQXH1+w9l69xAMhNGMGew5ta9B/5nLI0ppao6HXd0GJzbjVuafSLMVabQjDItg+OLTPQ0Gr41O2NVtsjmbjdiX6R3crS5PC9mMkEECbSfuNjTo7Dzc79Q98oUqyXSZaurl0A5XTU0NmaaJECZCGBjNx0Z2uN/PcX9sKleuycjc/CbLqzHUdg7QCCOENCyQAdAK7dsor0xl45mAXTEWSkS+LiRZWVnEq62h3C0QAmm0Icx2pBFCyABaK7SuA1Y/2LMC4PylsZlivScaj33HrXzDKX2+gxZ9SImUzSADKF/9DIXPTiAkWnto38k7+TcHTYB0qTOaSf/ArS5Ttxen8cuTAChQuw7m1rqGjUBHFHzQKgIgWiIXRptazz32amu4tTXcylwPsPln3jsVDA9orV3QPtqrfRBW772KcuIVt570lJtvVfX18F7NAKZ1fBbtd2vtOdKw+n4B6skL1gRzZQAAAAAASUVORK5CYII%3D%27%0A%20%20%20%3A%20%27data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAwElEQVQ4jd3RMWpCQRSF4S/iBtyCELHW1sIV6ALiRnQH4hJ0ByF2Ym8aG1Ml8Ji3ArXRDZhUA+bx3qCWHjgw3Jn57+XcF1fq0JXQF7vUvYxw4bfKGWHO4mFA9AfLJCAjdOhG9+jPWVxDmrSSgLIGGz4jYMwEaslQCtqyLdbuAgwYxvOJM9SrHscRoUFjwLDFKwTy97Igb93CG6P4p3KCQF6sHdhPma1YJwGBvF22phLdFeKTAv6F+MP3gf2R462AP7hdbq8C1bDsAAAAAElFTkSuQmCC%27%3B%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%0A//%20%u041F%u043E%u0434%u0441%u043A%u0430%u0437%u043A%u0430%20%u0434%u043B%u044F%20%u043A%u043D%u043E%u043F%u043A%u0438%20..............%0Athis.onmouseover%20%3D%28%29%3D%3E%20%7B%0A%20%20%20var%20value%20%3D%20Math.floor%28%28ZoomManager.zoom%20+%200.005%29%20*%20100%29%20+%20%22%25%22%3B%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20this.tooltipText%20%3D%20%22Zoom%3A%20%22%20+%20value%20+%20%22%5Cn%u041B%3A%20%u0443%u0432%u0435%u043B%u0438%u0447%u0438%u0442%u044C%20%u043C%u0430%u0441%u0448%u0442%u0430%u0431%20%5Cn%u0421%3A%20%u043C%u0435%u043D%u044F%u0442%u044C%20%u043C%u0430%u0441%u0448%u0442%u0430%u0431%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u044B%20%u0438%u043B%u0438%20%u0442%u043E%u043B%u044C%u043A%u043E%20%u0442%u0435%u043A%u0441%u0442%u0430%20%u043D%u0430%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u0435%20%5Cn%u041F%3A%20%u0443%u043C%u0435%u043D%u044C%u0448%u0438%u0442%u044C%20%u043C%u0430%u0441%u0448%u0442%u0430%u0431%20%5Cn%u041C%u043E%u0436%u043D%u043E%20%u043C%u0435%u043D%u044F%u0442%u044C%20%u043C%u0430%u0441%u0448%u0442%u0430%u0431%20%u043A%u043E%u043B%u0451%u0441%u0438%u043A%u043E%u043C%20%u043D%u0430%20%u043A%u043D%u043E%u043F%u043A%u0435%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%20%20%20%20%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%7D%3B%20%20%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.onclick =e=> {

     // действие при клике ЛКМ ....
     if ( e.button == 0 ) FullZoom.enlarge();
          
     // действие при клике СКМ ....    
     if ( e.button == 1 ) cbu.setPrefs(s, !cbu.getPrefs(s));
     
     // действие при клике ПКМ ....    
     if ( e.button == 2 && !e.ctrlKey && !e.shiftKey && !e.altKey && !e.metaKey ) { 
          e.preventDefault();
          FullZoom.reduce();           
          }
     
     showTooltip();         
};
this.setAttribute("ondblclick", "event.preventDefault()");


// Менять масштаб колесиком мыши на кнопке ..............
this.onwheel =e=> {
   e.deltaY > 0 ? FullZoom.reduce() : FullZoom.enlarge();
   showTooltip();
};


// Создать подсказку и показывать у кнопки при вызове функции ..............
function showTooltip() {
   var tooltip = self.lastChild;
   if ( !tooltip ) {
        tooltip = self.appendChild(document.createElement("tooltip"));
        tooltip.style.cssText = "font-weight: bold !important; color: red !important;";
        }
   self.tooltipText = ""     
   tooltip.label = Math.floor((ZoomManager.zoom + 0.005) * 100) + "%";
   tooltip.showPopup(self, -1, -1, "popup", "topleft", "topright");
   self.onmouseleave =()=> { tooltip.hidePopup(self.onmouseleave = null); self.tooltipText = self.label };
};


// Установить нужную иконку кнопки при старте браузера или при изменениях настроек 'about:config' ..............
var s = "browser.zoom.full";
function toggleImage() {
   self.image = cbu.getPrefs(s)
   ? 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACQklEQVQ4jaWSzUtUYRTGf+97rzM6V22YVBQJa1GbPjCiIMJFzaJNYosiiSAooV0ryWW7Nv0DiYXRJnAVtgqMaBEEFShJovmRM43jfDsfd+aO9973bWVIjBZ0ls/znIdzznPgP0vsRYxPvt/KFUqVRHLLS6RE36sXtxpqZSPwZP/A1aagdSBkRXqlGe7bTJcxgkev/LPB9ZsPxoslh0zOJpkqkUiWsLoHXzfSmo3AuhfsysYKxBNFFpezlIoFlG8DdADZfScYvv1oJpO1WVjK8PHTUj6+vpJWfhmUS0vn0Nu/rnDoyOmoXd0mnamQXH1+w9l69xAMhNGMGew5ta9B/5nLI0ppao6HXd0GJzbjVuafSLMVabQjDItg+OLTPQ0Gr41O2NVtsjmbjdiX6R3crS5PC9mMkEECbSfuNjTo7Dzc79Q98oUqyXSZaurl0A5XTU0NmaaJECZCGBjNx0Z2uN/PcX9sKleuycjc/CbLqzHUdg7QCCOENCyQAdAK7dsor0xl45mAXTEWSkS+LiRZWVnEq62h3C0QAmm0Icx2pBFCyABaK7SuA1Y/2LMC4PylsZlivScaj33HrXzDKX2+gxZ9SImUzSADKF/9DIXPTiAkWnto38k7+TcHTYB0qTOaSf/ArS5Ttxen8cuTAChQuw7m1rqGjUBHFHzQKgIgWiIXRptazz32amu4tTXcylwPsPln3jsVDA9orV3QPtqrfRBW772KcuIVt570lJtvVfX18F7NAKZ1fBbtd2vtOdKw+n4B6skL1gRzZQAAAAAASUVORK5CYII='
   : 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAwElEQVQ4jd3RMWpCQRSF4S/iBtyCELHW1sIV6ALiRnQH4hJ0ByF2Ym8aG1Ml8Ji3ArXRDZhUA+bx3qCWHjgw3Jn57+XcF1fq0JXQF7vUvYxw4bfKGWHO4mFA9AfLJCAjdOhG9+jPWVxDmrSSgLIGGz4jYMwEaslQCtqyLdbuAgwYxvOJM9SrHscRoUFjwLDFKwTy97Igb93CG6P4p3KCQF6sHdhPma1YJwGBvF22phLdFeKTAv6F+MP3gf2R462AP7hdbq8C1bDsAAAAAElFTkSuQmCC';
};
toggleImage();
gPrefService.addObserver(s, toggleImage, false);
addDestructor(()=> gPrefService.removeObserver(s, toggleImage) );



// Подсказка для кнопки ..............
this.onmouseover =()=> {
   var value = Math.floor((ZoomManager.zoom + 0.005) * 100) + "%";                    
   this.tooltipText = "Zoom: " + value + "\nЛ: увеличить масштаб \nС: менять масштаб страницы или только текста на странице \nП: уменьшить масштаб \nМожно менять масштаб колёсиком на кнопке";                                                     
};

Search and open +( Firefox )
Ищет выделенный текст или текст из буфера обмена в текущем поисковике в новой вкладке, открывает адрес из буфера обмена или выделенный адрес на странице(например любой Код кнопки: на этой странице) в новой активной вкладке. Открывает выделенные на странице ссылки или с запросом на подтверждение все ссылки на странице.
Даёт возможность переключать текущий поисковик, иконка кнопки отображает текущий поисковик при изменении которого соответственно меняется иконка кнопки.

ЛКМ => искать выделенный текст или текст из буфера обмена в текущем поисковике в новой активной вкладке,
СКМ => открыть выделенные ссылки или  все ссылки на странице,
ПКМ =>  открыть адрес находящийся в буфере обмена или выделенный адрес в тексте на странице в новой активной вкладке,
Ctrl+ПКМ  => открыть контекстное меню кнопки,
Dropmarker =>  открыть меню с поисковиками.


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

Выделить код

Код:

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%3ESearch%20and%20open+%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CAAABAAEAEBAAAAEAGABoAwAAFgAAACgAAAAQAAAAIAAAAAEAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADs9Pt8xetPtu9FsfFNtu%252BTzvb2%252B%252Fne4dFJeBw0egA%252FfAJAfAA8ewBBegAAAAD%252B%252FPtft98Mp%252BwWsfAVsvEbs%252FQeqvF8xO7%252F%252F%252F63yqkxdgM7gwE%252FggM%252BfQA%252BegBDeQDe7PIbotgQufcMufEPtfIPsvAbs%252FQvq%252Bfz%252Bf%252F%252B%252B%252FZKhR05hgBBhQI8hgBAgAI9ewD0%252B%252Fg3pswAtO8Cxf4Kw%252FsJvvYAqupKsNv%252B%252Fv7%252F%252FP5VkSU0iQA7jQA9hgBDgQU%252BfQH%252F%252Ff%252FQ6fM4sM4KsN8AteMCruIqqdbZ7PH8%252Fv%252Fg6Nc%252Fhg05kAA8jAM9iQI%252BhQA%252BgQDQu6b97uv%252F%252F%252F7V8Pqw3eiWz97q8%252Ff%252F%252F%252F%252F7%252FPptpkkqjQE4kwA7kAA5iwI8iAA8hQCOSSKdXjiyflbAkG7u2s%252F%252B%252F%252F39%252F%252F7r8utrqEYtjQE8lgA7kwA7kwA9jwA9igA9hACiWSekVRyeSgiYSBHx6N%252F%252B%252Fv7k7OFRmiYtlAA5lwI7lwI4lAA7kgI9jwE9iwI4iQCoVhWcTxCmb0K%252BooT8%252Fv%252F7%252F%252F%252FJ2r8fdwI1mwA3mQA3mgA8lAE8lAE4jwA9iwE%252BhwGfXifWvqz%252B%252Ff%252F58u%252Fev6Dt4tr%252B%252F%252F2ZuIUsggA7mgM6mAM3lgA5lgA6kQE%252FkwBChwHt4dv%252F%252F%252F728ei1bCi7VAC5XQ7kz7n%252F%252F%252F6bsZkgcB03lQA9lgM7kwA2iQktZToPK4r9%252F%252F%252F9%252F%252F%252FSqYK5UwDKZAS9WALIkFn%252B%252F%252F3%252F%252BP8oKccGGcIRJrERILYFEMwAAuEAAdX%252F%252Ff7%252F%252FP%252B%252BfDvGXQLIZgLEWgLOjlf7%252F%252F%252F%252F%252F%252F9QU90EAPQAAf8DAP0AAfMAAOUDAtr%252F%252F%252F%252F7%252B%252Fu2bCTIYwDPZgDBWQDSr4P%252F%252Fv%252F%252F%252FP5GRuABAPkAA%252FwBAfkDAPAAAesAAN%252F%252F%252B%252Fz%252F%252F%252F64g1C5VwDMYwK8Yg7y5tz8%252Fv%252FV1PYKDOcAAP0DAf4AAf0AAfYEAOwAAuAAAAD%252F%252FPvi28ymXyChTATRrIb8%252F%252F3v8fk6P8MAAdUCAvoAAP0CAP0AAfYAAO4AAACAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAQAA%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B//%20%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%3D%20function%28e%29%20%7B%0A%20%20%20%20%20%0A%20%20%20%20%20if%20%28%20e.button%20%3D%3D%200%20%29%20%7B%20//%20%u041B%u041A%u041C%20%0A%20%20%20%20%20%20%20%20%20%20if%20%28%20e.originalTarget.nodeName%20%21%3D%20%22xul%3Atoolbarbutton%22%29%20return%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20text%20%3D%20getSelect%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%20%21%21text%29%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20ss%20%3D%20Cc%5B%22@mozilla.org/browser/search-service%3B1%22%5D.getService%28Ci.nsIBrowserSearchService%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20submission%20%3D%20ss.currentEngine.getSubmission%28text%2C%20null%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20gBrowser.loadOneTab%28submission.uri.spec%2C%20null%2C%20null%2C%20submission.postData%2C%20true%2C%20false%29%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%3B%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20if%20%28%20e.button%20%3D%3D%201%20%29%20%7B%20//%20%u0421%u041A%u041C%20%20%0A%20%20%20%20%20%20%20%20%20%20var%20win%20%3D%20document.commandDispatcher.focusedWindow%2C%20doc%20%3D%20win.document%3B%0A%20%20%20%20%20%20%20%20%20%20var%20sel%20%3D%20doc%2C%20winSel%20%3D%20win.getSelection%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20if%20%28%20winSel.toString%28%29%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20sel%20%3D%20doc.createElement%28%27div%27%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20sel.appendChild%28%20winSel.getRangeAt%280%29.cloneContents%28%29%20%29%3B%0A%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%20var%20str%20%3D%20%27%27%2C%20links%20%3D%20sel.getElementsByTagName%28%27a%27%29%3B%0A%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20if%20%28%20links.length%20%3E%2016%20%26%26%20%21confirm%28%27%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20%27%20+%20links.length%20+%20%27%20%u0441%u0441%u044B%u043B%u043A%u0438%20%u0432%20%u043D%u043E%u0432%u044B%u0445%20%u0432%u043A%u043B%u0430%u0434%u043A%u0430%u0445%3F%27%29%20%29%20return%3B%0A%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20for%28%20var%20i%20%3D%200%2C%20lnk%3B%20lnk%20%3D%20links%5Bi%5D%3B%20i++%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%20lnk.href%29%20gBrowser.addTab%28%20lnk.href%20%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%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%20%7B%20//%20%u041F%u041A%u041C%20%0A%20%20%20%20%20%20%20%20%20%20e.preventDefault%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20var%20url%20%3D%20getSelect%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20if%20%28%20%21%21url%20%29%20gBrowser.loadOneTab%28%20url%2C%20null%2C%20null%2C%20null%2C%20false%2C%20false%20%29%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%7D%3B%20%20%20%20%20%20%20%20%0A%7D%3B%0A%0A%0A%0A//%20%u041E%u0431%u044A%u044F%u0432%u043B%u044F%u0435%u043C%20%u043F%u0435%u0440%u0435%u043C%u0435%u043D%u043D%u044B%u0435%20%u0434%u043B%u044F%20%u044D%u0442%u043E%u0439%20%u0432%u043A%u043B%u0430%u0434%u043A%u0438%20..................................................................................................%0Avar%20_this%20%3D%20this%3B%0Avar%20alertsService%20%3D%20Components.classes%5B%22@mozilla.org/alerts-service%3B1%22%5D.getService%28Components.interfaces.nsIAlertsService%29%3B%0A%0A%0A%0A//%20%u0414%u043E%u0431%u0430%u0432%u0438%u0442%u044C%20%u043A%u043E%u043D%u0442%u0435%u043A%u0441%u0442%u043D%u043E%u0435%20%u043C%u0435%u043D%u044E%20%u0441%20%u043F%u043E%u0438%u0441%u043A%u043E%u0432%u0438%u043A%u0430%u043C%u0438%20%u0434%u043B%u044F%20%u043A%u043D%u043E%u043F%u043A%u0438%20.........................................%0Afunction%20searchService%28%29%20%7B%0A%20%20%20return%20Components.classes%5B%22@mozilla.org/browser/search-service%3B1%22%5D.getService%28Components.interfaces.nsIBrowserSearchService%29%3B%0A%7D%0A%0Athis.selectEngine%20%3D%20function%28aNode%2C%20aEvent%29%20%7B%0A%20%20%20var%20engine%20%3D%20aEvent.target.engine%3B%0A%20%20%20var%20ss%20%3D%20searchService%28%29%3B%0A%20%20%20ss.currentEngine%20%3D%20ss.getEngineByName%28engine.name%29%3B%0A%20%20%20aNode.engine%20%3D%20engine%3B%0A%20%20%20aNode.image%20%3D%20aEvent.target.getAttribute%28%22src%22%29%3B%0A%7D%0A%0Athis.populateMenu%20%3D%20function%28aNode%29%20%7B%0A%20%20%20var%20ss%20%3D%20searchService%28%29%3B%0A%20%20%20var%20engines%20%3D%20ss.getVisibleEngines%28%7B%20%7D%29%3B%0A%20%20%20const%20kXULNS%20%3D%20%22http%3A//www.mozilla.org/keymaster/gatekeeper/there.is.only.xul%22%3B%0A%0A%20%20%20while%28%20aNode.firstChild%20%26%26%20aNode.firstChild.localName%20%21%3D%20%22menuseparator%22%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20aNode.removeChild%28%20aNode.firstChild%20%29%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20for%20%28%20var%20i%20%3D%20engines.length%20-%201%3B%20i%20%3E%3D%200%3B%20i--%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20var%20mi%20%3D%20document.createElementNS%28kXULNS%2C%20%22menuitem%22%29%3B%0A%20%20%20%20%20%20%20%20%20mi.id%20%3D%20%22cb-search-%22%20+%20engines%5Bi%5D.name%3B%0A%20%20%20%20%20%20%20%20%20mi.className%20%3D%20%22menuitem-iconic%20searchbar-engine-menuitem%22%3B%0A%20%20%20%20%20%20%20%20%20mi.setAttribute%28%22label%22%2C%20engines%5Bi%5D.name%29%3B%0A%20%20%20%20%20%20%20%20%20if%20%28%20engines%5Bi%5D.iconURI%20%29%20%20mi.setAttribute%28%22src%22%2C%20engines%5Bi%5D.iconURI.spec%20%29%3B%0A%20%20%20%20%20%20%20%20%20mi.engine%20%3D%20engines%5Bi%5D%3B%0A%20%20%20%20%20%20%20%20%20if%20%28%20mi.engine%20%3D%3D%20ss.currentEngine%20%29%0A%20%20%20%20%20%20%20%20%20mi.style.fontWeight%20%3D%20%22bold%22%3B%0A%20%20%20%20%20%20%20%20%20mi.setAttribute%28%22onclick%22%2C%20%22event.preventDefault%28%29%3Bevent.stopPropagation%28%29%3BparentNode.parentNode.selectEngine%28parentNode.parentNode%2C%20event%29%22%29%3B%0A%20%20%20%20%20%20%20%20%20aNode.insertBefore%28mi%2C%20aNode.firstChild%29%3B%0A%20%20%20%20%20%20%20%20%20%7D%0A%7D%3B%0A%0Athis.currentEngine%20%3D%20searchService%28%29.currentEngine%3B%0Avar%20ss%20%3D%20searchService%28%29%3B%0Athis.engine%20%3D%20ss.currentEngine%3B%0Athis.image%20%3D%20this.engine.iconURI.spec%3B%0A%0Avar%20mp%20%3D%20this.appendChild%28document.createElement%28%22menupopup%22%29%29%3B%0Amp.setAttribute%28%22onpopupshowing%22%2C%20%22parentNode.populateMenu%28this%29%22%29%3B%0Amp.setAttribute%28%22oncommand%22%2C%20%22event.stopPropagation%28%29%22%29%3B%0A%0Avar%20managerSeparator%20%3D%20mp.appendChild%28document.createElement%28%22menuseparator%22%29%29%3B%0AmanagerSeparator.id%20%3D%20%22cb-searchbutton-separator%22%0Avar%20managerItem%20%3D%20mp.appendChild%28document.createElement%28%22menuitem%22%29%29%3B%0AmanagerItem.setAttribute%28%22label%22%2C%20%22Manage%20Search%20Engines...%22%29%3B%0AmanagerItem.setAttribute%28%22oncommand%22%2C%20%22openDialog%28%27chrome%3A//browser/content/search/engineManager.xul%27%2C%20%22%20+%20%22%27engineManager%27%2C%20%27chrome%2C%20dialog%3Dno%27%29%22%29%3B%0Athis.type%20%3D%20%22menu-button%22%3B%0A%0A%0A%0A/*%20%u0424%u0443%u043D%u043A%u0446%u0438%u044F%20%u043E%u0442%u0434%u0430%u0441%u0442%20%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u043D%u044B%u0439%20%u0442%u0435%u043A%u0441%u0442%20%u0438%u0437%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u044B%20%u0438%u043B%u0438%20%u0442%u0435%u043A%u0441%u0442%u043E%u0432%u043E%u0433%u043E%20%u043F%u043E%u043B%u044F%2C%20%0A%20%20%20%u0438%u043B%u0438%20%u0438%u0437%20%u0431%u0443%u0444%u0435%u0440%u0430%20%u043E%u0431%u043C%u0435%u043D%u0430%20%u0435%u0441%u043B%u0438%20%u0442%u0435%u043A%u0441%u0442%20%u043D%u0435%20%u0432%u044B%u0434%u0435%u043B%u0435%u043D%2C%20%u0435%u0441%u043B%u0438%20%u043D%u0435%u0442%20%u0442%u0435%u043A%u0441%u0442%u0430%20%u043E%u0442%u0434%u0430%u0441%u0442%20%27false%27%20..............%20*/%0Afunction%20getSelect%28%29%20%7B%0A%20%20//%20%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u043D%u044B%u0439%20%u0442%u0435%u043A%u0441%u0442%20%u0438%u0437%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u044B%20....%0A%20%20window.content.focus%28%29%3B%0A%20%20var%20selection%20%3D%20document.commandDispatcher.focusedWindow.getSelection%28%29.toString%28%29%3B%0A%0A%20%20//%20%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u043D%u044B%u0439%20%u0442%u0435%u043A%u0441%u0442%20%u0438%u0437%20%u0442%u0435%u043A%u0441%u0442%u043E%u0432%u043E%u0433%u043E%20%u043F%u043E%u043B%u044F%20....%0A%20%20if%20%28%20selection%20%3D%3D%20%27%27%20%29%20%7B%0A%20%20%20%20%20%20%20var%20theBox%20%3D%20document.commandDispatcher.focusedElement%3B%0A%20%20%20%20%20%20%20if%20%28%20theBox%20%26%26%20%28theBox.type%20%3D%3D%20%22text%22%20%7C%7C%20theBox.type%20%3D%3D%20%22textarea%22%29%20%29%20%7B%20%0A%20%20%20%20%20%20%20%20%20%20%20%20var%20startPos%20%3D%20theBox.selectionStart%3B%0A%09%20%20%20%20var%20endPos%20%3D%20theBox.selectionEnd%3B%0A%09%20%20%20%20var%20selection%20%3D%20theBox.value.substring%28startPos%2C%20endPos%29%3B%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%20%20%20%0A%20%20//%20%u0442%u0435%u043A%u0441%u0442%20%u0438%u0437%20%u0431%u0443%u0444%u0435%u0440%u0430%20%u043E%u0431%u043C%u0435%u043D%u0430%20....%0A%20%20if%20%28%20selection%20%3D%3D%20%27%27%20%29%20var%20selection%20%3D%20gClipboard.read%28%29%3B%0A%20%20%20%20%20%20%20%20%20%0A%20%20//%20%u0443%u0431%u0438%u0440%u0430%u0435%u043C%20%u043F%u0440%u043E%u0431%u0435%u043B%u044B%20%u0441%20%u043E%u0431%u043E%u0438%u0445%20%u043A%u043E%u043D%u0446%u043E%u0432%20%u0442%u0435%u043A%u0441%u0442%u0430%20....%0A%20%20if%20%28%20selection%20%21%3D%3D%20%27%27%20%29%20var%20selection%20%3D%20selection.toString%28%29.replace%28/%5E%5Cs+%7C%5Cs+%24/g%2C%22%22%29%3B%0A%20%20%0A%20%20if%20%28%20selection%20%3D%3D%20%27%27%29%20%7B%20%0A%20%20%20%20%20%20%20var%20str%20%3D%20%22%u0412%u044B%u0434%u0435%u043B%u0438%u0442%u0435%20%u0438%u043B%u0438%20%u0441%u043A%u043E%u043F%u0438%u0440%u0443%u0439%u0442%u0435%20%u0442%u0435%u043A%u0441%u0442%21%22%0A%20%20%20%20%20%20%20alertsService.showAlertNotification%28_this.image%2C%20_this.label%2C%20str%2C%20false%2C%20%22%22%2C%20null%2C%20%22%22%29%3B%0A%20%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%0A%20%20return%20%28%20selection%20%3D%3D%20%27%27%29%3F%20false%3A%20selection%3B%0A%7D%3B%0A%0A%0A//%20%u041F%u043E%u0434%u0441%u043A%u0430%u0437%u043A%u0430%20%u043A%u043D%u043E%u043F%u043A%u0438%20%u0438%20%u043E%u0442%u0441%u0442%u0443%u043F%20%u0441%u043F%u0440%u0430%u0432%u0430%20%u0443%20%u043A%u043D%u043E%u043F%u043A%u0438%20................................................%0Athis.tooltipText%20%3D%20%22Search%20and%20open%20%5Cn%u041B%3A%20%u0418%u0441%u043A%u0430%u0442%u044C%20%u0442%u0435%u043A%u0441%u0442%20%u0438%u0437%20%u0431%u0443%u0444%u0435%u0440%u0430%20%u043E%u0431%u043C%u0435%u043D%u0430/%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u043D%u044B%u0439%20%5Cn%u041C%3A%20%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20%u0432%u0441%u0435%20%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u043D%u044B%u0435%20%u0441%u0441%u044B%u043B%u043A%u0438%20%5Cn%u041F%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%20%u043E%u0431%u043C%u0435%u043D%u0430/%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u043D%u044B%u0439%22%3B%0A//this.setAttribute%28%22style%22%2C%20%22margin-right%3A%2010px%3B%22%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%5Bnull%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

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

Выделить код

Код:

//  Настройка функций кликов мыши для кнопки ...............................................
this.onclick = function(e) {
     
     if ( e.button == 0 ) { // ЛКМ 
          if ( e.originalTarget.nodeName != "xul:toolbarbutton") return;
               var text = getSelect();
               if ( !!text) 
                    var ss = Cc["@mozilla.org/browser/search-service;1"].getService(Ci.nsIBrowserSearchService);
                    var submission = ss.currentEngine.getSubmission(text, null);
                    gBrowser.loadOneTab(submission.uri.spec, null, null, submission.postData, true, false);
          }; 
                  
     if ( e.button == 1 ) { // СКМ  
          var win = document.commandDispatcher.focusedWindow, doc = win.document;
          var sel = doc, winSel = win.getSelection();
          if ( winSel.toString() ) {
               var sel = doc.createElement('div');
               sel.appendChild( winSel.getRangeAt(0).cloneContents() );
               }
          var str = '', links = sel.getElementsByTagName('a');
          
          if ( links.length > 16 && !confirm('Открыть ' + links.length + ' ссылки в новых вкладках?') ) return;
          
          for( var i = 0, lnk; lnk = links[i]; i++ ) {
               if ( lnk.href) gBrowser.addTab( lnk.href );
               }    
          };
                   
     if ( e.button == 2 && !e.ctrlKey && !e.shiftKey && !e.altKey && !e.metaKey )  { // ПКМ 
          e.preventDefault();
          var url = getSelect();
          if ( !!url ) gBrowser.loadOneTab( url, null, null, null, false, false );             
          };        
};



// Объявляем переменные для этой вкладки ..................................................................................................
var _this = this;
var alertsService = Components.classes["@mozilla.org/alerts-service;1"].getService(Components.interfaces.nsIAlertsService);



// Добавить контекстное меню с поисковиками для кнопки .........................................
function searchService() {
   return Components.classes["@mozilla.org/browser/search-service;1"].getService(Components.interfaces.nsIBrowserSearchService);
}

this.selectEngine = function(aNode, aEvent) {
   var engine = aEvent.target.engine;
   var ss = searchService();
   ss.currentEngine = ss.getEngineByName(engine.name);
   aNode.engine = engine;
   aNode.image = aEvent.target.getAttribute("src");
}

this.populateMenu = function(aNode) {
   var ss = searchService();
   var engines = ss.getVisibleEngines({ });
   const kXULNS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";

   while( aNode.firstChild && aNode.firstChild.localName != "menuseparator") {
          aNode.removeChild( aNode.firstChild );
          }

   for ( var i = engines.length - 1; i >= 0; i-- ) {
         var mi = document.createElementNS(kXULNS, "menuitem");
         mi.id = "cb-search-" + engines[i].name;
         mi.className = "menuitem-iconic searchbar-engine-menuitem";
         mi.setAttribute("label", engines[i].name);
         if ( engines[i].iconURI )  mi.setAttribute("src", engines[i].iconURI.spec );
         mi.engine = engines[i];
         if ( mi.engine == ss.currentEngine )
         mi.style.fontWeight = "bold";
         mi.setAttribute("onclick", "event.preventDefault();event.stopPropagation();parentNode.parentNode.selectEngine(parentNode.parentNode, event)");
         aNode.insertBefore(mi, aNode.firstChild);
         }
};

this.currentEngine = searchService().currentEngine;
var ss = searchService();
this.engine = ss.currentEngine;
this.image = this.engine.iconURI.spec;

var mp = this.appendChild(document.createElement("menupopup"));
mp.setAttribute("onpopupshowing", "parentNode.populateMenu(this)");
mp.setAttribute("oncommand", "event.stopPropagation()");

var managerSeparator = mp.appendChild(document.createElement("menuseparator"));
managerSeparator.id = "cb-searchbutton-separator"
var managerItem = mp.appendChild(document.createElement("menuitem"));
managerItem.setAttribute("label", "Manage Search Engines...");
managerItem.setAttribute("oncommand", "openDialog('chrome://browser/content/search/engineManager.xul', " + "'engineManager', 'chrome, dialog=no')");
this.type = "menu-button";



/* Функция отдаст выделенный текст из страницы или текстового поля, 
   или из буфера обмена если текст не выделен, если нет текста отдаст 'false' .............. */
function getSelect() {
  // выделенный текст из страницы ....
  window.content.focus();
  var selection = document.commandDispatcher.focusedWindow.getSelection().toString();

  // выделенный текст из текстового поля ....
  if ( selection == '' ) {
       var theBox = document.commandDispatcher.focusedElement;
       if ( theBox && (theBox.type == "text" || theBox.type == "textarea") ) { 
            var startPos = theBox.selectionStart;
        var endPos = theBox.selectionEnd;
        var selection = theBox.value.substring(startPos, endPos);  
            }
       };
       
  // текст из буфера обмена ....
  if ( selection == '' ) var selection = gClipboard.read();
         
  // убираем пробелы с обоих концов текста ....
  if ( selection !== '' ) var selection = selection.toString().replace(/^\s+|\s+$/g,"");
  
  if ( selection == '') { 
       var str = "Выделите или скопируйте текст!"
       alertsService.showAlertNotification(_this.image, _this.label, str, false, "", null, "");
       };
    
  return ( selection == '')? false: selection;
};


// Подсказка кнопки и отступ справа у кнопки ................................................
this.tooltipText = "Search and open \nЛ: Искать текст из буфера обмена/выделенный \nМ: Открыть все выделенные ссылки \nП: Открыть адрес из буфера обмена/выделенный";
//this.setAttribute("style", "margin-right: 10px;");

Green style( 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%3EGreen%20style%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAAAAAAAAD/Eykp/xgyMv8YMTH/GDEx/xgxMf8YMTH/GDEx/xgxMf8YMTH/GDEx/xgxMf8YMTH/GDIy/xMpKf8AAAD/AAAA/1Cop/9Nrqv/SKKf/0mkof9JpKH/SaSh/0mkof9JpKH/SaSh/0mkof9JpKH/SKKf/02uq/9QqKf/AAAA/wAAAP9OoqH/PpSQ/zWFgf83iIT/N4iE/zeIhP83iIT/N4iE/zeIhP83iIT/N4iE/zWFgf8+lJD/TqKh/wAAAP8AAAD/U6in/0WgnP88ko3/PpWQ/z6VkP8+lZD/PpWQ/z6VkP8+lZD/PpWQ/z6VkP88ko3/RaCc/1Oop/8AAAD/AAAA/1asrP9HpKD/PpaR/0CZlP9AmZT/QJmU/0CZlP9AmZT/QJmU/0CZlP9AmZT/PpaR/0ekoP9WrKz/AAAA/wAAAP9ZsLH/SKmj/0Calf9CnZj/Qp2Y/0KdmP9CnZj/Qp2Y/0KdmP9CnZj/Qp2Y/0Calf9IqaP/WbCx/wAAAP8AAAD/XLW1/0uuqP9Cn5n/RKKc/0SinP9Eopz/RKKc/0SinP9Eopz/RKKc/0SinP9Cn5n/S66o/1y1tf8AAAD/AwMD/2C4uv9OtK//RKWf/0aoov9GqKL/Rqii/0aoov9GqKL/Rqii/0aoov9GqKL/RKWf/060r/9guLr/AwMD/1NSUv9qw8T/V8XE/1O+u/9Uv73/VL+9/1S/vf9Uv73/VL+9/1S/vf9Uv73/VL+9/1O+u/9XxcT/asPE/1NSUv9XVlb/bcfI/1vLyv9XxML/WMXE/1jFxP9YxcT/WMXE/1jFxP9YxcT/WMXE/1jFxP9XxML/W8vK/23HyP9XVlb/VlVU/3DMzf9f0ND/WsnH/1vKyf9bysn/W8rJ/1vKyf9bysn/W8rJ/1vKyf9bysn/WsnH/1/Q0P9wzM3/VlVU/1ZUVP9zz9H/YtfV/13Qzf9e0c7/XtHO/17Rzv9e0c7/XtHO/17Rzv9e0c7/XtHO/13Qzf9i19X/c8/R/1ZUVP9WVFT/d9PW/2Xc2/9f1dP/YdbU/2HW1P9h1tT/YdbU/2HW1P9h1tT/YdbU/2HW1P9f1dP/Zdzb/3fT1v9WVFT/VlRU/3nV2P9j39z/XdjU/1/Z1f9f2dX/X9nV/1/Z1f9f2dX/X9nV/1/Z1f9f2dX/XdjU/2Pf3P951dj/VlRU/1ZUVP9/4+f/ePX2/3Xu7/927/D/du/w/3bv8P927/D/du/w/3bv8P927/D/du/w/3Xu7/949fb/f+Pn/1ZUVP9XVlb/YXt8/2aBg/9mgIL/ZoCC/2aAgv9mgIL/ZoCC/2aAgv9mgIL/ZoCC/2aAgv9mgIL/ZoGD/2F7fP9XVlb/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%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%0A%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5Bthis.checked%20%3D%20%21this.checked%3B%0A%0Aif%20%28%20this.%20checked%20%29%20%0A%20%20%20%20%20this.image%20%3D%20%22data%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAAAAAAAAD/GicS/yI1GP8hNRf/ITQW/yE0Fv8hNBb/ITQW/yE0Fv8hNBb/ITQW/yE0Fv8hNRf/IjUY/xonEv8AAAD/AAAA/3GpUP94uU//ca9K/3OwS/9zsEv/c7BL/3OwS/9zsEv/c7BL/3OwS/9zsEv/ca9K/3i5T/9xqVD/AAAA/wAAAP9rok3/XY47/1J/Mf9UgTT/VIE0/1SBNP9UgTT/VIE0/1SBNP9UgTT/VIE0/1J/Mf9djjv/a6JN/wAAAP8AAAD/calU/2qhRv9glD3/YpY//2KWP/9ilj//YpY//2KWP/9ilj//YpY//2KWP/9glD3/aqFG/3GpVP8AAAD/AAAA/3WtVv9so0f/YpU//2SYQf9kmEH/ZJhB/2SYQf9kmEH/ZJhB/2SYQf9kmEH/YpU//2yjR/91rVb/AAAA/wICAv93sVn/cKpJ/2edQf9poEP/aaBD/2mgQ/9poEP/aaBD/2mgQ/9poEP/aaBD/2edQf9wqkn/d7FZ/wICAv8AAAD/e7Vc/3SvTf9qoEP/bKRF/2ykRf9spEX/bKRF/2ykRf9spEX/bKRF/2ykRf9qoEP/dK9N/3u1XP8AAAD/Dg4O/3+6Yf95tlH/b6lI/3GsSv9xrEr/caxK/3GsSv9xrEr/caxK/3GsSv9xrEr/b6lI/3m2Uf9/umH/Dg4O/0xLTP+Hw2n/fsNX/3m8Uf96vlP/er5T/3q+U/96vlP/er5T/3q+U/96vlP/er5T/3m8Uf9+w1f/h8Np/0xLTP9cW1z/jMlu/4TMWv9/xVf/gMZX/4DGV/+Axlf/gMZX/4DGV/+Axlf/gMZX/4DGV/9/xVf/hMxa/4zJbv9cW1z/VFJU/5DNcP+I0V3/gslY/4PKWf+Dyln/g8pZ/4PKWf+Dyln/g8pZ/4PKWf+Dyln/gslY/4jRXf+QzXD/VFJU/1ZUVv+S0XP/jNZh/4bPXP+H0F3/h9Bd/4fQXf+H0F3/h9Bd/4fQXf+H0F3/h9Bd/4bPXP+M1mH/ktFz/1ZUVv9WVFb/ltZ3/5HdZv+N1WD/jtZi/47WYv+O1mL/jtZi/47WYv+O1mL/jtZi/47WYv+N1WD/kd1m/5bWd/9WVFb/VlRW/5fYef+R3mL/i9Zc/4zXXv+M117/jNde/4zXXv+M117/jNde/4zXXv+M117/i9Zc/5HeYv+X2Hn/VlRW/1ZUVv+h6X//pfl5/5/wdf+g8Xb/oPF2/6Dxdv+g8Xb/oPF2/6Dxdv+g8Xb/oPF2/5/wdf+l+Xn/oel//1ZUVv9XVlf/aXpi/2uAZf9rfWX/a35k/2t+ZP9rfmT/a35k/2t+ZP9rfmT/a35k/2t+ZP9rfWX/a4Bl/2l6Yv9XVlf/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%3D%3D%22%3B%0Aelse%20%0A%20%20%20%20%20this.image%20%3D%20%22data%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAAAAAAAAD/Eykp/xgyMv8YMTH/GDEx/xgxMf8YMTH/GDEx/xgxMf8YMTH/GDEx/xgxMf8YMTH/GDIy/xMpKf8AAAD/AAAA/1Cop/9Nrqv/SKKf/0mkof9JpKH/SaSh/0mkof9JpKH/SaSh/0mkof9JpKH/SKKf/02uq/9QqKf/AAAA/wAAAP9OoqH/PpSQ/zWFgf83iIT/N4iE/zeIhP83iIT/N4iE/zeIhP83iIT/N4iE/zWFgf8+lJD/TqKh/wAAAP8AAAD/U6in/0WgnP88ko3/PpWQ/z6VkP8+lZD/PpWQ/z6VkP8+lZD/PpWQ/z6VkP88ko3/RaCc/1Oop/8AAAD/AAAA/1asrP9HpKD/PpaR/0CZlP9AmZT/QJmU/0CZlP9AmZT/QJmU/0CZlP9AmZT/PpaR/0ekoP9WrKz/AAAA/wAAAP9ZsLH/SKmj/0Calf9CnZj/Qp2Y/0KdmP9CnZj/Qp2Y/0KdmP9CnZj/Qp2Y/0Calf9IqaP/WbCx/wAAAP8AAAD/XLW1/0uuqP9Cn5n/RKKc/0SinP9Eopz/RKKc/0SinP9Eopz/RKKc/0SinP9Cn5n/S66o/1y1tf8AAAD/AwMD/2C4uv9OtK//RKWf/0aoov9GqKL/Rqii/0aoov9GqKL/Rqii/0aoov9GqKL/RKWf/060r/9guLr/AwMD/1NSUv9qw8T/V8XE/1O+u/9Uv73/VL+9/1S/vf9Uv73/VL+9/1S/vf9Uv73/VL+9/1O+u/9XxcT/asPE/1NSUv9XVlb/bcfI/1vLyv9XxML/WMXE/1jFxP9YxcT/WMXE/1jFxP9YxcT/WMXE/1jFxP9XxML/W8vK/23HyP9XVlb/VlVU/3DMzf9f0ND/WsnH/1vKyf9bysn/W8rJ/1vKyf9bysn/W8rJ/1vKyf9bysn/WsnH/1/Q0P9wzM3/VlVU/1ZUVP9zz9H/YtfV/13Qzf9e0c7/XtHO/17Rzv9e0c7/XtHO/17Rzv9e0c7/XtHO/13Qzf9i19X/c8/R/1ZUVP9WVFT/d9PW/2Xc2/9f1dP/YdbU/2HW1P9h1tT/YdbU/2HW1P9h1tT/YdbU/2HW1P9f1dP/Zdzb/3fT1v9WVFT/VlRU/3nV2P9j39z/XdjU/1/Z1f9f2dX/X9nV/1/Z1f9f2dX/X9nV/1/Z1f9f2dX/XdjU/2Pf3P951dj/VlRU/1ZUVP9/4+f/ePX2/3Xu7/927/D/du/w/3bv8P927/D/du/w/3bv8P927/D/du/w/3Xu7/949fb/f+Pn/1ZUVP9XVlb/YXt8/2aBg/9mgIL/ZoCC/2aAgv9mgIL/ZoCC/2aAgv9mgIL/ZoCC/2aAgv9mgIL/ZoGD/2F7fP9XVlb/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%3D%3D%22%3B%0A%0A%0Avar%20css%20%3D%20%27%5C%0A@-moz-document%20url-prefix%28%22http%22%29%2C%20url-prefix%28%22https%22%29%2C%20url-prefix%28%22ftp%22%29%2C%20url-prefix%28%22file%22%29%20%7B%5C%0Ahtml%20*%2C%20html%20%7B%5C%0Abackground%3A%20%23BADBAD%20%21important%3B%20text-shadow%3A%20none%20%21important%3B%5C%0A-moz-border-top-colors%3A%20%238FBC8F%20%21important%3B%20-moz-border-bottom-colors%3A%20%238FBC8F%21important%3B%5C%0A-moz-border-left-colors%3A%20%238FBC8F%20%21important%3B%20-moz-border-right-colors%3A%20%238FBC8F%20%21important%3B%5C%0A%7D%5C%0Acode%2C%20pre%2C%20input%2C%20samp%2C%20kbd%2C%20var%2C%20dfn%2C.postright%20%7B%5C%0A-moz-appearance%3A%20none%20%21important%3B%5C%0Abackground-color%3A%20%23BADBAD%20%21important%3B%5C%0A%7D%5C%0Ainput%2C%20select%2C%20textarea%2C%20button%20%7B%5C%0A-moz-appearance%3A%20none%20%21important%3B%5C%0Aborder%3A%201px%20solid%20%23BADBAD%20%21important%3B%5C%0Abackground-color%3A%20%23BADBAD%20%21important%3B%5C%0A%7D%5C%0A.codebox%2C%20BLOCKQUOTE%2C%20TEXTAREA%2C%20.spoiler%20%7B%20-moz-border-top-colors%3A%20%23444%20%20%21important%3B%20-moz-border-bottom-colors%3A%20%23444%20%21important%3B%5C%0A-moz-border-left-colors%3A%20%23444%20%21important%3B%20-moz-border-right-colors%3A%20%23444%20%21important%3B%5C%0A%7D%5C%0Aa%3Alink%20%7B%20font-weight%3A%20bold%20%21important%3B%20text-decoration%3A%20underline%20%21important%3B%20%7D%5C%0Aa%3Avisited%20%7B%20color%3A%20%23FFB720%20%21important%3B%20%7D%5C%0Aa%3Aactive%20%7B%20color%3A%20%23ff2424%20%21important%3B%20%7D%5C%0Aa%3Ahover%20%7B%20color%3A%20red%21%20important%3B%20%7D%5C%0A%7D%27%3B%0A%0Aconst%20sss%20%3D%20Cc%5B%22@mozilla.org/content/style-sheet-service%3B1%22%5D.getService%28Ci.nsIStyleSheetService%29%3B%20%20%0Avar%20uri%20%3D%20makeURI%28%22data%3Atext/css%2C%22%20+%20encodeURIComponent%28css%29%29%3B%0A%0Aif%20%28%20sss.sheetRegistered%28uri%2C%20sss.AGENT_SHEET%29%20%29%20sss.unregisterSheet%28uri%2C%20sss.AGENT_SHEET%29%3B%0Aelse%20%0A%20%20%20%20sss.loadAndRegisterSheet%28uri%2C%20sss.AGENT_SHEET%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

Код:

Выделить код

Код:

this.checked = !this.checked;

if ( this. checked ) 
     this.image = "data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAAAAAAAAD/GicS/yI1GP8hNRf/ITQW/yE0Fv8hNBb/ITQW/yE0Fv8hNBb/ITQW/yE0Fv8hNRf/IjUY/xonEv8AAAD/AAAA/3GpUP94uU//ca9K/3OwS/9zsEv/c7BL/3OwS/9zsEv/c7BL/3OwS/9zsEv/ca9K/3i5T/9xqVD/AAAA/wAAAP9rok3/XY47/1J/Mf9UgTT/VIE0/1SBNP9UgTT/VIE0/1SBNP9UgTT/VIE0/1J/Mf9djjv/a6JN/wAAAP8AAAD/calU/2qhRv9glD3/YpY//2KWP/9ilj//YpY//2KWP/9ilj//YpY//2KWP/9glD3/aqFG/3GpVP8AAAD/AAAA/3WtVv9so0f/YpU//2SYQf9kmEH/ZJhB/2SYQf9kmEH/ZJhB/2SYQf9kmEH/YpU//2yjR/91rVb/AAAA/wICAv93sVn/cKpJ/2edQf9poEP/aaBD/2mgQ/9poEP/aaBD/2mgQ/9poEP/aaBD/2edQf9wqkn/d7FZ/wICAv8AAAD/e7Vc/3SvTf9qoEP/bKRF/2ykRf9spEX/bKRF/2ykRf9spEX/bKRF/2ykRf9qoEP/dK9N/3u1XP8AAAD/Dg4O/3+6Yf95tlH/b6lI/3GsSv9xrEr/caxK/3GsSv9xrEr/caxK/3GsSv9xrEr/b6lI/3m2Uf9/umH/Dg4O/0xLTP+Hw2n/fsNX/3m8Uf96vlP/er5T/3q+U/96vlP/er5T/3q+U/96vlP/er5T/3m8Uf9+w1f/h8Np/0xLTP9cW1z/jMlu/4TMWv9/xVf/gMZX/4DGV/+Axlf/gMZX/4DGV/+Axlf/gMZX/4DGV/9/xVf/hMxa/4zJbv9cW1z/VFJU/5DNcP+I0V3/gslY/4PKWf+Dyln/g8pZ/4PKWf+Dyln/g8pZ/4PKWf+Dyln/gslY/4jRXf+QzXD/VFJU/1ZUVv+S0XP/jNZh/4bPXP+H0F3/h9Bd/4fQXf+H0F3/h9Bd/4fQXf+H0F3/h9Bd/4bPXP+M1mH/ktFz/1ZUVv9WVFb/ltZ3/5HdZv+N1WD/jtZi/47WYv+O1mL/jtZi/47WYv+O1mL/jtZi/47WYv+N1WD/kd1m/5bWd/9WVFb/VlRW/5fYef+R3mL/i9Zc/4zXXv+M117/jNde/4zXXv+M117/jNde/4zXXv+M117/i9Zc/5HeYv+X2Hn/VlRW/1ZUVv+h6X//pfl5/5/wdf+g8Xb/oPF2/6Dxdv+g8Xb/oPF2/6Dxdv+g8Xb/oPF2/5/wdf+l+Xn/oel//1ZUVv9XVlf/aXpi/2uAZf9rfWX/a35k/2t+ZP9rfmT/a35k/2t+ZP9rfmT/a35k/2t+ZP9rfWX/a4Bl/2l6Yv9XVlf/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==";
else 
     this.image = "data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAAAAAAAAD/Eykp/xgyMv8YMTH/GDEx/xgxMf8YMTH/GDEx/xgxMf8YMTH/GDEx/xgxMf8YMTH/GDIy/xMpKf8AAAD/AAAA/1Cop/9Nrqv/SKKf/0mkof9JpKH/SaSh/0mkof9JpKH/SaSh/0mkof9JpKH/SKKf/02uq/9QqKf/AAAA/wAAAP9OoqH/PpSQ/zWFgf83iIT/N4iE/zeIhP83iIT/N4iE/zeIhP83iIT/N4iE/zWFgf8+lJD/TqKh/wAAAP8AAAD/U6in/0WgnP88ko3/PpWQ/z6VkP8+lZD/PpWQ/z6VkP8+lZD/PpWQ/z6VkP88ko3/RaCc/1Oop/8AAAD/AAAA/1asrP9HpKD/PpaR/0CZlP9AmZT/QJmU/0CZlP9AmZT/QJmU/0CZlP9AmZT/PpaR/0ekoP9WrKz/AAAA/wAAAP9ZsLH/SKmj/0Calf9CnZj/Qp2Y/0KdmP9CnZj/Qp2Y/0KdmP9CnZj/Qp2Y/0Calf9IqaP/WbCx/wAAAP8AAAD/XLW1/0uuqP9Cn5n/RKKc/0SinP9Eopz/RKKc/0SinP9Eopz/RKKc/0SinP9Cn5n/S66o/1y1tf8AAAD/AwMD/2C4uv9OtK//RKWf/0aoov9GqKL/Rqii/0aoov9GqKL/Rqii/0aoov9GqKL/RKWf/060r/9guLr/AwMD/1NSUv9qw8T/V8XE/1O+u/9Uv73/VL+9/1S/vf9Uv73/VL+9/1S/vf9Uv73/VL+9/1O+u/9XxcT/asPE/1NSUv9XVlb/bcfI/1vLyv9XxML/WMXE/1jFxP9YxcT/WMXE/1jFxP9YxcT/WMXE/1jFxP9XxML/W8vK/23HyP9XVlb/VlVU/3DMzf9f0ND/WsnH/1vKyf9bysn/W8rJ/1vKyf9bysn/W8rJ/1vKyf9bysn/WsnH/1/Q0P9wzM3/VlVU/1ZUVP9zz9H/YtfV/13Qzf9e0c7/XtHO/17Rzv9e0c7/XtHO/17Rzv9e0c7/XtHO/13Qzf9i19X/c8/R/1ZUVP9WVFT/d9PW/2Xc2/9f1dP/YdbU/2HW1P9h1tT/YdbU/2HW1P9h1tT/YdbU/2HW1P9f1dP/Zdzb/3fT1v9WVFT/VlRU/3nV2P9j39z/XdjU/1/Z1f9f2dX/X9nV/1/Z1f9f2dX/X9nV/1/Z1f9f2dX/XdjU/2Pf3P951dj/VlRU/1ZUVP9/4+f/ePX2/3Xu7/927/D/du/w/3bv8P927/D/du/w/3bv8P927/D/du/w/3Xu7/949fb/f+Pn/1ZUVP9XVlb/YXt8/2aBg/9mgIL/ZoCC/2aAgv9mgIL/ZoCC/2aAgv9mgIL/ZoCC/2aAgv9mgIL/ZoGD/2F7fP9XVlb/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==";


var css = '\
@-moz-document url-prefix("http"), url-prefix("https"), url-prefix("ftp"), url-prefix("file") {\
html *, html {\
background: #BADBAD !important; text-shadow: none !important;\
-moz-border-top-colors: #8FBC8F !important; -moz-border-bottom-colors: #8FBC8F!important;\
-moz-border-left-colors: #8FBC8F !important; -moz-border-right-colors: #8FBC8F !important;\
}\
code, pre, input, samp, kbd, var, dfn,.postright {\
-moz-appearance: none !important;\
background-color: #BADBAD !important;\
}\
input, select, textarea, button {\
-moz-appearance: none !important;\
border: 1px solid #BADBAD !important;\
background-color: #BADBAD !important;\
}\
.codebox, BLOCKQUOTE, TEXTAREA, .spoiler { -moz-border-top-colors: #444  !important; -moz-border-bottom-colors: #444 !important;\
-moz-border-left-colors: #444 !important; -moz-border-right-colors: #444 !important;\
}\
a:link { font-weight: bold !important; text-decoration: underline !important; }\
a:visited { color: #FFB720 !important; }\
a:active { color: #ff2424 !important; }\
a:hover { color: red! important; }\
}';

const sss = Cc["@mozilla.org/content/style-sheet-service;1"].getService(Ci.nsIStyleSheetService);  
var uri = makeURI("data:text/css," + encodeURIComponent(css));

if ( sss.sheetRegistered(uri, sss.AGENT_SHEET) ) sss.unregisterSheet(uri, sss.AGENT_SHEET);
else 
    sss.loadAndRegisterSheet(uri, sss.AGENT_SHEET);


Global dark style( Firefox 17+ ) от 08.11.2013.
меняет фон страниц на чёрный, своеобразный ночной режим. Css код создающий чёрный стиль находится в вкладке Справка, его можно легко редактировать или полностью поменять. Кнопку можно использовать для быстрого запуска любых других Css стилей.

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

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

Выделить код

Код:

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%u0423%u043C%u0435%u043D%u044C%u0448%u0438%u0442%u044C%20%u044F%u0440%u043A%u043E%u0441%u0442%u044C%20%u0441%u0430%u0439%u0442%u0430%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAAAAAAAAD/Eykp/xgyMv8YMTH/GDEx/xgxMf8YMTH/GDEx/xgxMf8YMTH/GDEx/xgxMf8YMTH/GDIy/xMpKf8AAAD/AAAA/1Cop/9Nrqv/SKKf/0mkof9JpKH/SaSh/0mkof9JpKH/SaSh/0mkof9JpKH/SKKf/02uq/9QqKf/AAAA/wAAAP9OoqH/PpSQ/zWFgf83iIT/N4iE/zeIhP83iIT/N4iE/zeIhP83iIT/N4iE/zWFgf8+lJD/TqKh/wAAAP8AAAD/U6in/0WgnP88ko3/PpWQ/z6VkP8+lZD/PpWQ/z6VkP8+lZD/PpWQ/z6VkP88ko3/RaCc/1Oop/8AAAD/AAAA/1asrP9HpKD/PpaR/0CZlP9AmZT/QJmU/0CZlP9AmZT/QJmU/0CZlP9AmZT/PpaR/0ekoP9WrKz/AAAA/wAAAP9ZsLH/SKmj/0Calf9CnZj/Qp2Y/0KdmP9CnZj/Qp2Y/0KdmP9CnZj/Qp2Y/0Calf9IqaP/WbCx/wAAAP8AAAD/XLW1/0uuqP9Cn5n/RKKc/0SinP9Eopz/RKKc/0SinP9Eopz/RKKc/0SinP9Cn5n/S66o/1y1tf8AAAD/AwMD/2C4uv9OtK//RKWf/0aoov9GqKL/Rqii/0aoov9GqKL/Rqii/0aoov9GqKL/RKWf/060r/9guLr/AwMD/1NSUv9qw8T/V8XE/1O+u/9Uv73/VL+9/1S/vf9Uv73/VL+9/1S/vf9Uv73/VL+9/1O+u/9XxcT/asPE/1NSUv9XVlb/bcfI/1vLyv9XxML/WMXE/1jFxP9YxcT/WMXE/1jFxP9YxcT/WMXE/1jFxP9XxML/W8vK/23HyP9XVlb/VlVU/3DMzf9f0ND/WsnH/1vKyf9bysn/W8rJ/1vKyf9bysn/W8rJ/1vKyf9bysn/WsnH/1/Q0P9wzM3/VlVU/1ZUVP9zz9H/YtfV/13Qzf9e0c7/XtHO/17Rzv9e0c7/XtHO/17Rzv9e0c7/XtHO/13Qzf9i19X/c8/R/1ZUVP9WVFT/d9PW/2Xc2/9f1dP/YdbU/2HW1P9h1tT/YdbU/2HW1P9h1tT/YdbU/2HW1P9f1dP/Zdzb/3fT1v9WVFT/VlRU/3nV2P9j39z/XdjU/1/Z1f9f2dX/X9nV/1/Z1f9f2dX/X9nV/1/Z1f9f2dX/XdjU/2Pf3P951dj/VlRU/1ZUVP9/4+f/ePX2/3Xu7/927/D/du/w/3bv8P927/D/du/w/3bv8P927/D/du/w/3Xu7/949fb/f+Pn/1ZUVP9XVlb/YXt8/2aBg/9mgIL/ZoCC/2aAgv9mgIL/ZoCC/2aAgv9mgIL/ZoCC/2aAgv9mgIL/ZoGD/2F7fP9XVlb/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%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.onclick%20%3D%20function%28e%29%20%7B%20%20%20%20%20%0A%20%20%20%20%20if%20%28%20e.button%20%3D%3D%200%20%29%20setStyleForPages%28%29%3B%20//%20%u041B%u041A%u041C%0A%7D%3B%0A%0A%0Avar%20uri%20%3D%20makeURI%28%22data%3Atext/css%2C%22%20+%20encodeURIComponent%28%20self.Help%20%29%29%3B%0Aconst%20sss%20%3D%20Cc%5B%22@mozilla.org/content/style-sheet-service%3B1%22%5D.getService%28Ci.nsIStyleSheetService%29%3B%0A%0Avar%20icon%20%3D%20self.ownerDocument.getAnonymousElementByAttribute%28%20self%2C%20%22class%22%2C%20%22toolbarbutton-icon%22%29%3B%0Avar%20styleImage%20%3D%20%22data%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAAAAAAAAD/NTU1/z8/P/89PT3/Pj4+/z4+Pv8+Pj7/Pj4+/z4+Pv8+Pj7/Pj4+/z4+Pv89PT3/Pz8//zU1Nf8AAAD/AAAA/6Ghof+YmJj/ioqK/42Njf+NjY3/jY2N/42Njf+NjY3/jY2N/42Njf+NjY3/ioqK/5iYmP+hoaH/AAAA/wAAAP+dnZ3/hISE/3R0dP94eHj/eHh4/3h4eP94eHj/eHh4/3h4eP94eHj/eHh4/3R0dP+EhIT/nZ2d/wAAAP8AAAD/qKio/5OTk/+CgoL/hoaG/4aGhv+Ghob/hoaG/4aGhv+Ghob/hoaG/4aGhv+CgoL/k5OT/6ioqP8AAAD/AAAA/6+vr/+ampr/iYmJ/42Njf+NjY3/jY2N/42Njf+NjY3/jY2N/42Njf+NjY3/iYmJ/5qamv+vr6//AAAA/wAAAP+1tbX/oqKi/5GRkf+VlZX/lZWV/5WVlf+VlZX/lZWV/5WVlf+VlZX/lZWV/5GRkf+ioqL/tbW1/wAAAP8CAgL/vb29/6mpqf+Xl5f/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+Xl5f/qamp/729vf8CAgL/AAAA/8PDw/+xsbH/n5+f/6Ojo/+jo6P/o6Oj/6Ojo/+jo6P/o6Oj/6Ojo/+jo6P/n5+f/7Gxsf/Dw8P/AAAA/zo6Ov/Pz8//xMTE/7a2tv+5ubn/ubm5/7m5uf+5ubn/ubm5/7m5uf+5ubn/ubm5/7a2tv/ExMT/z8/P/zo6Ov9aWlr/2dnZ/9PT0//Jycn/ysrK/8rKyv/Kysr/ysrK/8rKyv/Kysr/ysrK/8rKyv/Jycn/09PT/9nZ2f9aWlr/U1NT/9/f3//a2tr/z8/P/9HR0f/R0dH/0dHR/9HR0f/R0dH/0dHR/9HR0f/R0dH/z8/P/9ra2v/f39//U1NT/1RUVP/m5ub/4+Pj/9jY2P/a2tr/2tra/9ra2v/a2tr/2tra/9ra2v/a2tr/2tra/9jY2P/j4+P/5ubm/1RUVP9UVFT/7u7u/+3t7f/i4uL/5OTk/+Tk5P/k5OT/5OTk/+Tk5P/k5OT/5OTk/+Tk5P/i4uL/7e3t/+7u7v9UVFT/VFRU/+/v7//y8vL/5+fn/+np6f/p6en/6enp/+np6f/p6en/6enp/+np6f/p6en/5+fn//Ly8v/v7+//VFRU/1RUVP/8/Pz//////////////////////////////////////////////////////////////////Pz8/1RUVP9WVlb/kJCQ/5WVlf+VlZX/lpaW/5aWlv+Wlpb/lpaW/5aWlv+Wlpb/lpaW/5aWlv+VlZX/lZWV/5CQkP9WVlb/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%3D%3D%22%3B%0A%0A%0Afunction%20setStyleForPages%28%20reason%20%29%20%7B%20%0A%20%20%20%0A%20%20%20var%20style%20%3D%20sss.sheetRegistered%28uri%2C%20sss.AGENT_SHEET%29%3B%20%20%0A%0A%20%20%20if%20%28%20style%20%29%20%7B%20%20%20%0A%20%20%20%20%20%20%20%20sss.unregisterSheet%28uri%2C%20sss.AGENT_SHEET%29%3B%0A%20%20%20%20%20%20%20%20icon.src%20%3D%20self.image%3B%0A%20%20%20%20%20%20%20%20%7D%20%20%20%20%0A%20%20%20%0A%20%20%20if%20%28%20%28%21style%20%26%26%20reason%20%21%3D%3D%20%27update%27%29%20%7C%7C%20%28style%20%26%26%20reason%20%3D%3D%20%27update%27%29%20%29%20%7B%20%0A%20%20%20%20%20%20%20%20sss.loadAndRegisterSheet%28uri%2C%20sss.AGENT_SHEET%29%3B%0A%20%20%20%20%20%20%20%20icon.src%20%3D%20styleImage%3B%20%0A%20%20%20%20%20%20%20%20%7D%0A%7D%3B%0AaddDestructor%28function%28reason%29%20%7B%20if%20%28/update%7Cdelete/.test%28%20reason%20%29%20%29%20setStyleForPages%28reason%29%20%7D%29%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%28about%3Ablank%29%20%7B%0A%20%20%20body%2C%20html%20%7B%20min-height%3A%20100%25%20%21important%3B%20%7D%0A%20%20%20html%2C%20body%20%7B%20background-color%3A%20%23111%20%21important%3B%20%7D%0A%20%20%20body%3E*%3Anot%28%3Aempty%29%20%7B%20background-color%3A%20%23222%20%21important%3B%20%7D%0A%20%20%20body%3E*%3E*%3Anot%28%3Aempty%29%20%7B%20background-color%3A%20%23222%20%21important%3B%20%7D%0A%20%20%20body%3E*%3E*%3E*%3Anot%28%3Aempty%29%20%7B%20background-color%3A%20%23282828%20%21important%3B%20%7D%0A%20%20%20body%3E*%3E*%3E*%3E*%3Anot%28%3Aempty%29%20%7B%20background-color%3A%20%23282828%20%21important%3B%20%7D%0A%20%20%20body%3E*%3E*%3E*%3E*%3E*%3Anot%28%3Aempty%29%20%7B%20background-color%3A%20%23383838%20%21important%3B%20%7D%0A%20%20%20body%3E*%3E*%3E*%3E*%3E*%20*%20%7B%20background-color%3A%20%23383838%20%21important%3B%20%7D%0A%20%20%20body%20table%5Bborder%3D%220%22%5D%20td%20%7B%20background-color%3A%20%23111%20%21important%3B%20%7D%0A%20%20%20body%20table%20table%5Bborder%3D%220%22%5D%20td%20%7B%20background-color%3A%20%23333%20%21important%3B%20%7D%0A%20%20%20body%20table%20table%20table%5Bborder%3D%220%22%5D%20td%20%7B%20background-color%3A%20%23222%20%21important%3B%20%7D%0A%20%20%20body%20table%20table%20table%20table%5Bborder%3D%220%22%5D%20td%20%7B%20background-color%3A%20%23444%20%21important%3B%20%7D%0A%20%20%20body%20*%3Aempty%20%7B%20background-color%3A%20%23252525%20%21important%3B%20%7D%0A%0A%20%20%20body%20p%3Anot%28%3Aempty%29%2C%20body%20p%20*%2C%20body%20h1%2C%20body%20h1%20*%2C%20body%20h2%2C%20body%20h2%20*%2C%20body%20h3%2C%20body%20h3%20*%2C%20body%20h4%2C%20body%20h4%20*%2C%20body%20h5%2C%20body%20h5%20*%2C%20body%20strong%3E*%2C%20body%20b%3E*%2C%20body%20em%3E*%2C%20body%20i%3E*%2C%20%20body%20span%3E*%3Anot%28img%29%20%7B%20background%3A%20transparent%20none%20%21important%3B%20%7D%0A%20%20%20body%20h1%2C%20body%20h1%20*%2C%20body%20h2%2C%20body%20h2%20*%2C%20p%3Estrong%3Aonly-of-type%2C%20%20p%3Eb%3Aonly-of-type%20%7B%20color%3A%20%23a98%20%21important%3B%20%7D%0A%20%20%20body%20h3%2C%20body%20h3%20*%2C%20body%20h4%2C%20body%20h4%20*%7B%20color%3A%20%23aaa%20%21important%3B%20%7D%0A%0A%20%20%20*%3Anot%28%5Bonclick%5D%29%3Anot%28input%29%3Anot%28a%29%3Anot%28img%29%3Anot%28%5Bclass%5E%3D%22UI%22%5D%29%2C%20body%20a%3Anot%28%3Aempty%29%2C%20div%3Anot%28%5Bonclick%5D%29%20%7B%20background-image%3A%20none%20%21important%3B%20text-indent%3A%200%20%21important%20%7D%0A%20%20%20*%5Bonclick%5D%20%7B%20color%3A%20%2379a%20%21important%3B%20%7D%0A%20%20%20*%5Bonclick%5D%3Ahover%20%7B%20color%3A%20%2399a8aa%20%21important%3B%20%7D%0A%20%20%20body%20hr%20%7B%20background%3A%20%23666%20none%20%21important%3B%20color%3A%20%23666%20%21important%3B%20border%3A%201px%20solid%20%23666%20%21important%3B%20height%3A%201px%20%21important%3B%20overflow%3A%20hidden%20%21important%3B%20display%3A%20block%20%21important%3B%20%7D%0A%20%20%20*%20%7B%20color%3A%20%23c0c0c0%20%21important%3B%20border-color%3A%20%23666%20%21important%3B%20%7D%0A%20%20%20*%20body%20a%2C%20body%20a%20*%7B%20color%3A%20%23B6AA7B%20%21important%3B%20%7D%0A%20%20%20body%20a%3Ahover%2C%20body%20a%3Ahover%20*%7B%20color%3A%20%23D9C077%20%21important%3B%20text-decoration%3A%20underline%20%21important%3B%20%7D%0A%20%20%20body%20img%2Ca%5Bhref%5D%20img%2C%20a%5Bhref%5D%20button%2C%20input%5Btype%3D%22image%22%5D%2C*%5Bonclick%5D%3Aempty%2C%20body%20a%3Aempty%20%7B%20opacity%3A%20.5%20%21important%3B%20%7D%0A%20%20%20body%20img%3Ahover%2Ca%5Bhref%5D%3Ahover%20img%2C%20a%5Bhref%5D%3Ahover%20button%2C%20*%5Bonclick%5D%3Aempty%3Ahover%2C%20body%20a%3Aempty%3Ahover%20%7B%20opacity%3A%201%20%21important%3B%20%7D%0A%0A%20%20%20body%20input%5Btype%5D%2C%20body%20textarea%5Bname%5D%2C%20body%20input%5Bname%5D%2C%20body%20input%5Bid%5D%2C%20body%20select%5Bname%5D%20%7B%20-moz-appearance%3A%20none%20%21important%3B%20color%3A%20%23bbb%21important%3B%20border-radius%3A%204px%20%21important%3B%20border-width%3A%201px%20%21important%3B%20border-color%3A%20%23778%20%21important%3B%20border-style%3A%20solid%20%21important%3B%20background%3A%20%23555%20none%20%21important%3B%20%7D%0A%0A%20%20%20body%20select%5Bname%5D%20%7B%20-moz-appearance%3Anone%21important%3B%20color%3A%20%23bbb%20%21important%3B%20border-radius%3A%204px%20%21important%3B%20border-width%3A%201px%20%21important%3B%20border-color%3A%20%23778%21important%3B%20border-style%3A%20solid%20%21important%3B%20background-color%3A%20%23555%20%21important%3B%20%7D%0A%0A%20%20%20body%20input%3E*%2C%20body%20textarea%3E*%20%7B%20background%3Atransparent%20none%20%21important%3B%20color%3A%20%23bbb%21important%3B%20border-style%3A%20solid%20%21important%3B%20border-width%3A%200px%21important%3B%20%7D%0A%20%20%20body%20select%20*%20%7B%20background-color%3A%20transparent%20%21important%3B%20color%3A%20%23bbb%20%21important%3B%20border-style%3A%20solid%20%21important%3B%20border-width%3A%200px%20%21important%3B%20%7D%0A%7D%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

Autocopy( Pale Moon, SeaMonkey ) от 23.04.2018.
1. Автоматически копирует выделенный текст на странице, при этом выделенный текст мигает. Кнопка будет сама выключать авто копирование при выходе из браузера, если эта возможность включена в настройках кнопки.
2. Даёт возможность копировать двойным правым кликом мыши выделенный текст на страницах и в текстовых полях и поисковых формах на страницах и также редакторе в Custom Buttons, если эти возможности включены в настройках кнопки.
3. Даёт возможность средней кнопкой мыши вставлять текст из буфера обмена с заменой выделенного текста в текстовые полях и поисковых формах на страницах и также в адресной строке и строке поиска браузера и поисковых формах браузера которые открываются как страница, например поисковой форме в about:config и также редакторе в Custom Buttons. Эту возможность надо включать в настройках кнопки.
4. Даёт возможность копировать адрес страницы если кликнуть правой клавишей мыши на значке идентификации сайта в строке адреса, при этом значок идентификации сайта мигает красным или открыть без запроса информацию о странице Разрешения если кликнуть левой клавишей мыши.
5. Даёт возможность закрывать окошко информации о странице двойным кликом мыши на нём.
6. Даёт возможность без запроса сохранять изображения на странице в папке загрузки двойным правым кликом мыши, если эта возможность включена в настройках кнопки.

Настройки кнопки в меню кнопки:
0a4600dc742b107ccca9fe48f6481b28.png

ЛКМ => Включить или отключить автокопирование.
ПКМ => Mеню кнопки с настройками,
Двойной ПКМ => Стандартное меню кнопки.
Код кнопки и код для инициализации:
Код кнопки:

Выделить код

Код:

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%3EAutocopy%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEREAAAEAIADwBAAAFgAAACgAAAARAAAAIgAAAAEAIAAAAAAAyAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAgMBAAQIAAcEBwAIBAcACAQHAAgEBwAIBAcACAQHAAgEBwAIBAcACAMEAQEAAAAAAAAAAAAAAAACAwADAAAAABUnAB9cqgC3a7wB4Gq5Ad1qugHearoB3mq6Ad5qugHearoB3mi4AN1qugHgYrMAxR43AC8AAAAAAAEAAAECAAQAAAQAV6AAprP9Vv/W/qn80/+f/9T/ov/U/6L/1P+i/9T/ov/U/6L/1/+n/9X+pfy3/WL/Y7QAvwEAAQAAAAAAFSgAH1ehAKlyzwD1htgf/YzcJ/2K2yP9i9sk/YvbJf2L2yX9i9sm/YnaIv2b4kP92/21/Nf+qv9quwHdBQkACAAAAQBeqwCzr/tR/8X0j/u+8X//vvJ//77ygP++8oD/vvKA/77yf/+98n7/wvSH/4zcKv+e4kv93v+0/2i5AN0DBwAIBQkACGu8AdzV/af/4v/B/d//u//h/7//4f+//+H/v//h/7//4f+//9/+u//n/8n/w/GK/4zaK/3g/7r/aroC3gMHAAgEBwAIarkC3dX/pf/g/sD93v67/9/+vv/g/r//4P6//+D+v//f/r7/3f66/+T/xv/B8Yb/j9st/eT/w/9qugPeAwcACAQHAAhqugLe2v+w/+j/z/3l/8r/5//N/+f/zv/n/87/5//O/+f/zf/l/sj/7P/W/8Xyj/+Q2y/96f/N/2q6A94DBwAIBAcACGq6At7f/7n/7v/c/ev/1v/t/9n/7f/a/+3/2v/t/9r/7f/Z/+r+1f/y/+P/yPKW/5DbMf3s/9X/aroE3gMHAAgEBwAIaroC3uP/wf/z/+j98P/h//L/5P/z/+X/8//l//P/5f/y/+T/8P7g//j/7v/L8p3/kdsy/fD/3P9rugTeAwcACAQHAAhqugLe5v/J//j/8v31/+r/9v/t//f/7v/3/+//9//u//b/7f/0/un//f/4/87yo/+R2zL98f/f/2q5Bd0DBwAIBAcACGq6At7p/8///P/6/fj/8f/6//T/+v/1//r/9f/6//X/+v/0//f+8P//////0fGo/5PbNf30/+f/a7wE3AQJAAgEBwAIabkC3er/0f/+//79+v/0//v/9//8//j//P/4//z/+P/7//f/+f70///////T8qz/i9go+8P9ef9dqwCzAAACAAUJAAhquwHd7f7a//////z+//39/////f////3////9/////f////39/vz9/////dzzvv5v0AD1VqECqRUnAB8AAAAAAQACAGK0AL/J/Yf/8v7k/O3/1//u/9n/7v/Z/+7/2f/u/9n/7v/Z/+3/1//x/eP8vfxu/1WgAKYAAAUAAQIABAABAAAAAAAAHjcALmGzAMVquwLgarkC3Wq6At5qugLearoC3mq6At5qugLearkC3Wu8AeBbqgC3FScAHwAAAAACAwADAAAAAAAAAAAAAAAAAwQCAQQIAAgEBwAIBAcACAQHAAgEBwAIBAcACAQHAAgEBwAIBAgABwMDAgAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%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.onclick%20%3De%3D%3E%20%7B%0A%20%20%20if%20%28%20e.button%20%3D%3D%200%20%29%20cbu.setPrefs%28%22CB.Autocopy%22%2C%20%21cbu.getPrefs%28%22CB.Autocopy%22%29%29%3B%20%0A%20%20%20%20%20%20%20%0A%20%20%20if%20%28%20e.button%20%3D%3D%202%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%20%0Athis.oncontextmenu%20%3D%20e%20%3D%3E%20e.detail%20%3D%3D%202%20%26%26%20%21menuPopup.hidePopup%28%29%0A%20%20%20%20%20%7C%7C%20e.ctrlKey%20%7C%7C%20%21%21menuPopup.openPopup%28this%2C%20%22after_start%22%29%3B%0A%20%20%20%20%20%0A%0A//%20%u0421%u043E%u0437%u0434%u0430%u0442%u044C%20%u043C%u0435%u043D%u044E%20.................%0Avar%20array%20%3D%20%5B%0A%20%20%20%20%7B%20label%3A%20%27%u0412%u044B%u0434%u0435%u043B%u044F%u0442%u044C%20%u0442%u0435%u043A%u0441%u0442%20%u0441%20%u043F%u0440%u043E%u0431%u0435%u043B%u043E%u043C%20%u0441%u043F%u0440%u0430%u0432%u0430%27%2C%20value%3A%20%27layout.word_select.eat_space_to_next_word%27%20%7D%2C%0A%20%20%20%20%7B%20label%3A%20%27%u0412%u044B%u0434%u0435%u043B%u0435%u043D%u043D%u044B%u0439%20%u0442%u0435%u043A%u0441%u0442%20%u043C%u0438%u0433%u0430%u0435%u0442%20%u043F%u0440%u0438%20%u0430%u0432%u0442%u043E%u043A%u043E%u043F%u0438%u0440%u043E%u0432%u0430%u043D%u0438%u0438%27%2C%20value%3A%20%27CB.Autocopy.selectingTextBlink%27%20%7D%2C%0A%20%20%20%20%7B%20label%3A%20%27%u0414%u043E%u043F%u043E%u043B%u043D%u0438%u0442%u0435%u043B%u044C%u043D%u044B%u0435%20%u0432%u043E%u0437%u043C%u043E%u0436%u043D%u043E%u0441%u0442%u0438%20%u0434%u043B%u044F%20%u0430%u0434%u0440%u0435%u0441%u043D%u043E%u0439%20%u0441%u0442%u0440%u043E%u043A%u0438%27%2C%20value%3A%20%27CB.Autocopy.addToAddressBar%27%7D%2C%0A%20%20%20%20%7B%20label%3A%20%27%u0412%u044B%u043A%u043B%u044E%u0447%u0430%u0442%u044C%20%u0430%u0432%u0442%u043E%u043A%u043E%u043F%u0438%u0440%u043E%u0432%u0430%u043D%u0438%u0435%20%u043F%u0440%u0438%20%u0432%u044B%u0445%u043E%u0434%u0435%20%u0438%u0437%20%u0431%u0440%u0430%u0443%u0437%u0435%u0440%u0430%27%2C%20value%3A%20%27CB.Autocopy.reset%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%u0414%u0432%u043E%u0439%u043D%u043E%u0439%20%u043F%u0440%u0430%u0432%u044B%u0439%20%u043A%u043B%u0438%u043A%20%u043C%u044B%u0448%u0438%20%u043A%u043E%u043F%u0438%u0440%u0443%u0435%u0442%20%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u043D%u044B%u0439%20%u0442%u0435%u043A%u0441%u0442%27%2C%20value%3A%20%27CB.Autocopy.copyWithDoubleClick%27%20%7D%2C%0A%20%20%20%20%7B%20label%3A%20%27%u0414%u0432%u043E%u0439%u043D%u043E%u0439%20%u043F%u0440%u0430%u0432%u044B%u0439%20%u043A%u043B%u0438%u043A%20%u043C%u044B%u0448%u0438%20%u0441%u043E%u0445%u0440%u0430%u043D%u044F%u0435%u0442%20%u0438%u0437%u043E%u0431%u0440%u0430%u0436%u0435%u043D%u0438%u0435%20%u0431%u0435%u0437%20%u0437%u0430%u043F%u0440%u043E%u0441%u0430%27%2C%20value%3A%20%27CB.Autocopy.saveWithDoubleClick%27%20%7D%2C%20%0A%20%20%20%20%7B%20label%3A%20%27%u0421%u0440%u0435%u0434%u043D%u0438%u043C%20%u043A%u043B%u0438%u043A%u043E%u043C%20%u0432%u0441%u0442%u0430%u0432%u043B%u044F%u0442%u044A%20%u0442%u0435%u043A%u0441%u0442%20%u0441%20%u0437%u0430%u043C%u0435%u043D%u043E%u0439%20%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u043D%u043E%u0433%u043E%20%u0442%u0435%u043A%u0441%u0442%u0430%27%2C%20value%3A%20%27middlemouse.paste%27%20%7D%2C%0A%5D%3B%0Avar%20menuPopup%20%3D%20self.appendChild%28document.createElement%28%22menupopup%22%29%29%3B%0Aarray.forEach%28m%3D%3E%20%7B%0A%20%20%20if%20%28%20%22separator%22%20in%20m%20%29%20%7B%20menuPopup.appendChild%28document.createElement%28%22menuseparator%22%29%29%3B%20return%20%7D%3B%0A%20%20%20var%20mItem%20%3D%20menuPopup.appendChild%28document.createElement%28%22menuitem%22%29%29%3B%0A%20%20%20mItem.setAttribute%28%22label%22%2C%20m.label%29%3B%0A%20%20%20mItem.setAttribute%28%27type%27%2C%20%27checkbox%27%29%3B%0A%20%20%20mItem.setAttribute%28%27checked%27%2C%20cbu.getPrefs%28m.value%29%29%3B%0A%20%20%20mItem.onclick%20%3De%3D%3E%20cbu.setPrefs%28m.value%2C%20%21cbu.getPrefs%28m.value%29%29%3B%20%20%0A%7D%29%3B%0AmenuPopup.setAttribute%28%22onclick%22%2C%20%22event.stopPropagation%28%29%22%29%3B%0A%0A%0A//%20%u0411%u043B%u043E%u043A%u0438%u0440%u043E%u0432%u043A%u0430%20%u0434%u0432%u043E%u0439%u043D%u043E%u0439%20%u0438%u043D%u0438%u0446%u0438%u0430%u043B%u0438%u0437%u0430%u0446%u0438%u0438%20%u043E%u0431%u0440%u0430%u0431%u043E%u0442%u0447%u0438%u043A%u043E%u0432%20%u0434%u043B%u044F%20SeaMonkey%20...............%0Aif%20%28%20this.hasAttribute%28%22initialized%22%29%20%29%20return%3B%0A%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%u0432%20%27about%3Aconfig%27%20.................%0Aconst%20s%20%3D%20%22CB.Autocopy%22%3B%0Afunction%20toggleImage%28%29%20%7B%20%20%0A%20%20%20document.getAnonymousNodes%28self%29%5B1%5D.src%20%3D%20cbu.getPrefs%28s%29%0A%20%20%20%3F%20%22data%3Aimage/x-icon%3Bbase64%2CAAABAAEAEREAAAEAIADwBAAAFgAAACgAAAARAAAAIgAAAAEAIAAAAAAAyAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAgMBAAQIAAcEBwAIBAcACAQHAAgEBwAIBAcACAQHAAgEBwAIBAcACAMEAQEAAAAAAAAAAAAAAAACAwADAAAAABUnAB9cqgC3a7wB4Gq5Ad1qugHearoB3mq6Ad5qugHearoB3mi4AN1qugHgYrMAxR43AC8AAAAAAAEAAAECAAQAAAQAV6AAprP9Vv/W/qn80/+f/9T/ov/U/6L/1P+i/9T/ov/U/6L/1/+n/9X+pfy3/WL/Y7QAvwEAAQAAAAAAFSgAH1ehAKlyzwD1htgf/YzcJ/2K2yP9i9sk/YvbJf2L2yX9i9sm/YnaIv2b4kP92/21/Nf+qv9quwHdBQkACAAAAQBeqwCzr/tR/8X0j/u+8X//vvJ//77ygP++8oD/vvKA/77yf/+98n7/wvSH/4zcKv+e4kv93v+0/2i5AN0DBwAIBQkACGu8AdzV/af/4v/B/d//u//h/7//4f+//+H/v//h/7//4f+//9/+u//n/8n/w/GK/4zaK/3g/7r/aroC3gMHAAgEBwAIarkC3dX/pf/g/sD93v67/9/+vv/g/r//4P6//+D+v//f/r7/3f66/+T/xv/B8Yb/j9st/eT/w/9qugPeAwcACAQHAAhqugLe2v+w/+j/z/3l/8r/5//N/+f/zv/n/87/5//O/+f/zf/l/sj/7P/W/8Xyj/+Q2y/96f/N/2q6A94DBwAIBAcACGq6At7f/7n/7v/c/ev/1v/t/9n/7f/a/+3/2v/t/9r/7f/Z/+r+1f/y/+P/yPKW/5DbMf3s/9X/aroE3gMHAAgEBwAIaroC3uP/wf/z/+j98P/h//L/5P/z/+X/8//l//P/5f/y/+T/8P7g//j/7v/L8p3/kdsy/fD/3P9rugTeAwcACAQHAAhqugLe5v/J//j/8v31/+r/9v/t//f/7v/3/+//9//u//b/7f/0/un//f/4/87yo/+R2zL98f/f/2q5Bd0DBwAIBAcACGq6At7p/8///P/6/fj/8f/6//T/+v/1//r/9f/6//X/+v/0//f+8P//////0fGo/5PbNf30/+f/a7wE3AQJAAgEBwAIabkC3er/0f/+//79+v/0//v/9//8//j//P/4//z/+P/7//f/+f70///////T8qz/i9go+8P9ef9dqwCzAAACAAUJAAhquwHd7f7a//////z+//39/////f////3////9/////f////39/vz9/////dzzvv5v0AD1VqECqRUnAB8AAAAAAQACAGK0AL/J/Yf/8v7k/O3/1//u/9n/7v/Z/+7/2f/u/9n/7v/Z/+3/1//x/eP8vfxu/1WgAKYAAAUAAQIABAABAAAAAAAAHjcALmGzAMVquwLgarkC3Wq6At5qugLearoC3mq6At5qugLearkC3Wu8AeBbqgC3FScAHwAAAAACAwADAAAAAAAAAAAAAAAAAwQCAQQIAAgEBwAIBAcACAQHAAgEBwAIBAcACAQHAAgEBwAIBAgABwMDAgAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%3D%22%0A%20%20%20%3A%20%22data%3Aimage/x-icon%3Bbase64%2CAAABAAEAEREAAAEAIADwBAAAFgAAACgAAAARAAAAIgAAAAEAIAAAAAAAyAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAgEDAAQACAcEAAcIBAAHCAQABwgEAAcIBAAHCAQABwgEAAcIBAAHCAMBBAEAAAAAAAAAAAAAAAACAAMDAAAAABUAJx9cAKq3awG84GoBud1qAbreagG63moBut5qAbreagG63mgAuN1qAbrgYgCzxR4ANy8AAAAAAAABAAEAAgQABAAAVwCgprNW/f/Wqf7805///9Si///Uov//1KL//9Si///Uov//16f//9Wl/vy3Yv3/YwC0vwEBAAAAAAAAFQAoH1cAoalyAM/1hh/Y/Ywn3P2KI9v9iyTb/Ysl2/2LJdv9iybb/Yki2v2bQ+L927X9/Neq/v9qAbvdBQAJCAABAABeAKuzr1H7/8WP9Pu+f/H/vn/y/76A8v++gPL/voDy/75/8v+9fvL/wof0/4wq3P+eS+L93rT//2gAud0DAAcIBQAJCGsBvNzVp/3/4sH//d+7///hv///4b///+G////hv///4b///9+7/v/nyf//w4rx/4wr2v3guv//agK63gMABwgEAAcIagK53dWl///gwP793rv+/9++/v/gv/7/4L/+/+C//v/fvv7/3br+/+TG///BhvH/jy3b/eTD//9qA7reAwAHCAQABwhqArre2rD//+jP//3lyv//583//+fO///nzv//587//+fN///lyP7/7Nb//8WP8v+QL9v96c3//2oDut4DAAcIBAAHCGoCut7fuf//7tz//evW///t2f//7dr//+3a///t2v//7dn//+rV/v/y4///yJby/5Ax2/3s1f//agS63gMABwgEAAcIagK63uPB///z6P/98OH///Lk///z5f//8+X///Pl///y5P//8OD+//ju///LnfL/kTLb/fDc//9rBLreAwAHCAQABwhqArre5sn///jy//316v//9u3///fu///37///9+7///bt///06f7//fj//86j8v+RMtv98d///2oFud0DAAcIBAAHCGoCut7pz////Pr//fjx///69P//+vX///r1///69f//+vT///fw/v//////0ajx/5M12/305///awS83AQACQgEAAcIaQK53erR///+/v/9+vT///v3///8+P///Pj///z4///79///+fT+///////TrPL/iyjY+8N5/f9dAKuzAAIAAAUACQhqAbvd7dr+//////z+/f/9/////f////3////9/////f////39/P79/////dy+8/5vAND1VgKhqRUAJx8AAAAAAQIAAGIAtL/Jh/3/8uT+/O3X///u2f//7tn//+7Z///u2f//7tn//+3X///x4/38vW78/1UAoKYABQAAAQACBAAAAQAAAAAAHgA3LmEAs8VqArvgagK53WoCut5qArreagK63moCut5qArreagK53WsBvOBbAKq3FQAnHwAAAAACAAMDAAAAAAAAAAAAAAAAAwIEAQQACAgEAAcIBAAHCAQABwgEAAcIBAAHCAQABwgEAAcIBAAIBwMCAwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%3D%22%3B%0A%7D%3B%20%20%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%20%20%0A%0A%20%0A//%20%u0412%u044B%u043A%u043B%u044E%u0447%u0430%u0442%u044C%20%u043A%u043D%u043E%u043F%u043A%u0443%20%u043F%u0440%u0438%20%u0437%u0430%u043A%u0440%u044B%u0442%u0438%u0438%20%u0431%u0440%u0430%u0443%u0437%u0435%u0440%u0430%20%u0435%u0441%u043B%u0438%20%u044D%u0442%u043E%20%u0440%u0430%u0437%u0440%u0435%u0448%u0435%u043D%u043E%20%u0432%20%27about%3Aconfig%27%20.................%0Avar%20toggleButton%20%3D%20%7B%0A%20%20%20observe%3A%28subject%2C%20topic%2C%20data%29%3D%3E%20%7B%0A%20%20%20%20%20%20cbu.getPrefs%28%22CB.Autocopy.reset%22%29%20%26%26%20data%20%3D%3D%20%22shutdown%22%20%26%26%20cbu.setPrefs%28%22CB.Autocopy%22%2C%20false%29%3B%20%20%0A%20%20%20%7D%0A%7D%3B%0AServices.obs.addObserver%28toggleButton%2C%20%22quit-application%22%2C%20false%29%3B%0A%0A%20%20%0A//%20%u0424%u0443%u043D%u043A%u0446%u0438%u0438%20%u0430%u0432%u0442%u043E%u043C%u0430%u0442%u0438%u0447%u0435%u0441%u043A%u0438%20%u043A%u043E%u043F%u0438%u0440%u0443%u0435%u0442%20%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u043D%u044B%u0439%20%u0442%u0435%u043A%u0441%u0442%20%u043D%u0430%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u0435%2C%20%u0435%u0441%u043B%u0438%20%u044D%u0442%u043E%20%u0440%u0430%u0437%u0440%u0435%u0448%u0435%u043D%u043E%20%u0432%20%27about%3Aconfig%27%20...............%0Afunction%20autocopy%28e%29%20%7B%0A%20%20%20if%20%28%0A%20%20%20%20%20%20%20e.button%0A%20%20%20%20%20%20%20%7C%7C%20%21cbu.getPrefs%28%22CB.Autocopy%22%29%0A%20%20%20%20%20%20%20%7C%7C%20document.commandDispatcher.focusedWindow.getSelection%28%29.isCollapsed%0A%20%20%20%20%20%20%29%20return%3B%0A%20%20%20%0A%20%20%20goDoCommand%28%27cmd_copy%27%29%3B%0A%20%20%20%20%20%20%20%20%20%0A%20%20%20//%20%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u043D%u044B%u0439%20%u0442%u0435%u043A%u0441%u0442%20%u043C%u0438%u0433%u0430%u0435%u0442%20....%0A%20%20%20if%20%28%20%21cbu.getPrefs%28%22CB.Autocopy.selectingTextBlink%22%29%20%29%20return%3B%0A%20%20%20document.activeElement.blur%28%29%3B%20%20%0A%20%20%20setTimeout%28%28%29%3D%3E%20window.content.focus%28%29%2C%20300%29%3B%0A%7D%3B%0AaddEventListener%28%27mouseup%27%2C%20autocopy%2C%20false%2C%20gBrowser%29%3B%0A%0A%0A//%20C%u0440%u0435%u0434%u043D%u0435%u0439%20%u043A%u043D%u043E%u043F%u043A%u043E%u0439%20%u043C%u044B%u0448%u0438%20%u0432%u0441%u0442%u0430%u0432%u0438%u0442%u044C%20%u0442%u0435%u043A%u0441%u0442%20%u0438%u0437%20%u0431%u0443%u0444%u0435%u0440%u0430%20%u043E%u0431%u043C%u0435%u043D%u0430%20%u0432%20%u0442%u0435%u043A%u0441%u0442%u043E%u0432%u044B%u0435%20%u043F%u043E%u043B%u044F%20%u0441%20%u0437%u0430%u043C%u0435%u043D%u043E%u0439%20%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u043D%u043E%u0433%u043E%20%u0442%u0435%u043A%u0441%u0442%u0430%20...............%0Afunction%20middleMousePaste%28e%2C%20doc%20%3D%20this.document%20%7C%7C%20document%29%20%7B%20%0A%20%20%20if%20%28%0A%20%20%20%20%20%20%20e.button%20%21%3D%3D%201%0A%20%20%20%20%20%20%20%7C%7C%20%21cbu.getPrefs%28%27middlemouse.paste%27%29%0A%20%20%20%20%20%20%20%7C%7C%20%21/input%7Cpassword%7Ctextarea%7Ctextbox%7Csearchbar%7Cfindbar%7Ccbeditor/.test%28e.target.localName%29%0A%20%20%20%20%20%20%29%20return%3B%0A%0A%20%20%20e.preventDefault%28%29%3B%0A%20%20%20e.stopPropagation%28%29%3B%20%0A%20%20%20%20%20%20%20%20%20%20%0A%20%20%20//%20%u0432%u0441%u0442%u0430%u0432%u0438%u0442%u044C%20%u0442%u0435%u043A%u0441%u0442%20....%0A%20%20%20var%20cmd%20%3D%20%22cmd_insertText%22%3B%0A%20%20%20var%20commandDispatcher%20%3D%20doc.commandDispatcher%3B%0A%20%20%20var%20controller%20%3D%20commandDispatcher.getControllerForCommand%28cmd%29%3B%0A%20%20%20var%20controller%20%3D%20controller.QueryInterface%28Ci.nsICommandController%29%3B%0A%20%20%20var%20params%20%3D%20Cc%5B%22@mozilla.org/embedcomp/command-params%3B1%22%5D.createInstance%28Ci.nsICommandParams%29%3B%0A%20%20%20params.setStringValue%28%22state_data%22%2C%20gClipboard.read%28%29%29%3B%0A%20%20%20controller.doCommandWithParams%28cmd%2C%20params%29%3B%0A%7D%3B%0AaddEventListener%28%22click%22%2C%20middleMousePaste%2C%20true%2C%20document.documentElement%29%3B%0A%0A%0A//%20%u0414%u043E%u043F%u043E%u043B%u043D%u0438%u0442%u0435%u043B%u044C%u043D%u044B%u0435%20%u0432%u043E%u0437%u043C%u043E%u0436%u043D%u043E%u0441%u0442%u0438%20%u0434%u043B%u044F%20%u0437%u043D%u0430%u0447%u043A%u0430%20%u0438%u0434%u0435%u043D%u0442%u0438%u0444%u0438%u043A%u0430%u0446%u0438%u0438%20%u0441%u0430%u0439%u0442%u0430%20%u0432%20%u0441%u0442%u0440%u043E%u043A%u0435%20%u0430%u0434%u0440%u0435%u0441%u0430%20...............%0AaddEventListener%28%22click%22%2C%20e%3D%3E%20%7B%0A%20%20%20if%20%28%0A%20%20%20%20%20%20%20e.button%20%3D%3D%201%0A%20%20%20%20%20%20%20%7C%7C%20%21/page-proxy-favicon%7Cpage-proxy-button/.test%28e.target.id%29%0A%20%20%20%20%20%20%20%7C%7C%20%21cbu.getPrefs%28%22CB.Autocopy.addToAddressBar%22%29%0A%20%20%20%20%20%20%29%20return%3B%0A%0A%20%20%20e.preventDefault%28%29%3B%0A%20%20%20e.stopPropagation%28%29%3B%0A%20%20%20e.target.setAttribute%28%22context%22%2C%20%22event.stopPropagation%28%29%22%29%3B%0A%20%20%20%0A%20%20%20//%20%u041B%u041A%u041C%20%u0431%u0435%u0437%20%u0437%u0430%u043F%u0440%u043E%u0441%u0430%20%u043E%u0442%u043A%u0440%u044B%u0432%u0430%u0435%u0442%20%u0438%u043D%u0444%u043E%u0440%u043C%u0430%u0446%u0438%u044E%20%u043E%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u0435%20%u0432%20%u0432%u043A%u043B%u0430%u0434%u043A%u0435%20%27%u0420%u0430%u0437%u0440%u0435%u0448%u0435%u043D%u0438%u044F%27%20....%0A%20%20%20if%20%28%20e.button%20%3D%3D%200%20%29%0A%20%20%20%20%20%20%20%20BrowserPageInfo%28content.document%2C%20%28gURLBar.value.startsWith%28%22http%22%29%20%3F%20%22permTab%22%20%3A%20%22generalTab%22%29%29%3B%0A%20%20%20%20%20%20%20%20%0A%20%20%20//%20%u041F%u041A%u041C%20%u043A%u043E%u043F%u0438%u0440%u0443%u0435%u0442%20%u0442%u0435%u043A%u0443%u0449%u0438%u0439%20%u0430%u0434%u0440%u0435%u0441%20....%20%20%20%20%20%0A%20%20%20if%20%28%20e.button%20%21%3D%3D%202%20%29%20return%3B%0A%20%20%20gClipboard.write%28content.location%29%3B%0A%0A%20%20%20//%20%u0437%u043D%u0430%u0447%u043E%u043A%20%u0438%u0434%u0435%u043D%u0442%u0438%u0444%u0438%u043A%u0430%u0446%u0438%u0438%20%u0441%u0430%u0439%u0442%u0430%20%u043C%u0438%u0433%u0430%u0435%u0442%20%u043A%u0440%u0430%u0441%u043D%u044B%u043C%20....%0A%20%20%20var%20id%20%3D%20%28Services.appinfo.name%20%3D%3D%20%22SeaMonkey%22%29%20%3F%20%22page-proxy-deck%22%20%3A%20%22identity-box%22%3B%0A%20%20%20document.getElementById%28id%29.style.background%20%3D%20%22red%22%3B%0A%20%20%20setTimeout%28%28%29%3D%3E%20document.getElementById%28id%29.style.background%20%3D%20%22%22%2C%20300%29%3B%0A%20%20%20%0A%7D%2C%20true%2C%20gURLBar%29%3B%0A%0A%20%20%20%0A//%20%u0414%u043E%u043F%u043E%u043B%u043D%u0438%u0442%u0435%u043B%u044C%u043D%u044B%u0435%20%u0432%u043E%u0437%u043C%u043E%u0436%u043D%u043E%u0441%u0442%u0438%20%u0434%u043B%u044F%20%u0434%u0432%u043E%u0439%u043D%u043E%u0433%u043E%20%u043A%u043B%u0438%u043A%u0430%20%u043C%u044B%u0448%u0438%20...............%0Afunction%20handleDblClick%28e%29%20%7B%0A%20%20%20var%20node%20%3D%20e.target%3B%0A%20%20%20var%20editor%20%3D%20node.editor%3B%0A%0A%20%20%20//%20%u0421%u043E%u0445%u0440%u0430%u043D%u0438%u0442%u044C%20%u0438%u0437%u043E%u0431%u0440%u0430%u0436%u0435%u043D%u0438%u0435%20%u0432%20%u043F%u0430%u043F%u043A%u0443%20%u0437%u0430%u0433%u0440%u0443%u0437%u043A%u0438%20....%0A%20%20%20if%20%28%20e.button%20%3D%3D%202%20%26%26%20cbu.getPrefs%28%22CB.Autocopy.saveWithDoubleClick%22%29%20%26%26%20node.localName%20%3D%3D%20%27img%27%20%29%20%7B%0A%20%20%20%20%20%20%20%20var%20run%20%3D%20cbu.getPrefs%28%22browser.download.folderList%22%29%3B%0A%20%20%20%20%20%20%20%20var%20use%20%3D%20cbu.getPrefs%28%22browser.download.useDownloadDir%22%29%3B%0A%0A%20%20%20%20%20%20%20%20cbu.setPrefs%28%22browser.download.folderList%22%2C%202%29%3B%0A%20%20%20%20%20%20%20%20cbu.setPrefs%28%22browser.download.useDownloadDir%22%2C%20true%29%3B%0A%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20function%20save%28%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20var%20func%20%3D%20eval%28%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20gContextMenu.saveMedia.toSource%28%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20.replace%28/%28false%2C%5Cs+%29false%2C/%2C%20%22%241true%2C%22%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20.replace%28/%5Es/%2C%20%220%2Cfunction%20s%22%29%0A%20%20%20%20%20%20%20%20%20%20%20%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%28save%20%3D%28%29%3D%3E%20func.call%28gContextMenu%29%29%28%29%3B%0A%20%20%20%20%20%20%20%20%7D%20%0A%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20/Pale%20Moon%7CSeaMonkey/.test%28Services.appinfo.name%29%0A%20%20%20%20%20%20%20%20%3F%20saveImageURL%28gContextMenu.imageURL%2C%200%2C%200%2C%200%2C%201%2C%20null%2C%20content.document%29%0A%20%20%20%20%20%20%20%20%3A%20save%28%29%3B%0A%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20setTimeout%28%28%29%3D%3E%20document.getElementById%28%22contentAreaContextMenu%22%29.hidePopup%28%29%2C%2020%29%3B%0A%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20cbu.setPrefs%28%22browser.download.folderList%22%2C%20run%29%3B%0A%20%20%20%20%20%20%20%20cbu.setPrefs%28%22browser.download.useDownloadDir%22%2C%20use%29%3B%0A%20%20%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%20%20%20%0A%20%20%20//%20%u0441%u043A%u043E%u043F%u0438%u0440%u043E%u0432%u0430%u0442%u044C%20%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u043D%u044B%u0439%20%u0442%u0435%u043A%u0441%u0442%20....%0A%20%20%20if%20%28%20e.button%20%3D%3D%202%20%26%26%20cbu.getPrefs%28%22CB.Autocopy.copyWithDoubleClick%22%29%20%26%26%20%21/findbar%7Ctabbrowser/.test%28node.localName%29%20%29%20%7B%20%0A%20%20%20%20%20%20%20%20e.preventDefault%28%29%3B%0A%20%20%20%20%20%20%20%20editor%20%3F%20editor.copy%28%29%20%3A%20goDoCommand%28%22cmd_copy%22%29%3B%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20try%20%7B%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20var%20box%20%3D%20%28node.textbox%20%7C%7C%20node%29.inputField.parentNode%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20var%20popup%20%3D%20box.ownerDocument.getAnonymousElementByAttribute%28box%2C%20%22anonid%22%2C%20%22input-box-contextmenu%22%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20setTimeout%28%28%29%3D%3E%20popup.hidePopup%28%29%2C%2050%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20catch%28e%29%20%7B%20setTimeout%28%28%29%3D%3E%20document.getElementById%28%22contentAreaContextMenu%22%29.hidePopup%28%29%2C%2050%29%20%7D%3B%20%0A%20%20%20%20%20%20%20%20%7D%20%20%20%20%20%20%20%20%0A%7D%3B%0AaddEventListener%28%22dblclick%22%2C%20handleDblClick%2C%20false%2C%20gBrowser%29%3B%0A%0A%0A//%20%u041D%u0430%u0431%u043B%u044E%u0434%u0430%u0442%u0435%u043B%u044C%20%u0441%u043B%u0435%u0434%u0438%u0442%20%u0437%u0430%20%u043E%u0442%u043A%u0440%u044B%u0442%u0438%u0435%u043C%20%u043D%u043E%u0432%u044B%u0445%20%u043E%u043A%u043E%u043D%20...............%0Afunction%20observer%28subject%29%20%7B%0A%20%20%20subject.addEventListener%28%22load%22%2C%20e%3D%3E%20%7B%0A%20%20%20%20%20%20var%20doc%20%3D%20e.target%3B%0A%20%20%20%20%20%20var%20view%20%3D%20doc.defaultView%3B%0A%20%20%20%20%20%20%0A%20%20%20%20%20%20//%20%u0434%u043E%u0431%u0430%u0432%u043B%u044F%u0442%u044C%20%u043E%u0431%u0440%u0430%u0431%u043E%u0442%u0447%u0438%u043A%u0438%20%u043A%u043B%u0438%u043A%u0430%20%u0434%u043B%u044F%20%u0440%u0435%u0434%u0430%u043A%u0442%u043E%u0440%u043E%u0432%20CB%20%u043A%u043D%u043E%u043F%u043E%u043A%20....%0A%20%20%20%20%20%20if%20%28%20/custombuttons/.test%28doc.URL%29%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20view.addEventListener%28%22dblclick%22%2C%20handleDblClick%2C%20false%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20view.addEventListener%28%22click%22%2C%20middleMousePaste.bind%28view%29%2C%20true%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%20%20%0A%20%20%20%20%20%20//%20%u0434%u043E%u0431%u0430%u0432%u043B%u044F%u0442%u044C%20%u043E%u0431%u0440%u0430%u0431%u043E%u0442%u0447%u0438%u043A%u0438%20%u043A%u043B%u0438%u043A%u0430%20%u0434%u043B%u044F%20%27%u0418%u043D%u0444%u043E%u0440%u043C%u0430%u0446%u0438%u044E%20%u043E%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u0435%27%20%u0438%20%27%u0411%u0438%u0431%u043B%u0438%u043E%u0442%u0435%u043A%u0438%27%20....%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20if%20%28%20/pageInfo.xul%7Cplaces.xul/.test%28doc.URL%29%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20view.addEventListener%28%22dblclick%22%2C%20function%20close%28%29%20%7B%20this.close%28%29%20%7D%2C%20true%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%0A%20%20%20%20%20%20%20%20%20%20%20view.addEventListener%28%22unload%22%2C%20e%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20view.removeEventListener%28e.type%2C%20arguments.callee%2C%20false%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20view.removeEventListener%28%22dblclick%22%2C%20close%2C%20true%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%7D%2C%20false%29%3B%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%7D%3B%0A%20%20%20%7D%29%3B%0A%7D%3B%0AServices.ww.registerNotification%28observer%29%3B%0AaddDestructor%28%28%29%3D%3E%20Services.ww.unregisterNotification%28observer%29%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................................%0Athis.tooltipText%20%3D%20%22Autocopy%20%5Cn%u041B%3A%20%u041F%u0435%u0440%u0435%u043A%u043B%u044E%u0447%u0438%u0442%u044C%20%u0430%u0432%u0442%u043E%u043C%u0430%u0442%u0438%u0447%u0435%u0441%u043A%u043E%u0435%20%u043A%u043E%u043F%u0438%u0440%u043E%u0432%u0430%u043D%u0438%u0435%20%5Cn%u041F%3A%20%u041C%u0435%u043D%u044E%20%5Cn%u0414%u041F%3A%20CB%20%u043C%u0435%u043D%u044E%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=> {
   if ( e.button == 0 ) cbu.setPrefs("CB.Autocopy", !cbu.getPrefs("CB.Autocopy")); 
       
   if ( e.button == 2 ) { 
        e.preventDefault();  
        menuPopup.showPopup(this, -1, -1, "popup", "bottomleft", "topleft");
        }     
}; 
this.oncontextmenu = e => e.detail == 2 && !menuPopup.hidePopup()
     || e.ctrlKey || !!menuPopup.openPopup(this, "after_start");
     

// Создать меню .................
var array = [
    { label: 'Выделять текст с пробелом справа', value: 'layout.word_select.eat_space_to_next_word' },
    { label: 'Выделенный текст мигает при автокопировании', value: 'CB.Autocopy.selectingTextBlink' },
    { label: 'Дополнительные возможности для адресной строки', value: 'CB.Autocopy.addToAddressBar'},
    { label: 'Выключать автокопирование при выходе из браузера', value: 'CB.Autocopy.reset' },
    { separator: ''},
    { label: 'Двойной правый клик мыши копирует выделенный текст', value: 'CB.Autocopy.copyWithDoubleClick' },
    { label: 'Двойной правый клик мыши сохраняет изображение без запроса', value: 'CB.Autocopy.saveWithDoubleClick' }, 
    { label: 'Средним кликом вставлятъ текст с заменой выделенного текста', value: 'middlemouse.paste' },
];
var menuPopup = self.appendChild(document.createElement("menupopup"));
array.forEach(m=> {
   if ( "separator" in m ) { menuPopup.appendChild(document.createElement("menuseparator")); return };
   var mItem = menuPopup.appendChild(document.createElement("menuitem"));
   mItem.setAttribute("label", m.label);
   mItem.setAttribute('type', 'checkbox');
   mItem.setAttribute('checked', cbu.getPrefs(m.value));
   mItem.onclick =e=> cbu.setPrefs(m.value, !cbu.getPrefs(m.value));  
});
menuPopup.setAttribute("onclick", "event.stopPropagation()");


// Блокировка двойной инициализации обработчиков для SeaMonkey ...............
if ( this.hasAttribute("initialized") ) return;


// Установить нужную иконку кнопки при старте браузера или при изменениях настроек в 'about:config' .................
const s = "CB.Autocopy";
function toggleImage() {  
   document.getAnonymousNodes(self)[1].src = cbu.getPrefs(s)
   ? "data:image/x-icon;base64,AAABAAEAEREAAAEAIADwBAAAFgAAACgAAAARAAAAIgAAAAEAIAAAAAAAyAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAgMBAAQIAAcEBwAIBAcACAQHAAgEBwAIBAcACAQHAAgEBwAIBAcACAMEAQEAAAAAAAAAAAAAAAACAwADAAAAABUnAB9cqgC3a7wB4Gq5Ad1qugHearoB3mq6Ad5qugHearoB3mi4AN1qugHgYrMAxR43AC8AAAAAAAEAAAECAAQAAAQAV6AAprP9Vv/W/qn80/+f/9T/ov/U/6L/1P+i/9T/ov/U/6L/1/+n/9X+pfy3/WL/Y7QAvwEAAQAAAAAAFSgAH1ehAKlyzwD1htgf/YzcJ/2K2yP9i9sk/YvbJf2L2yX9i9sm/YnaIv2b4kP92/21/Nf+qv9quwHdBQkACAAAAQBeqwCzr/tR/8X0j/u+8X//vvJ//77ygP++8oD/vvKA/77yf/+98n7/wvSH/4zcKv+e4kv93v+0/2i5AN0DBwAIBQkACGu8AdzV/af/4v/B/d//u//h/7//4f+//+H/v//h/7//4f+//9/+u//n/8n/w/GK/4zaK/3g/7r/aroC3gMHAAgEBwAIarkC3dX/pf/g/sD93v67/9/+vv/g/r//4P6//+D+v//f/r7/3f66/+T/xv/B8Yb/j9st/eT/w/9qugPeAwcACAQHAAhqugLe2v+w/+j/z/3l/8r/5//N/+f/zv/n/87/5//O/+f/zf/l/sj/7P/W/8Xyj/+Q2y/96f/N/2q6A94DBwAIBAcACGq6At7f/7n/7v/c/ev/1v/t/9n/7f/a/+3/2v/t/9r/7f/Z/+r+1f/y/+P/yPKW/5DbMf3s/9X/aroE3gMHAAgEBwAIaroC3uP/wf/z/+j98P/h//L/5P/z/+X/8//l//P/5f/y/+T/8P7g//j/7v/L8p3/kdsy/fD/3P9rugTeAwcACAQHAAhqugLe5v/J//j/8v31/+r/9v/t//f/7v/3/+//9//u//b/7f/0/un//f/4/87yo/+R2zL98f/f/2q5Bd0DBwAIBAcACGq6At7p/8///P/6/fj/8f/6//T/+v/1//r/9f/6//X/+v/0//f+8P//////0fGo/5PbNf30/+f/a7wE3AQJAAgEBwAIabkC3er/0f/+//79+v/0//v/9//8//j//P/4//z/+P/7//f/+f70///////T8qz/i9go+8P9ef9dqwCzAAACAAUJAAhquwHd7f7a//////z+//39/////f////3////9/////f////39/vz9/////dzzvv5v0AD1VqECqRUnAB8AAAAAAQACAGK0AL/J/Yf/8v7k/O3/1//u/9n/7v/Z/+7/2f/u/9n/7v/Z/+3/1//x/eP8vfxu/1WgAKYAAAUAAQIABAABAAAAAAAAHjcALmGzAMVquwLgarkC3Wq6At5qugLearoC3mq6At5qugLearkC3Wu8AeBbqgC3FScAHwAAAAACAwADAAAAAAAAAAAAAAAAAwQCAQQIAAgEBwAIBAcACAQHAAgEBwAIBAcACAQHAAgEBwAIBAgABwMDAgAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="
   : "data:image/x-icon;base64,AAABAAEAEREAAAEAIADwBAAAFgAAACgAAAARAAAAIgAAAAEAIAAAAAAAyAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAgEDAAQACAcEAAcIBAAHCAQABwgEAAcIBAAHCAQABwgEAAcIBAAHCAMBBAEAAAAAAAAAAAAAAAACAAMDAAAAABUAJx9cAKq3awG84GoBud1qAbreagG63moBut5qAbreagG63mgAuN1qAbrgYgCzxR4ANy8AAAAAAAABAAEAAgQABAAAVwCgprNW/f/Wqf7805///9Si///Uov//1KL//9Si///Uov//16f//9Wl/vy3Yv3/YwC0vwEBAAAAAAAAFQAoH1cAoalyAM/1hh/Y/Ywn3P2KI9v9iyTb/Ysl2/2LJdv9iybb/Yki2v2bQ+L927X9/Neq/v9qAbvdBQAJCAABAABeAKuzr1H7/8WP9Pu+f/H/vn/y/76A8v++gPL/voDy/75/8v+9fvL/wof0/4wq3P+eS+L93rT//2gAud0DAAcIBQAJCGsBvNzVp/3/4sH//d+7///hv///4b///+G////hv///4b///9+7/v/nyf//w4rx/4wr2v3guv//agK63gMABwgEAAcIagK53dWl///gwP793rv+/9++/v/gv/7/4L/+/+C//v/fvv7/3br+/+TG///BhvH/jy3b/eTD//9qA7reAwAHCAQABwhqArre2rD//+jP//3lyv//583//+fO///nzv//587//+fN///lyP7/7Nb//8WP8v+QL9v96c3//2oDut4DAAcIBAAHCGoCut7fuf//7tz//evW///t2f//7dr//+3a///t2v//7dn//+rV/v/y4///yJby/5Ax2/3s1f//agS63gMABwgEAAcIagK63uPB///z6P/98OH///Lk///z5f//8+X///Pl///y5P//8OD+//ju///LnfL/kTLb/fDc//9rBLreAwAHCAQABwhqArre5sn///jy//316v//9u3///fu///37///9+7///bt///06f7//fj//86j8v+RMtv98d///2oFud0DAAcIBAAHCGoCut7pz////Pr//fjx///69P//+vX///r1///69f//+vT///fw/v//////0ajx/5M12/305///awS83AQACQgEAAcIaQK53erR///+/v/9+vT///v3///8+P///Pj///z4///79///+fT+///////TrPL/iyjY+8N5/f9dAKuzAAIAAAUACQhqAbvd7dr+//////z+/f/9/////f////3////9/////f////39/P79/////dy+8/5vAND1VgKhqRUAJx8AAAAAAQIAAGIAtL/Jh/3/8uT+/O3X///u2f//7tn//+7Z///u2f//7tn//+3X///x4/38vW78/1UAoKYABQAAAQACBAAAAQAAAAAAHgA3LmEAs8VqArvgagK53WoCut5qArreagK63moCut5qArreagK53WsBvOBbAKq3FQAnHwAAAAACAAMDAAAAAAAAAAAAAAAAAwIEAQQACAgEAAcIBAAHCAQABwgEAAcIBAAHCAQABwgEAAcIBAAIBwMCAwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=";
};  
toggleImage();
Services.prefs.addObserver(s, toggleImage, false);
addDestructor(()=> Services.prefs.removeObserver(s, toggleImage));  

 
// Выключать кнопку при закрытии браузера если это разрешено в 'about:config' .................
var toggleButton = {
   observe:(subject, topic, data)=> {
      cbu.getPrefs("CB.Autocopy.reset") && data == "shutdown" && cbu.setPrefs("CB.Autocopy", false);  
   }
};
Services.obs.addObserver(toggleButton, "quit-application", false);

  
// Функции автоматически копирует выделенный текст на странице, если это разрешено в 'about:config' ...............
function autocopy(e) {
   if (
       e.button
       || !cbu.getPrefs("CB.Autocopy")
       || document.commandDispatcher.focusedWindow.getSelection().isCollapsed
      ) return;
   
   goDoCommand('cmd_copy');
         
   // выделенный текст мигает ....
   if ( !cbu.getPrefs("CB.Autocopy.selectingTextBlink") ) return;
   document.activeElement.blur();  
   setTimeout(()=> window.content.focus(), 300);
};
addEventListener('mouseup', autocopy, false, gBrowser);


// Cредней кнопкой мыши вставить текст из буфера обмена в текстовые поля с заменой выделенного текста ...............
function middleMousePaste(e, doc = this.document || document) { 
   if (
       e.button !== 1
       || !cbu.getPrefs('middlemouse.paste')
       || !/input|password|textarea|textbox|searchbar|findbar|cbeditor/.test(e.target.localName)
      ) return;

   e.preventDefault();
   e.stopPropagation(); 
          
   // вставить текст ....
   var cmd = "cmd_insertText";
   var commandDispatcher = doc.commandDispatcher;
   var controller = commandDispatcher.getControllerForCommand(cmd);
   var controller = controller.QueryInterface(Ci.nsICommandController);
   var params = Cc["@mozilla.org/embedcomp/command-params;1"].createInstance(Ci.nsICommandParams);
   params.setStringValue("state_data", gClipboard.read());
   controller.doCommandWithParams(cmd, params);
};
addEventListener("click", middleMousePaste, true, document.documentElement);


// Дополнительные возможности для значка идентификации сайта в строке адреса ...............
addEventListener("click", e=> {
   if (
       e.button == 1
       || !/page-proxy-favicon|page-proxy-button/.test(e.target.id)
       || !cbu.getPrefs("CB.Autocopy.addToAddressBar")
      ) return;

   e.preventDefault();
   e.stopPropagation();
   e.target.setAttribute("context", "event.stopPropagation()");
   
   // ЛКМ без запроса открывает информацию о странице в вкладке 'Разрешения' ....
   if ( e.button == 0 )
        BrowserPageInfo(content.document, (gURLBar.value.startsWith("http") ? "permTab" : "generalTab"));
        
   // ПКМ копирует текущий адрес ....     
   if ( e.button !== 2 ) return;
   gClipboard.write(content.location);

   // значок идентификации сайта мигает красным ....
   var id = (Services.appinfo.name == "SeaMonkey") ? "page-proxy-deck" : "identity-box";
   document.getElementById(id).style.background = "red";
   setTimeout(()=> document.getElementById(id).style.background = "", 300);
   
}, true, gURLBar);

   
// Дополнительные возможности для двойного клика мыши ...............
function handleDblClick(e) {
   var node = e.target;
   var editor = node.editor;

   // Сохранить изображение в папку загрузки ....
   if ( e.button == 2 && cbu.getPrefs("CB.Autocopy.saveWithDoubleClick") && node.localName == 'img' ) {
        var run = cbu.getPrefs("browser.download.folderList");
        var use = cbu.getPrefs("browser.download.useDownloadDir");

        cbu.setPrefs("browser.download.folderList", 2);
        cbu.setPrefs("browser.download.useDownloadDir", true);
        
        function save() {
           var func = eval(
              gContextMenu.saveMedia.toSource()
              .replace(/(false,\s+)false,/, "$1true,")
              .replace(/^s/, "0,function s")
           );
           (save =()=> func.call(gContextMenu))();
        } 
        
        /Pale Moon|SeaMonkey/.test(Services.appinfo.name)
        ? saveImageURL(gContextMenu.imageURL, 0, 0, 0, 1, null, content.document)
        : save();
        
        setTimeout(()=> document.getElementById("contentAreaContextMenu").hidePopup(), 20);
        
        cbu.setPrefs("browser.download.folderList", run);
        cbu.setPrefs("browser.download.useDownloadDir", use);
        };
       
   // скопировать выделенный текст ....
   if ( e.button == 2 && cbu.getPrefs("CB.Autocopy.copyWithDoubleClick") && !/findbar|tabbrowser/.test(node.localName) ) { 
        e.preventDefault();
        editor ? editor.copy() : goDoCommand("cmd_copy");      
        try {      
            var box = (node.textbox || node).inputField.parentNode;
            var popup = box.ownerDocument.getAnonymousElementByAttribute(box, "anonid", "input-box-contextmenu");
            setTimeout(()=> popup.hidePopup(), 50);
            }
        catch(e) { setTimeout(()=> document.getElementById("contentAreaContextMenu").hidePopup(), 50) }; 
        }        
};
addEventListener("dblclick", handleDblClick, false, gBrowser);


// Наблюдатель следит за открытием новых окон ...............
function observer(subject) {
   subject.addEventListener("load", e=> {
      var doc = e.target;
      var view = doc.defaultView;
      
      // добавлять обработчики клика для редакторов CB кнопок ....
      if ( /custombuttons/.test(doc.URL) ) {
           view.addEventListener("dblclick", handleDblClick, false);
           view.addEventListener("click", middleMousePaste.bind(view), true);
           };
      
      // добавлять обработчики клика для 'Информацию о странице' и 'Библиотеки' ....            
      if ( /pageInfo.xul|places.xul/.test(doc.URL) ) {
           view.addEventListener("dblclick", function close() { this.close() }, true);
                         
           view.addEventListener("unload", e=> {
              view.removeEventListener(e.type, arguments.callee, false);
              view.removeEventListener("dblclick", close, true);
           }, false);                  
           };
   });
};
Services.ww.registerNotification(observer);
addDestructor(()=> Services.ww.unregisterNotification(observer));


// Подсказка для кнопки ................................
this.tooltipText = "Autocopy \nЛ: Переключить автоматическое копирование \nП: Меню \nДП: CB меню";

Вкладки сверху & Вставить и перейти Firefox3.6 не требует нажатия,после установки возможно потребуется перезапуск браузера
Помещает панель вкладок вверх ,добавляет контекстный пункт меню адресной строки"Вставить и перейти"

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

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3E%u0412%u043A%u043B%u0430%u0434%u043A%u0438%20%u0441%u0432%u0435%u0440%u0445%u0443%20%26amp%3B%20%u0412%u0441%u0442%u0430%u0432%u0438%u0442%u044C%20%u0438%20%u043F%u0435%u0440%u0435%u0439%u0442%u0438%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAACB0RVh0U29mdHdhcmUATWFjcm9tZWRpYSBGaXJld29ya3MgTVi7kSokAAAAFnRFWHRDcmVhdGlvbiBUaW1lADExLzA1LzA33bqJ2wAAAn5JREFUeJx9U01IVFEYPfe9eW/GcoZSg6b3pME0UzIErWiVFSVEkC7bSQRBq2oTmKUGboJI0I07nwRSG2ch2aLIRX/mjGaSMFmNyow5QaM5M877ue/eFoPjPCY6u++e853v5/IRzjkKcenbzWOlwq5eGVKzBFG1GEWKZmJpeyu0yTLdUw0jnwv1pNDgSvTumAypbSozj6i5CpNbAACJuOAXylElKNCZEXzfqLU7DL7qK56HCW0xoq+ob9Kz+B+qiYK9zBs7aR2pGTjVpQsA0P1zaPRfyS3eJrR4mxxv33gcCb6uvhTCowBArkZ7j1POPo4kx4uqvT48BNgcZ2avAT6Xg6s1VFBGT7g27HTfl+z3ouSAfCBfPfBnH5Z86w5+TUyilHn6XGWirz5qruZbbiypRcDtx+U9p3c6OTcMbWMcG8jgUzaCyVQYKTEL31ZJvYsxpmxv+6Dsx+PK28XdeBV0e68DADrmuoBNCuZzgdpUESxG80Lt9zg65u8VGWyj49UdaG+fAWbu6y1GIRi2GZfIzoI0cwL9y0+KkvvnhqFFxoBDJUCFBMIJLGbFhV80ueAXyh3ixrK64jF8KrBfBiokAIBkEBgiXRA8XO6sEhSn2O0HAPRMD6B/bji/BxgsrxHTgG3RTmHi6GBIZ0awmuyYTKbCCDw9i97pAdxafoTAiwtYSsUBIze7nCKwQIPmxZkQ4ZyjZ3bQ89z+sJjg6+qKkMi5/MgCihtwC7nYYMCyDtm/G3zLjtGlTA27EdEdx1Q31T7Gbd62JiaRErNgJMcRTiAZBGIasECDVuuM85gKUfmutQE2HnCbNTPKVItRmDBjJuwQJfZ963x4vlD/F6u3LbVAOWEsAAAAAElFTkSuQmCC%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E/*%u0412%u043A%u043B%u0430%u0434%u043A%u0438%20%u0441%u0432%u0435%u0440%u0445%u0443*/%0A%20var%20cssStr%20%3D%20%26lt%3B%21%5BCDATA%5B%0A@-moz-document%20url%28%22chrome%3A//browser/content/browser.xul%22%29%0A%7B.tabbrowser-strip%7Bposition%3Afixed%3Btop%3A0px%3Bwidth%3A100%25%21important%3Bz-index%3A0%3B%7D%0Atab%7B-moz-user-select%3A-moz-none%21important%3Bz-index%3A0%21important%3B-moz-border-radius-bottomleft%3A%200px%21important%3B%7D%0A.tabbrowser-strip%20.tabbrowser-tabs%7Bwidth%3A100%25%21important%3B%7D%0A.tab-drop-indicator-bar%7Bposition%3Afixed%21important%3B%0Atop%3A0px%3Bleft%3A0px%3Bwidth%3A100%25%21important%3Bz-index%3A1%3B%7Dwindow%20%7Bpadding-top%3A20px%3B%7D%7D%0A%5D%5D%26gt%3B%0A%20%20%20%20.toString%28%29%0A%20%20%20%20.replace%28/%25button%25/g%2C%20%22%23%22%20+%20this.id%29%3B%0Avar%20cssURI%20%3D%20this._cssURI%20%3D%20makeURI%28%20//%20chrome%3A//global/content/contentAreaUtils.js%0A%20%20%20%20%22data%3Atext/css%2C%22%0A%20%20%20%20+%20encodeURIComponent%28cssStr%29%0A%29%3B%0Athis.setSheet%20%3D%20function%28cssURI%2C%20addFlag%29%20%7B%0A%20%20%20%20var%20sss%20%3D%20Components.classes%5B%22@mozilla.org/content/style-sheet-service%3B1%22%5D%0A%20%20%20%20%20%20%20%20.getService%28Components.interfaces.nsIStyleSheetService%29%3B%0A%20%20%20%20if%28sss.sheetRegistered%28cssURI%2C%20sss.AGENT_SHEET%29%20%26amp%3B%26amp%3B%20%21addFlag%29%0A%20%20%20%20%20%20%20%20sss.unregisterSheet%28cssURI%2C%20sss.AGENT_SHEET%29%3B%0A%20%20%20%20if%28addFlag%29%0A%20%20%20%20%20%20%20%20sss.loadAndRegisterSheet%28cssURI%2C%20sss.AGENT_SHEET%29%3B%7D%0Athis.setSheet%28cssURI%2C%20true%29%3B%0Athis.onDestroy%20%3D%20function%28%29%20%7Bthis.setSheet%28this._cssURI%2C%20true%29%3B%7D%0A%0A/*%u0412%u0441%u0442%u0430%u0432%u0438%u0442%u044C%20%u0438%20%u043F%u0435%u0440%u0435%u0439%u0442%u0438*/%0Adocument.getElementById%28%22urlbar%22%29.addEventListener%28%22popupshowing%22%2C%20function%28event%29%20%7B%0A%09const%20eltID%20%3D%20%22pasteandgo-menuitem%22%3B%0A%09var%20menupopup%20%3D%20event.originalTarget%3B%0A%09var%20refChild%20%3D%20menupopup.getElementsByAttribute%28%22cmd%22%2C%20%22cmd_paste%22%29%5B0%5D%3B%0A%09var%20canPaste%20%3D%20refChild.getAttribute%28%22disabled%22%29%20%3D%3D%20%22true%22%3B%0A%09var%20menuitem%20%3D%20document.getElementById%28eltID%29%3B%0A%09if%20%28%21menuitem%29%20%7B%0A%09%09var%20pasteAndGo%20%3D%20function%28event%29%20%7B%0A%09%09%09goDoCommand%28%22cmd_paste%22%29%3B%0A%09%09%09if%20%28%22handleURLBarCommand%22%20in%20window%29%0A%09%09%09%09//%20%5BFirefox3.0%5D%0A%09%09%09%09handleURLBarCommand%28event%29%3B%0A%09%09%09else%0A%09%09%09%09//%20%5BFirefox3.5%5D%0A%09%09%09%09gURLBar.handleCommand%28event%29%3B%0A%09%09%09menupopup.hidePopup%28%29%3B%0A%09%09%7D%3B%0A%09%09menuitem%20%3D%20document.createElement%28%22menuitem%22%29%3B%0A%09%09menuitem.id%20%3D%20eltID%3B%0A%09%09menuitem.setAttribute%28%22label%22%2C%20%22%u0412%u0441%u0442%u0430%u0432%u0438%u0442%u044C%20%u0438%20%u043F%u0435%u0440%u0435%u0439%u0442%u0438%22%29%3B%0A%09%09menuitem.setAttribute%28%22accesskey%22%2C%20%22G%22%29%3B%0A%09%09menuitem.addEventListener%28%22command%22%2C%20pasteAndGo%2C%20false%29%3B%0A%09%09menupopup.insertBefore%28menuitem%2C%20refChild.nextSibling%29%3B%0A%09%7D%0A%09menuitem.setAttribute%28%22disabled%22%2C%20canPaste.toString%28%29%29%3B%0A%7D%2C%20false%29%3B%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%3Clabel%3E%20%0Aid%20%3D%20%3Cid%3E%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

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

Выделить код

Код:

/*Вкладки сверху*/
 var cssStr = <![CDATA[
@-moz-document url("chrome://browser/content/browser.xul")
{.tabbrowser-strip{position:fixed;top:0px;width:100%!important;z-index:0;}
tab{-moz-user-select:-moz-none!important;z-index:0!important;-moz-border-radius-bottomleft: 0px!important;}
.tabbrowser-strip .tabbrowser-tabs{width:100%!important;}
.tab-drop-indicator-bar{position:fixed!important;
top:0px;left:0px;width:100%!important;z-index:1;}window {padding-top:20px;}}
]]>
    .toString()
    .replace(/%button%/g, "#" + this.id);
var cssURI = this._cssURI = makeURI( // chrome://global/content/contentAreaUtils.js
    "data:text/css,"
    + encodeURIComponent(cssStr)
);
this.setSheet = function(cssURI, addFlag) {
    var sss = Components.classes["@mozilla.org/content/style-sheet-service;1"]
        .getService(Components.interfaces.nsIStyleSheetService);
    if(sss.sheetRegistered(cssURI, sss.AGENT_SHEET) && !addFlag)
        sss.unregisterSheet(cssURI, sss.AGENT_SHEET);
    if(addFlag)
        sss.loadAndRegisterSheet(cssURI, sss.AGENT_SHEET);}
this.setSheet(cssURI, true);
this.onDestroy = function() {this.setSheet(this._cssURI, true);}

/*Вставить и перейти*/
document.getElementById("urlbar").addEventListener("popupshowing", function(event) {
    const eltID = "pasteandgo-menuitem";
    var menupopup = event.originalTarget;
    var refChild = menupopup.getElementsByAttribute("cmd", "cmd_paste")[0];
    var canPaste = refChild.getAttribute("disabled") == "true";
    var menuitem = document.getElementById(eltID);
    if (!menuitem) {
        var pasteAndGo = function(event) {
            goDoCommand("cmd_paste");
            if ("handleURLBarCommand" in window)
                // [Firefox3.0]
                handleURLBarCommand(event);
            else
                // [Firefox3.5]
                gURLBar.handleCommand(event);
            menupopup.hidePopup();
        };
        menuitem = document.createElement("menuitem");
        menuitem.id = eltID;
        menuitem.setAttribute("label", "Вставить и перейти");
        menuitem.setAttribute("accesskey", "G");
        menuitem.addEventListener("command", pasteAndGo, false);
        menupopup.insertBefore(menuitem, refChild.nextSibling);
    }
    menuitem.setAttribute("disabled", canPaste.toString());
}, false);

Копировать информацию вкладки & Link Tooltips & TextLink (Firefox3.6 - 4.0.1)
Добавляет в контекстное меню вкладки пункты:"Копировать название вкладки и адрес""Копировать название вкладки и адрес(HTML)""Копировать название вкладки и адрес(BBCode)", при наведении курсора на ссылку показывает в всплывающей подсказке(как в Opera) название и полный адрес ссылки,открытие текстовых адресов двойным кликом ЛКМ. После установки и вывода кнопки на панель желателен перезапуск браузера.

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

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3E%u041A%u043E%u043F%u0438%u0440%u043E%u0432%u0430%u0442%u044C%20%u0438%u043D%u0444%u043E%u0440%u043C%u0430%u0446%u0438%u044E%20%u0432%u043A%u043B%u0430%u0434%u043A%u0438%20%26amp%3B%20Link%20Tooltips%20%26amp%3B%20TextLink%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAACB0RVh0U29mdHdhcmUATWFjcm9tZWRpYSBGaXJld29ya3MgTVi7kSokAAAAFnRFWHRDcmVhdGlvbiBUaW1lADExLzA1LzA33bqJ2wAAAkVJREFUeJx9k71PU1EYxn/n3tuWUggfBkKkxhsQjUQJA+ooOpuIg4Mb8T9wJUbEhMVFRte6MNIRJ0h0IFgTIwhqNZRYVNrQNCmF2/txXofy0WuNT3KGk/f3nPO8b/IqESGkb3dGMNpmhOiYKCsp2kOCSp6gkiGoTFtXVj824ir0wNaDBYhOUF0BNwfiHlERtNmHbw4g2knHRlbuhR9wvraw+zyL8yXJ/lv+J88cxKczX2FsqHf0pWMA8Gt6/p/m9vH6aVAk+I6pC8m2YGm+nmDr4TXEX6X0qvm7i0sEGpy1WyTi4VJVX0Dr4LpFUJ7lcL3ZHLWhfRwTKLs2iXguXKZATVpnLTG7h5WbO40cH4WYDZ13T+DeG0vocgpDl+HwA1SWsYx9ql7bsCUS9KvjaUfPw7kXTWEiCRsS0/Xom5NwCIm4RgK/3xDtnZJ7KQ4+Tza3c6Sf7ybZXk/h+fW7aBdDdG0HFTmBWqspavm5JnMpO0c5l+JsD3S2g4hCxNsx8Aob2uwLwbGO0eY2Wm26O+pmANc3sQx3w9CqZco3B8J0zAag+OkppezcyRyOowNUHQPf96eM6OXFjGgn7ZmDp9XKMluvbYobMwTbjyi+sfGqOTzv2Gyh8NJnbuuMEhFKm49b4rXFrKkLyaj8qA+sCD1dELHqJs+H33vQ3WHh1IL87p4MDd8XJ7RMB+8vLYjWE1EKWMY+Cl2ftihc36TqGCi8dNe4/muZGnSw2n9Va54FWo/pQCdFuyjcvMLLKPwnHTf1WiP/B4PEHA5jCaq+AAAAAElFTkSuQmCC%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%28function%28%29%20%7B%0A%09var%20htmlEscape%20%3D%20function%28s%29%20%7B%0A%09%09s%20%3D%20s.replace%28/%26/g%2C%20%22%26amp%3B%22%29%3B%0A%09%09s%20%3D%20s.replace%28/%3E/g%2C%20%22%26gt%3B%22%29%3B%0A%09%09s%20%3D%20s.replace%28/%3C/g%2C%20%22%26lt%3B%22%29%3B%0A%09%09s%20%3D%20s.replace%28/%22/g%2C%20%22%26quot%3B%22%29%3B%0A%09%09return%20s%3B%0A%09%7D%3B%0A%09var%20copyTabInfo%20%3D%20function%20%28aAsHTML%29%20%7B%0A%09%09var%20tab%20%3D%20document.popupNode%3B%0A%09%09var%20title%20%3D%20tab.label%3B%0A%09%09var%20url%20%3D%20gBrowser.getBrowserForTab%28tab%29.contentWindow.location.href%3B%0A%09%09var%20txt%20%3D%20aAsHTML%20%3F%0A%09%09%20%20%20%20%20%20%20%20%20%20%27%3Ca%20href%3D%22%27%20+%20htmlEscape%28url%29%20+%20%27%22%3E%27%20+%20htmlEscape%28title%29%20+%20%27%3C/a%3E%27%20%3A%0A%09%09%20%20%20%20%20%20%20%20%20%20title%20+%20%22%5Cn%22%20+%20url%3B%0A%09%09Cc%5B%22@mozilla.org/widget/clipboardhelper%3B1%22%5D%0A%09%09.getService%28Ci.nsIClipboardHelper%29%0A%09%09.copyString%28txt%29%3B%0A%09%7D%3B%0A%09var%20copyTabBBC%20%3D%20function%20%28aAsBBC%29%20%7B%0A%20%20%20%20%20%20%20%20var%20tab%20%3D%20document.popupNode%3B%0A%20%20%20%20%20%20%20%20var%20title%20%3D%20tab.label%3B%0A%20%20%20%20%20%20%20%20var%20url%20%3D%20gBrowser.getBrowserForTab%28tab%29.contentWindow.location.href%3B%0A%20%20%20%20%20%20%20%20var%20txt%20%3D%20aAsBBC%20%3F%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%27%5Burl%3D%27%20+%20htmlEscape%28url%29%20+%20%27%5D%27%20+%20htmlEscape%28title%29%20+%20%27%5B/url%5D%27%20%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20title%20+%20%22%5Cn%22%20+%20url%3B%0A%20%20%20%20%20%20%20%20Cc%5B%22@mozilla.org/widget/clipboardhelper%3B1%22%5D%0A%20%20%20%20%20%20%20%20.getService%28Ci.nsIClipboardHelper%29%0A%20%20%20%20%20%20%20%20.copyString%28txt%29%3B%0A%20%20%20%20%7D%3B%0A%09var%20menuitem1%20%3D%20document.createElement%28%22menuitem%22%29%3B%0A%09menuitem1.setAttribute%28%22label%22%2C%20%22%u041A%u043E%u043F%u0438%u0440%u043E%u0432%u0430%u0442%u044C%20%u043D%u0430%u0437%u0432%u0430%u043D%u0438%u0435%20+%20URL%22%29%3B%0A%09menuitem1.addEventListener%28%22command%22%2C%20function%28%29%20%7B%20copyTabInfo%28false%29%3B%20%7D%2C%20false%29%3B%0A%09var%20menuitem2%20%3D%20document.createElement%28%22menuitem%22%29%3B%0A%09menuitem2.setAttribute%28%22label%22%2C%20%22%u041A%u043E%u043F%u0438%u0440%u043E%u0432%u0430%u0442%u044C%20%u043D%u0430%u0437%u0432%u0430%u043D%u0438%u0435%20+%20URL%20%28HTML%29%22%29%3B%0A%09menuitem2.addEventListener%28%22command%22%2C%20function%28%29%20%7B%20copyTabInfo%28true%29%3B%20%7D%2C%20false%29%3B%0A%09var%20menuitem3%20%3D%20document.createElement%28%22menuitem%22%29%3B%0A%20%20%20%20menuitem3.setAttribute%28%22label%22%2C%20%22%u041A%u043E%u043F%u0438%u0440%u043E%u0432%u0430%u0442%u044C%20%u043D%u0430%u0437%u0432%u0430%u043D%u0438%u0435%20+%20URL%20%28BBCode%29%22%29%3B%0A%20%20%20%20menuitem3.addEventListener%28%22command%22%2C%20function%28%29%20%7B%20copyTabBBC%28true%29%3B%20%7D%2C%20false%29%3B%0A%09setTimeout%28function%28%29%20%7B%0A%09%09gBrowser.mStrip.childNodes%5B1%5D.appendChild%28document.createElement%28%22menuseparator%22%29%29%3B%0A%09%09gBrowser.mStrip.childNodes%5B1%5D.appendChild%28menuitem1%29%3B%0A%09%09gBrowser.mStrip.childNodes%5B1%5D.appendChild%28menuitem2%29%3B%0A%09%09gBrowser.mStrip.childNodes%5B1%5D.appendChild%28menuitem3%29%3B%0A%09%7D%2C%200%29%3B%0A%7D%29%28%29%3B%0A%0A/*%20%3A%3A%3A%3A%3A%3A%3A%3A%20Link%20Tooltips%20%3A%3A%3A%3A%3A%3A%3A%3A%3A%3A%3A%3A%3A%3A%3A%20*/%0A%0AgetBrowser%28%29.addEventListener%28%22DOMContentLoaded%22%2C%20function%28aEvent%29%20%7B%0A%09var%20doc%20%3D%20new%20XPCNativeWrapper%28aEvent.originalTarget%29%3B%0A%09var%20links%20%3D%20doc.evaluate%28%22//a%5B@href%20and%20@href%21%3D%27%27%5D%22%2C%20doc%2C%20null%2C%20XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE%2C%20null%29%3B%0A%09%0A%09for%20%28var%20link%2C%20i%20%3D%200%3B%20%28link%20%3D%20links.snapshotItem%28i%29%29%3B%20i++%29%0A%09%7B%0A%09%09link.title%20%3D%20link.title%20%3F%20link.title%20+%20%22%20%3C%22%20+%20link.href%20+%20%22%3E%22%20%3A%20link.href%3B%0A%09%7D%0A%7D%2C%20true%29%3B%0A%0Afunction%20ucjs_textlink%28event%29%7B%0A%0A%20%20if%28event.button%20%21%3D%200%20%26%26%20event.keyCode%20%21%3D%2013%29%20return%3B%0A%0A%0A%0A%20%20var%20Start%20%3D%20new%20Date%28%29.getTime%28%29%3B%0A%0A%0A%0A%20%20const%20relative%20%3D%20true%3B%20//%u76F8%u5BFEurl%u3092%u89E3%u6C7A%u3059%u308B%u304B%u3069%u3046%u304B%0A%0A%0A%0A%20%20const%20ioService%20%3D%20Components.classes%5B%27@mozilla.org/network/io-service%3B1%27%5D%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.getService%28Components.interfaces.nsIIOService%29%3B%0A%0A%0A%0A%20%20const%20urlRegex%20%3D%20/%28%28%28h%3Ft%29%3Ftps%3F%7Ch..ps%3F%7Cftp%7C%28%28%5Cuff48%29%3F%5Cuff54%29%3F%5Cuff54%5Cuff50%28%5Cuff53%29%3F%7C%5Cuff48..%5Cuff50%28%5Cuff53%29%3F%7C%5Cuff46%5Cuff54%5Cuff50%29%28%3A%5C/%5C/%7C%5Cuff1a%5C/%5C/%7C%3A%5Cuff0f%5Cuff0f%7C%5Cuff1a%5Cuff0f%5Cuff0f%29%5B-_.%21%7E*%27%28%29%7Ca-zA-Z0-9%3B%3A%5C/%3F%2C@%26%3D+%24%25%23%5C%5B%5C%5D%5Cuff0d%5Cuff3f%5Cu301c%5Cuffe3%5Cuff0e%5Cuff01%5Cuff5e%5Cuff0a%5Cu2019%5Cuff08%5Cuff09%5Cuff5c%5Cuff41-%5Cuff5a%5Cuff21-%5Cuff3a%5Cuff10-%5Cuff19%5Cuff1b%5Cuff1a%5Cuff0f%5Cuff1f%5Cuff1a%5Cuff20%5Cuff06%5Cuff1d%5Cuff0b%5Cuff04%5Cuff0c%5Cuff05%5Cuff03%5Cuff5c%5Cuff3b%5Cuff3d%5D*%5B-_.%21%7E*%29%7Ca-zA-Z0-9%3B%3A%5C/%3F@%26%3D+%24%25%23%5C%5B%5C%5D%5Cuff0d%5Cuff3f%5Cu301c%5Cuffe3%5Cuff0e%5Cuff01%5Cuff5e%5Cuff0a%5Cu2019%5Cuff5c%5Cuff41-%5Cuff5a%5Cuff21-%5Cuff3a%5Cuff10-%5Cuff19%5Cuff1b%5Cuff1a%5Cuff0f%5Cuff1f%5Cuff20%5Cuff06%5Cuff1d%5Cuff0b%5Cuff04%5Cuff0c%5Cuff05%5Cuff03%5Cuff5c%5Cuff3b%5Cuff3d%5D+%29/ig%3B%0A%0A%20%20const%20urlRegex1%20%3D%20/%28%5B-_.%21%7E*%27%28%29%7Ca-zA-Z0-9%3B%3A%5C/%3F%2C@%26%3D+%24%25%23%5C%5B%5C%5D%5Cuff0d%5Cuff3f%5Cu301c%5Cuffe3%5Cuff0e%5Cuff01%5Cuff5e%5Cuff0a%5Cu2019%5Cuff08%5Cuff09%5Cuff5c%5Cuff41-%5Cuff5a%5Cuff21-%5Cuff3a%5Cuff10-%5Cuff19%5Cuff1b%5Cuff1a%5Cuff0f%5Cuff1f%5Cuff20%5Cuff06%5Cuff1d%5Cuff0b%5Cuff04%5Cuff0c%5Cuff05%5Cuff03%5Cuff5c%5Cuff3b%5Cuff3d%5D*%5B.%5Cuff0e%5D+%5B-_.%21%7E*%27%7Ca-zA-Z0-9%3B%3A%5C/%3F@%26%3D+%24%25%23%5Cuff0d%5Cuff3f%5Cu301c%5Cuffe3%5Cuff0e%5Cuff01%5Cuff5e%5Cuff0a%5Cu2019%5Cuff08%5Cuff09%5Cuff5c%5Cuff41-%5Cuff5a%5Cuff21-%5Cuff3a%5Cuff10-%5Cuff19%5Cuff1b%5Cuff1a%5Cuff0f%5Cuff1f%5Cuff1a%5Cuff20%5Cuff06%5Cuff1d%5Cuff0b%5Cuff04%5Cuff0c%5Cuff05%5Cuff03%5Cuff5c%5D+%5B.%5Cuff0e/%5Cuff0f%5D*%5B-_.%21%7E*%7Ca-zA-Z0-9%3B%3A%5C/%3F@%26%3D+%24%25%23%5Cuff0d%5Cuff3f%5Cu301c%5Cuffe3%5Cuff0e%5Cuff01%5Cuff5e%5Cuff0a%5Cu2019%5Cuff5c%5Cuff41-%5Cuff5a%5Cuff21-%5Cuff3a%5Cuff10-%5Cuff19%5Cuff1b%5Cuff1a%5Cuff0f%5Cuff1f%5Cuff1a%5Cuff20%5Cuff06%5Cuff1d%5Cuff0b%5Cuff04%5Cuff0c%5Cuff05%5Cuff03%5Cuff5c%5D+%29/ig%3B%0A%0A%20%20const%20urlRx%20%3D%20/%5E%28ttp%7Ctp%7Ch..p%7C%5Cuff54%5Cuff54%5Cuff50%7C%5Cuff54%5Cuff50%7C%5Cuff48..%5Cuff50%29/i%3B%0A%0A%20%20const%20urlRx1%20%3D%20/%28%3A%5C/%5C/%7C%5Cuff1a%5C/%5C/%7C%3A%5Cuff0f%5Cuff0f%7C%5Cuff1a%5Cuff0f%5Cuff0f%29/i%3B%0A%0A%20%20const%20mailRx%20%3D%20/%28%5E%28mailto%3A%7C%5Cuff4d%5Cuff41%5Cuff49%5Cuff4c%5Cuff54%5Cuff4f%5Cuff1a%29%28%3F%3A%28%3F%3A%28%3F%3A%28%3F%3A%5Ba-zA-Z0-9_%21%23%5C%24%5C%25%26%27*+/%3D%3F%5C%5E%60%7B%7D%7E%7C%5C-%5D+%29%28%3F%3A%5C.%28%3F%3A%5Ba-zA-Z0-9_%21%23%5C%24%5C%25%26%27*+/%3D%3F%5C%5E%60%7B%7D%7E%7C%5C-%5D+%29%29*%29%7C%28%3F%3A%22%28%3F%3A%5C%5C%5B%5E%5Cr%5Cn%5D%7C%5B%5E%5C%5C%22%5D%29*%22%29%29%29%5C@%28%3F%3A%28%3F%3A%28%3F%3A%28%3F%3A%5Ba-zA-Z0-9_%21%23%5C%24%5C%25%26%27*+/%3D%3F%5C%5E%60%7B%7D%7E%7C%5C-%5D+%29%28%3F%3A%5C.%28%3F%3A%5Ba-zA-Z0-9_%21%23%5C%24%5C%25%26%27*+/%3D%3F%5C%5E%60%7B%7D%7E%7C%5C-%5D+%29%29*%29%7C%28%3F%3A%5C%5B%28%3F%3A%5C%5C%5CS%7C%5B%5Cx21-%5Cx5a%5Cx5e-%5Cx7e%5D%29*%5C%5D%29%29%29%24%29/%3B%0A%0A%20%20const%20mailRx1%20%3D%20/%28%5E%28%3F%3A%28%3F%3A%28%3F%3A%28%3F%3A%5Ba-zA-Z0-9_%21%23%5C%24%5C%25%26%27*+/%3D%3F%5C%5E%60%7B%7D%7E%7C%5C-%5D+%29%28%3F%3A%5C.%28%3F%3A%5Ba-zA-Z0-9_%21%23%5C%24%5C%25%26%27*+/%3D%3F%5C%5E%60%7B%7D%7E%7C%5C-%5D+%29%29*%29%7C%28%3F%3A%22%28%3F%3A%5C%5C%5B%5E%5Cr%5Cn%5D%7C%5B%5E%5C%5C%22%5D%29*%22%29%29%29%5C@%28%3F%3A%28%3F%3A%28%3F%3A%28%3F%3A%5Ba-zA-Z0-9_%21%23%5C%24%5C%25%26%27*+/%3D%3F%5C%5E%60%7B%7D%7E%7C%5C-%5D+%29%28%3F%3A%5C.%28%3F%3A%5Ba-zA-Z0-9_%21%23%5C%24%5C%25%26%27*+/%3D%3F%5C%5E%60%7B%7D%7E%7C%5C-%5D+%29%29*%29%7C%28%3F%3A%5C%5B%28%3F%3A%5C%5C%5CS%7C%5B%5Cx21-%5Cx5a%5Cx5e-%5Cx7e%5D%29*%5C%5D%29%29%29%24%29/%3B%0A%0A%0A%0A//%u30C9%u30AD%u30E5%u30E1%u30F3%u30C8%u3068%u30B3%u30F3%u30C6%u30F3%u30C8%u30BF%u30A4%u30D7%0A%0A%20%20var%20doc%20%3D%20event.originalTarget.ownerDocument%3B%0A%0A%20%20if%28doc.contentType%20%21%3D%20%27text/plain%27%0A%0A%20%20%20%20%20%26%26%20doc.contentType%20%21%3D%20%27text/html%27%0A%0A%20%20%20%20%20%26%26%20doc.contentType%20%21%3D%20%27application/xml%27%0A%0A%20%20%20%20%20%26%26%20doc.contentType%20%21%3D%20%27application/xhtml+xml%27%29%20return%3B%0A%0A%0A%0A%20%20//designMode%u306A%u3089%u4F55%u3082%u3057%u306A%u3044%0A%0A%20%20if%20%28Components.lookupMethod%28doc%2C%20%27designMode%27%29.call%28doc%29%20%3D%3D%20%27on%27%29%20return%3B%0A%0A%0A%0A%20%20var%20win%20%3D%20doc.defaultView%3B%0A%0A%20%20if%28%21win%29return%3B%0A%0A%0A%0A%20%20var%20str1%2C%20text%2C%20str2%3B%0A%0A%0A%0A%20%20//textarea%20%u304B%u3069%u3046%u304B%0A%0A%20%20var%20node%20%3D%20isParentEditableNode%28document.commandDispatcher.focusedElement%29%3B%0A%0A%20%20if%20%28%21node%29%20%7B%0A%0A%20%20//%20%u3053%u306Eif%20%u30D6%u30ED%u30C3%u30AF%u306F%20textarea%u7B49%u4EE5%u5916%u306E%u51E6%u7406%0A%0A%20%20//%u30C0%u30D6%u30EB%u30AF%u30EA%u30C3%u30AF%u3067%u9078%u629E%u3055%u308C%u305F%u9078%u629E%u6587%u5B57%u5217%u306E%u30EC%u30F3%u30B8%u3092%u5F97%u308B%0A%0A%20%20%20%20var%20selection%20%3D%20win.getSelection%28%29%3B%0A%0A%20%20%20%20var%20selRange%3B%0A%0A%20%20%20%20try%7B%0A%0A%20%20%20%20%20%20selRange%20%3D%20selection.getRangeAt%280%29%3B%0A%0A%20%20%20%20%7Dcatch%28e%29%7B%0A%0A%20%20%20%20%20%20selRange%20%3D%20selection%3B%0A%0A%20%20%20%20%7D%0A%0A%20%20%20%20if%28%21selRange%29return%3B%0A%0A%20%20//%u30EC%u30F3%u30B8%u306E%u30CE%u30FC%u30C9%u306A%u3069%0A%0A%20%20%20%20text%20%3D%20selection.toString%28%29%3B%0A%0A%20%20%20%20if%28text%20%3D%3D%20%27%27%29%20return%3B%0A%0A%20%20//debug%28text%29%3B%0A%0A%20%20%20%20var%20sNode%20%3D%20selRange.startContainer%3B%20//debug%28sNode.nodeName%29%3B%0A%0A%20%20%20%20var%20soffset%20%3D%20selRange.startOffset%3B%0A%0A%20%20%20%20var%20eNode%20%3D%20selRange.endContainer%3B%20//debug%28eNode.nodeName%29%3B%0A%0A%20%20%20%20var%20eoffset%20%3D%20selRange.endOffset%3B%0A%0A%20%20%20%20if%20%28sNode%20%21%3D%20eNode%29%7B%0A%0A%20%20%20%20%20%20eNode%20%3D%20sNode%3B%0A%0A%20%20%20%20%20%20eoffset%20%3D%20soffset%20+%20text.length%20-%201%3B%0A%0A%20%20%20%20%7D%0A%0A%20%20%20%20var%20sOyaNode%20%3D%20oyaNode%28sNode%29%3B%0A%0A%20%20%20%20var%20eOyaNode%20%3D%20oyaNode%28eNode%29%3B%0A%0A%20%20%20%20var%20root%3B%0A%0A%20%20%20%20if%28sOyaNode%20%3D%3D%20eOyaNode%29%0A%0A%20%20%20%20%20%20root%20%3D%20sOyaNode%3B%0A%0A%20%20%20%20else%0A%0A%20%20%20%20%20%20root%20%3D%20doc%3B%0A%0A%20%20%20%20if%20%28%21root%29%0A%0A%20%20%20%20%20%20return%3B%0A%0A//debug%28%22eOyaNode%20%22%20+%20eOyaNode.nodeName%29%3B%0A%0A%0A%0A%20%20//%u89AA%u30D6%u30ED%u30C3%u30AF%u8981%u7D20%u306E%u6587%u5B57%u5217%u3092%u3059%u3079%u3066%u5F97%u308B%0A%0A%20%20%20%20const%20allowedParents%20%3D%20%5B%0A%0A%20%20%20%20%20%20%20%20/*%22a%22%2C*/%22abbr%22%2C%20%22acronym%22%2C%20%22address%22%2C%20%22applet%22%2C%20%22b%22%2C%20%22bdo%22%2C%20%22big%22%2C%20%22blockquote%22%2C%20%22body%22%2C%0A%0A%20%20%20%20%20%20%20%20%22caption%22%2C%20%22center%22%2C%20%22cite%22%2C%20%22code%22%2C%20%22dd%22%2C%20%22del%22%2C%20%22dir%22%2C%20%22div%22%2C%20%22dfn%22%2C%20%22dl%22%2C%20%22dt%22%2C%20%22em%22%2C%0A%0A%20%20%20%20%20%20%20%20%22fieldset%22%2C%20%22font%22%2C%20%22form%22%2C%20%22h1%22%2C%20%22h2%22%2C%20%22h3%22%2C%20%22h4%22%2C%20%22h5%22%2C%20%22h6%22%2C%20%22i%22%2C%20%22iframe%22%2C%0A%0A%20%20%20%20%20%20%20%20%22ins%22%2C%20%22kdb%22%2C%20%22li%22%2C%20%22menu%22%2C%20%22noframes%22%2C%20%22noscript%22%2C%20%22object%22%2C%20%22ol%22%2C%20%22p%22%2C%20%22pre%22%2C%20%22q%22%2C%20%22samp%22%2C%20%22small%22%2C%20%22span%22%2C%20%22strike%22%2C%0A%0A%20%20%20%20%20%20%20%20%22s%22%2C%20%22strong%22%2C%20%22sub%22%2C%20%22sup%22%2C%20%22table%22%2C%20%22td%22%2C%20%22th%22%2C%20%22thead%22%2C%20%22tt%22%2C%20%22u%22%2C%20%22var%22%0A%0A%20%20%20%20%20%20%20%20%5D%3B%0A%0A%20%20%20%20var%20xpath%20%3D%20%22.//text%28%29%5B%28parent%3A%3A%22%20+%20allowedParents.join%28%22%20or%20parent%3A%3A%22%29%20+%20%22%29%5D%22%3B%0A%0A%0A%0A%20%20%20%20var%20candidates%20%3D%20doc.evaluate%28xpath%2C%20root%2C%20null%2C%20XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE%2C%20null%29%3B%0A%0A//debug%28%22candidates.snapshotLength%20%22%20+%20candidates.snapshotLength%29%3B%0A%0A%20%20//%u30EC%u30F3%u30B8%u3088%u308A%u524D%u306B%u3042%u308B%u6587%u5B57%u5217%0A%0A%20%20%20%20var%20i1%20%3D%20-%201%3B%0A%0A%20%20%20%20for%20%28var%20i%20%3D%20i1%20+%201%2C%20len%20%3D%20candidates.snapshotLength%3B%20i%20%3C%20len%3B%20i++%29%20%7B%0A%0A%20%20%20%20%20%20if%28candidates.snapshotItem%28i%29%20%21%3D%20sNode%29%20continue%3B%0A%0A%20%20%20%20%20%20i1%20%3D%20i%20-%201%3B%0A%0A%20%20%20%20%20%20break%3B%0A%0A%20%20%20%20%7D%0A%0A%20%20%20%20str1%20%3D%22%22%3B%0A%0A%20%20%20%20if%20%28i%20%3E%3D%200%29%20%7B%0A%0A%20%20%20%20%20%20for%20%28var%20i%20%3D%20i1%3B%20i%20%3E%3D%200%20%3B%20i--%29%7B%0A%0A%20%20%20%20%20%20%20%20if%28sOyaNode%20%3D%3D%20oyaNode%28candidates.snapshotItem%28i%29%29%29%7B%0A%0A%20%20%20%20%20%20%20%20%20%20if%20%28candidates.snapshotItem%28i%29.nextSibling%20%26%26%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20/%5Ebr%24/i.test%28candidates.snapshotItem%28i%29.nextSibling.nodeName%29%29%20%7B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20//debug%28candidates.snapshotItem%28i%29.nodeValue%20+%20%22%20%20%22%20+%20candidates.snapshotItem%28i%29.nextSibling.nodeName%29%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20%20%20str1%20%3D%20candidates.snapshotItem%28i%29.nodeValue%20+%20str1%3B%0A%0A//debug%28%22str1%20%22+str1%29%3B%0A%0A%20%20%20%20%20%20%20%20%20%20if%20%28/%5B%20%u3000%5D/.test%28str1%29%29%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%0A%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%0A%20%20%20%20%20%20%20%20%20%20break%3B%0A%0A%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%7D%0A%0A%20%20%20%20str2%20%3D%20str1%3B%0A%0A%20%20%20%20if%28sNode.nodeValue%20%26%26%20soffset%20%3E%200%29%20str1%20%3D%20str1%20+%20sNode.nodeValue.substr%280%2Csoffset%29%3B%0A%0A%0A%0A%20%20//%u30EC%u30F3%u30B8%u3088%u308A%u5F8C%u308D%u306B%u3042%u308B%u6587%u5B57%u5217%0A%0A%20%20%20%20for%28var%20i%20%3D%20i1%20+%201%2C%20len%20%3D%20candidates.snapshotLength%3B%20i%20%3C%20len%3B%20i++%29%7B%0A%0A%20%20%20%20%20%20if%28sOyaNode%20%3D%3D%20oyaNode%28candidates.snapshotItem%28i%29%29%29%7B%0A%0A%20%20%20%20%20%20%20%20str2%20%3D%20str2%20+%20candidates.snapshotItem%28i%29.nodeValue%3B%0A%0A//debug%28%22str2%20%22+str2%29%3B%0A%0A%20%20%20%20%20%20%20%20if%20%28i%20%3E%20i1%20+%201%20%26%26%20/%5B%20%u3000%5D/.test%28candidates.snapshotItem%28i%29.nodeValue%29%29%0A%0A%20%20%20%20%20%20%20%20%20%20break%3B%0A%0A%20%20%20%20%20%20%7D%20else%20%7B%0A%0A%20%20%20%20%20%20%20%20break%3B%0A%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20if%20%28candidates.snapshotItem%28i%29.nextSibling%20%26%26%0A%0A%20%20%20%20%20%20%20%20%20%20/%5Ebr%24/i.test%28candidates.snapshotItem%28i%29.nextSibling.nodeName%29%29%20%7B%0A%0A%20%20%20%20%20%20%20%20break%3B%0A%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%7D%0A%0A%0A%0A%20%20%20%20str2%20%3D%20str2.substr%28str1.length%20+%20text.length%29%3B%0A%0A%20%20%7D%20else%20%7B%0A%0A%20%20%20%20//%20%u3053%u306E%20else%u30D6%u30ED%u30C3%u30AF%u306F%20textarea%u7B49%u306E%u51E6%u7406%0A%0A%20%20%20%20//%20readonly%u3067%u306A%u3044%u306A%u3089%u4F55%u3082%u3057%u306A%u3044%0A%0A%20%20%20if%20%28%21node.hasAttribute%28%22readonly%22%29%29%0A%0A%20%20%20%20%20return%3B%0A%0A%20%20%20if%20%28node%20%26%26%0A%0A%20%20%20%20%20%20%28node.type%20%3D%3D%20%22text%22%20%7C%7C%20node.type%20%3D%3D%20%22textarea%22%29%20%26%26%0A%0A%20%20%20%20%20%20%27selectionStart%27%20in%20node%20%26%26%0A%0A%20%20%20%20%20%20node.selectionStart%20%21%3D%20node.selectionEnd%29%20%7B%0A%0A%20%20%20%20%20%20var%20offsetStart%20%3D%20Math.min%28node.selectionStart%2C%20node.selectionEnd%29%3B%0A%0A%20%20%20%20%20%20var%20offsetEnd%20%20%20%3D%20Math.max%28node.selectionStart%2C%20node.selectionEnd%29%3B%0A%0A%20%20%20%20%20%20str1%20%3D%20node.value.substr%280%2C%20offsetStart%29%3B%0A%0A%20%20%20%20%20%20text%20%3D%20node.value.substr%28offsetStart%2C%20offsetEnd-offsetStart%29%3B%0A%0A%20%20%20%20%20%20str2%20%3D%20node.value.substr%28offsetEnd%29%3B%0A%0A%20%20%20%20%7D%20else%20%7B%0A%0A%20%20%20%20%20%20return%3B%0A%0A%20%20%20%20%7D%0A%0A%20%20%7D%0A%0A//%u3059%u3079%u3066%u306E%u6587%u5B57%u5217%u306E%u4E2D%u3067%u306E%u30EC%u30F3%u30B8%u306E%u4F4D%u7F6E%u3092%u5F97%u308B%0A%0A%20%20var%20allStr%20%3D%20str1%20+%20text%20+%20str2%3B%0A%0A%20%20var%20si%20%3D%20str1.length%0A%0A%20%20var%20ei%20%3D%20si%20+%20text.length%3B%0A%0A//%u5168%u89D2%u62EC%u5F27%u8ABF%u6574%0A%0A%20%20while%28text.match%28/%5E%5B%5Cu3001%5Cu3002%5Cuff08%5Cuff5b%5Cuff3b%5Cu300c%5Cu3014%5Cu3008%5Cu300a%5Cu300e%5Cu3010%5Cu2018%5Cu201c%5Cu201d%5Cu2019%5Cu226a%5Cuff1c%5Cuff09%5Cuff5d%5Cuff3d%5Cu300d%5Cu3015%5Cu3009%5Cu300b%5Cu300f%5Cu3011%5Cu2018%5Cu201c%5Cu201d%5Cu2019%5Cu226b%5Cuff1e%5D/%29%29%7B%0A%0A%20%20%20%20si%20%3D%20si%20+%201%3B%0A%0A%20%20%20%20text%20%3D%20text.substr%281%29%3B%0A%0A%20%20%7D%0A%0A%20%20while%28text.match%28/%5B%5Cs%5Cu3001%5Cu3002%5Cuff08%5Cuff5b%5Cuff3b%5Cu300c%5Cu3014%5Cu3008%5Cu300a%5Cu300e%5Cu3010%5Cu2018%5Cu201c%5Cu201d%5Cu2019%5Cu226a%5Cuff1c%5Cuff09%5Cuff5d%5Cuff3d%5Cu300d%5Cu3015%5Cu3009%5Cu300b%5Cu300f%5Cu3011%5Cu2018%5Cu201c%5Cu201d%5Cu2019%5Cu226b%5Cuff1e%5D%24/%29%29%7B%0A%0A%20%20%20%20ei%20%3D%20ei%20-%201%3B%0A%0A%20%20%20%20text%20%3D%20text.substr%280%2Ctext.length%20-1%29%3B%0A%0A%20%20%7D%0A%0A%20%20//%u6587%u672B%u306E.%u306F%u7121%u3044%u3053%u3068%u306B%0A%0A%20%20allStr%20%3D%20allStr.replace%28/%5C.%24/%20%2C%27%27%29%3B%0A%0A%0A%0A//debug%28%222%20%22%20+%20str2%29%3B%0A%0A//debug%28%22Str%20%22%20+%20text%29%3B%0A%0A//debug%28%221%20%22%20+%20str1%29%3B%0A%0A//debug%28%22all%20%22%20+%20allStr%29%3B%0A%0A%0A%0A//%u3059%u3079%u3066%u306E%u6587%u5B57%u5217%u306E%u4E2D%u3067URL%u3068%u601D%u3057%u304D%u6587%u5B57%u5217%u3092%u914D%u5217%u3068%u3057%u3066%u5F97%u308B%0A%0A%20%20var%20i1%2C%20i2%3B%0A%0A%20%20var%20arrUrl%20%3D%20allStr.match%28urlRegex%29%3B%0A%0A%20%20if%28arrUrl%29%7B%0A%0A//%u898B%u3064%u304B%u3063%u305FURL%u3068%u601D%u3057%u304D%u6587%u5B57%u5217%u306E%u4E2D%u306B%u30EC%u30F3%u30B8%u304C%u542B%u307E%u308C%u3066%u3044%u308B%u304B%u3069%u3046%u304B%0A%0A%20%20%20%20i2%3D0%0A%0A%20%20%20%20for%28var%20i%20%3D0%2Clen%20%3D%20arrUrl.length%3B%20i%20%3C%20len%3B%20i++%29%7B%0A%0A//debug%28i%20+%20%22%5D%20%22%20+%20arrUrl%5Bi%5D%29%3B%0A%0A%20%20%20%20%20%20i1%20%3D%20allStr.indexOf%28arrUrl%5Bi%5D%2Ci2%29%3B%0A%0A%20%20%20%20%20%20i2%20%3D%20i1%20+%20arrUrl%5Bi%5D.length%3B%0A%0A//debug%28i1%20%3C%3D%20si%20%26%26%20ei%20%3C%3D%20i2%29%3B%0A%0A%20%20%20%20%20%20if%28i1%20%3C%3D%20si%20%26%26%20ei%20%3C%3D%20i2%29%7B%0A%0A%20%20%20%20%20%20%20%20//%u3053%u306EURL%u3068%u601D%u3057%u304D%u6587%u5B57%u5217%u306E%u4E2D%u306B%u30EC%u30F3%u30B8%u304C%u542B%u307E%u308C%u3066%u3044%u305F%u306E%u3067%2C%u3053%u308C%u3092URL%u3068%u3057%u3066%u65B0%u3057%u3044%u30BF%u30D6%u3067%u958B%u304D%u307E%u3057%u3087%u3046%0A%0A%20%20%20%20%20%20%20%20var%20url%20%3D%20arrUrl%5Bi%5D%3B%0A%0A%20%20%20%20%20%20%20%20//%20%7E%u7B49%20%u3092%u534A%u89D2%u306B%0A%0A%20%20%20%20%20%20%20%20url%20%3D%20url.replace%28/%5Cu301c/g%2C%27%5Cuff5e%27%29%3B%0A%0A%20%20%20%20%20%20%20%20url%20%3D%20url.replace%28/%5Cuffe3/g%2C%27%5Cuff5e%27%29%3B%0A%0A%20%20%20%20%20%20%20%20//%20%u672B%u5C3E%u306E%20%29%u3084%5D%20%u306E%u8ABF%u6574%0A%0A%20%20%20%20%20%20%20%20if%20%28/%5C%29%24/.test%28url%29%29%7B%0A%0A%20%20%20%20%20%20%20%20%20%20if%20%28url.indexOf%28%22%28%22%29%20%3D%3D%20-1%29%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20url%20%3D%20url.replace%28/%5C%29%24/%2C%27%27%29%3B%0A%0A%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20if%20%28/%5C%5D%24/.test%28url%29%29%7B%0A%0A%20%20%20%20%20%20%20%20%20%20if%20%28url.indexOf%28%22%5B%22%29%20%3D%3D%20-1%29%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20url%20%3D%20url.replace%28/%5C%5D%24/%2C%27%27%29%3B%0A%0A%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20if%20%28/%5B.%2C%5D%24/.test%28url%29%29%7B%0A%0A%20%20%20%20%20%20%20%20%20%20url%20%3D%20url.replace%28/%5B.%2C%5D%24/%2C%27%27%29%3B%0A%0A%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20//%20ttp%u7B49%u3092%20http%u7B49%u306B%20%u304A%u3088%u3073%20%20%3A//%20%u3092%20%u534A%u89D2%u306B%0A%0A%20%20%20%20%20%20%20%20url%20%3D%20/%5E%28ftp%7C%5Cuff46%5Cuff54%5Cuff50%29/i.test%28url%29%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3F%20url.replace%28urlRx1%2C%27%3A//%27%29%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3A%20url.replace%28urlRx%2C%27http%27%29.replace%28urlRx1%2C%27%3A//%27%29%3B%0A%0A%20%20%20%20%20%20%20%20var%20URIFixup%20%3D%20Components.classes%5B%27@mozilla.org/docshell/urifixup%3B1%27%5D%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.getService%28Components.interfaces.nsIURIFixup%29%3B%0A%0A%20%20%20%20%20%20%20%20var%20uri%20%3D%20URIFixup.createFixupURI%28%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20url%2C%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20URIFixup.FIXUP_FLAG_ALLOW_KEYWORD_LOOKUP%20%29%3B%0A%0A%20%20%20%20%20%20%20%20if%28%21uri%29%20return%3B%0A%0A%20%20%20%20%20%20%20%20if%20%28%21isValidTld%28uri%29%29%0A%0A%20%20%20%20%20%20%20%20%20%20return%3B%0A%0A%20%20%20%20%20%20%20%20uri%20%3D%20ioService.newURI%28uri.spec%2C%20null%2C%20null%29%3B%0A%0A%20%20%20%20%20%20%20%20debug%28%27Parsing%20ucjs_textlink%3A%20%27+%28%28new%20Date%28%29%29.getTime%28%29-Start%29%20+%27msec%5Cn%27%29%3B%0A%0A%20%20%20%20%20%20%20%20try%7B%0A%0A%20%20%20%20%20%20%20%20%20%20if%28event.shiftKey%29%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20saveAsURL%28uri%2Cdoc%29%3B%0A%0A%20%20%20%20%20%20%20%20%20%20else%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20openNewTab%28uri%29%3B%0A%0A%20%20%20%20%20%20%20%20%7Dcatch%28e%29%7B%7D%0A%0A%20%20%20%20%20%20%20%20return%3B%0A%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%7D%0A%0A%20%20%7D%0A%0A%20%20if%28%20%21relative%20%29%20return%3B%0A%0A//%u3059%u3079%u3066%u306E%u6587%u5B57%u5217%u306E%u4E2D%u3067%u76F8%u5BFEURL%u3068%u601D%u3057%u304D%u6587%u5B57%u5217%u3092%u914D%u5217%u3068%u3057%u3066%u5F97%u308B%0A%0A%20%20arrUrl%20%3D%20allStr.match%28urlRegex1%29%3B%0A%0A%20%20if%28%21arrUrl%29%20return%3B%0A%0A%20%20i2%3D0%0A%0A%20%20for%28var%20i%20%3D0%2Clen%20%3D%20arrUrl.length%3B%20i%20%3C%20len%3B%20i++%29%7B%0A%0A//debug%28%22Relative%20%22%20+%20arrUrl%5Bi%5D%29%3B%0A%0A%20%20%20%20i1%20%3D%20allStr.indexOf%28arrUrl%5Bi%5D%2Ci2%29%3B%0A%0A%20%20%20%20i2%20%3D%20i1%20+%20arrUrl%5Bi%5D.length%3B%0A%0A%0A%0A//debug%28i1%20+%22%20%22+%20si%20+%22%20%22+%20ei%20+%22%20%22+%20i2%29%3B%0A%0A%20%20%20%20if%28i1%20%3C%3D%20si%20%26%26%20ei%20%3C%3D%20i2%29%7B%0A%0A//debug%28arrUrl%5Bi%5D%29%3B%0A%0A%20%20%20%20%20%20//%u3053%u306EURL%u3068%u601D%u3057%u304D%u6587%u5B57%u5217%u306E%u4E2D%u306B%u30EC%u30F3%u30B8%u304C%u542B%u307E%u308C%u3066%u3044%u305F%u306E%u3067%2C%u3053%u308C%u3092URL%u3068%u3057%u3066%u65B0%u3057%u3044%u30BF%u30D6%u3067%u958B%u304D%u307E%u3057%u3087%u3046%0A%0A%20%20%20%20%20%20var%20url%20%3D%20arrUrl%5Bi%5D%3B%0A%0A%20%20%20%20%20%20//%20%7E%u7B49%20%u3092%u534A%u89D2%u306B%0A%0A%20%20%20%20%20%20url%20%3D%20url.replace%28/%5Cu301c/g%2C%27%5Cuff5e%27%29%3B%0A%0A%20%20%20%20%20%20url%20%3D%20url.replace%28/%5Cuffe3/g%2C%27%5Cuff5e%27%29%3B%0A%0A%20%20%20%20%20%20//%20%u672B%u5C3E%u306E%20%29%u3084%5D%20%u306E%u8ABF%u6574%0A%0A%20%20%20%20%20%20if%20%28/%5C%29%24/.test%28url%29%29%7B%0A%0A%20%20%20%20%20%20%20%20if%20%28url.indexOf%28%22%28%22%29%20%3D%3D%20-1%29%0A%0A%20%20%20%20%20%20%20%20%20%20url%20%3D%20url.replace%28/%5C%29%24/%2C%27%27%29%3B%0A%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20if%20%28/%5C%5D%24/.test%28url%29%29%7B%0A%0A%20%20%20%20%20%20%20%20if%20%28url.indexOf%28%22%5B%22%29%20%3D%3D%20-1%29%0A%0A%20%20%20%20%20%20%20%20%20%20url%20%3D%20url.replace%28/%5C%5D%24/%2C%27%27%29%3B%0A%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20if%20%28/%5B.%2C%5D%24/.test%28url%29%29%7B%0A%0A%20%20%20%20%20%20%20%20url%20%3D%20url.replace%28/%5B.%2C%5D%24/%2C%27%27%29%3B%0A%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20//%20host%u540D%u304C%20ftp%20%u3067%u59CB%u307E%u308B%u306A%u3089%20ftp%3A//%u306B%0A%0A%20%20%20%20%20%20if%20%28/%5Eftp/.test%28url%29%29%7B%0A%0A%20%20%20%20%20%20%20%20url%20%3D%20%22ftp%3A//%22%20+%20url%3B%0A%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20//%20host%u540D%u304C%20irc%20%u3067%u59CB%u307E%u308B%u306A%u3089%20irc%3A%u306B%0A%0A%20%20%20%20%20%20if%20%28/%5Eirc/.test%28url%29%29%7B%0A%0A%20%20%20%20%20%20%20%20url%20%3D%20%22irc%3A//%22%20+%20url%3B%0A%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20//%u30E1%u30FC%u30EB%3F%0A%0A%20%20%20%20%20%20if%20%28mailRx1.test%28url%29%29%20%7B%0A%0A%20%20%20%20%20%20%20%20url%20%3D%20%22mailto%3A%22%20+%20url%3B%0A%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20//%u76F8%u5BFE%u30D1%u30B9%u306E%u51E6%u7406%0A%0A%20%20%20%20%20%20if%28url.match%28/%5E%5C.%7B1%2C%7D/%29%29%7B%0A%0A%20%20%20%20%20%20%20%20var%20baseURI%20%3D%20ioService.newURI%28win.document.documentURI%2C%20null%2C%20null%29%3B%0A%0A%20%20%20%20%20%20%20%20url%20%3D%20ioService.newURI%28url%2C%20null%2C%20baseURI%29.spec%3B%0A%0A%20%20%20%20%20%20%7D%0A%0A//debug%28url.indexOf%28url.match%28urlRegex%29%29%29%3B%0A%0A%20%20%20%20%20%20if%20%28%21mailRx.test%28url%29%20%26%26%20url.indexOf%28url.match%28urlRegex%29%29%20%3E%201%29%20return%3B%0A%0A%20%20%20%20%20%20var%20URIFixup%20%3D%20Components.classes%5B%27@mozilla.org/docshell/urifixup%3B1%27%5D%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.getService%28Components.interfaces.nsIURIFixup%29%3B%0A%0A%20%20%20%20%20%20try%7B%0A%0A//debug%28url%29%3B%0A%0A%20%20%20%20%20%20%20%20var%20uri%20%3D%20URIFixup.createFixupURI%28%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20url%2C%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20URIFixup.FIXUP_FLAG_NONE%20%29%3B%20//FIXUP_FLAG_ALLOW_KEYWORD_LOOKUP%u2192FIXUP_FLAG_NONE%0A%0A%20%20%20%20%20%20%7Dcatch%28e%29%7Breturn%3B%7D%0A%0A%20%20%20%20%20%20if%28%21uri%29%20return%3B%0A%0A%0A%0A%20%20%20%20%20%20if%20%28%21isValidTld%28uri%29%29%20%7B%0A%0A%20%20%20%20%20%20%20%20return%3B%0A%0A%20%20%20%20%20%20%7D%0A%0Adebug%28url%29%3B%0A%0A%20%20%20%20%20%20uri%20%3D%20ioService.newURI%28uri.spec%2C%20null%2C%20null%29%3B%0A%0A%20%20%20%20%20%20debug%28%27Parsing%20ucjs_textlink%3A%20%27+%28%28new%20Date%28%29%29.getTime%28%29-Start%29%20+%27msec%5Cn%27+uri.spec%29%3B%0A%0A%20%20%20%20%20%20try%7B%0A%0A%20%20%20%20%20%20%20%20if%28event.shiftKey%29%0A%0A%20%20%20%20%20%20%20%20%20%20saveAsURL%28uri%2Cdoc%29%3B%0A%0A%20%20%20%20%20%20%20%20else%0A%0A%20%20%20%20%20%20%20%20%20%20openNewTab%28uri%29%3B%0A%0A%20%20%20%20%20%20%20%20%7Dcatch%28e%29%7B%7D%0A%0A%20%20%20%20%20%20return%3B%0A%0A%20%20%20%20%7D%0A%0A%20%20%7D%0A%0A%0A%0A%20%20function%20activeBrowser%28%29%20%7B%0A%0A%20%20%20%20return%20%28%27SplitBrowser%27%20in%20window%20%3F%20SplitBrowser.activeBrowser%20%3A%20null%20%29%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%7C%7C%20%20gBrowser%3B%0A%0A%20%20%7D%0A%0A%0A%0A%20%20function%20_getFocusedWindow%28%29%7B%20//%u73FE%u5728%u306E%u30A6%u30A4%u30F3%u30C9%u30A6%u3092%u5F97%u308B%0A%0A%20%20%20%20var%20focusedWindow%20%3D%20document.commandDispatcher.focusedWindow%3B%0A%0A%20%20%20%20if%20%28%21focusedWindow%20%7C%7C%20focusedWindow%20%3D%3D%20window%29%0A%0A%20%20%20%20%20%20%20%20return%20window._content%3B%0A%0A%20%20%20%20else%0A%0A%20%20%20%20%20%20%20%20return%20focusedWindow%3B%0A%0A%20%20%7D%0A%0A%0A%0A//%u30EC%u30F3%u30B8%u306E%u8981%u7D20%u304C%u6240%u5C5E%u3059%u308B%u89AA%u30D6%u30ED%u30C3%u30AF%u8981%u7D20%u3092%u5F97%u308B%0A%0A%20%20function%20oyaNode%28aNode%29%7B%0A%0A%20%20%20%20var%20pNode%20%3D%20aNode.parentNode%3B%0A%0A%20%20%20%20while%28pNode%20%26%26%20/%5E%28a%7Cabbr%7Cacronym%7Cb%7Cbdo%7Cbig%7Cbody%7Ccode%7Cdfn%7Cem%7Cfont%7Ci%7Ckbd%7Clabel%7Cpre%7Cq%7Csamp%7Csmall%7Cspan%7Cstrong%7Csub%7Csup%7Ctt%7Cvar%7Cwbr%29%24/i.test%28pNode.nodeName%29%20%29%7B%0A%0A%20%20%20%20%20%20pNode%20%3D%20pNode.parentNode%3B%0A%0A%20%20%20%20%7D%0A%0A%20%20%20%20return%20pNode%3B%0A%0A%20%20%7D%0A%0A%0A%0A%20%20function%20isParentEditableNode%28node%29%7B%0A%0A%20%20%20%20//if%20%28Components.lookupMethod%28node.ownerDocument%2C%20%27designMode%27%29.call%28node.ownerDocument%29%20%3D%3D%20%27on%27%29%0A%0A%20%20%20%20//%20%20return%20node%3B%0A%0A%20%20%20%20while%20%28node%20%26%26%20node.parentNode%29%20%7B%0A%0A%20%20%20%20%20%20try%20%7B%0A%0A%20%20%20%20%20%20%20%20node.QueryInterface%28Ci.nsIDOMNSEditableElement%29%3B%0A%0A%20%20%20%20%20%20%20%20return%20node%3B%0A%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20catch%28e%29%20%7B%0A%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20if%20%28/input%7Ctextarea/.test%28node.localName%29%29%0A%0A%20%20%20%20%20%20%20%20return%20node%3B%0A%0A%20%20%20%20%20%20if%20%28node.isContentEditable%20%7C%7C%20node.contentEditable%3D%3D%27true%27%29%0A%0A%20%20%20%20%20%20%20%20return%20node%3B%0A%0A%20%20%20%20%20%20node%20%3D%20node.parentNode%3B%0A%0A%20%20%20%20%7D%0A%0A%20%20%20%20return%20null%3B%0A%0A%20%20%7D%0A%0A%0A%0A%20%20function%20isValidTld%28aURI%29%7B%0A%0A%20%20%20%20const%20regexpTLD%20%3D%20new%20RegExp%28%22%5C%5C.%28arpa%7Cint%7Cnato%7Ccom%7Cnet%7Corg%7Cinfo%7Cbiz%7Cname%7Cpro%7Cmuseum%7Ccoop%7Caero%7Cedu%7Cgov%7Cmil%7Cac%7Cad%7Cae%7Caf%7Cag%7Cai%7Cal%7Cam%7Can%7Cao%7Caq%7Car%7Cas%7Cat%7Cau%7Caw%7Cax%7Caz%7Cba%7Cbb%7Cbd%7Cbe%7Cbf%7Cbg%7Cbh%7Cbi%7Cbj%7Cbm%7Cbn%7Cbo%7Cbr%7Cbs%7Cbt%7Cbu%7Cbv%7Cbw%7Cby%7Cbz%7Cca%7Ccc%7Ccd%7Ccf%7Ccg%7Cch%7Cci%7Cck%7Ccl%7Ccm%7Ccn%7Cco%7Ccp%7Ccr%7Ccs%7Csk%7Ccu%7Ccv%7Ccx%7Ccy%7Ccz%7Cdd%7Cde%7Cdg%7Cdj%7Cdk%7Cdm%7Cdo%7Cdz%7Cea%7Cec%7Cee%7Ceg%7Ceh%7Cer%7Ces%7Cet%7Cfi%7Cfj%7Cfk%7Cfm%7Cfo%7Cfr%7Cfx%7Cga%7Cgb%7Cgd%7Cge%7Cgf%7Cgg%7Cgh%7Cgi%7Cgl%7Cgm%7Cgn%7Cgp%7Cgq%7Cgr%7Cgs%7Cgt%7Cgu%7Cgw%7Cgy%7Chk%7Chm%7Chn%7Chr%7Cht%7Chu%7Cic%7Cid%7Cie%7Cil%7Cim%7Cin%7Cio%7Ciq%7Cir%7Cis%7Cit%7Cje%7Cjm%7Cjo%7Cjp%7Cke%7Ckg%7Ckh%7Cki%7Ckm%7Ckn%7Ckp%7Ckr%7Ckw%7Cky%7Ckz%7Cla%7Clb%7Clc%7Cli%7Clk%7Clr%7Cls%7Clt%7Clu%7Clv%7Cly%7Cma%7Cmc%7Cmd%7Cmg%7Cmh%7Cmk%7Cml%7Cmm%7Cmn%7Cmo%7Cmp%7Cmq%7Cmr%7Cms%7Cmt%7Cmu%7Cmv%7Cmw%7Cmx%7Cmy%7Cmz%7Cna%7Cnc%7Cne%7Cnf%7Cng%7Cni%7Cnl%7Cno%7Cnp%7Cnr%7Cnt%7Cnu%7Cnz%7Com%7Cpa%7Cpc%7Cpe%7Cpf%7Cpg%7Cph%7Cpk%7Cpl%7Cpm%7Cpn%7Cpr%7Cps%7Cpt%7Cpw%7Cpy%7Cqa%7Cre%7Cro%7Cru%7Crw%7Csa%7Csb%7Csc%7Csd%7Cse%7Csg%7Csh%7Csi%7Csj%7Csk%7Csl%7Csm%7Csn%7Cso%7Csr%7Cst%7Csu%7Csv%7Csy%7Csz%7Cta%7Ctc%7Ctd%7Ctf%7Ctg%7Cth%7Ctj%7Ctk%7Ctm%7Ctn%7Cto%7Ctp%7Ctr%7Ctt%7Ctv%7Ctw%7Ctz%7Cua%7Cug%7Cuk%7Cum%7Cus%7Cuy%7Cuz%7Cva%7Cvc%7Cve%7Cvg%7Cvi%7Cvn%7Cvu%7Cwf%7Cwg%7Cws%7Cyd%7Cye%7Cyt%7Cyu%7Cza%7Czm%7Czr%7Czw%29%5C%5C.%3F%24%22%2C%22%22%29%3B%0A%0A%20%20%20%20const%20regexpIP%20%3D%20new%20RegExp%28%22%5E%5B1-2%5D%3F%5B0-9%5D%3F%5B0-9%5D%5C%5C.%5B1-2%5D%3F%5B0-9%5D%3F%5B0-9%5D%5C%5C.%5B1-2%5D%3F%5B0-9%5D%3F%5B0-9%5D%5C%5C.%5B1-2%5D%3F%5B0-9%5D%3F%5B0-9%5D%24%22%2C%22%22%29%3B%0A%0A%20%20%20%20var%20host%2C%20tlds%3B%0A%0A%20%20%20%20try%20%7B%0A%0A%20%20%20%20%20%20host%20%3D%20aURI.host.split%28%27/%27%29%5B0%5D%3B%0A%0A%20%20%20%20%7D%20catch%28e%29%20%7B%0A%0A%20%20%20%20%20%20if%20%28aURI.spec.match%28/%5E%28.+%3F%5C/%5C/%28%3F%3A%5B%5E%5C/%5D+@%29%3F%29%28%5B%5E%5C/%5D+%29%28%3A%5Cd+%29%3F%28%3F%3A.*%29%24/%29%29%20%7B%0A%0A%20%20%20%20%20%20%20%20host%20%3D%20RegExp.%242%3B%0A%0A%20%20%20%20%20%20%7D%20else%20if%20%28aURI.spec.match%28/%5E%28mailto%3A%28%3F%3A%5B%5E%5C/%5D+@%29%3F%29%28%5B%5E%5C/%5D+%29%28%3A%5Cd+%29%3F%28%3F%3A.*%29%24/%29%29%7B%0A%0A%20%20%20%20%20%20%20%20host%20%3D%20RegExp.%242%3B%0A%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%7D%0A%0A//debug%28%22host%20%20%22%20+%20host%29%3B%0A%0A%20%20%20%20if%20%28%21host%29%0A%0A%20%20%20%20%20%20return%20false%3B%0A%0A%20%20%20%20if%20%28getVer%28%29%20%3C%203.0%29%7B%0A%0A%20%20%20%20%20%20if%20%28regexpTLD.test%28host%29%29%0A%0A%20%20%20%20%20%20%20%20return%20true%3B%0A%0A%20%20%20%20%20%20else%0A%0A%20%20%20%20%20%20%20%20return%20%28regexpIP.test%28host%29%29%3B%0A%0A%20%20%20%20%7D%20else%20%7B%0A%0A%20%20%20%20%20%20var%20eTLDService%20%3D%20Components.classes%5B%22@mozilla.org/network/effective-tld-service%3B1%22%5D%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.getService%28Components.interfaces.nsIEffectiveTLDService%29%3B%0A%0A%20%20%20%20%20%20try%20%7B%0A%0A%20%20%20%20%20%20%20%20var%20tld%20%3D%20eTLDService.getPublicSuffixFromHost%28host%29%3B%0A%0A%20%20%20%20%20%20%20%20return%20regexpTLD.test%28%27.%27+tld%29%3B%0A%0A%20%20%20%20%20%20%7D%20catch%28e%29%20%7B%0A%0A%20%20%20%20%20%20%20%20return%20%28regexpIP.test%28host%29%29%3B%0A%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%7D%0A%0A%20%20%7D%0A%0A%0A%0A%20%20function%20saveAsURL%28uri%2Cdoc%29%7B%0A%0A%20%20%20%20var%20linkText%20%3D%20uri.spec%3B%0A%0A%20%20%20%20//Thunderbird%0A%0A%20%20%20%20if%20%28/%5Echrome%3A%5C/%5C/messenger%5C/content%5C//.test%28window.location.href%29%29%20%7B%0A%0A%20%20%20%20%20%20//%20URL%20Loading%20Security%20Check%0A%0A%20%20%20%20%20%20var%20focusedWindow%20%3D%20document.commandDispatcher.focusedWindow%3B%0A%0A%20%20%20%20%20%20var%20sourceURL%20%3D%20getContentFrameURI%28focusedWindow%29%3B%0A%0A%20%20%20%20%20%20const%20nsIScriptSecurityManager%20%3D%20Components.interfaces.nsIScriptSecurityManager%3B%0A%0A%20%20%20%20%20%20var%20secMan%20%3D%20Components.classes%5B%22@mozilla.org/scriptsecuritymanager%3B1%22%5D%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%20%20%20%20.getService%28nsIScriptSecurityManager%29%3B%0A%0A%20%20%20%20%20%20try%20%7B%0A%0A%20%20%20%20%20%20%20%20secMan.checkLoadURIStr%28sourceURL%2C%20uri.spec%2C%20nsIScriptSecurityManager.STANDARD%29%3B%0A%0A%20%20%20%20%20%20%7D%20catch%20%28e%29%20%7B%0A%0A%20%20%20%20%20%20%20%20throw%20%22Load%20of%20%22%20+%20url%20+%20%22%20denied.%22%3B%0A%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20saveURL%28%20uri.spec%2C%20linkText%2C%20null%2C%20true%20%29%3B%0A%0A%20%20%20%20%20%20return%3B%0A%0A%20%20%20%20%7D%0A%0A%0A%0A%20%20%20%20//%20urlSecurityCheck%20wanted%20a%20URL-as-string%20for%20Fx%202.0%2C%20but%20an%20nsIPrincipal%20on%20trunk%0A%0A%20%20%20%20if%28activeBrowser%28%29.contentPrincipal%29%0A%0A%20%20%20%20%20%20urlSecurityCheck%28uri.spec%2C%20activeBrowser%28%29.contentPrincipal%2CCi.nsIScriptSecurityManager.DISALLOW_INHERIT_PRINCIPAL%29%3B%0A%0A%20%20%20%20else%0A%0A%20%20%20%20%20%20urlSecurityCheck%28uri.spec%2C%20activeBrowser%28%29.currentURI.spec%2CCi.nsIScriptSecurityManager.DISALLOW_SCRIPT%29%3B%0A%0A%0A%0A%20%20%20%20saveURL%28%20uri.spec%2C%20linkText%2C%20null%2C%20true%2C%20false%2C%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20makeURI%28doc.location.href%2C%20doc.characterSet%29%20%29%3B%0A%0A%20%20%7D%0A%0A%0A%0A%20%20function%20openNewTab%28uri%29%7B%0A%0A%20%20%20%20//Thunderbird%0A%0A%20%20%20%20if%20%28/%5Echrome%3A%5C/%5C/messenger%5C/content%5C//.test%28window.location.href%29%29%20%7B%0A%0A%20%20%20%20%20%20//%20Make%20sure%20we%20are%20allowed%20to%20open%20this%20URL%0A%0A%20%20%20%20%20%20//%20URL%20Loading%20Security%20Check%0A%0A%20%20%20%20%20%20var%20focusedWindow%20%3D%20document.commandDispatcher.focusedWindow%3B%0A%0A%20%20%20%20%20%20var%20sourceURL%20%3D%20getContentFrameURI%28focusedWindow%29%3B%0A%0A%20%20%20%20%20%20const%20nsIScriptSecurityManager%20%3D%20Components.interfaces.nsIScriptSecurityManager%3B%0A%0A%20%20%20%20%20%20var%20secMan%20%3D%20Components.classes%5B%22@mozilla.org/scriptsecuritymanager%3B1%22%5D%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%20%20%20%20.getService%28nsIScriptSecurityManager%29%3B%0A%0A%20%20%20%20%20%20try%20%7B%0A%0A%20%20%20%20%20%20%20%20secMan.checkLoadURIStr%28sourceURL%2C%20uri.spec%2C%20nsIScriptSecurityManager.STANDARD%29%3B%0A%0A%20%20%20%20%20%20%7D%20catch%20%28e%29%20%7B%0A%0A%20%20%20%20%20%20%20%20throw%20%22Load%20of%20%22%20+%20url%20+%20%22%20denied.%22%3B%0A%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20var%20protocolSvc%20%3D%20Components.classes%5B%22@mozilla.org/uriloader/external-protocol-service%3B1%22%5D%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.getService%28Components.interfaces.nsIExternalProtocolService%29%3B%0A%0A%20%20%20%20%20%20protocolSvc.loadUrl%28uri%29%3B%0A%0A%20%20%20%20%20%20return%3B%0A%0A%20%20%20%20%7D%0A%0A%0A%0A%20%20%20%20//%20urlSecurityCheck%20wanted%20a%20URL-as-string%20for%20Fx%202.0%2C%20but%20an%20nsIPrincipal%20on%20trunk%0A%0A%20%20%20%20if%28activeBrowser%28%29.contentPrincipal%29%0A%0A%20%20%20%20%20%20urlSecurityCheck%28uri.spec%2C%20activeBrowser%28%29.contentPrincipal%2CCi.nsIScriptSecurityManager.DISALLOW_INHERIT_PRINCIPAL%29%3B%0A%0A%20%20%20%20else%0A%0A%20%20%20%20%20%20urlSecurityCheck%28uri.spec%2C%20activeBrowser%28%29.currentURI.spec%2CCi.nsIScriptSecurityManager.DISALLOW_SCRIPT%29%3B%0A%0A%20%20%20%20if%28%20%28event.ctrlKey%29%20%29%7B%0A%0A%20%20%20%20%20%20%20%20loadURI%28uri.spec%2C%20null%2C%20null%2C%20false%29%3B%0A%0A%20%20%20%20%7Delse%7B%0A%0A%20%20%20%20%20%20if%20%28%27TreeStyleTabService%27%20in%20window%29%0A%0A%20%20%20%20%20%20%20%20TreeStyleTabService.readyToOpenChildTab%28activeBrowser%28%29.selectedTab%29%3B%0A%0A%20%20%20%20%20%20openNewTabWith%28uri.spec%2C%20null%2C%20%20null%2C%20null%2C%20false%29%0A%0A%20%20%20%20%20%20//activeBrowser%28%29.loadOneTab%28uri.spec%2C%20null%2C%20null%2C%20null%2C%20getPref%28%22browser.tabs.loadInBackground%22%2C%20%22bool%22%2C%20false%29%2C%20false%29%3B%0A%0A%0A%0A%20%20%20%20%20%20//activeBrowser%28%29.selectedTab%20%3D%20activeBrowser%28%29.addTab%28uri.spec%29%3B%0A%0A%20%20%20%20%7D%0A%0A%20%20%7D%0A%0A%0A%0A%20%20function%20getVer%28%29%7B%0A%0A%20%20%20%20const%20Cc%20%3D%20Components.classes%3B%0A%0A%20%20%20%20const%20Ci%20%3D%20Components.interfaces%3B%0A%0A%20%20%20%20var%20info%20%3D%20Cc%5B%22@mozilla.org/xre/app-info%3B1%22%5D.getService%28Ci.nsIXULAppInfo%29%3B%0A%0A%20%20%20%20//%20%u3053%u306E%u30B3%u30FC%u30C9%u3092%u5B9F%u884C%u3057%u3066%u3044%u308B%u30A2%u30D7%u30EA%u30B1%u30FC%u30B7%u30E7%u30F3%u306E%u540D%u524D%u3092%u53D6%u5F97%u3059%u308B%0A%0A%20%20%20%20var%20ver%20%3D%20parseInt%28info.version.substr%280%2C3%29%20*%2010%2C10%29%20/%2010%3B%0A%0A%20%20%20%20return%20ver%3B%0A%0A%20%20%7D%0A%0A%0A%0A%20%20function%20getPref%28aPrefString%2C%20aPrefType%2C%20aDefault%29%7B%0A%0A%20%20%20%20var%20xpPref%20%3D%20Components.classes%5B%22@mozilla.org/preferences-service%3B1%22%5D%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.getService%28Components.interfaces.nsIPrefBranch2%29%3B%0A%0A%20%20%20%20try%7B%0A%0A%20%20%20%20%20%20switch%20%28aPrefType%29%7B%0A%0A%20%20%20%20%20%20%20%20case%20%22str%22%3A%0A%0A%20%20%20%20%20%20%20%20%20%20return%20xpPref.getCharPref%28aPrefString%29.toString%28%29%3B%20break%3B%0A%0A%20%20%20%20%20%20%20%20case%20%22int%22%3A%0A%0A%20%20%20%20%20%20%20%20%20%20return%20xpPref.getIntPref%28aPrefString%29%3B%20break%3B%0A%0A%20%20%20%20%20%20%20%20case%20%22bool%22%3A%0A%0A%20%20%20%20%20%20%20%20default%3A%0A%0A%20%20%20%20%20%20%20%20%20%20return%20xpPref.getBoolPref%28aPrefString%29%3B%20break%3B%0A%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%7Dcatch%28e%29%7B%0A%0A%20%20%20%20%7D%0A%0A%20%20%20%20return%20aDefault%3B%0A%0A%20%20%7D%0A%0A%0A%0A%20%20function%20debug%28aMsg%29%7B%0A%0A%20%20%20%20const%20Cc%20%3D%20Components.classes%3B%0A%0A%20%20%20%20const%20Ci%20%3D%20Components.interfaces%3B%0A%0A%20%20%20%20Cc%5B%22@mozilla.org/consoleservice%3B1%22%5D%0A%0A%20%20%20%20%20%20.getService%28Ci.nsIConsoleService%29%0A%0A%20%20%20%20%20%20.logStringMessage%28aMsg%29%3B%0A%0A%20%20%7D%0A%0A%7D%0A%0Avar%20textLinkForSidebar%20%3D%20%7B%0A%0A%20%20init%3A%20function%28event%29%7B%0A%0A%20%20%20%20try%7B%0A%0A%20%20%20%20%20%20var%20doc%20%3D%20event.originalTarget%3B%0A%0A%20%20%20%20%20%20if%20%28%21doc.location%29%20return%3B%0A%0A%20%20%20%20%20%20if%28doc.location.href%20%3D%3D%20%22chrome%3A//browser/content/web-panels.xul%22%29%7B%0A%0A%20%20%20%20%20%20%20%20doc.addEventListener%28%27dblclick%27%2Cfunction%28event%29%7BsetTimeout%28ucjs_textlink%2C100%2Cevent%29%3B%7D%2Cfalse%29%3B%0A%0A%20%20%20%20%20%20%20%20doc.addEventListener%28%27keypress%27%2Cfunction%28event%29%7Bucjs_textlink%28event%29%3B%7D%2Cfalse%29%3B%0A%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%7Dcatch%28e%29%7B%7D%0A%0A%20%20%7D%2C%0A%0A%20%20uninit%3A%20function%28event%29%7B%0A%0A%20%20%20%20try%7B%0A%0A%20%20%20%20%20%20var%20doc%20%3D%20event.originalTarget%3B%0A%0A%20%20%20%20%20%20if%20%28%21doc.location%29%20return%3B%0A%0A%20%20%20%20%20%20if%28doc.location.href%20%3D%3D%20%22chrome%3A//browser/content/web-panels.xul%22%29%7B%0A%0A%20%20%20%20%20%20%20%20doc.removeEventListener%28%27dblclick%27%2Cfunction%28event%29%7BsetTimeout%28ucjs_textlink%2C100%2Cevent%29%3B%7D%2Cfalse%29%3B%0A%0A%20%20%20%20%20%20%20%20doc.removeEventListener%28%27keypress%27%2Cfunction%28event%29%7Bucjs_textlink%28event%29%3B%7D%2Cfalse%29%3B%0A%0A%0A%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%7Dcatch%28e%29%7B%7D%0A%0A%20%20%7D%0A%0A%7D%0A%0A//for%20contents%20area%0A%0Aif%20%28/%5Echrome%3A%5C/%5C/messenger%5C/content%5C//.test%28window.location.href%29%29%20%7B%0A%0A%20%20var%20target%20%3D%20document.getElementById%28%22messagepane%22%29%3B%0A%0A%7D%20else%20%7B%0A%0A%20%20var%20target%20%3D%20document.getElementById%28%22appcontent%22%29%3B%0A%0A%7D%0A%0Atarget.addEventListener%28%27dblclick%27%2Cfunction%28event%29%7BsetTimeout%28ucjs_textlink%2C100%2Cevent%29%3B%7D%2Cfalse%29%3B%0A%0Atarget.addEventListener%28%27keypress%27%2Cfunction%28event%29%7Bucjs_textlink%28event%29%3B%7D%2Cfalse%29%3B%0A%0A//for%20already%20loaded%20chrome%3A//browser/content/web-panels.xul%0A%0Aif%20%28%21/%5Echrome%3A%5C/%5C/messenger%5C/content%5C//.test%28window.location.href%29%29%20%7B%0A%0A%20%20setTimeout%28function%28%29%7B%0A%0A%20%20%20%20try%7B%0A%0A%20%20%20%20%20%20var%20doc%20%3D%20document.getElementById%28%27sidebar%27%29.contentDocument%3B%0A%0A%20%20%20%20%20%20if%28doc%20%26%26%20doc.location%20%26%26%20doc.location.href%20%3D%3D%20%22chrome%3A//browser/content/web-panels.xul%22%29%0A%0A%20%20%20%20%20%20%20%20doc.addEventListener%28%27dblclick%27%2Cfunction%28event%29%7BsetTimeout%28ucjs_textlink%2C100%2Cevent%29%3B%7D%2Cfalse%29%3B%0A%0A%20%20%20%20%20%20%20%20doc.addEventListener%28%27keypress%27%2Cfunction%28event%29%7Bucjs_textlink%28event%29%3B%7D%2Cfalse%29%3B%0A%0A%20%20%20%20%7Dcatch%28e%29%7B%7D%0A%0A%20%20%7D%2C1000%29%3B%0A%0A%7D%0A%0A//for%20sidebar%20document%20onload%20event%20Listener%0A%0Awindow.document.addEventListener%28%27load%27%2C%20textLinkForSidebar.init%2C%20true%29%3B%0A%0Awindow.document.addEventListener%28%27unload%27%2C%20textLinkForSidebar.uninit%2C%20true%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%3Clabel%3E%0AID%20%3D%20%3Cid%3E%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E


Код кнопки:Custom Buttons | Форум Mozilla Россия из-за ограничения на размер сообщения.

Fit to Width (Подогнать по ширине) (Firefox)
Автор: Dark-Demon.
Выравнивает страницу по ширине окна (обсуждение кнопки).

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

Выделить код

Код:

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%0D%0A%20%20%3Cname%3Efit%20to%20width%3C/name%3E%0D%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAA3NCSVQICAjb4U/gAAAAFVBMVEX///8AzP8AAAAAzP8Amf8AAMwAAACWs84cAAAAB3RSTlMAd3f/////1grLHQAAAAlwSFlzAAALEgAACxIB0t1+/AAAACB0RVh0U29mdHdhcmUATWFjcm9tZWRpYSBGaXJld29ya3MgTVi7kSokAAAAFnRFWHRDcmVhdGlvbiBUaW1lADA1LzI4LzA2GvIWfQAAAEpJREFUeJxjYMAErKGhgRCGi0uIAJjhbBxiCGO4AIUUgIzQ0AAmhiQgw9gkQI0hTRXECEpDiChAGExgXUAGxEAXlwCIFUDtWOwGAHj3ENTzyS3QAAAAAElFTkSuQmCC%5D%5D%3E%3C/image%3E%0D%0A%20%20%3Cmode%3E0%3C/mode%3E%0D%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/initcode%3E%0D%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5Bvar%20s%3Dcontent.document.styleSheets%5B0%5D%3B%0As.insertRule%28%27*%20%7Bmin-width%3A0%21important%3B%20white-space%3Anormal%21important%3B%20margin%3A0%21important%3B%20padding%3A0%21important%3B%20float%3Anone%3B%7D%27%2C0%29%3B%0As.insertRule%28%27div%2Ctable%2Ctbody%2Ctr%2Ctd%2Cp%2Col%2Cul%2Ch1%2Ch2%2Ch3%2Chr%20%7Bmax-width%3A99%25%21important%3B%7D%27%2C0%29%3B%0As.insertRule%28%27table%2Ctbody%2Ctr%2Ctd%20%7Bdisplay%3Ablock%21important%7D%27%2C0%29%3B%0A%0Avar%20i%3D%20content.document.images%3B%0Afor%20%28var%20j%3D0%3B%20j%3Ci.length%3B%20j++%29%20%7B%0A%20%20var%20k%3D%20content.window.innerWidth/i%5Bj%5D.width*.95%3B%0A%20%20if%20%28k%3C1%29%20%7Bi%5Bj%5D.width*%3Dk%3B%20i%5Bj%5D.height*%3Dk%3B%7D%3B%0A%7D%0A%0A%0A%5D%5D%3E%3C/code%3E%0D%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0D%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0D%0A%20%20%3Cattributes/%3E%0D%0A%3C/custombutton%3E

Пиктограмма:

Выделить код

Код:

data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAA3NCSVQICAjb4U/gAAAAFVBMVEX///8AzP8AAAAAzP8Amf8AAMwAAACWs84cAAAAB3RSTlMAd3f/////1grLHQAAAAlwSFlzAAALEgAACxIB0t1+/AAAACB0RVh0U29mdHdhcmUATWFjcm9tZWRpYSBGaXJld29ya3MgTVi7kSokAAAAFnRFWHRDcmVhdGlvbiBUaW1lADA1LzI4LzA2GvIWfQAAAEpJREFUeJxjYMAErKGhgRCGi0uIAJjhbBxiCGO4AIUUgIzQ0AAmhiQgw9gkQI0hTRXECEpDiChAGExgXUAGxEAXlwCIFUDtWOwGAHj3ENTzyS3QAAAAAElFTkSuQmCC

Код:

Выделить код

Код:

var s=content.document.styleSheets[0];
s.insertRule('* {min-width:0!important; white-space:normal!important; margin:0!important; padding:0!important; float:none;}',0);
s.insertRule('div,table,tbody,tr,td,p,ol,ul,h1,h2,h3,hr {max-width:99%!important;}',0);
s.insertRule('table,tbody,tr,td {display:block!important}',0);

var i= content.document.images;
for (var j=0; j<i.length; j++) {
  var k= content.window.innerWidth/i[j].width*.95;
  if (k<1) {i[j].width*=k; i[j].height*=k;};
}

Cookies Permissions (Firefox)
Автор: Infocatcher
Описание: позволяет быстро открыть список исключений для куков, открыть список самих куков, в 1-2 клика добавить просматриваемый сайт в исключения, так же по таймеру удаляет все незащищённые (т.е. все которые не находятся в списке исключений как "разрешить" или "разрешить на сессию") куки.

У кнопки есть теперь своя тема, там же вы найдёте и ссылки на установку стабильной и тестовой версий кнопки и сможете почитать её changelog.

Открыть SAVE.HTML (Mozilla Thunderbird)
Считывает и открывает HTML файл (в новой закладке) указанный в Инструменты - Настройки... - Основные (переменная из about:config - mailnews.start_page.url ).

Данная кнопка удалена и заменена на TB Exp Imp CB как на более универсальную.

Tools(Mozilla Thunderbird)
Left    => Параметры учётной записи
Middle => about:config (в новом табе)
Right   => Настройки
Shift+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%3Econfig%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAABGdBTUEAALGPC/xhBQAAAIFQTFRF////u7uImZmZMzMzRERE7u7ud3d3qqqqzMzMVVVVZmZm3d3d////iIiIu7u7zMyZ7u7dIiIizMy73d27u7uZ3d3MzMyqmZlmiIhmqqqIu8yZIiIzqqp3///dd3dmd3dVmZl3qqqZMzNEzN277v/u7u7/mapmd4hEu7uq7u7MmZmIMf7U/gAAAAF0Uk5TAEDm2GYAAAABYktHRACIBR1IAAAACXBIWXMAAAsSAAALEgHS3X78AAAAB3RJTUUH0QwDBykHHZ47CAAAAWVJREFUeJydk1tvwyAMhRMDBptCozRN2qnqTXva//+BM9Asl7aTNt6s88X4HJOq+sMx3jnzmx4BOcS3ureAWmmyhXbRL/XWAitFGCAJHhjdXG7am+h3dMaYrBNZs9Cl/12FsWvEpV45SPeff5pappjHMmUeJ/drfah3E6BlBAPssw4QZL5ztx0JB4GEsJyBGEIgpfD2sa0L4ZLhu2bS+YrIlHS/q9PZPXSltKbsWAJkKYMkkYm+6ATWjrkLoTgNnYnjVw7UznM0EcsGetEROenLmI1/NOuPKKMpDas9TIEFJAEO7Rvd58D0Zdg2r78v/i4n8fKKKLo+nJKZdQ8frYXir+3qZ0LeB3HA4q95Joy8D07jF/9Nn4luIhxzdLLAFHgm1j0kSVN5JAXjlYWo92Od1+JYj0AmTsPQfc4GNZZo+in2XT1cru1maQRmD3VfD9c4qzcRcbFi6dEuHrZxfvVfruv/nm+NxhAKW3jK0QAAAABJRU5ErkJggg%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*/%0A%0A//%u041F%u0430%u0440%u0430%u043C%u0435%u0442%u0440%u044B%20%u0443%u0447%u0451%u0442%u043D%u043E%u0439%20%u0437%u0430%u043F%u0438%u0441%u0438%0Afunction%20lbMouse%28%29%7B%0AMsgAccountManager%28null%29%3B%0A%7D%3B%0A%0A//%u041D%u0430%u0441%u0442%u0440%u043E%u0439%u043A%u0438%0Afunction%20rbMouse%28%29%7B%0AopenOptionsDialog%28%29%3B%0A%7D%3B%0A%0A//about%3Aconfig%0Afunction%20mbMouse%28%29%7B%0Avar%20inBackground%20%3D%20false%3B%0Avar%20cnConf%20%3D%20%22chrome%3A//global/content/config.xul%22%0Avar%20tabmail%20%3D%20document.%20getElementById%20%28%22tabmail%22%29%3B%0Atabmail.%20openTab%0A%28%0A%09%22contentTab%22%2C%0A%09%7B%0A%09%09background%3A%20inBackground%2C%0A%09%09contentPage%3A%20cnConf%0A%09%7D%0A%29%3B%0A%7D%3B%0A%0Athis.tooltipText%20%3D%20%22Left%20%20%20%20%3D%3E%20%u041F%u0430%u0440%u0430%u043C%u0435%u0442%u0440%u044B%20%u0443%u0447%u0451%u0442%u043D%u043E%u0439%20%u0437%u0430%u043F%u0438%u0441%u0438%20%5CnMiddle%20%3D%3E%20about%3Aconfig%20%5CnRight%20%20%20%3D%3E%20%u041D%u0430%u0441%u0442%u0440%u043E%u0439%u043A%u0438%22%3B%0Athis.onclick%20%3D%20function%28event%29%20%7B%0A%20%20%20%20if%28event.button%20%3D%3D%200%29%20%7B%0A//%20%u0414%u0435%u0439%u0441%u0442%u0432%u0438%u0435%20%u043F%u0440%u0438%20%u043A%u043B%u0438%u043A%u0435%20%u041B%u041A%u041C%0AlbMouse%28%29%3B%0A%20%20%20%20%7D%0A%20%20%20%20else%20if%28event.button%20%3D%3D%201%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%0AmbMouse%28%29%3B%20%20%20%20%20%20%20%20%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%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%0ArbMouse%28%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%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%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*CODE*/%0A/*%0AMsgAccountManager%28null%29%3B%0AopenOptionsDialog%28%29%3B%0Avar%20inBackground%20%3D%20false%3B%0Avar%20cnConf%20%3D%20%22chrome%3A//global/content/config.xul%22%0Avar%20tabmail%20%3D%20document.%20getElementById%20%28%22tabmail%22%29%3B%0Atabmail.%20openTab%0A%28%0A%09%22contentTab%22%2C%0A%09%7B%0A%09%09background%3A%20inBackground%2C%0A%09%09contentPage%3A%20cnConf%0A%09%7D%0A%29%3B%0A//window.content.focus%28%29%3B%0A*/%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

Код (секция Инициализация)

Выделить код

Код:

/*Initialization Code*/

//Параметры учётной записи
function lbMouse(){
MsgAccountManager(null);
};

//Настройки
function rbMouse(){
openOptionsDialog();
};

//about:config
function mbMouse(){
var inBackground = false;
var cnConf = "chrome://global/content/config.xul"
var tabmail = document. getElementById ("tabmail");
tabmail. openTab
(
    "contentTab",
    {
        background: inBackground,
        contentPage: cnConf
    }
);
};

this.tooltipText = "Left    => Параметры учётной записи \nMiddle => about:config \nRight   => Настройки";
this.onclick = function(event) {
    if(event.button == 0) {
// Действие при клике ЛКМ
lbMouse();
    }
    else if(event.button == 1) {
        // Действие при клике СКМ
mbMouse();        
    }
    else if(event.button == 2 && !event.ctrlKey && !event.shiftKey && !event.altKey && !event.metaKey) {
        // Действие при клике ПКМ без модификаторов
rbMouse();
    }
};
this.oncontextmenu = function(event) {
    if(event.button == 2 && !event.ctrlKey && !event.shiftKey && !event.altKey && !event.metaKey) {
        // Блокируем контекстное меню при клике ПКМ без модификаторов
        event.preventDefault();
        event.stopPropagation();
    }
};

AddonsChekUpDate(Mozilla Thunderbird)
Left    => Открыть установленные дополнения
Middle => Проверить обновление дополнений
Right   => Дополнения в интернете
Shift+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%3EAddonsChekUpDate%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/gif%3Bbase64%2CR0lGODlhJQAaAPcAAAAAAAA7KAA/ND0+ACM5LAA5UjFSBztEJwpXQwxVWwVJZBRTfiFPXzdLVj5+W38dEnooB3oxAE5aBlpmFEdkKmhWAmdAI2Z2N3h4MkNCSEFbQkRXaExhdlptZ1N/cnNYR3FdXHlqSXB/VmZiYWZ2dnRyYypugTh7pUFvkVh1iFR8lmF7kj+1K1WTM06oMWmCGnqbJmy3NVKWR12Dbk6kQGSDRX+XQWyBcG+edGSxWH6nb367bXu7dUnKNmPENlnORWrRUnbDZ3TkXXrmZUmKl1aHi1yImk+Ot0uTokiQtleMoVyOs1WWrFictmODgmeOnXeHgnCLlH2RiGWVpGKas3iXpWq/hG2yn3Osg3OivVuaw12oymaqxmy41XapyHmxy3iz0XDBh3jDmH/K6pUWCoooE4A3AIk1GpYlAIQxLqkVAaktBJBTJ5ZQNpt7FoV2NZF2J71MHKZSLrNXJrhXNq5rFLRiKLloML13Ibt2PZNbUoxpSY1uXJ50W4l0YZ1qZ6l2SaJ+Xrt2RbN6cMQ6FstHCM1XFttXDNdaG99dI9xpFsllI8dmO8hxK8lyNddpJNVyJONZKOFlGOFmIOJ9Ncx6QNV/QoOcCouUJ5aNKJmKNauCKLykILGqNru6Lo+GQ42SXJqMTYWDboKDfpWNZp6PcpS6S4mvdqaMRKqTTaqVVrabS6GNdbqMar6TcbS0VLupebSwaY7fX4nJc47vdarKTaHkfdCpKNSsM+G7Ks2DS8mPX9CAQcyefdWyTtG0VsmuZ8ygfeGffOnGPOXSLv7XMd7KacPueubPRe3EW/bXRvvSU+7Ua+jwd4KYm5iKgYSds421iI2npo6zuaGhlaGxvre7xJDEhY3ri5LjhpronJv8i5jzlLb+mq7ioo7CzY7M24TG4I7W7o/U85jM4pDR5Zvf9KTY7dubgMCwjMS3lNa0m8yzqOqyieizo9LDnN3MrtfFtd3RuOjGvcXO08ndwdXOxN3cytvb29Tj0OXHxeHYyeXZ1fLMwwAAAAAAACH5BAEAAP8ALAAAAAAlABoAAAj/AP8JHEiwoMGDCBMehJZiRYoq1egpnHgQxRIv5M6ByZKiwSh7FBPGi2eNgwovX76UMzduY5QSIdSFPNirT4YNzpxJqwJO3BguVJyQAvZr1UyC8QQJ4vOMVSlRUr412dIlXJEDb5gxU5Xu6L91dihZquQozx5q0750WcuFAQEMxnytkkcRn8BgjRTpVbSIjR8oU7hsGaxlighNuJK9qytwF6S9eu+4gmKkSZITC44oufHp1jJY/Gbqerz3ka5AJKYQUaCggIkiGmINW6ZqX8h2vCA/ctSqxBMmSBIICIDAAYVXypShinfbkV5JhtBA+EDCiBIiV8SEscLDRidlw1DB/wspbNFeNGjOgEjB3gMWbdyw2cLEqViuVHQpopvzSBGiNWvQoccIHcyAgwxAbLONC7V4QgwyodwTkjtyLCKJJIUUYggjgFywQxBB0CIiLUDEcEkzoEhIUT9txHGhJIccsoYZEnTTzTYiDiEEELTEcEwN9cw0yBqJvOhfBAPM0kI2tAwxBBA/COFDDEFcM9M8Z8SByIWKPNIIHBMY0EKTQED5Q5lAzHLUIGWsEQkiiEyiCB6bZPICiVD2oCcLaXqlRxlkELKGhnW4kQkMspT5g54/nKmmnw+QoYYaaFRgSgtoxhBDo0DkkIOVXv0zSBpkkAGBBLOU6YILLbTgAhBBeDATTagC8cPOH2lYYICZrJ5yzas80FoQP/qwU4MMNNAggw75RCODDLMKG1I+0labUEAAOw%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*/%0A%0A//%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20%u0443%u0441%u0442%u0430%u043D%u043E%u0432%u043B%u0435%u043D%u043D%u044B%u0435%20%u0434%u043E%u043F%u043E%u043B%u043D%u0435%u043D%u0438%u044F%0Afunction%20lbMouse%28%29%7B%0AopenAddonsMgr%28%29%3B%0A%7D%3B%0A%0A//%u041F%u0440%u043E%u0432%u0435%u0440%u0438%u0442%u044C%20%u043E%u0431%u043D%u043E%u0432%u043B%u0435%u043D%u0438%u0435%20%u0434%u043E%u043F%u043E%u043B%u043D%u0435%u043D%u0438%u0439%0Afunction%20mbMouse%28%29%7B%0Avar%20win%20%3D%20BrowserOpenAddonsMgr%20%28%29%3B%0A%0Avar%20doc%20%3D%20win.%20document%3B%0Acmd%20%3D%20doc.%20getElementById%20%28%22extensions-view%22%29%3B%0Aif%20%28%21cmd%29%0A%20%20%20%20win.%20addEventListener%20%28%22load%22%2C%20function%20%28event%29%20%7B%20setTimeout%20%28function%20%28%29%20%7B%20win.%20document.%20getElementById%20%28%22extensions-view%22%29.%20doCommand%20%28%29%3B%20%7D%2C%20200%29%3B%20%7D%2C%20false%29%3B%0Aelse%0A%20%20%20%20cmd.%20doCommand%20%28%29%3B%0A%09cmd2%20%3D%20doc.%20getElementById%20%28%22cmd_checkUpdatesAll%22%29%3B%0Aif%20%28%21cmd2%29%0A%20%20%20%20win.%20addEventListener%20%28%22load%22%2C%20function%20%28event%29%20%7B%20setTimeout%20%28function%20%28%29%20%7B%20win.%20document.%20getElementById%20%28%22cmd_checkUpdatesAll%22%29.%20doCommand%20%28%29%3B%20%7D%2C%20500%29%3B%20%7D%2C%20false%29%3B%0Aelse%0A%20%20%20%20cmd2.%20doCommand%20%28%29%3B%0AcheckForUpdates%28%29%3B%20%20%20%20%0A%7D%3B%0A%0A//%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20%u0431%u0430%u0437%u0443%20%u0434%u043E%u043F%u043E%u043B%u043D%u0435%u043D%u0438%u0439%20%u0432%20%u0438%u043D%u0442%u0435%u0440%u043D%u0435%u0442%u0435%0Afunction%20rbMouse%28%29%7B%0Avar%20url%20%3D%20%22https%3A//addons.mozilla.org/ru/thunderbird/%22%3B%0Avar%20inBackground%20%3D%20false%3B%0Avar%20tabmail%20%3D%20document.%20getElementById%20%28%22tabmail%22%29%3B%0Atabmail.%20openTab%0A%28%0A%09%22contentTab%22%2C%0A%09%7B%0A%09%09background%3A%20inBackground%2C%0A%09%09contentPage%3A%20url%0A%09%7D%0A%29%3B%0A%7D%3B%0A%0Afunction%20BrowserOpenAddonsMgr%28aPane%29%0A%7B%0A%20%20const%20EMTYPE%20%3D%20%22Extension%3AManager%22%3B%0A%20%20var%20wm%20%3D%20Components.classes%5B%22@mozilla.org/appshell/window-mediator%3B1%22%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.getService%28Components.interfaces.nsIWindowMediator%29%3B%0A%20%20var%20theEM%20%3D%20wm.getMostRecentWindow%28EMTYPE%29%3B%0A%20%20if%20%28theEM%29%20%7B%0A%20%20%20%20theEM.focus%28%29%3B%0A%20%20%20%20return%20theEM%3B%0A%20%20%7D%0A%0A%20%20const%20EMURL%20%3D%20%22chrome%3A//mozapps/content/extensions/extensions.xul%22%3B%0A%20%20const%20EMFEATURES%20%3D%20%22chrome%2Cmenubar%2Cextra-chrome%2Ctoolbar%2Cdialog%3Dno%2Cresizable%22%3B%0A%20%20return%20window.openDialog%28EMURL%2C%20%22%22%2C%20EMFEATURES%29%3B%0A%7D%3B%0A%0Athis.tooltipText%20%3D%20%22Left%20%20%20%20%3D%3E%20%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20%u0443%u0441%u0442%u0430%u043D%u043E%u0432%u043B%u0435%u043D%u043D%u044B%u0435%20%u0434%u043E%u043F%u043E%u043B%u043D%u0435%u043D%u0438%u044F%20%5CnMiddle%20%3D%3E%20%u041F%u0440%u043E%u0432%u0435%u0440%u0438%u0442%u044C%20%u043E%u0431%u043D%u043E%u0432%u043B%u0435%u043D%u0438%u0435%20%u0434%u043E%u043F%u043E%u043B%u043D%u0435%u043D%u0438%u0439%20%5CnRight%20%20%20%3D%3E%20%u0414%u043E%u043F%u043E%u043B%u043D%u0435%u043D%u0438%u044F%20%u0432%20%u0438%u043D%u0442%u0435%u0440%u043D%u0435%u0442%u0435%22%3B%0Athis.onclick%20%3D%20function%28event%29%20%7B%0A%20%20%20%20if%28event.button%20%3D%3D%200%29%20%7B%0A//%20%u0414%u0435%u0439%u0441%u0442%u0432%u0438%u0435%20%u043F%u0440%u0438%20%u043A%u043B%u0438%u043A%u0435%20%u041B%u041A%u041C%0AlbMouse%28%29%3B%0A%20%20%20%20%7D%0A%20%20%20%20else%20if%28event.button%20%3D%3D%201%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%0AmbMouse%28%29%3B%20%20%20%20%20%20%20%20%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%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%0ArbMouse%28%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%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%0A%20%20%20%20%20%20%20%20event.stopPropagation%28%29%3B%0A%20%20%20%20%7D%0A%7D%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

Код (секция Инициализация)

Выделить код

Код:

/*Initialization Code*/

//Открыть установленные дополнения
function lbMouse(){
openAddonsMgr();
};

//Проверить обновление дополнений
function mbMouse(){
var win = BrowserOpenAddonsMgr ();

var doc = win. document;
cmd = doc. getElementById ("extensions-view");
if (!cmd)
    win. addEventListener ("load", function (event) { setTimeout (function () { win. document. getElementById ("extensions-view"). doCommand (); }, 200); }, false);
else
    cmd. doCommand ();
    cmd2 = doc. getElementById ("cmd_checkUpdatesAll");
if (!cmd2)
    win. addEventListener ("load", function (event) { setTimeout (function () { win. document. getElementById ("cmd_checkUpdatesAll"). doCommand (); }, 500); }, false);
else
    cmd2. doCommand ();
checkForUpdates();    
};

//Открыть базу дополнений в интернете
function rbMouse(){
var url = "https://addons.mozilla.org/ru/thunderbird/";
var inBackground = false;
var tabmail = document. getElementById ("tabmail");
tabmail. openTab
(
    "contentTab",
    {
        background: inBackground,
        contentPage: url
    }
);
};

function BrowserOpenAddonsMgr(aPane)
{
  const EMTYPE = "Extension:Manager";
  var wm = Components.classes["@mozilla.org/appshell/window-mediator;1"]
                     .getService(Components.interfaces.nsIWindowMediator);
  var theEM = wm.getMostRecentWindow(EMTYPE);
  if (theEM) {
    theEM.focus();
    return theEM;
  }

  const EMURL = "chrome://mozapps/content/extensions/extensions.xul";
  const EMFEATURES = "chrome,menubar,extra-chrome,toolbar,dialog=no,resizable";
  return window.openDialog(EMURL, "", EMFEATURES);
};

this.tooltipText = "Left    => Открыть установленные дополнения \nMiddle => Проверить обновление дополнений \nRight   => Дополнения в интернете";
this.onclick = function(event) {
    if(event.button == 0) {
// Действие при клике ЛКМ
lbMouse();
    }
    else if(event.button == 1) {
        // Действие при клике СКМ
mbMouse();        
    }
    else if(event.button == 2 && !event.ctrlKey && !event.shiftKey && !event.altKey && !event.metaKey) {
        // Действие при клике ПКМ без модификаторов
rbMouse();
    }
};
this.oncontextmenu = function(event) {
    if(event.button == 2 && !event.ctrlKey && !event.shiftKey && !event.altKey && !event.metaKey) {
        // Блокируем контекстное меню при клике ПКМ без модификаторов
        event.preventDefault();

        event.stopPropagation();
    }
};

Min&Quit&Restart(Mozilla Thunderbird)
Left    => Свернуть Mozilla Thunderbird
Middle => Выйти из Mozilla Thunderbird
Right   => Перезагрузить Mozilla Thunderbird
Shift+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%3EMin%26amp%3BQuit%26amp%3BRestart%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAI00lEQVR4nKWXeYxV5RmHn285y72zXWZhGJZhRgdkFdChWFEEbZQCJdUMSFsbq38gkmnSKE0bE5PGpAlpGmPS22ijXdNWQ8a0rrWtC3bacQE3QJmZCoMIwyzAzF3mLmftH+feYZyi1fRLvnzn3Pue9/e873m/5Qi+YOvswgJWAAuBGsAAUsBx4K1kB9kv4k98TtEYcDNwhxTG2obKxbHq2FwMGUNJjRc4TBSHGUof8hw/+xbwBPD7ZAdn/2+Azi52Ag/MSaxpnFVzFTFjLo5fxAs8BAJDGVg6TtysptKopuCOMHDuZY4OPTXmh+7PgL3JDvJfGKCzi1rgt3UVi7Y0125mvJAjW0yhpcZQVqmbmNqOrqWJoUwMZVFpJqgw4rx76jccHX76KHBLsoPezw3Q2cUi4JmWupvaAuYxlPkILQ20sjCViaFsTGlRXzkbQ1nk3CymMtHSnAQzpEm1XU8q18tL/T866wfOtmQH+6drqYuIXyaQr7bN3N58JuswlD1RQhUIcYFXCMGtK+5hQf1KDg/9C4FAiMgOBAiB5zvEzUaWzPpq/MS5f2y/oqPw+pv7GJiqJ6eJx4Fn5tdtbewd/YjhzEe4voMbOHi+c+E6cHD9IloaKGlc+M+P7LygPLrk3SxuYLJ56UNxLe19nV0s/FQAYO/MqtULjo+NcC53Bi9wqa+YzdqWrXiBO+nYLYmEhIRh+AnhMmDLjCXEzSq8wKXo5/GxuK7tB3XAoxcF6OxipaEq73bCJk6lPiwJuqxt2cq3r7iPHSv34PnulAw4hGEIhJPCEYjL6rk3sXrejTQnFuEFDr7vkHezNFa3Mzexel1nFzsuloH76yvX6CNnDuAFLn4J4MnDSXpHD7LuklvYsfJe/MCdfBVEOcD1i5OvYG3L11g8czXD2ZO8O7h/MhAvcBkrjLJ6/l0A930CoLOLeinMG8eLmqybwg88/MDHC1yyxTH2vnwHfZMQe/BDFz9wIg9hlAEvdNjQtp3ls9ZyJnOC53t/Rc7NlGDdKHu+g6nraapZtbyzi+unZmBjInZZ5cD5o5F46OOFXgnEY8IZ5yf776B/9CDXtt7MN1beixDuZAaEcNi48DZWzV7PYPoYfz6SJO9mLhRk4ExmIVU4y6V1GwC2AugSwAatGjiX6yUIfUQQLRCBFKXpB0VvnIe67+Sedb9mbcvNFL0UI9kBpJBc33YrV869kdOpPv505EH8IEBLm0BAqpAhWxxnPH+W87khMsUxls9aAXDdVIDLnUDjB14UET5KCKQAJUAL0FLgB+M88tqd3N7+U7xggsff3oNWJte0fou+kX/y176HyTlpsk6K0dwgY7lzpArjeAF4IYRhJDav0IZALu3sCowywHzHL6cTWmoXcteavSipEEKghEQKgSyNg+kP6D72CwxpoiX0DDzGukt3csOCO3H8PEEYEkblQRBCEAY8+sYPGRjrxQ8g7+aIqQrD9TMNZYAqLwyQArSE+ng9y5vWUWEmuFiTwsMQBfwgRbaYouhNkIjVsXTWDRe1n3DGaaho4FSqFwH4gYdSJi5UlAHyWgpbSzAV9J/t5jtPzMBWAksrbK2xtMZSGkNprr2kkwUz13B48HG0hOXzvs6psdf448FteEGIG4DngxuA40PRByeIfAvAUIogdCPdEsApW4kZpoqMTAm2BlOFWNrHUmAr0NJly5KHWD1/Fx8MPUFzYhkAiVgzS5tuo7GqjaeP7Mb1Q1wZiSsJUoL0Lux8FWacQjEHcLYM8L6lwuW21mjhYWuwNCXhCMJQPluWJmlv3sVgqodX+nfyzfaDCOAPB68kEZtPe/MulIBn39+NI8NI3I+Ep267VaZBvuD1JTsolNeBniAcI2EnsFQkbiuIabANiOmQrcuStDfvZijdw/NHNqJFhtIsxZBZXvhgE2fS3ayat4utyx8mbghiuuSjFIylIa5NTOUCdE9diJ47P9FHa+3iC5GXHoxp2Lzs51wxbzfD6R7+dnQjWmWImZG4EBAzQKssL/ZuYijdzYo5d7F56SPEDTHpp+x3TqKVieJJgOcmAZIdHHf97KtVpk1MmxFtCeLq1u+xau5uhjM9vNi3ESky2IbANnR0BkBgmwa2IVEyyyv9mxhOd3P5nJ18uXXPhegVWEowp/oSxnLHRoAXpmYA4MfD6Xe5tO5KJotRwXjuPfpGfsnLk+IWMTNB3GpACoWUigqrkbhZR8yoRMoc+/+9if6Rx0gVDmGWUm8qaKpuI5U/AfBgsoMC02qDzi6eXdBwzea8008YjBAzohqwDTC1wNJxLF2DoWvQuoKrmp9EIHjj4214fgHPy+B4KYpemqLnUnSh4ELeAy+IUV+1nvdO/+U4sLQMMP1AcveHoz0jTdXtxM0KDAmGAkOCqWxsoxbbmknMaiRuNSGEQghF3JpD3JqFbTVim/VYuhpDyehZBZbStNSup3f4VRfYURaHaWfCN/eR/tL28PXRiY93LGq83oBRlCxgaoVtzMA267DNBmxzJpZZj88EE94xfCaQ0kQIUToleYShQxA6CGHRUP0V3hk8QM5JfTfZwVNTNf/rUPrmPk62b/MOnB4f2NJSd02s0goQoohtzsAy6qMIrQYso55Q+QSiiJI2UiggJAxd/NAlCIpoWUXcvJqeE93BhDN+f7KDB6frfdZ3wRLgxUWNq5qWNM5HyFEMHSdmz8Y2mzDNBrSuQQqN7+dw3HMUnWEKxUGKzhiSWj4cHeGdU6+d80Pv1mQHL11M5zO/jDq7mAF8X0tj96q562sWN11OdbwGqS20kcA0Ekhp4noZPHcc38tTKOTpGzrMgZN/D3JO+nfAA8mOTx7FPzfAFJBm4G7g9plVrU3NM5ZRV9WCbdaghEHBy3A+e5KPzx/mTKo/FYT+s0RT7e3/5Xs6gF3qGjCJZokmqhUtFPqydSyurGVFQystVQ1USIXOZ5g4/T6n8mkOHX+dQ/k0BcAHvFIPSqNT6nkg/LQMlPcONeWeEoicZle28csOS60syJTfg1Kfasd/AEdhATPfNZxGAAAAAElFTkSuQmCC%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%0Athis.tooltipText%20%3D%20%22Left%20%20%20%20%3D%3E%20%u0421%u0432%u0435%u0440%u043D%u0443%u0442%u044C%20Mozilla%20Thunderbird%20%5CnMiddle%20%3D%3E%20%u0412%u044B%u0439%u0442%u0438%20%u0438%u0437%20Mozilla%20Thunderbird%20%5CnRight%20%20%20%3D%3E%20%u041F%u0435%u0440%u0435%u0437%u0430%u0433%u0440%u0443%u0437%u0438%u0442%u044C%20Mozilla%20Thunderbird%22%3B%0A%0Athis.onclick%20%3D%20function%28event%29%20%7B%0A%20%20%20%20if%28event.button%20%3D%3D%200%29%20%7B%0A//%20%u0414%u0435%u0439%u0441%u0442%u0432%u0438%u0435%20%u043F%u0440%u0438%20%u043A%u043B%u0438%u043A%u0435%20%u041B%u041A%u041C%0Awindow.minimize%28%29%3B%0A%20%20%20%20%7D%0A%20%20%20%20else%20if%28event.button%20%3D%3D%201%29%20%7B%0A//%20%u0414%u0435%u0439%u0441%u0442%u0432%u0438%u0435%20%u043F%u0440%u0438%20%u043A%u043B%u0438%u043A%u0435%20%u0421%u041A%u041C%0AgoQuitApplication%28%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%29%20%7B%0A//%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%20var%20appStartup%20%3D%20Components.classes%5B%22@mozilla.org/toolkit/app-startup%3B1%22%5D%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.getService%28Components.interfaces.nsIAppStartup%29%3B%0A%20%20appStartup.quit%28appStartup.eForceQuit%20%7C%20appStartup.eRestart%29%3B%0A%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%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%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

Код (секция Инициализация)

Выделить код

Код:

/*Initialization Code*/

this.tooltipText = "Left    => Свернуть Mozilla Thunderbird \nMiddle => Выйти из Mozilla Thunderbird \nRight   => Перезагрузить Mozilla Thunderbird";

this.onclick = function(event) {
    if(event.button == 0) {
// Действие при клике ЛКМ
window.minimize();
    }
    else if(event.button == 1) {
// Действие при клике СКМ
goQuitApplication();
    }
    else if(event.button == 2 && !event.ctrlKey && !event.shiftKey && !event.altKey && !event.metaKey) {
// Действие при клике ПКМ без модификаторов
  var appStartup = Components.classes["@mozilla.org/toolkit/app-startup;1"]
                             .getService(Components.interfaces.nsIAppStartup);
  appStartup.quit(appStartup.eForceQuit | appStartup.eRestart);

    }
};
this.oncontextmenu = function(event) {
    if(event.button == 2 && !event.ctrlKey && !event.shiftKey && !event.altKey && !event.metaKey) {
        // Блокируем контекстное меню при клике ПКМ без модификаторов
        event.preventDefault();
        event.stopPropagation();
    }
};

Attributes Inspector (для разработчиков) (все приложения на движке gecko: [firefox] Firefox, [seamonkey] SeaMonkey, [thunderbird] Thunderbird etc.)
Показывает всплывающую подсказку со всеми атрибутами.
Использование:
   Кликните средней кнопкой мыши или левой с зажатым Ctrl (или нажмите Ctrl+Shift+I), чтобы исследовать узел в DOM Inspector
   Удерживайте Shift, чтобы показывать и не скрывать всплывающие подсказки и меню
Сочетания клавиш:
   Escape – отмена
   Ctrl+Up, Ctrl+Down – перейти к родительскому/дочернему узлу
   Ctrl+Shift+C – копировать содержимое всплывающей подсказки

У кнопки теперь есть отдельная тема.

Tools(Firefox)   Прим. пост с начальной версией удалён с форума

Версия от 12.02.2011

Left => Настройки Mozilla FireFox
Middle => Vacuum очистка баз places.sqlite и Brief
Ctrl+Right => Информация для решения проблем и плагины
Right => About:Config

Переустанавливает plugin.expose_full_path в true, что позволяет увидеть пути расположения плагинов.

Скачать кнопку в HTML формате Tools._html. Для установки исправить расширение файла с _html на html

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

Выделить код

Код:

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%3ETools%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAABGdBTUEAALGPC/xhBQAAAIFQTFRF////u7uImZmZMzMzRERE7u7ud3d3qqqqzMzMVVVVZmZm3d3d////iIiIu7u7zMyZ7u7dIiIizMy73d27u7uZ3d3MzMyqmZlmiIhmqqqIu8yZIiIzqqp3///dd3dmd3dVmZl3qqqZMzNEzN277v/u7u7/mapmd4hEu7uq7u7MmZmIMf7U/gAAAAF0Uk5TAEDm2GYAAAABYktHRACIBR1IAAAACXBIWXMAAAsSAAALEgHS3X78AAAAB3RJTUUH0QwDBykHHZ47CAAAAWVJREFUeJydk1tvwyAMhRMDBptCozRN2qnqTXva//+BM9Asl7aTNt6s88X4HJOq+sMx3jnzmx4BOcS3ureAWmmyhXbRL/XWAitFGCAJHhjdXG7am+h3dMaYrBNZs9Cl/12FsWvEpV45SPeff5pappjHMmUeJ/drfah3E6BlBAPssw4QZL5ztx0JB4GEsJyBGEIgpfD2sa0L4ZLhu2bS+YrIlHS/q9PZPXSltKbsWAJkKYMkkYm+6ATWjrkLoTgNnYnjVw7UznM0EcsGetEROenLmI1/NOuPKKMpDas9TIEFJAEO7Rvd58D0Zdg2r78v/i4n8fKKKLo+nJKZdQ8frYXir+3qZ0LeB3HA4q95Joy8D07jF/9Nn4luIhxzdLLAFHgm1j0kSVN5JAXjlYWo92Od1+JYj0AmTsPQfc4GNZZo+in2XT1cru1maQRmD3VfD9c4qzcRcbFi6dEuHrZxfvVfruv/nm+NxhAKW3jK0QAAAABJRU5ErkJggg%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*/%0A//%20%u0412%u0435%u0440%u0441%u0438%u044F%20%u043E%u0442%2012.02.2011%0A//%20%28c%29%20Indomito%0A%0Athis.tooltipText%20%3D%20%22Left%20%20%20%20%20%20%20%20%20%3D%3E%20%u041D%u0430%u0441%u0442%u0440%u043E%u0439%u043A%u0438%20Mozilla%20FireFox%5Cn%22+%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22Middle%20%20%20%20%20%20%3D%3E%20Vacuum%20%u043E%u0447%u0438%u0441%u0442%u043A%u0430%20%u0431%u0430%u0437%20places.sqlite%20%u0438%20Brief%5Cn%22+%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22Ctrl+Right%20%3D%3E%20%u0418%u043D%u0444%u043E%u0440%u043C%u0430%u0446%u0438%u044F%20%u0434%u043B%u044F%20%u0440%u0435%u0448%u0435%u043D%u0438%u044F%20%u043F%u0440%u043E%u0431%u043B%u0435%u043C%20%u0438%20%u043F%u043B%u0430%u0433%u0438%u043D%u044B%5Cn%22+%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22Right%20%20%20%20%20%20%20%20%3D%3E%20About%3AConfig%22%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A//%u041D%u0430%u0441%u0442%u0440%u043E%u0439%u043A%u0438%20Mozilla%20FireFox%0Afunction%20lbMouse%28%29%7B%0Atry%7B%20openPreferences%28%29%3B%20%7D%20catch%28e%29%20%7B%20openOptionsDialog%28%29%3B%20%7D%0A%7D%3B%0A%0A//Quick%20About%3AConfig%20%u043E%u0442%u043A%u0440%u044B%u0442%u0438%u0435%20%u0432%20%u043D%u043E%u0432%u043E%u043C%20%u0442%u0430%u0431%u0435%0Afunction%20rbMouse%28%29%7B%0AgetBrowser%20%28%29.%20selectedTab%20%3D%20getBrowser%20%28%29.%20addTab%20%28%22about%3Aconfig%22%29%0A%7D%3B%0A%0A//Vacuum%20%u043E%u0447%u0438%u0441%u0442%u043A%u0430%20%u0431%u0430%u0437%20places.sqlite%20%u0438%20Brief%0Afunction%20mbMouse%28%29%7B%0Avar%20dBF%20%3D%20%22%20%u0438%20Brief%22%3B%0Aif%20%28typeof%20gBrief%20%3D%3D%20%27undefined%27%29%20dBF%20%3D%20%22%22%3B%0Avar%20res%3Dcustombuttons.%20confirmBox%20%28%22Vacuum%20%u043E%u0447%u0438%u0441%u0442%u043A%u0430%20places.sqlite%22%20+%20dBF%2C%20%22%u041E%u0447%u0438%u0441%u0442%u0438%u0442%u044C%20%u0431%u0430%u0437%u044B%3F%22%2C%20%22%u0414%u0430%22%2C%20%22%u041D%u0435%u0442%22%29%3B%0Aif%20%28res%29%7B%0A%20%20%20%20%20Components.classes%5B%22@mozilla.org/browser/nav-history-service%3B1%22%5D.getService%28Components.interfaces.nsPIPlacesDatabase%29.DBConnection.executeSimpleSQL%28%22VACUUM%22%29%3B%0A%20%20%20%20%20if%20%28%21dBF.length%29%20window.openDialog%28%27chrome%3A//brief/content/compacting-progress.xul%27%2C%20%27Brief%27%2C%27chrome%2Ctitlebar%2Ccenterscreen%27%29%3B%0A%20%20%20%20%20custombuttons.%20alertBox%20%28%22Vacuum%20%u043E%u0447%u0438%u0441%u0442%u043A%u0430%20places.sqlite%22%20+%20dBF%2C%20%22%u0411%u0430%u0437%u044B%20%u043E%u0447%u0438%u0449%u0435%u043D%u044B%22%29%0A%20%20%20%20%20%20%20%20%7D%0A%7D%3B%0A//%u0418%u043D%u0444%u043E%u0440%u043C%u0430%u0446%u0438%u044F%20%u0434%u043B%u044F%20%u0440%u0435%u0448%u0435%u043D%u0438%u044F%20%u043F%u0440%u043E%u0431%u043B%u0435%u043C%20%u0438%20%u043F%u043B%u0430%u0433%u0438%u043D%u044B%0Afunction%20cKeyrbMouse%28%29%7B%0A//%u0412%u043A%u043B%u044E%u0447%u0430%u0435%u043C%20%u0432%u0438%u0434%u0438%u043C%u043E%u0441%u0442%u044C%20%u043F%u0443%u0442%u0435%u0439%20%u0434%u043B%u044F%20%u043F%u043B%u0430%u0433%u0438%u043D%u043E%u0432%2C%20%u0442%u0435%20about%3Aplugins%0AApplication.prefs.setValue%28%22plugin.expose_full_path%22%2C%20true%29%3B%0AgetBrowser%20%28%29.%20selectedTab%20%3D%20getBrowser%20%28%29.%20addTab%20%28%22about%3Aplugins%22%29%3B%0AgetBrowser%20%28%29.%20selectedTab%20%3D%20getBrowser%20%28%29.%20addTab%20%28%22about%3Asupport%22%29%3B%0A%7D%3B%0A%0Athis.onclick%20%3D%20function%28event%29%20%7B%0A%20%20%20if%28event.button%20%3D%3D%200%29%20%7B%0A//%20%u0414%u0435%u0439%u0441%u0442%u0432%u0438%u0435%20%u043F%u0440%u0438%20%u043A%u043B%u0438%u043A%u0435%20%u041B%u041A%u041C%0AlbMouse%28%29%3B%0A%20%20%20%20%7D%0A%20%20%20%20else%20if%28event.button%20%3D%3D%201%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%0AmbMouse%28%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%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%0ArbMouse%28%29%3B%0A%20%20%20%20%7D%0A%20%20%20%20else%20if%28event.button%20%3D%3D%202%20%26%26%20event.ctrlKey%29%20%7B%0A//%20%u0414%u0435%u0439%u0441%u0442%u0432%u0438%u0435%20%u043F%u0440%u0438%20%u043A%u043B%u0438%u043A%u0435%20ctrl+%u041F%u041A%u041C%0AcKeyrbMouse%28%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%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%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

Код (секция Инициализация)

Выделить код

Код:

/*Initialization Code*/
// Версия от 12.02.2011
// (c) Indomito

this.tooltipText = "Left         => Настройки Mozilla FireFox\n"+
                   "Middle      => Vacuum очистка баз places.sqlite и Brief\n"+
                   "Ctrl+Right => Информация для решения проблем и плагины\n"+
                   "Right        => About:Config";
                   
//Настройки Mozilla FireFox
function lbMouse(){
try{ openPreferences(); } catch(e) { openOptionsDialog(); }
};

//Quick About:Config открытие в новом табе
function rbMouse(){
getBrowser (). selectedTab = getBrowser (). addTab ("about:config")
};

//Vacuum очистка баз places.sqlite и Brief
function mbMouse(){
var dBF = " и Brief";
if (typeof gBrief == 'undefined') dBF = "";
var res=custombuttons. confirmBox ("Vacuum очистка places.sqlite" + dBF, "Очистить базы?", "Да", "Нет");
if (res){
     Components.classes["@mozilla.org/browser/nav-history-service;1"].getService(Components.interfaces.nsPIPlacesDatabase).DBConnection.executeSimpleSQL("VACUUM");
     if (!dBF.length) window.openDialog('chrome://brief/content/compacting-progress.xul', 'Brief','chrome,titlebar,centerscreen');
     custombuttons. alertBox ("Vacuum очистка places.sqlite" + dBF, "Базы очищены")
        }
};
//Информация для решения проблем и плагины
function cKeyrbMouse(){
//Включаем видимость путей для плагинов, те about:plugins
Application.prefs.setValue("plugin.expose_full_path", true);
getBrowser (). selectedTab = getBrowser (). addTab ("about:plugins");
getBrowser (). selectedTab = getBrowser (). addTab ("about:support");
};

this.onclick = function(event) {
   if(event.button == 0) {
// Действие при клике ЛКМ
lbMouse();
    }
    else if(event.button == 1) {
        // Действие при клике СКМ
mbMouse();
    }
    else if(event.button == 2 && !event.ctrlKey && !event.shiftKey && !event.altKey && !event.metaKey) {
        // Действие при клике ПКМ без модификаторов
rbMouse();
    }
    else if(event.button == 2 && event.ctrlKey) {
// Действие при клике ctrl+ПКМ
cKeyrbMouse();
    }
};
this.oncontextmenu = function(event) {
    if(event.button == 2 && !event.shiftKey && !event.altKey && !event.metaKey) {
        // Блокируем контекстное меню при клике ПКМ без модификаторов
        event.preventDefault();
        event.stopPropagation();
    }
};

Highlight( Firefox 3.6 )
Выделяет одинаковые слова или фразы на открытой странице. Выделяемые слова или фразы надо выделить на странице или ввести в поле ввода каторое появляется после нажатие кнопки.

ЛКМ => выделить одинаковые слова или фразы на открытой странице.
СКМ => выбрать цвет выделения + меню кнопки.
ПКМ => убрать выделение.

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

Выделить код

Код:

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%3EHighlight%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAACXBIWXMAAAsSAAALEgHS3X78AAACZ0lEQVQokQXBW2/TSBQA4HPmYjtOnNiJoTHKaitUVMEDSLzww9H+DPZhhQQtW7Uh3ZKbXYfEl5nMnLPfh+Vfn7kq1eUU/LMq8uiyYR4hLAHoC32s0Sq43otZzkQoYiZFZUmbtcgA3R6mUsoD0VnACsAf+W2NRiFtpZQEJIRjUOAM2A6lQ+0YwZ1GjAMIYwDW3GtoItum/hihbDhkZOVvvvof3/Xlexw/cQ9uO2atVLED8Ae+3fH2ZXPhDtQHycoFU8WKrWHTM50ZLJAnzyAY0AOQQKFBIRF6z0TOMwlWp3hsJ5mkoT4lmGkpLQhnqwEAhWKgvHRWN1Iqi+6nd0NQ5WrZ3t4O3yWSHzhKZHZmuMDyAYAqGf7bfMn0pzuRXjT++9+8mIHSs1zPC5zkDB0PMic8iNTJHJhCmqb8RyLCmRCpgnwMWQLqqesPp04bI9HEJ+PvjI7jZfvM7G+i5fL35ipbuaaxtKjv0mGDqi/LZrs5N8+EO9cdHLeoolO3B/YHDMp+d2FOh24QkqtrPY5ZcbHgpj0PCts7yS+MNf48c7Zgpkk4z50Zu9BZG4ujDm6lCtSmqjabbbYuz9WvLJyfwIym+rFaE/ttpp5265nbllswAfzzbdf1iWIAL5AQvEAGIAJi9AREyB7AA3tyBMwskASyaqP4GCdtFLeDUYhRVQMFQV0HRAQ6wENkRuffdTOcTNMBJCGox/X6/ufq1f7FsXrk4fzXQ9tbdf/fisgJK++XyxBe3zzs3Tx6XPEwtOr6w4c0Tf+8vuqO02z+Jh6ZST7rspaYRD5PJ7NFcT1JimJ6qQwvXqX/A9G+ibxhNxZGAAAAAElFTkSuQmCC%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bthis.%20clickHandler%20%3D%20function%20%28event%29%0A%7B%0A%09if%20%28%28event.%20button%20%3D%3D%202%29%20%26%26%20event.%20ctrlKey%29%0A%09%09this.%20mObj.%20setPri%20%28%29%3B%0A%09else%0A%09%09this.%20mObj.%20setSub%20%28%29%3B%0A%09if%20%28event.%20ctrlKey%29%0A%09%7B%0A%09%09this.%20showPopup%20%28this%29%3B%0A%09%09return%3B%0A%09%7D%0A%09if%20%28event.%20button%20%3D%3D%200%29%0A%09%7B%0A%09this.%20innerHTML%20%3D%20this.%20innerHTML%20%7C%7C%20content.%20document.%20body.%20innerHTML%3B%0A%09this.%20searchPrompt%28%27%27%2Cfalse%29%3B%09%09%0A%09%7D%0A%09else%20if%20%28event.%20button%20%3D%3D%201%29%0A%09%7B%0A%09this.%20showPopup%20%28this%29%3B%09%0A%09%7D%0A%09else%0A%09%7B%0A%09%09content.%20document.%20body.%20innerHTML%20%3D%20this.%20innerHTML%20%7C%7C%20content.%20document.%20body.%20innerHTML%3B%0A%09%09this.%20innerHTML%20%3D%20%22%22%3B%0A%09%7D%0A%7D%3B%0Athis.showPopup%20%3D%20function%28node%29%0A%7B%0A%09var%20popup%20%3D%20document.getElementById%28%22custombuttons-contextpopup%22%29%3B%0A%09var%20x%20%3D%20node.boxObject.x%3B%0A%09var%20y%20%3D%20node.boxObject.y%20+%20node.boxObject.height%3B%0A%09document.popupNode%20%3D%20node%3B%0A%09popup.showPopup%28node%2C%20x%2C%20y%2C%20%22popup%22%2C%20null%2C%20null%29%3B%0A%7D%3B%0Athis.%20doHighlight%20%3D%20function%20%28bodyText%2C%20searchTerm%2C%20highlightStartTag%2C%20highlightEndTag%29%20%0A%7B%0A%09if%20%28%28%21highlightStartTag%29%20%7C%7C%20%28%21highlightEndTag%29%29%0A%09%7B%0A%09%09highlightStartTag%20%3D%20%22%3Cfont%20style%3D%27background-color%3A%22%20+%20this.%20highlightColor%20+%20%22%3B%27%3E%22%3B%0A%09%09highlightEndTag%20%3D%20%22%3C/font%3E%22%3B%0A%09%7D%0A%09var%20newText%20%3D%20%22%22%3B%0A%09var%20i%20%3D%20-1%3B%0A%09var%20lcSearchTerm%20%3D%20searchTerm.toLowerCase%28%29%3B%0A%09var%20lcBodyText%20%3D%20bodyText.toLowerCase%28%29%3B%0A%09while%20%28bodyText.length%20%3E%200%29%0A%09%7B%0A%09%09i%20%3D%20lcBodyText.indexOf%28lcSearchTerm%2C%20i+1%29%3B%0A%09%09if%20%28i%20%3C%200%29%0A%09%09%7B%0A%09%09%09newText%20+%3D%20bodyText%3B%0A%09%09%09bodyText%20%3D%20%22%22%3B%0A%09%09%7D%0A%09%09else%0A%09%09%7B%0A%09%09%09if%20%28bodyText.lastIndexOf%28%22%3E%22%2C%20i%29%20%3E%3D%20bodyText.lastIndexOf%28%22%3C%22%2C%20i%29%29%0A%09%09%09%7B%0A%09%09%09%09if%20%28lcBodyText.lastIndexOf%28%22/script%3E%22%2C%20i%29%20%3E%3D%20lcBodyText.lastIndexOf%28%22%3Cscript%22%2C%20i%29%29%0A%09%09%09%09%7B%0A%09%09%09%09%09newText%20+%3D%20bodyText.substring%280%2C%20i%29%20+%20highlightStartTag%20+%20bodyText.substr%28i%2C%20searchTerm.length%29%20+%20highlightEndTag%3B%0A%09%09%09%09%09bodyText%20%3D%20bodyText.substr%28i%20+%20searchTerm.length%29%3B%0A%09%09%09%09%09lcBodyText%20%3D%20bodyText.toLowerCase%28%29%3B%0A%09%09%09%09%09i%20%3D%20-1%3B%0A%09%09%09%09%7D%0A%09%09%09%7D%0A%09%09%7D%0A%09%7D%0A%09return%20newText%3B%0A%7D%0Athis.%20highlightSearchTerms%20%3D%20function%20%28searchText%2C%20treatAsPhrase%2C%20warnOnFailure%2C%20highlightStartTag%2C%20highlightEndTag%29%0A%7B%0A%09if%20%28treatAsPhrase%29%0A%09%7B%0A%09%09searchArray%20%3D%20%5BsearchText%5D%3B%0A%09%7D%0A%09else%0A%09%7B%0A%09%09searchArray%20%3D%20searchText.split%28%22%20%22%29%3B%0A%09%7D%0A%09if%20%28%21content.document.body%20%7C%7C%20typeof%28content.document.body.innerHTML%29%20%3D%3D%20%22undefined%22%29%0A%09%7B%0A%09%09if%20%28warnOnFailure%29%0A%09%09%7B%0A%09%09%09alert%28%22The%20text%20of%20this%20page%20is%20not%20available.%20Highlighting%20will%20not%20work.%22%29%3B%0A%09%09%7D%0A%09%09return%20false%3B%0A%09%7D%0A%09var%20bodyText%20%3D%20content.document.body.innerHTML%3B%0A%09for%20%28var%20i%20%3D%200%3B%20i%20%3C%20searchArray.length%3B%20i++%29%0A%09%7B%0A%09%09bodyText%20%3D%20this.%20doHighlight%28bodyText%2C%20searchArray%5Bi%5D%2C%20highlightStartTag%2C%20highlightEndTag%29%3B%0A%09%7D%0A%09content.document.body.innerHTML%20%3D%20bodyText%3B%0A%09return%20true%3B%0A%7D%0Athis.%20searchPrompt%20%3D%20function%20%28%29%0A%7B%0A%20%20%20%20var%20searchText%20%3D%20document.commandDispatcher.focusedWindow.getSelection%28%29.toString%28%29%20%7C%7C%20prompt%28%27Highlight%3A%27%2C%27%27%29%3B%0A%20%20%20%20searchText%20%26%26%20this.%20highlightSearchTerms%28searchText%2C%20true%29%3B%0A%7D%0A%0Athis.%20changeColor%20%3D%20function%20%28menuitem%2C%20event%29%0A%7B%0A%09var%20topmenuitem%20%3D%20document.%20getElementById%20%28document.%20popupNode.%20firstId%29%3B%0A%09topmenuitem.%20setAttribute%20%28%22label%22%2C%20%22*%20%22%20+%20menuitem.%20getAttribute%20%28%22label%22%29%29%3B%0A%09document.%20popupNode.%20highlightColor%20%3D%20menuitem.%20getAttribute%20%28%22value%22%29%3B%0A%7D%3B%0A%0Avar%20colors%20%3D%0A%7B%0A%09%22Yellow%22%3A%20%22yellow%22%2C%20%22Green%22%3A%20%22green%22%2C%20%22Blue%22%3A%20%22blue%22%2C%20%22Red%22%3A%20%22red%22%0A%7D%3B%0Avar%20mItem%20%3D%20%7B%7D%3B%0Adocument.%20getElementById%20%28CB2const.%20sCBCtxtMenu%29.%20setAttribute%20%28%22oncommand%22%2C%20%22event.stopPropagation%28%29%22%29%3B%0Avar%20mObj%20%3D%20custombuttons.%20getCbContextObj%20%28this%29%3B%0Athis.%20mObj%20%3D%20mObj%3B%0AmObj.%20setSub%20%28%29%3B%0Avar%20mItem%20%3D%20new%20mObj.%20getItem%20%28%29%3B%0AmItem.%20id%20%3D%20%22topmenuitem%22%3B%0AmItem.%20label%20%3D%20%22*%20Yellow%22%3B%0AmItem.%20value%20%3D%20%22yellow%22%3B%0AmItem%20%3D%20mObj.%20insertBefore%20%28mItem%2C%20mObj.%20oMenu.%20lastChild%29%3B%0Athis.%20firstId%20%3D%20mItem.%20id%3B%0AmItem%20%3D%20new%20mObj.%20getItem%20%28%29%3B%0AmItem%20%3D%20mObj.%20insertBefore%20%28mItem%2C%20mObj.%20oMenu.%20lastChild%29%3B%0Afor%20%28var%20i%20in%20colors%29%0A%7B%0A%09var%20mItem%20%3D%20new%20mObj.%20getItem%20%28%29%3B%0A%09mItem.%20id%20%3D%20i%3B%0A%09mItem.%20label%20%3D%20i%3B%0A%09mItem.%20value%20%3D%20colors%20%5Bi%5D%3B%0A%09mItem.%20oncommand%20%3D%20%22document.%20popupNode.%20changeColor%20%28this%2C%20event%29%3B%22%0A%09mItem%20%3D%20mObj.%20insertBefore%20%28mItem%2C%20mObj.%20oMenu.%20lastChild%29%3B%0A%7D%0AmItem%20%3D%20new%20mObj.%20getItem%20%28%29%3B%0AmObj.%20insertBefore%20%28mItem%2C%20mObj.%20oMenu.%20lastChild%29%3B%0A%0Athis.%20innerHTML%20%3D%20%22%22%3B%0Athis.%20highlightColor%20%3D%20%22yellow%22%3B%0Athis.%20setAttribute%20%28%27onclick%27%2C%20%27this.clickHandler%28event%29%27%29%3B%0Athis.setAttribute%28%22context%22%2C%20%22%22%29%3B%0A%0Athis.tooltipText%20%3D%20%22L%3DHighlight%5CnM%3DSelect%20color%20+%20CB%20menu%20%5CnR%3DRemove%20highlight%20%22%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

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

Выделить код

Код:

this. clickHandler = function (event)
{
    if ((event. button == 2) && event. ctrlKey)
        this. mObj. setPri ();
    else
        this. mObj. setSub ();
    if (event. ctrlKey)
    {
        this. showPopup (this);
        return;
    }
    if (event. button == 0)
    {
    this. innerHTML = this. innerHTML || content. document. body. innerHTML;
    this. searchPrompt('',false);        
    }
    else if (event. button == 1)
    {
    this. showPopup (this);    
    }
    else
    {
        content. document. body. innerHTML = this. innerHTML || content. document. body. innerHTML;
        this. innerHTML = "";
    }
};
this.showPopup = function(node)
{
    var popup = document.getElementById("custombuttons-contextpopup");
    var x = node.boxObject.x;
    var y = node.boxObject.y + node.boxObject.height;
    document.popupNode = node;
    popup.showPopup(node, x, y, "popup", null, null);
};
this. doHighlight = function (bodyText, searchTerm, highlightStartTag, highlightEndTag) 
{
    if ((!highlightStartTag) || (!highlightEndTag))
    {
        highlightStartTag = "<font style='background-color:" + this. highlightColor + ";'>";
        highlightEndTag = "</font>";
    }
    var newText = "";
    var i = -1;
    var lcSearchTerm = searchTerm.toLowerCase();
    var lcBodyText = bodyText.toLowerCase();
    while (bodyText.length > 0)
    {
        i = lcBodyText.indexOf(lcSearchTerm, i+1);
        if (i < 0)
        {
            newText += bodyText;
            bodyText = "";
        }
        else
        {
            if (bodyText.lastIndexOf(">", i) >= bodyText.lastIndexOf("<", i))
            {
                if (lcBodyText.lastIndexOf("/script>", i) >= lcBodyText.lastIndexOf("<script", i))
                {
                    newText += bodyText.substring(0, i) + highlightStartTag + bodyText.substr(i, searchTerm.length) + highlightEndTag;
                    bodyText = bodyText.substr(i + searchTerm.length);
                    lcBodyText = bodyText.toLowerCase();
                    i = -1;
                }
            }
        }
    }
    return newText;
}
this. highlightSearchTerms = function (searchText, treatAsPhrase, warnOnFailure, highlightStartTag, highlightEndTag)
{
    if (treatAsPhrase)
    {
        searchArray = [searchText];
    }
    else
    {
        searchArray = searchText.split(" ");
    }
    if (!content.document.body || typeof(content.document.body.innerHTML) == "undefined")
    {
        if (warnOnFailure)
        {
            alert("The text of this page is not available. Highlighting will not work.");
        }
        return false;
    }
    var bodyText = content.document.body.innerHTML;
    for (var i = 0; i < searchArray.length; i++)
    {
        bodyText = this. doHighlight(bodyText, searchArray[i], highlightStartTag, highlightEndTag);
    }
    content.document.body.innerHTML = bodyText;
    return true;
}
this. searchPrompt = function ()
{
    var searchText = document.commandDispatcher.focusedWindow.getSelection().toString() || prompt('Highlight:','');
    searchText && this. highlightSearchTerms(searchText, true);
}

this. changeColor = function (menuitem, event)
{
    var topmenuitem = document. getElementById (document. popupNode. firstId);
    topmenuitem. setAttribute ("label", "* " + menuitem. getAttribute ("label"));
    document. popupNode. highlightColor = menuitem. getAttribute ("value");
};

var colors =
{
    "Yellow": "yellow", "Green": "green", "Blue": "blue", "Red": "red"
};
var mItem = {};
document. getElementById (CB2const. sCBCtxtMenu). setAttribute ("oncommand", "event.stopPropagation()");
var mObj = custombuttons. getCbContextObj (this);
this. mObj = mObj;
mObj. setSub ();
var mItem = new mObj. getItem ();
mItem. id = "topmenuitem";
mItem. label = "* Yellow";
mItem. value = "yellow";
mItem = mObj. insertBefore (mItem, mObj. oMenu. lastChild);
this. firstId = mItem. id;
mItem = new mObj. getItem ();
mItem = mObj. insertBefore (mItem, mObj. oMenu. lastChild);
for (var i in colors)
{
    var mItem = new mObj. getItem ();
    mItem. id = i;
    mItem. label = i;
    mItem. value = colors [i];
    mItem. oncommand = "document. popupNode. changeColor (this, event);"
    mItem = mObj. insertBefore (mItem, mObj. oMenu. lastChild);
}
mItem = new mObj. getItem ();
mObj. insertBefore (mItem, mObj. oMenu. lastChild);

this. innerHTML = "";
this. highlightColor = "yellow";
this. setAttribute ('onclick', 'this.clickHandler(event)');
this.setAttribute("context", "");

this.tooltipText = "L=Highlight\nM=Select color + CB menu \nR=Remove highlight ";

Compact Menu( Firefox 4 + ) от 06.04.2016.
Удаляет панель меню и стандартную кнопку меню, показывает главное меню в виде выпадающего списка. Ненужные пункты меню можно удалить. Пример: если хотите удалить пункт Правка нужно удалить в из вкладки Код "edit-menu",

ЛКМ => показать меню.

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

Выделить код

Код:

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%3ECompact%20Menu%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBEAAAEAIACsBAAAFgAAACgAAAAQAAAAIgAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAMSAAcROg8hOGEvQV1hL0JdOQ4iOBIABxH7+/uBqKioqv7+/oAAAAAAAAAAAAAAAAAAAAAAAAAAAREABhB6PEx23HZ32+uLe/7rfGv/63tr/+uKev7vv7/tp52g10BAQP6vr6+z////fwAAAAAAAAAAAAAAAR0CEB3AaHK/629j/+FbVP/bUU7/10xK/9ZLSv/sp6X/26mm/0BAQP9AQED/QEBA/9jY2KH///9/AAAAAA8ABQ+6X22+1UpK/8Y2P/+8KDX/tB0v/6sZKf+uGCz/1pae/0BAQP9AQED/QEBA/0BAQP9AQED+8fHxkQAAAAJ0M0hzxz1G/7AYLv+lDCX/ng0b/5APD/+FFgL/1Zid/3BfYf9AQED/QEBA/0BAQP9AQED/QEBA/25ubtgPAAUPt0dc2KULJf+pFCb/tygu/7w1L/+FGAH/nSsW/8OSjf+gf3//qIKB/9aTlf/Vi5P/0YSR/9yosuzw7/CHMAobMLw2Sf60Iyz/xD41/9NSPv/cYUT/0188/+VwSf/IWzj/WhID/0kFAP9zGhT/yEM4/7grL/+9Okn+Nw0fNFYoOVLAOT3/zEg6/9xhRP/qdUv/64RR/+uNVf/rk1f/65NX/9t1Q/9mGQD/YhcE/9NeP//RTz3/xEA//1wsPVlWKDhR01dI/+BnRv/rf0//65JX/+ugXP/rqV7/661g/+utYf/McDH/gS4C/4UyD//CXjX/5G5I/9hdSf9dLD5YMAoaMOp+Zf7rgE//65dZ/+upX//rtGP/671n/+vBaP/rslz/rk4K/51CBf/rjUf/64RI/+uBTf/rhGf+NQweNA4ABg7Tdm3X65NY/+uqX//rumX/68Rq/+vMbf/r0G//68pn/+u+X//cgTD/67hi/+uuYf/rmlr/2Hxv2REABhAAAAACdTlIceudYP/rrV7/66xW/+vMbf/r03D/69Zw/+vVcP/r1HD/68tr/9x+Pv/rkUz/66xo/3Y7SXMAAAACAAAAAA8ABQ+2Z2O70WIX/+uEIf/rvVb/68JY/+vPbf/rsUn/68FX/+uVRf+dNBL/zGw0/8h7dL0PAAUPAAAAAAAAAAAAAAABHAEPHL5qWrzrr0r/69CA/+vQgf/r3qv/696r/+vNgP/rrnb/rEgo/6VXW70dAg8cAAAAAQAAAAAAAAAAAAAAAAAAAAEPAAUPdztFceiUcNjrz47+69yw/+vUmf/ryIT+03pe2XIzRHMPAAUPAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIPAAUPMgscMlcpOlNYKTlUMwscMg8ABQ8AAAACAAAAAAAAAAAAAAAAAAAAAP//rEHwA6xBwAGsQYAArEGAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEGAAaxBgAGsQcADrEHwD6xB%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bif%20%28gBrowser.currentURI.spec%20%3D%3D%20%22about%3Acustomizing%22%29%20return%3B%0A%0Avar%20mmb%20%3D%20document.getElementById%28%22main-menubar%22%29%3B%0Ammb.collapsed%20%3D%20true%3B%0AaddDestructor%28%28%29%20%3D%3E%20mmb.collapsed%20%3D%20false%29%3B%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5Bif%20%28event.target%20%26%26%20event.target%20%21%3D%20this%29%20return%3B%0Aif%20%28%21event.target%20%26%26%20this.lastChild%20%26%26%20this.lastChild.state%20%3D%3D%20%22open%22%29%20%7B%0A%09this.lastChild.hidePopup%28%29%3B%20return%3B%0A%7D%0Avar%20ids%20%3D%20%5B%0A%09%22file-menu%22%2C%0A%09%22edit-menu%22%2C%0A%09%22view-menu%22%2C%0A%09%22bookmarksMenu%22%2C%0A%09%22history-menu%22%2C%0A%09%22tools-menu%22%2C%0A%09%22helpMenu%22%0A%5D%3B%0Avar%20menus%20%3D%20ids.map%28id%20%3D%3E%20document.getElementById%28id%29%29.filter%28id%3D%3E%20%7Breturn%20%28id%20%21%3D%3D%20null%29%7D%29%3B%0Avar%20menubar%20%3D%20menus%5B0%5D.parentNode%3B%0Avar%20order%20%3D%20Array.slice%28menubar.childNodes%29%3B%0A%0Afunction%20appendMenus%28parent%29%20%7B%0A%09var%20nodes%20%3D%20parent%20%3D%3D%20menubar%20%3F%20order%20%3A%20menus%3B%0A%09for%28var%20node%20of%20nodes%29%20parent.appendChild%28node%29%3B%0A%09if%20%28ids.indexOf%28%22bookmarksMenu%22%29%20%3D%3D%20-1%29%20return%3B%0A%09for%28var%20menu%20of%20parent.getElementsByTagName%28%22menu%22%29%29%20%7B%0A%09%09if%20%28%21menu._placesView%29%20continue%3B%0A%09%09menu._placesView.uninit%28%29%3B%0A%09%09delete%20menu._placesView%3B%0A%09%7D%0A%7D%0Athis.textContent%20%3D%20%22%22%3B%0Avar%20popup%20%3D%20this.appendChild%28document.createElement%28%22menupopup%22%29%29%3B%0Apopup.position%20%3D%20%22after_start%22%3B%0Apopup.id%20%3D%20%22cb-compact-menu-menupopup%22%3B%0Apopup.setAttribute%28%22context%22%2C%20%22toolbar-context-menu%22%29%3B%0Apopup.__defineGetter__%28%22parentNode%22%2C%20%28%29%20%3D%3E%20null%29%3B%0A%0Apopup.addEventListener%28%22popuphidden%22%2C%20function%20onPH%28e%29%20%7B%0A%09if%20%28e.originalTarget%20%21%3D%20this%29%20return%3B%0A%09popup.removeEventListener%28%22popuphidden%22%2C%20onPH%2C%20false%29%3B%0A%09appendMenus%28menubar%29%3B%0A%7D%2C%20false%29%3B%0A%0AappendMenus%28popup%29%3B%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%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E


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


Тут версия для seamonkey-nightly

Stf( Firefox, SeaMonkey )
Сохраняет выделенный текст или весь текст на странице как txt файл. При сохранение текста к названию файла добавляется текущее время так удобней сохранять несколько кусков теста из одной страницы, не надо вручную менять название файла.

ЛКМ => Сохранить выделенный текст или весь текст на странице как txt файл.


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

Выделить код

Код:

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%3EStf%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEhIAAAEAIACABQAAFgAAACgAAAASAAAAJAAAAAEAIAAAAAAAWAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAWgAAAFoAAABaAAAAWgAAAFoAAABaAAAAWgAAAFoAAABaAAAAWgAAAFoAAABaAAAAWgAAAFsAAABYAAAAFwAAAACISi/ml2RK9ZdjSfWUYEX1jlpA9ZdjSfWXY0r1l2NL9ZdjS/WXY0v1l2NL9ZdjS/WXY0v1lWFI9J5mSvljMR7lAAAAPgIBAQDBhmP/6cOL/+Kxcf/Fo3L/kHdV/7GNXf/esHL/3q5t/9ysbP/drWz/3a1t/92tbf/erm7/3bBz/vLKlP+FUTrtAAAAPwMCAgC4f1791qtt/tOkZv7e1Mn+jIiE/lZMPv6djHX+4860/uvWu/7p1Ln+6tS4/uvVuv7nz7L+yphV/eK1fv9/TTjsAAAAPwMCAgC5gF//3LR6/9ixff//////29nU/5CRlP9SU1X/paGd//Xr4P//8OP/+uzc//zs2v/57uH/0aRm/ue+iv+ATTftAAAAPwMCAgC5gF//4LiC/9myfv///v3/8eXW/9LPy/+Li4z/RkI7/5OIef/l077/9N/I//Texv/36dn/06Zs/urBkP9/TDbtAAAAPwMCAgC5gGD/5sab/9u1hP////7/+vPp//Pp3f/Iwbr/foCE/0VERP+Lg3r/4NG///rm0P/369v/1Klx/uvFlv9/TDXtAAAAPwMCAgC7gmP/7dS1/926jf/+/Pv/9uzg//jt4P/06dv/u7m3/5l2QP90ShH/fXVv/+DPvP/57d3/1ax0/u7JnP9/SzTtAAAAPwMCAgC8hWj/8Nu//967j////////////////v//////9vTz/9+8gP/GgRL/ckwc/4eBff/n3tH/2bB5/u/Opf9/TDbtAAAAPwMCAgC9hmr/9OPM/9qzgv/p07T/6tO2/+rTtf/p0rT/7de7/97GqP/SoVH/x4IT/2xMJP+Admr/zKRw/vXUrf9/TTjtAAAAPwMCAgC+iW7/9ufT/+rRtP/lyKX/5Mim/+THpv/kx6T/4sWh/+rLp/+9pIf/vZJP/8WCGf9iPhH/fW9c/unNrP+CTzrtAAAAPwMCAgC/inD/+OrX//Ddyv/559X//OrV//ro0//659L/+ufS//zo0v/m1cL/lod4/7iPT//Ihx//Y0ck/pSLg/95STPtAAAAPwICAgC/i3L/+Ova//fk0P/Ct6v/o52W/6uknP+qo5v/q6Sc/6qjm/+1raT/rqij/2ZhX/+wj1n/w4EZ/m1QLv89JB/zAAAASgEBAQDAjnb9+O3e//rn1P+jnpn/lZib/6eoqf+rrK7/srK0/7y9vv+0trj/oaGi/6Cho/9eXF7/w59n/8qFF/9KKgP9AAAAhQIBAAW+h2z/+PLk/P/15fusqKP+oaKi/7Kysf+3trb/vby8/8nJyf+3t7f/cnFx/6Wlpf+fmpL+dXVx+66UYfyuhUP/Ligj1QAAAFqBPSKJ2KWK//PNt/+klo78oKKk+7Cvr/u1tLX7vLu7+8jIyPu3t7b7dHNz+52ho/vHrJz+y6WP/51vX/61jVvuxo0s/z0nCsERBgMDKw8ERh4AAEFjWFS9sLKz/62srfyzs7T/urm5/8HCwv/AwMD/sbGx/cDDw/9GNC7SKgsAaSgNAkMwKSQtq4VIsks0EmcBAQACAQEBAgAAAAAjIyNKOjo6fjU1NXM2NjZ1NjY2dTY2NnU3Nzd1Ozs7czw8PH0UFBQ4AAAAAAEBAQEAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%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.onclick%20%3D%20function%28e%29%20%7B%0A%20%20%20%20%20if%20%28%20e.button%20%3D%3D%200%20%29%20saveSelectionToTxt%28%29%3B%20//%20%u041B%u041A%u041C%0A%7D%3B%0A%0A%0A//%20%u0421%u043E%u0445%u0440%u0430%u043D%u0438%u0442%u044C%20%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u043D%u044B%u0439%20%u0442%u0435%u043A%u0441%u0442%20%u0438%u043B%u0438%20%u0432%u0435%u0441%u044C%20%u0442%u0435%u043A%u0441%u0442%20%u043D%u0430%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u0435%20%u043A%u0430%u043A%20txt%20%u0444%u0430%u0439%u043B%20.....................%0Afunction%20saveSelectionToTxt%28%29%20%7B%0A%20%20%20%20%20%0A%20%20%20%20%20//%20%u0432%u044B%u0434%u0435%u043B%u0438%u0442%u044C%20%u0432%u0441%u0451%20%u0435%u0441%u043B%u0438%20%u0442%u0435%u043A%u0441%u0442%20%u043D%u0435%20%u0432%u044B%u0434%u0435%u043B%u0435%u043D%20....%0A%20%20%20%20%20var%20all%20%3D%20%21getSelect%28%29%3B%0A%20%20%20%20%20if%20%28%20all%20%29%20document.getElementById%28%22cmd_selectAll%22%29.doCommand%28%29%3B%20%0A%0A%20%20%20%20%20var%20sel%20%3D%20getSelect%28%29%3B%0A%20%20%20%20%20var%20docTite%20%3D%20getDocTitle%28%29%3B%0A%0A%20%20%20%20%20if%20%28%20%21sel%20%7C%7C%20%21docTite%29%20return%3B%0A%20%20%20%20%20%20%0A%20%20%20%20%20//%20%u0441%u043E%u0437%u0434%u0430%u0442%u044C%20%u043D%u0430%u0437%u0432%u0430%u043D%u0438%u0435%20%u0434%u043B%u044F%20%u0444%u0430%u0439%u043B%u0430%20...%0A%20%20%20%20%20var%20time%20%3D%20new%20Date%28%29.toLocaleFormat%28%22%25H%3A%25M%3A%25S%22%29%3B%0A%20%20%20%20%20var%20fileTitle%20%3D%20docTite%20+%20%27%20%20%27%20+%20time.replace%28/%3A/g%2C%20%22%u05C3%22%29%3B%0A%0A%20%20%20%20%20//%20%u0441%u043E%u0445%u0440%u0430%u043D%u0438%u0442%u044C%20....%0A%20%20%20%20%20saveURL%28%22data%3Atext/plain%2C%22%20+%20encodeURIComponent%28%20content.location.href%20+%20%28%22%5Cr%5Cn%5Cr%5Cn%22%20+%20getSelect%28%29%20%29%29%2C%20fileTitle%20+%20%22.txt%22%2C%20null%2C%20false%2C%20false%2C%20null%2C%20content.document%29%3B%0A%20%20%20%20%20if%20%28%20all%20%29%20goDoCommand%28%22cmd_selectNone%22%29%3B%20%0A%7D%3B%0A%0A%0A%0A/*%20%u041F%u043E%u043B%u0443%u0447%u0438%u0442%u044C%20%u0437%u0430%u0433%u043E%u043B%u043E%u0432%u043A%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u044B%20%u0438%u043B%u0438%20%u043D%u0430%u0437%u0432%u0430%u043D%u0438%u0435%20%u0434%u043E%u043C%u0435%u043D%u0430%20%u0435%u0441%u043B%u0438%20%u0437%u0430%u0433%u043E%u043B%u043E%u0432%u043A%u0430%20%u0443%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u044B%20%u043D%u0435%u0442%0A%20%20%20%u0438%u043B%u0438%20%u043D%u0430%u0437%u0432%u0430%u043D%u0438%u0435%20%u0432%u043A%u043B%u0430%u0434%u043A%u0438%20%u0435%u0441%u043B%u0438%20%u0434%u043E%u043C%u0435%u043D%u0430%20%u043D%u0435%u0442%20...................................................%20*/%0Afunction%20getDocTitle%28%29%20%7B%0A%20%20%20%20%20var%20protocol%20%3D%20content.location.protocol%3B%0A%20%20%20%20%20if%20%28%20%5B%22about%3A%22%2C%20%22chrome%3A%22%2C%20%22jar%3A%22%2C%20%22data%3A%22%5D.indexOf%28%20protocol%20%29%20%21%3D%20-1%20%29%20return%20false%3B%20%20%0A%20%20%20%20%20%20%20%20%20%20var%20docTitle%20%3D%20content.document.title%20%7C%7C%20content.document.domain%20%7C%7C%20gBrowser.mCurrentTab.label%3B%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20//%20%u0437%u0430%u043C%u0435%u043D%u0438%u0442%u044C%20%u043D%u0435%u0434%u043E%u043F%u0443%u0441%u0442%u0438%u043C%u044B%u0435%20%u0441%u0438%u043C%u0432%u043E%u043B%u044B%20%u0438%20%u0443%u0434%u0430%u043B%u0438%u0442%u044C%20%u043B%u0438%u0448%u043D%u0438%u0435%20%u043F%u0440%u043E%u0431%u0435%u043B%u044B%20%0A%20%20%20%20%20%20%20%20%20%20var%20docTitle%20%3D%20docTitle.replace%28/%5B%3A.%5C%5C%5C/%3C%3E%3F*%7C%22%5D+/g%2C%20%22%20%22%29%0A%20%20%20%20%20%20%20%20%20%20var%20docTitle%20%3D%20docTitle.replace%28/%5Cs%5Cs+/g%2C%20%22%20%22%29%3B%20%0A%0A%20%20%20%20%20%20%20%20%20%20return%20docTitle.substring%280%2C%2050%29%3B%0A%7D%3B%0A%0A%0A%0A/*%20%u041F%u043E%u043B%u0443%u0447%u0438%u0442%u044C%20%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u043D%u044B%u0439%20%u0442%u0435%u043A%u0441%u0442%20%u0438%u0437%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u044B%20%u0438%u043B%u0438%20%u0442%u0435%u043A%u0441%u0442%u043E%u0432%u043E%u0433%u043E%20%u043F%u043E%u043B%u044F%2C%0A%20%20%20%u0435%u0441%u043B%u0438%20%u0442%u0435%u043A%u0441%u0442%20%u043D%u0435%20%u0432%u044B%u0434%u0435%u043B%u0435%u043D%20%20%u0444%u0443%u043D%u043A%u0446%u0438%u044F%20%u043E%u0442%u0434%u0430%u0441%u0442%20%27false%27%20..........................................*/%0Afunction%20getSelect%28%29%20%7B%0A%20%20%20%20//%20%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u043D%u044B%u0439%20%u0442%u0435%u043A%u0441%u0442%20%u0438%u0437%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u044B%20....%0A%20%20%20%20var%20selection%20%3D%20document.commandDispatcher.focusedWindow.getSelection%28%29%3B%0A%20%20%20%20var%20anchor%20%3D%20%28selection.anchorNode%20%21%3D%3D%20null%29%3F%20selection.anchorNode%3A%20false%3B%0A%0A%20%20%20%20//%20%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u043D%u044B%u0439%20%u0442%u0435%u043A%u0441%u0442%20%u0438%u0437%20%27PRE%27%20....%0A%20%20%20%20if%20%28%20anchor%20%26%26%20anchor.parentNode.tagName%20%3D%3D%20%27PRE%27%20%29%20%7B%20%0A%20%20%20%20%20%20%20%20%20var%20node%20%3D%20selection.focusNode%3B%0A%20%20%20%20%20%20%20%20%20var%20startPos%20%3D%20selection.anchorOffset%3B%0A%20%20%20%20%20%20%20%20%20var%20endPos%20%3D%20selection.focusOffset%3B%0A%20%20%20%20%20%20%20%20%20var%20selection%20%3D%20node.data.substring%28startPos%2C%20endPos%29%3B%20%0A%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20//%20%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u043D%u044B%u0439%20%u0442%u0435%u043A%u0441%u0442%20%u0438%u0437%20%u0442%u0435%u043A%u0441%u0442%u043E%u0432%u043E%u0433%u043E%20%u043F%u043E%u043B%u044F%20....%0A%20%20%20%20if%20%28%20selection.toString%28%29.length%20%3D%3D%200%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20var%20theBox%20%3D%20document.commandDispatcher.focusedElement%3B%0A%20%20%20%20%20%20%20%20%20if%20%28%20theBox%20%26%26%20%28theBox.type%20%3D%3D%20%22text%22%20%7C%7C%20theBox.type%20%3D%3D%20%22textarea%22%29%20%29%20%7B%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20startPos%20%3D%20theBox.selectionStart%3B%0A%09%20%20%20%20%20%20var%20endPos%20%3D%20theBox.selectionEnd%3B%0A%09%20%20%20%20%20%20var%20selection%20%3D%20theBox.value.substring%28startPos%2C%20endPos%29%3B%20%20%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%7D%0A%20%20%20%20//%20%u0438%u0441%u043F%u0440%u0430%u0432%u043B%u044F%u0435%u043C%20%u043F%u0440%u043E%u0431%u043B%u0435%u043C%u0443%20%u0441%20%u043F%u0435%u0440%u0435%u043D%u043E%u0441%u043E%u043C%20%u0442%u0435%u043A%u0441%u0442%u0430%20%u043D%u043E%u0432%u0443%u044E%20%u0441%u0442%u0440%u043E%u043A%u0443%20%u0432%20%u0441%u0442%u0430%u043D%u0434%u0430%u0440%u0442%u043D%u043E%u043C%20win%20%u0431%u043B%u043E%u043A%u043D%u043E%u0442%u0435%20....%0A%20%20%20%20if%20%28%20selection.toString%28%29.length%20%21%3D%3D%200%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20var%20selection%20%3D%20selection.toString%28%29%3B%0A%20%20%20%20%20%20%20%20%20var%20selection%20%3D%20selection.replace%28/%5Cu000A/g%2C%20%22%5Cu000D%5Cu000A%22%29%3B%0A%20%20%20%20%20%20%20%20%20var%20selection%20%3D%20selection.replace%28/%5Cu000D%5Cu000D%5Cu000A/g%2C%20%22%5Cu000D%5Cu000A%22%29%3B%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20return%20%28%20selection%20%3D%3D%20%27%27%29%3F%20false%3A%20selection%3B%0A%7D%3B%0A%0A%0A%0A//%20%u041F%u043E%u043B%u0443%u0447%u0438%u0442%u044C%20%u0442%u0435%u043A%u0443%u0449%u0435%u0435%20%u0432%u0440%u0435%u043C%u044F%20.................................................................%0Afunction%20getTime%28%29%20%7B%0A%20%20%20var%20now%20%3D%20new%20Date%28%29%3B%0A%20%20%20return%20now.toLocaleFormat%28%22%25H%3A%25M%3A%25S%22%29%3B%0A%7D%3B%0A%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A//%20%u041F%u043E%u0434%u0441%u043A%u0430%u0437%u043A%u0430%20%u043A%u043D%u043E%u043F%u043A%u0438%20............................................................................%0Athis.tooltipText%20%3D%20%22Stf%20%5Cn%u041B%3A%20%u0421%u043E%u0445%u0440%u0430%u043D%u0438%u0442%u044C%20%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u043D%u044B%u0439%20%u0442%u0435%u043A%u0441%u0442%20%u0438%u043B%u0438%20%u0432%u0435%u0441%u044C%20%u0442%u0435%u043A%u0441%u0442%20%u043D%u0430%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u0435%20%u043A%u0430%u043A%20txt%20%u0444%u0430%u0439%u043B%22%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

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

Выделить код

Код:

// Настройка функций кликов мыши для кнопки ...............................................
this.onclick = function(e) {
     if ( e.button == 0 ) saveSelectionToTxt(); // ЛКМ
};


// Сохранить выделенный текст или весь текст на странице как txt файл .....................
function saveSelectionToTxt() {
     
     // выделить всё если текст не выделен ....
     var all = !getSelect();
     if ( all ) document.getElementById("cmd_selectAll").doCommand(); 

     var sel = getSelect();
     var docTite = getDocTitle();

     if ( !sel || !docTite) return;
      
     // создать название для файла ...
     var time = new Date().toLocaleFormat("%H:%M:%S");
     var fileTitle = docTite + '  ' + time.replace(/:/g, "׃");

     // сохранить ....
     saveURL("data:text/plain," + encodeURIComponent( content.location.href + ("\r\n\r\n" + getSelect() )), fileTitle + ".txt", null, false, false, null, content.document);
     if ( all ) goDoCommand("cmd_selectNone"); 
};



/* Получить заголовк страницы или название домена если заголовка у страницы нет
   или название вкладки если домена нет ................................................... */
function getDocTitle() {
     var protocol = content.location.protocol;
     if ( ["about:", "chrome:", "jar:", "data:"].indexOf( protocol ) != -1 ) return false;  
          var docTitle = content.document.title || content.document.domain || gBrowser.mCurrentTab.label;       
          // заменить недопустимые символы и удалить лишние пробелы 
          var docTitle = docTitle.replace(/[:.\\\/<>?*|"]+/g, " ")
          var docTitle = docTitle.replace(/\s\s+/g, " "); 

          return docTitle.substring(0, 50);
};



/* Получить выделенный текст из страницы или текстового поля,
   если текст не выделен  функция отдаст 'false' ..........................................*/
function getSelect() {
    // выделенный текст из страницы ....
    var selection = document.commandDispatcher.focusedWindow.getSelection();
    var anchor = (selection.anchorNode !== null)? selection.anchorNode: false;

    // выделенный текст из 'PRE' ....
    if ( anchor && anchor.parentNode.tagName == 'PRE' ) { 
         var node = selection.focusNode;
         var startPos = selection.anchorOffset;
         var endPos = selection.focusOffset;
         var selection = node.data.substring(startPos, endPos); 
         }
    // выделенный текст из текстового поля ....
    if ( selection.toString().length == 0 ) {
         var theBox = document.commandDispatcher.focusedElement;
         if ( theBox && (theBox.type == "text" || theBox.type == "textarea") ) { 
              var startPos = theBox.selectionStart;
          var endPos = theBox.selectionEnd;
          var selection = theBox.value.substring(startPos, endPos);  
              }
         }
    // исправляем проблему с переносом текста новую строку в стандартном win блокноте ....
    if ( selection.toString().length !== 0 ) {
         var selection = selection.toString();
         var selection = selection.replace(/\u000A/g, "\u000D\u000A");
         var selection = selection.replace(/\u000D\u000D\u000A/g, "\u000D\u000A");     
         }
    return ( selection == '')? false: selection;
};



// Получить текущее время .................................................................
function getTime() {
   var now = new Date();
   return now.toLocaleFormat("%H:%M:%S");
};


                    
// Подсказка кнопки ............................................................................
this.tooltipText = "Stf \nЛ: Сохранить выделенный текст или весь текст на странице как txt файл";


Спасибо Dumby и Infocatcher за помощь в исправление ошибок в кнопке.

Управление отсылкой Referer'ов(Firefox)
Управляет отсылкой заголовка Referer
ЛКМ переключает значения у параметра network.http.sendRefererHeader:
- Никогда не посылать Referer
- Посылать Referer при клике на ссылке
- Посылать Referer при клике на ссылке или загрузке изображений
!!! Отключение посылки Referer может вызвать проблемы в работе некоторых сайтов.
Для посайтовой настройки лучше использовать расширение RefControl (иконки взяты как раз из него)

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

Выделить код

Код:

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%3EToggle%20Referer%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAANkDQtZPoQAAACBjSFJNAAB6JQAAgIMAAPQkAACEzwAAbV8AAOhqAAA8iwAAG1ep7YEWAAAAfklEQVR4nGL4z0AZBAgg4hQxgAk4RpYDCCCiDYABdEMAAohsA2CGAAQQyQYgGwSSAwgggn4kZABAAOH1I4qhOAwACCCCfiTkAoAAIqiAkDxAAFFsAEAAEW0ANgySAwggogzABwECiGIDAAKIYgMAAoigHwlBgAAiQgl+CBBgACTrMes8De/4AAAAAElFTkSuQmCC%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bthis.pref%3D%27network.http.sendRefererHeader%27%3B%0Athis.setState%3Dfunction%28%29%7B%0A%09switch%28this.PS.getIntPref%28this.pref%29%29%0A%09%7B%0A%09case%200%3A%20%0A%09%09this.image%3D%20%27data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAANkDQtZPoQAAACBjSFJNAAB6JQAAgIMAAPQkAACEzwAAbV8AAOhqAAA8iwAAG1ep7YEWAAAAwUlEQVR4nGL4z0AZBAggOAXBOBQxgAk4RlYPEEBoBmA3BKwJBtDUAgQQimNwGQI3AEkNA1QdQABh+AibIajOZoCaBVEDEEBgBQ0NDf9hGLshqJqRDQAIILgBMIBpCKZmZAMAAgirAVgNQQMwAwACCMMA7KGN2wCAAMJuAAleAAggTAMIBCJqgvrPABBAqAYgKYSEA+EoBggghAFoTsU0ALshAAGEM56xG4BpCEAAoQgiJyjcBqBmPoAAwqmEWAgQYADCy0D6wdEYNwAAAABJRU5ErkJggg%3D%3D%27%3B%0A%09%09this.tooltipText%3D%20%27%u041D%u0438%u043A%u043E%u0433%u0434%u0430%20%u043D%u0435%20%u043F%u043E%u0441%u044B%u043B%u0430%u0442%u044C%20Referer%27%3B%0A%09%09break%3B%0A%09case%201%3A%0A%09%09this.image%3D%20%27data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAANkDQtZPoQAAACBjSFJNAAB6JQAAgIMAAPQkAACEzwAAbV8AAOhqAAA8iwAAG1ep7YEWAAAAj0lEQVR4nGL4z0AZBAgg4hQxgAk4RpYDCCCiDYABdEMAAohsA2CGAAQQyQYgGwSSAwggsIKGhob/yJgUAwACCG4ADCAbguJcHAYABBBOA5Bdgs8AgADCMADZIGIMAAggig0ACCCiDcCGQXIAAUSUAfggQABRbABAAFFsAEAAYU1IuBIUNggQQEQowQ8BAgwAGfZda0OWZtsAAAAASUVORK5CYII%3D%27%3B%0A%09%09this.tooltipText%3D%20%27%u041F%u043E%u0441%u044B%u043B%u0430%u0442%u044C%20Referer%20%u043F%u0440%u0438%20%u043A%u043B%u0438%u043A%u0435%20%u043D%u0430%20%u0441%u0441%u044B%u043B%u043A%u0435%27%3B%0A%09%09break%3B%0A%09case%202%3A%0A%09%09this.image%3D%20%27data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAANkDQtZPoQAAACBjSFJNAAB6JQAAgIMAAPQkAACEzwAAbV8AAOhqAAA8iwAAG1ep7YEWAAAAfklEQVR4nGL4z0AZBAgg4hQxgAk4RpYDCCCiDYABdEMAAohsA2CGAAQQyQYgGwSSAwgggn4kZABAAOH1I4qhOAwACCCCfiTkAoAAIqiAkDxAAFFsAEAAEW0ANgySAwggogzABwECiGIDAAKIYgMAAoigHwlBgAAiQgl+CBBgACTrMes8De/4AAAAAElFTkSuQmCC%27%3B%0A%09%09this.tooltipText%3D%20%27%u041F%u043E%u0441%u044B%u043B%u0430%u0442%u044C%20Referer%20%u043F%u0440%u0438%20%u043A%u043B%u0438%u043A%u0435%20%u043D%u0430%20%u0441%u0441%u044B%u043B%u043A%u0435%20%u0438%u043B%u0438%20%u0437%u0430%u0433%u0440%u0443%u0437%u043A%u0435%20%u0438%u0437%u043E%u0431%u0440%u0430%u0436%u0435%u043D%u0438%u0439%27%3B%0A%09%20%09break%3B%0A%09%7D%0A%7D%0A%0Athis.PS%3D%0A%20Components.classes%5B%27@mozilla.org/preferences-service%3B1%27%5D%0A%20.getService%28Components.interfaces.nsIPrefBranch%29%3B%0Athis.ob%3D%7B%7D%3B%0Athis.ob.observe%3Dthis.setState.bind%28this%29%3B%0Athis.PS.addObserver%28this.pref%2Cthis.ob%2Cfalse%29%3B%0Athis.setState%28%29%3B%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5Bswitch%28this.PS.getIntPref%28this.pref%29%29%7B%0A%09case%200%3A%20this.PS.setIntPref%28this.pref%2C2%29%3Bbreak%3B%0A%09case%201%3A%20this.PS.setIntPref%28this.pref%2C0%29%3Bbreak%3B%0A%09case%202%3A%20this.PS.setIntPref%28this.pref%2C1%29%3Bbreak%3B%0A%7D%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

Код:

Выделить код

Код:

switch(this.PS.getIntPref(this.pref)){
    case 0: this.PS.setIntPref(this.pref,2);break;
    case 1: this.PS.setIntPref(this.pref,0);break;
    case 2: this.PS.setIntPref(this.pref,1);break;
}

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

Выделить код

Код:

this.pref='network.http.sendRefererHeader';
this.setState=function(){
    switch(this.PS.getIntPref(this.pref))
    {
    case 0: 
        this.image= 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAANkDQtZPoQAAACBjSFJNAAB6JQAAgIMAAPQkAACEzwAAbV8AAOhqAAA8iwAAG1ep7YEWAAAAwUlEQVR4nGL4z0AZBAggOAXBOBQxgAk4RlYPEEBoBmA3BKwJBtDUAgQQimNwGQI3AEkNA1QdQABh+AibIajOZoCaBVEDEEBgBQ0NDf9hGLshqJqRDQAIILgBMIBpCKZmZAMAAgirAVgNQQMwAwACCMMA7KGN2wCAAMJuAAleAAggTAMIBCJqgvrPABBAqAYgKYSEA+EoBggghAFoTsU0ALshAAGEM56xG4BpCEAAoQgiJyjcBqBmPoAAwqmEWAgQYADCy0D6wdEYNwAAAABJRU5ErkJggg==';
        this.tooltipText= 'Никогда не посылать Referer';
        break;
    case 1:
        this.image= 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAANkDQtZPoQAAACBjSFJNAAB6JQAAgIMAAPQkAACEzwAAbV8AAOhqAAA8iwAAG1ep7YEWAAAAj0lEQVR4nGL4z0AZBAgg4hQxgAk4RpYDCCCiDYABdEMAAohsA2CGAAQQyQYgGwSSAwggsIKGhob/yJgUAwACCG4ADCAbguJcHAYABBBOA5Bdgs8AgADCMADZIGIMAAggig0ACCCiDcCGQXIAAUSUAfggQABRbABAAFFsAEAAYU1IuBIUNggQQEQowQ8BAgwAGfZda0OWZtsAAAAASUVORK5CYII=';
        this.tooltipText= 'Посылать Referer при клике на ссылке';
        break;
    case 2:
        this.image= 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAANkDQtZPoQAAACBjSFJNAAB6JQAAgIMAAPQkAACEzwAAbV8AAOhqAAA8iwAAG1ep7YEWAAAAfklEQVR4nGL4z0AZBAgg4hQxgAk4RpYDCCCiDYABdEMAAohsA2CGAAQQyQYgGwSSAwgggn4kZABAAOH1I4qhOAwACCCCfiTkAoAAIqiAkDxAAFFsAEAAEW0ANgySAwggogzABwECiGIDAAKIYgMAAoigHwlBgAAiQgl+CBBgACTrMes8De/4AAAAAElFTkSuQmCC';
        this.tooltipText= 'Посылать Referer при клике на ссылке или загрузке изображений';
         break;
    }
}

this.PS=
 Components.classes['@mozilla.org/preferences-service;1']
 .getService(Components.interfaces.nsIPrefBranch);
this.ob={};
this.ob.observe=this.setState.bind(this);
this.PS.addObserver(this.pref,this.ob,false);
this.setState();

Add-on's (Дополнения) (Firefox 4 — Firefox 19) Для более новых версий подойдёт альтернативный вариант.
Основано на кнопке Add-on's для Firefox 3. Автор исправленной версии для работы с Firefox 4: Anton.

для быстрого доступа к пункту меню Инструменты - дополнения (Расширенный вариант)
Левый клик мышью - открывает окно дополнений.
Средний клик мышью - открывает дополнения слева в боковой панели.
Crtl+Средний клик мышью - открывает дополнения в новой вкладке.
Правый клик мышью - отображается меню в виде списка всех дополнений и быстрым доступом к настройкам выбранного дополнения.

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

Выделить код

Код:

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%3EAdd-on%27s%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACV0lEQVR4Xi3OT2ibZQDH8c/7msT1pZqOtlQ32ulaGJVuB0UvMiyRCbZCT14MHUIzcaCCFcZAGOiKIB3UkyCeBBU86EGYiPZanTIZwnTWScdqbdM/U/vHN1mS5jGHHD637w9+TOM1vKrTtPe8419z7njflrmWt2yb9ocpE0p4CaW2KTjVdtKgkqsnloZCMYyHQjgeHguD4YndoeBDwagZpzCKsfbmNIzjZZxF0aiS+Qd/TUJvRRjYzQcf2DPhotP6TOBJTOE5FIlVPG/NZEvRpq6Wpcp/dR1RXlcmz5pUasWOUalJDQ+3AOC83aGb/SF7TfCdMHCzJ5zYHwjKghXhwC1NXwvmBbOCgheVMI4iGSOas0MXXfWTdWU/WnBjc5kKUqpZkUGibkIFC1IdetSdwZXInB3HJS7bUNR3aCQbr67VaeAuKthGNxbxhVcccNiw8275LbZgw+dm/OUFn/h5falODjVUUUeEHfQKjrhg0OueEunUH3nGfY7akwjWvWnSjEdxG3U0UEOKCAnu4l58605Gzq4EOWRsqLWDFI22/bY6AlJ0ATHOCR6XlcgogCruRx6dgDo6BGvYQQY1cazfu3p9atUlxxT0YxnXcQ2/o4I8yvjSx+ZdsYI9ucjbNj2rx3UMY9O+ryy67bKGX3R42hEnjXnIIr4xJvE3LuH7WCqSw1HUsOAfq96QdU63j+SdUTbrBhLUHJTzg7Ki4ELsHhlNVJHBiIMOOatTnwSRYYeVHEMT2n3WMqoZizZ8pmm/BWKxLQXbHlCxjkfUDGs98yeqUluoAf8DkrzrAnZsWyMAAAAASUVORK5CYII%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bthis.url2xul%20%3D%20%27chrome%3A//mozapps/content/extensions/extensions.xul%27%3B%0Athis.onClick%20%3D%20function%20%28e%29%20%7B%0A%20%20%20%20switch%20%28e.button%29%20%7B%0A%20%20%20%20case%200%3A%0A%20%20%20%20%20%20%20%20try%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20BrowserOpenAddonsMgr%28%29%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20catch%28e%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20BrowserOpenExtensions%28%27extensions%27%29%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20case%201%3A%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20%28e.ctrlKey%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20t%20%3D%20gBrowser.mTabs%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20current%20%3D%20content.document.location.href%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20i%20%3D%20t.length%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28current%20%3D%3D%20this.url2xul%29%20gBrowser.removeCurrentTab%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20else%20while%20%28true%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28--i%20%3C%200%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%20if%20%28current%20%3D%3D%20%27about%3Ablank%27%29%20//%20replace%20blank%20tab%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20loadURI%28this.url2xul%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%20else%20//%20add%20new%20tab%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20gBrowser.selectedTab%20%3D%20gBrowser.addTab%28this.url2xul%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%20break%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28t%5Bi%5D.linkedBrowser.currentURI.spec%20%3D%3D%20this.url2xul%29%20//%20popup%20loaded%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%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%20gBrowser.selectedTab%20%3D%20gBrowser.tabContainer.childNodes%5Bi%5D%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%20break%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%20else%20openWebPanel%28this.tooltipText%2C%20this.url2xul%29%3B%0A%20%20%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%7D%3B%0A%7D%3B%0Athis.setAttribute%28%27onclick%27%2C%20%27this.onClick%28event%29%3B%27%29%3B%0A%20%0Aconst%20Cb%20%3D%20custombuttons%3B%0A%20%0Afunction%20prop%28aElement%2C%20aString%29%20%7B%0A%20%20%20%20var%20emRDF%20%3D%20%22http%3A//www.mozilla.org/2004/em-rdf%23%22%3B%0A%20%20%20%20var%20arc%20%3D%20RDFService.GetResource%28emRDF%20+%20aString%29%3B%0A%20%20%20%20var%20target%20%3D%20extensionDS.GetTarget%28aElement%2C%20arc%2C%20true%29%3B%0A%20%20%20%20if%20%28target%20instanceof%20Ci.nsIRDFLiteral%29%20return%20target.Value%3B%0A%20%20%20%20if%20%28target%20instanceof%20Ci.nsIRDFInt%29%20return%20target.Value%3B%0A%20%20%20%20return%20null%3B%0A%7D%0A%20%0Avar%20cloneCBcontext%20%3D%20%7B%0A%20%20%20%20cloneItems%3A%20function%20%28aNode%2C%20aID%2C%20aSeparate%29%20%7B%0A%20%20%20%20%20%20%20%20var%20menupopup%20%3D%20document.getElementById%28aID%29.cloneNode%28true%29%3B%0A%20%20%20%20%20%20%20%20var%20menuitems%20%3D%20menupopup.childNodes.length%3B%0A%20%20%20%20%20%20%20%20for%20%28var%20i%20%3D%200%3B%20i%20%3C%20menuitems%3B%20i++%29%0A%20%20%20%20%20%20%20%20aNode.appendChild%28menupopup.firstChild%29%3B%0A%20%20%20%20%20%20%20%20if%20%28aSeparate%29%20aNode.appendChild%28document.createElement%28%22menuseparator%22%29%29%3B%0A%20%20%20%20%7D%2C%0A%20%20%20%20makeMenu%3A%20function%20%28aNode%29%20%7B%0A%20%20%20%20%20%20%20%20var%20m%20%3D%20aNode.appendChild%28document.createElement%28%22menu%22%29%29%3B%0A%20%20%20%20%20%20%20%20m.setAttribute%28%22label%22%2C%20%22Custom%20Button%22%29%3B%0A%20%20%20%20%20%20%20%20m.setAttribute%28%22oncommand%22%2C%20%22event.stopPropagation%28%29%22%29%3B%0A%20%20%20%20%20%20%20%20var%20mp%20%3D%20m.appendChild%28document.createElement%28%22menupopup%22%29%29%3B%0A%20%20%20%20%20%20%20%20cloneCBcontext.cloneItems%28mp%2C%20%22custombuttons-contextpopup%22%29%3B%0A%20%20%20%20%20%20%20%20aNode.insertBefore%28document.createElement%28%22menuseparator%22%29%2C%20m%29%3B%0A%20%20%20%20%7D%0A%7D%0A%20%0Aconst%20popupID%20%3D%20%22cbContext-extensionsButton%22%3B%0A%20%0Avar%20test%20%3D%20document.getElementById%28popupID%29%3B%0Aif%20%28test%29%20test.parentNode.removeChild%28test%29%3B%0A%20%0Avar%20main%20%3D%20document.getElementById%28%22mainPopupSet%22%29%3B%0Avar%20cPopup%20%3D%20main.appendChild%28document.createElement%28%22menupopup%22%29%29%3B%0AcPopup.id%20%3D%20popupID%3B%0AcPopup.setAttribute%28%22oncommand%22%2C%20%22event.stopPropagation%28%29%3B%20document.popupNode.openPrefs%28event%29%3B%22%29%0A%20%0Avar%20app%20%3D%20Cc%20%5B%22@mozilla.org/fuel/application%3B1%22%5D.%20getService%20%28Ci.%20fuelIApplication%29%3B%0Avar%20am%20%3D%20%7B%7D%3B%0ACu.%20import%20%28%22resource%3A//gre/modules/AddonManager.jsm%22%2C%20am%29%3B%0Aam.%20AddonManager.%20getAddonsByTypes%0A%28%0A%20%20%20%20%20%20%20%20%5B%22extension%22%5D%2C%0A%20%20%20%20%20%20%20%20function%20%28extensions%29%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20e%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20for%20%28var%20i%20%3D%200%3B%20i%20%3C%20extensions.%20length%3B%20i++%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%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%20e%20%3D%20extensions%20%5Bi%5D%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%20var%20mi%20%3D%20%3Cmenuitem%20xmlns%3D%7Bxulns%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%20%20%20%20%20%20%20%20label%3D%7Be.%20name%20+%20%22%20%22%20+%20e.%20version%7D/%3E%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%20if%20%28e.%20iconURL%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%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20mi%20%5B%22@class%22%5D%20%3D%20%22menuitem-iconic%20bookmark-item%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%20%20%20%20%20%20%20%20mi%20%5B%22@image%22%5D%20%3D%20e.%20iconURL%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%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%20if%20%28e.%20userDisabled%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%20mi%20%5B%22@disabled%22%5D%20%3D%20%22true%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%20if%20%28e.%20optionsURL%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%20mi%20%5B%22@oncommand%22%5D%20%3D%20%22window.%20openDialog%20%28%27%22%20+%20e.%20optionsURL%20+%20%22%27%2C%20%27%27%2C%20%27chrome%2Cdialog%3D0%2Cresizable%2Ctitlebar%2Ctoolbar%2Ccenterscreen%27%29%3B%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%20cPopup.%20appendChild%20%28cbu.%20makeXML%20%28mi%29%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%20%20%20%20%20var%20arr%20%3D%20%5B%5D%3B%0A%20%20%20%20%20%20%20%20%09for%20%28var%20j%20%3D%200%3B%20j%20%3C%20cPopup.%20childNodes.%20length%3B%20j++%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%09arr%20%5Bj%5D%20%3D%20cPopup.%20childNodes%20%5Bj%5D%3B%0A%20%20%20%20%20%20%20%20%09arr.%20sort%0A%20%20%20%20%20%20%20%20%09%28%0A%20%20%20%20%20%20%20%20%20%20%20%20%09%09function%20%28a%2C%20b%2C%20c%2C%20d%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%09%09%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%09%09if%20%28a.%20nodeName%20%3D%3D%20%22menu%22%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%09%09return%20-1%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%09%09else%20if%20%28b.%20nodeName%20%3D%3D%20%22menu%22%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%09%09return%201%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%09%09return%20a.%20getAttribute%20%28%22label%22%29.%20toLowerCase%20%28%29%20%3E%20b.%20getAttribute%20%28%22label%22%29.%20toLowerCase%20%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%09%09%7D%0A%20%20%20%20%20%20%20%20%09%29%3B%0A%20%20%20%20%20%20%20%20%09for%20%28var%20j%20%3D%200%3B%20j%20%3C%20arr.%20length%3B%20j++%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%09cPopup.%20appendChild%20%28arr%20%5Bj%5D%29%3B%0A%20%20%20%20%20%20%20%20%7D%0A%29%3B%0A%20%0AcloneCBcontext.makeMenu%28cPopup%29%3B%0Athis.setAttribute%28%22context%22%2C%20popupID%29%3B%0A%20%0Aif%20%28typeof%20Local_Install%20%21%3D%20%22object%22%29%20return%3B%0A%20%0Avar%20test%20%3D%20document.getElementById%28%22cbContext-extensions%22%29%3B%0Aif%20%28test%29%20test.parentNode.removeChild%28test%29%3B%0A%20%0Avar%20cbPopup%20%3D%20document.getElementById%28%22custombuttons-contextpopup-subCall%22%29.cloneNode%28true%29%3B%20//%20Cb%20context%0Avar%20subMenu%20%3D%20document.createElement%28%22menu%22%29%3B%0AsubMenu.setAttribute%28%22label%22%2C%20%22Custom%20Button%22%29%3B%0AsubMenu.appendChild%28cbPopup.lastChild%29%3B%0A%20%0Avar%20extensionsPopup%20%3D%20document.getElementById%28%22emb-context%22%29%3B%0Avar%20popup%20%3D%20extensionsPopup.cloneNode%28true%29%3B%0Apopup.id%20%3D%20%22cbContext-extensions%22%3B%0Apopup.appendChild%28document.createElement%28%22menuseparator%22%29%29%3B%0Apopup.appendChild%28subMenu%29%3B%0AextensionsPopup.parentNode.appendChild%28popup%29%3B%0A%20%0Athis.setAttribute%28%22context%22%2C%20popup.id%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

Пиктограмма:

Выделить код

Код:

data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACV0lEQVR4Xi3OT2ibZQDH8c/7msT1pZqOtlQ32ulaGJVuB0UvMiyRCbZCT14MHUIzcaCCFcZAGOiKIB3UkyCeBBU86EGYiPZanTIZwnTWScdqbdM/U/vHN1mS5jGHHD637w9+TOM1vKrTtPe8419z7njflrmWt2yb9ocpE0p4CaW2KTjVdtKgkqsnloZCMYyHQjgeHguD4YndoeBDwagZpzCKsfbmNIzjZZxF0aiS+Qd/TUJvRRjYzQcf2DPhotP6TOBJTOE5FIlVPG/NZEvRpq6Wpcp/dR1RXlcmz5pUasWOUalJDQ+3AOC83aGb/SF7TfCdMHCzJ5zYHwjKghXhwC1NXwvmBbOCgheVMI4iGSOas0MXXfWTdWU/WnBjc5kKUqpZkUGibkIFC1IdetSdwZXInB3HJS7bUNR3aCQbr67VaeAuKthGNxbxhVcccNiw8275LbZgw+dm/OUFn/h5falODjVUUUeEHfQKjrhg0OueEunUH3nGfY7akwjWvWnSjEdxG3U0UEOKCAnu4l58605Gzq4EOWRsqLWDFI22/bY6AlJ0ATHOCR6XlcgogCruRx6dgDo6BGvYQQY1cazfu3p9atUlxxT0YxnXcQ2/o4I8yvjSx+ZdsYI9ucjbNj2rx3UMY9O+ryy67bKGX3R42hEnjXnIIr4xJvE3LuH7WCqSw1HUsOAfq96QdU63j+SdUTbrBhLUHJTzg7Ki4ELsHhlNVJHBiIMOOatTnwSRYYeVHEMT2n3WMqoZizZ8pmm/BWKxLQXbHlCxjkfUDGs98yeqUluoAf8DkrzrAnZsWyMAAAAASUVORK5CYII=

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

Выделить код

Код:

this.url2xul = 'chrome://mozapps/content/extensions/extensions.xul';
this.onClick = function (e) {
    switch (e.button) {
    case 0:
        try {
            BrowserOpenAddonsMgr();
        }
        catch(e) {
            BrowserOpenExtensions('extensions');
        }
        break;
    case 1:
        {
            if (e.ctrlKey) {
                var t = gBrowser.mTabs;
                var current = content.document.location.href;
                var i = t.length;
                if (current == this.url2xul) gBrowser.removeCurrentTab();
                else while (true) {
                    if (--i < 0) {
                        if (current == 'about:blank') // replace blank tab
                        loadURI(this.url2xul);
                        else // add new tab
                        gBrowser.selectedTab = gBrowser.addTab(this.url2xul);
                        break;
                    };
                    if (t[i].linkedBrowser.currentURI.spec == this.url2xul) // popup loaded
                    {
                        gBrowser.selectedTab = gBrowser.tabContainer.childNodes[i];
                        break;
                    };
                };
            } else openWebPanel(this.tooltipText, this.url2xul);
        };
        break;
    };
};
this.setAttribute('onclick', 'this.onClick(event);');
 
const Cb = custombuttons;
 
function prop(aElement, aString) {
    var emRDF = "http://www.mozilla.org/2004/em-rdf#";
    var arc = RDFService.GetResource(emRDF + aString);
    var target = extensionDS.GetTarget(aElement, arc, true);
    if (target instanceof Ci.nsIRDFLiteral) return target.Value;
    if (target instanceof Ci.nsIRDFInt) return target.Value;
    return null;
}
 
var cloneCBcontext = {
    cloneItems: function (aNode, aID, aSeparate) {
        var menupopup = document.getElementById(aID).cloneNode(true);
        var menuitems = menupopup.childNodes.length;
        for (var i = 0; i < menuitems; i++)
        aNode.appendChild(menupopup.firstChild);
        if (aSeparate) aNode.appendChild(document.createElement("menuseparator"));
    },
    makeMenu: function (aNode) {
        var m = aNode.appendChild(document.createElement("menu"));
        m.setAttribute("label", "Custom Button");
        m.setAttribute("oncommand", "event.stopPropagation()");
        var mp = m.appendChild(document.createElement("menupopup"));
        cloneCBcontext.cloneItems(mp, "custombuttons-contextpopup");
        aNode.insertBefore(document.createElement("menuseparator"), m);
    }
}
 
const popupID = "cbContext-extensionsButton";
 
var test = document.getElementById(popupID);
if (test) test.parentNode.removeChild(test);
 
var main = document.getElementById("mainPopupSet");
var cPopup = main.appendChild(document.createElement("menupopup"));
cPopup.id = popupID;
cPopup.setAttribute("oncommand", "event.stopPropagation(); document.popupNode.openPrefs(event);")
 
var app = Cc ["@mozilla.org/fuel/application;1"]. getService (Ci. fuelIApplication);
var am = {};
Cu. import ("resource://gre/modules/AddonManager.jsm", am);
am. AddonManager. getAddonsByTypes
(
        ["extension"],
        function (extensions)
        {
                var e;
                for (var i = 0; i < extensions. length; i++)
                {
                        e = extensions [i];
                        var mi = <menuitem xmlns={xulns}
                                           label={e. name + " " + e. version}/>;
                        if (e. iconURL)
                        {
                                mi ["@class"] = "menuitem-iconic bookmark-item";
                                mi ["@image"] = e. iconURL;
                        }
                        if (e. userDisabled)
                                mi ["@disabled"] = "true";
                        if (e. optionsURL)
                                mi ["@oncommand"] = "window. openDialog ('" + e. optionsURL + "', '', 'chrome,dialog=0,resizable,titlebar,toolbar,centerscreen');";
                        cPopup. appendChild (cbu. makeXML (mi));
                }
                var arr = [];
            for (var j = 0; j < cPopup. childNodes. length; j++)
                arr [j] = cPopup. childNodes [j];
            arr. sort
            (
                    function (a, b, c, d)
                    {
                        if (a. nodeName == "menu")
                            return -1;
                        else if (b. nodeName == "menu")
                            return 1;
                        return a. getAttribute ("label"). toLowerCase () > b. getAttribute ("label"). toLowerCase ();
                    }
            );
            for (var j = 0; j < arr. length; j++)
                cPopup. appendChild (arr [j]);
        }
);
 
cloneCBcontext.makeMenu(cPopup);
this.setAttribute("context", popupID);
 
if (typeof Local_Install != "object") return;
 
var test = document.getElementById("cbContext-extensions");
if (test) test.parentNode.removeChild(test);
 
var cbPopup = document.getElementById("custombuttons-contextpopup-subCall").cloneNode(true); // Cb context
var subMenu = document.createElement("menu");
subMenu.setAttribute("label", "Custom Button");
subMenu.appendChild(cbPopup.lastChild);
 
var extensionsPopup = document.getElementById("emb-context");
var popup = extensionsPopup.cloneNode(true);
popup.id = "cbContext-extensions";
popup.appendChild(document.createElement("menuseparator"));
popup.appendChild(subMenu);
extensionsPopup.parentNode.appendChild(popup);
 
this.setAttribute("context", popup.id);


02-04-2011 22:39:48
FFolders (Папки Firefox) (Firefox 1 — Firefox 19). Более новая версия кнопки — здесь.
Автор: Anton.
Кнопка содержит выпадающее меню, через которое можно открыть папку с текущим профилем и папку установки 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%3EFFolders%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAsTAAALEwEAmpwYAAAD3GlDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHja7ZZdTFNnGMf/5xxKW6CWjxap0vFaQQGxw+InCAJHEDK+0nasrQMpLZYC/fBwQAQCbhkytgluMToz5r4kWJ0yXYy6LOp0WRbGMp02tTFujCFxxDDmNjfDFnbBNsgull3MO/43z5P/8+b9v2/yu3gAsRUAaBpwOHlOuyWbGIwmIvQhCEpIEY1Qs6XeXajL1QOALocluSWbCWZFAQ+8oADgepIuh507+y+SWNwcD1AEwHprVb0FoAwAdlsdTitA3QTQbHVYrQCtB1DJGYwmgD4HQGab6YcAyCpn+mEAsp28mwfonwDIOL2WBRgRQIfY9FoWEMgAOqRSr2UBIQHoEIu5jgfESQBkjfaqnYA4E0AsX9XEAwDrcu/i7LZqnsRbEogmOTmF6MyO+ganjeTUVVl4zuW0W+oJ61InkQLeipl/AABi/zq4khSZ+QbOXEdYV52LIyWci6xSJ5N8thD/t+bkK//1oY9Ac7IFhBDyKDIMRtOf9za4gLQ3AOb1WU97Ajj9PLDMMOutUAFhfuBe66z3YwYoAFSk29LANf6N80xhIEQwwhAFggSsRhaKUAYndmM/PLiEm7hPSahEKp+yUy9SA9QNaoqOpYvpFtpD+5kgJp3hGA8zEhAdYAw4GOATKARlgrcF44EpgW2BnwkXCWuFF0QRohrRFbFS3Cz2B20I6g2mgm3BV0NSQ/olkZI9kocLnAvuSMul/tDSUG9YaZg/vDx8LMIVMSXrkivkxyI3RXoXOqJEUUcUrGJ0UefipMU3otuUCUrfY50xqTETpG9JuUqh8i09EGuIi477dtnx5Y3xbEJ4wmji2RXdSdtXZqqV6t8e/yr5o1X9mn0pzatta0rX5q3buF6zITE1Lk21cUn60ozlm9SZa7OysovZbZt35HTk9m45k3ct//snpAWawqeK2os9JV5tgG6NvvrJw6U+Q5ixyNS99WqZrHzrtiMVk5UZlh7ryPZ1tp7q72pya/scQmet68sdaVw/L2/oaPy1yblrrKWi9XZbWfvXz1ieHX+uvmO6s7sr5oXTL+Xt/aan9WXFK+f3P32AOug5pHsNvQOHzW/K3xp6Z09fdj919PKxjncLTsoHhk+dfL/9jPZs/Hl8cOvDcxdevdRyueLjvE80n5JB6RD1+YMvJq7dvX7HO+ob84/f+uH21LBoZOFo/Fj6Xf24417XxNHJwfsTP8t/yXhYM3Xo98Hp6XkW5lmYZ2GehX+yYOXtDgCYsxupZnYFgMk1H2c4k4m5eOoK+k+o8F5TEy5OmgDQfwBMZtCjN+4TcwAAACBjSFJNAABtqQAAc7QAAPq1AACAlQAAYy4AAOVvAAA3hQAAFbAnc1zwAAAC9ElEQVR42oyTu29bdRiGn9+5+Tjx8S1uajsQJ72AUkJoCl1AQpGQKlCLBKhiQVWHsjDAgJhYqi4V/0GFqiAkBoK6ICTEgIDUA23VirZpSRviOJETXxrbiVOf2Oficw5DsBS2Pts3vI8+fXo/EQQBffx6QV46fzQW/+Laexd+18jc+PZSd+wYG8NTuKZJu9UBn4sjhsu1ix/cVFW5orCP7tbW5IAh7v089yNhc4yzcp6l3DTHPzpDbXGVfH6Z8Mrt2TO7P/Hgq+/xfV75n2Du7VM3T59NMmP9woyqIilNVqpr7JRWiGQzKIkW75/c5M1Wk1phE8/yXpP64bvfHQpCEUcXEY0DR6LERxW86CAT977hyakpKrUGkhHmiZJm5N2ThA+mMHJDl6R+ePpckXhaR4tp+K6HVXdJZCYZnZog/PFnNKQUjgt3VjW2/AEyEwZex0a6cTUTTJ8rArOE4y6y6mHtONiJJCI7SMs2uZ+aYXW1xW65zPKGgtnukcwO4DkeezcwZ4EWstID16JRsfl7vs62UuJK7EOs3QLZ2jKPtiMMyW2GjQZ+x8Tr9f4TWDXWF28jjesUHYF+IsxYSiYe6Hyu3+eQ/CtdR/BH4mVeSlSwyg0eL+yA65p7ggZsLN0iefwdUtG3SKRVeicc3K6Mb7m0bcGCN8ppw2MqNsdgbIaH858S8uJ7G/h+HYDcGy/QvJWn+1QlbMgIVfDU9/EEHFP/YjjioG+u0bLn6QmF+IHoZQWgXHyArOlEskfZGtqlVimTSiromsDQJIwQENh4XSjXLQor/9CxHFrV0h0FoLm9TjSdI+iZPP9ijGbIpvmohB4ShDQBEgghcJ2AVqVN4WGJcdP6RNMQCkDXMhmffJ2eFyB1O6SeSyCCAN9xqC5WkAAPsLsB4fFXOaKkufr19T+r7aCoAAhJIjZyGB7f3aulDakEgMrwwdz+tjOf/43NxgY/rPkLACIIAq5fyQQ8I4V1uHC5Kvqz6L/z7JfPJtkfBvh3AFQgRt84GXxeAAAAAElFTkSuQmCC%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bvar%20menu%20%3D%20%3Cmenupopup%20xmlns%3D%22http%3A//www.mozilla.org/keymaster/gatekeeper/there.is.only.xul%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20onclick%3D%22this.%20parentNode.%20handleClick%20%28event%29%3B%22%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20label%3D%22%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20%u043F%u0430%u043F%u043A%u0443%20%u0442%u0435%u043A%u0443%u0449%u0435%u0433%u043E%20%u043F%u0440%u043E%u0444%u0438%u043B%u044F%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20value%3D%22ProfD%22/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20label%3D%22%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20%u043F%u0430%u043F%u043A%u0443%20%u0443%u0441%u0442%u0430%u043D%u043E%u0432%u043A%u0438%20Firefox%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20value%3D%22CurProcD%22/%3E%0A%20%20%20%20%20%20%3C/menupopup%3E%3B%0Athis.%20appendChild%20%28custombuttonsUtils.%20makeXML%20%28menu%29%29%3B%0Athis.%20type%20%3D%20%22menu%22%3B%0Athis.%20orient%20%3D%20%22horizontal%22%3B%0A%20%0Athis.%20handleClick%20%3D%20function%20%28event%29%0A%7B%0A%20%20%20%20var%20menuitem%20%3D%20event.%20target%3B%0A%20%20%20%20var%20value%20%3D%20menuitem.%20getAttribute%20%28%22value%22%29%3B%0A%20%20%20%20if%20%28event.%20button%20%3D%3D%200%29%0A%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20var%20file%20%3D%20Cc%20%5B%22@mozilla.org/file/directory_service%3B1%22%5D.%20getService%20%28Ci.%20nsIProperties%29%3B%0A%20%20%20%20%20%20%20%20file%20%3D%20file.%20get%20%28value%2C%20Ci.%20nsIFile%29.%20QueryInterface%20%28Ci.%20nsILocalFile%29%3B%0A%20%20%20%20%20%20%20%20file.%20launch%20%28%29%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20this.%20open%20%3D%20false%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

Пиктограмма:

Выделить код

Код:

data:image/png;base64,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

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

Выделить код

Код:

var menu = <menupopup xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
              onclick="this. parentNode. handleClick (event);">
        <menuitem label="Открыть папку текущего профиля"
              value="ProfD"/>
        <menuitem label="Открыть папку установки Firefox"
              value="CurProcD"/>
      </menupopup>;
this. appendChild (custombuttonsUtils. makeXML (menu));
this. type = "menu";
this. orient = "horizontal";
 
this. handleClick = function (event)
{
    var menuitem = event. target;
    var value = menuitem. getAttribute ("value");
    if (event. button == 0)
    {
        var file = Cc ["@mozilla.org/file/directory_service;1"]. getService (Ci. nsIProperties);
        file = file. get (value, Ci. nsIFile). QueryInterface (Ci. nsILocalFile);
        file. launch ();
        }
    this. open = false;
};

Quick bookmarks( Firefox 3.6 + )
Добавляет все открытие вкладки или текущую вкладку как закладки в папку закладок Новая папка или удаляет эту папку закладок. Можно в начале кода инициализации папку закладок заменить на свою.

ЛКМ => добавить все открытие вкладки в папку закладок,
СКМ => добавить текущую вкладку в папку закладок,
ПКМ => удалить папку закладок,
Ctrl+ПКМ => открыть контекстное меню кнопки.

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

Выделить код

Код:

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%20bookmarks%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEREAAAEAIADwBAAAFgAAACgAAAARAAAAIgAAAAEAIAAAAAAAyAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQAAAAAEFBwcD5TTywYtQTQHAAAAAAECAgAAAAABAgEDAAAAACZKJaoakiP/K4A0ywIAAAIBAQAAAAAAAAAAAAAAAQEBAQAAAAwaIj8ZrvD9GLr382eet7eKfnt7SkI9PBgQCg4CAAUAJGYouiDSL/87r0DbCgMABwAAAQACAgICAAAAAQMDBAAXFRYjGh8mahGR2O8fx///Ic3//obh/P+s2PD/W7HZ6CKe4NcvmWr7Ercb/0+6P++PTBBXCwUAAwAAAQAAAAAABQYHAxodHzcaFBdLDHrD3ifN//8oxvf6Hsb/+xeLff0FjED/DqRQ/x+hM/8KkhX/Qb1J+nS3UOtUoUjRNHg9vw0NDgEjIiUUIBMRHBstN0sep9/pLNH//y/O+v430v//E3pB/xClAP440zf9Ps1I/zekQv9EpE7/S79j/2jQeP9dpmL/DQ0OAR4jJxAfZoJ2I73u7i/T//8y0Pz+NdT8/zrX//8yp4r/O7ps/2jXlP9/5Iz/YdRr/2KoZf51mWP/Y4JY6ERbR70AAAAAGmV6ckbo//9D5v7+ONf+/jbV/P482f3/P9z9/0Df//9x4/7/fuP//2rTm/903Hj/Zp1f++q7jP+XelyoAAAAAAEBAQEAAQEBECQkITR8h3tJx+DZTN///0Hd/P5D4P3/YOf8/670/P+l8///asiV/3fKev9xnG7778qc/5yDY6gAAAAAAAAAAAAAAAAAAQEBAAAAAAAGBwA0oMfGTOn//4fs/PzN+P//l/D8/7T8//96u5//ZZVl/4Ocfvv84Lz/nIRkqAAAAAAAAAAAAAAAAAECAgIBBgcIAAAAAESAm6Jv5///1vv9++38///u+Pr/3PDz/+Di2v/j1rr/6Ne8+//v0P+ei3KoAAAAAAAAAAAAAAAAAAAAAAIDAwMAAAAAiJiho2zT///L9/z7+f3+//77+v/u7O7/7+Ta///qzP/35Mn7//PX/6KUgagAAAAAAAAAAAAAAAAAAAAAAwMDBAAAAACuqKWijdv//87t+Pv/////+fv7/+zu8P/t5dz//OrQ//np0fv/+d//o5eGqAAAAAAAAAAAAAAAAAAAAAADAwMEAAAAAKampaL/////+vr6+////v/8/Pv/7e7v/+/n3v//79f//O3Y+//+6P+kmoqoAAAAAAAAAAAAAAAAAAAAAAMDAwQAAAAApKSkoP/////4+fj5/f39/v39/f7z9Pb/8Oni///z4P/88eD7///y/6SdkKgAAAAAAAAAAAAAAAAAAAAAAwMDBAAAAACrq6ui//////v7+/v///////////7///728ez8+vHi/Prz5fn///n/pJ6VpwAAAAAAAAAAAAAAAAAAAAACAgIDAAAAAF5eXlrGxsXE0tLS0erq6un6+vr5////////////////+/v4+/////+opZ2oAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAwICExMTEisrKylHR0dFaGdnZYmKi4inpqam19TP2pGOiI8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%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%u0431%u044A%u044F%u0432%u043B%u044F%u0435%u043C%20%u043F%u0435%u0440%u0435%u043C%u0435%u043D%u043D%u044B%u0435%20%u0434%u043B%u044F%20%u044D%u0442%u043E%u0439%20%u0432%u043A%u043B%u0430%u0434%u043A%u0438%20................................%0Avar%20button%20%3D%20this%3B%0Avar%20folderName%20%3D%20%22%u041D%u043E%u0432%u0430%u044F%20%u043F%u0430%u043F%u043A%u0430%22%3B%0Avar%20alertsService%20%3D%20Components.classes%5B%22@mozilla.org/alerts-service%3B1%22%5D.getService%28Components.interfaces.nsIAlertsService%29%3B%0A%0A%0A%0A//%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%3D%20function%28e%29%20%7B%0A%0A%20%20%20%20%20var%20bmsvc%20%3D%20Components.classes%20%5B%22@mozilla.org/browser/nav-bookmarks-service%3B1%22%5D.getService%28Components.interfaces.nsINavBookmarksService%29%3B%0A%20%20%20%20%20var%20rootFolder%20%3D%20bmsvc.toolbarFolder%3B%0A%0A%20%20%20%20%20//%20%u0434%u0435%u0439%u0441%u0442%u0432%u0438%u0435%20%u043F%u0440%u0438%20%u043A%u043B%u0438%u043A%u0435%20%u041B%u041A%u041C%20....%0A%20%20%20%20%20if%20%28%20e.button%20%3D%3D%200%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20var%20f%20%3D%20getChildFolder%28%20rootFolder%2C%20folderName%20%29%3B%0A%20%20%20%20%20%20%20%20%20%20if%20%28%20%21f%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20bmsvc.createFolder%28%20rootFolder%2C%20folderName%2C%20bmsvc.%20DEFAULT_INDEX%20%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20f%20%3D%20getChildFolder%28%20rootFolder%2C%20folderName%20%29%3B%0A%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%20var%20uris%20%3D%20getTabsURIs%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20var%20ios%20%3D%20Components.%20classes%20%5B%22@mozilla.org/network/io-service%3B1%22%5D.getService%20%28Components.%20interfaces.%20nsIIOService%29%3B%0A%20%20%20%20%20%20%20%20%20%20var%20uri%3B%0A%20%20%20%20%20%20%20%20%20%20bmsvc.runInBatchMode%28%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20runBatched%3A%20function%28%20data%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20for%20%28%20var%20i%20%3D%200%3B%20i%20%3C%20uris.%20length%3B%20i++%20%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20bmsvc.insertBookmark%28%20f%2C%20uris%5Bi%5D.uri%2C%20bmsvc.DEFAULT_INDEX%2C%20uris%5Bi%5D.label%20%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20alertsService.showAlertNotification%28%20button.image%2C%20button.label%2C%20%27%u0414%u043E%u0431%u0430%u0432%u0438%u043B%20%u0432%u0441%u0435%20%u0432%u043A%u043B%u0430%u0434%u043A%u0438%20%u0432%20%u043F%u0430%u043F%u043A%u0443%20%u0437%u0430%u043A%u043B%u0430%u0434%u043E%u043A%3A%20%27%20+%20folderName%2C%20false%2C%20%22%22%2C%20null%2C%20%22%22%29%3B%20%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%20%20%20%20%20%7D%2C%20null%20%29%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20//%20%u0434%u0435%u0439%u0441%u0442%u0432%u0438%u0435%20%u043F%u0440%u0438%20%u043A%u043B%u0438%u043A%u0435%20%u0421%u041A%u041C%20....%20%20%20%20%0A%20%20%20%20%20if%20%28%20e.button%20%3D%3D%201%20%29%20%7B%20%0A%20%20%20%20%20%20%20%20%20%20var%20f%20%3D%20getChildFolder%28%20rootFolder%2C%20folderName%20%29%3B%0A%20%20%20%20%20%20%20%20%20%20if%20%28%20%21f%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20bmsvc.createFolder%28%20rootFolder%2C%20folderName%2C%20bmsvc.DEFAULT_INDEX%20%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20f%20%3D%20getChildFolder%28%20rootFolder%2C%20folderName%20%29%3B%0A%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%20var%20br%20%3D%20gBrowser.%20getBrowserForTab%20%28gBrowser.%20mCurrentTab%29%3B%0A%20%20%20%20%20%20%20%20%20%20bmsvc.insertBookmark%28%20f%2C%20br.webNavigation.currentURI%2C%20bmsvc.DEFAULT_INDEX%2C%20gBrowser.mCurrentTab.label%20%29%3B%0A%20%20%20%20%20%20%20%20%20%20/*%0A%20%20%20%20%20%20%20%20%20%20var%20sebp%20%3D%20StarUI.showEditBookmarkPopup%3B%0A%20%20%20%20%20%20%20%20%20%20StarUI.showEditBookmarkPopup%20%3D%20function%28%29%20%7B%7D%3B%0A%20%20%20%20%20%20%20%20%20%20PlacesCommandHook.bookmarkCurrentPage%28%20false%2C%20f%20%29%3B%0A%20%20%20%20%20%20%20%20%20%20StarUI.showEditBookmarkPopup%20%3D%20sebp%3B%0A%20%20%20%20%20%20%20%20%20%20*/%0A%20%20%20%20%20%20%20%20%20%20alertsService.showAlertNotification%28%20button.image%2C%20button.label%2C%20%27%u0414%u043E%u0431%u0430%u0432%u0438%u043B%20%u0432%u043A%u043B%u0430%u0434%u043A%u0443%20%u0432%20%u043F%u0430%u043F%u043A%u0443%20%u0437%u0430%u043A%u043B%u0430%u0434%u043E%u043A%3A%20%27%20+%20folderName%2C%20false%2C%20%22%22%2C%20null%2C%20%22%22%29%3B%20%0A%20%20%20%20%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%20%0A%20%20%20%20%20//%20%u0434%u0435%u0439%u0441%u0442%u0432%u0438%u0435%20%u043F%u0440%u0438%20%u043A%u043B%u0438%u043A%u0435%20%u041F%u041A%u041C%20....%20%20%20%20%0A%20%20%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%20%20%20e.preventDefault%28%29%3B%20%20%0A%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20var%20bmsvc%20%3D%20Components.classes%5B%22@mozilla.org/browser/nav-bookmarks-service%3B1%22%5D.getService%28Components.interfaces.nsINavBookmarksService%29%3B%0A%20%20%20%20%20%20%20%20%20%20var%20f%20%3D%20getChildFolder%28%20rootFolder%2C%20folderName%20%29%3B%0A%20%20%20%20%20%20%20%20%20%20if%20%28%20f%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20bmsvc.removeItem%28%20f%20%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20alertsService.showAlertNotification%28%20button.image%2C%20button.label%2C%20%27%u0423%u0434%u0430%u043B%u0438%u043B%20%u043F%u0430%u043F%u043A%u0443%20%u0437%u0430%u043A%u043B%u0430%u0434%u043E%u043A%3A%20%27%20+%20folderName%2C%20false%2C%20%22%22%2C%20null%2C%20%22%22%29%3B%20%0A%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%7D%3B%0A%7D%3B%0A%0A%0A%0A//%20%u041F%u043E%u043B%u0443%u0447%u0438%u0442%u044C%20%u043C%u0430%u0441%u0441%u0438%u0432%20%u0441%20%u0430%u0434%u0440%u0435%u0441%u0430%u043C%u0438%20%u0438%20%u043D%u0430%u0437%u0432%u0430%u043D%u0438%u044F%u043C%u0438%20%u0432%u043A%u043B%u0430%u0434%u043E%u043A%20................................%20%0Afunction%20getTabsURIs%28%29%20%7B%0A%20%20%20var%20tabList%20%3D%20%5B%5D%3B%0A%20%20%20var%20seenURIs%20%3D%20%5B%5D%3B%20%20%20%20%20%20%20%20%0A%20%20%20var%20br%2C%20webNav%2C%20uri%3B%0A%20%20%20%0A%20%20%20var%20tabs%20%3D%20getBrowser%28%29.mTabs%3B%0A%20%20%20for%20%28%20var%20i%20%3D%200%3B%20i%20%3C%20tabs.%20length%3B%20++i%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20br%20%3D%20gBrowser.getBrowserForTab%28%20tabs%5Bi%5D%20%29%3B%0A%20%20%20%20%20%20%20%20%20var%20webNav%20%3D%20br.webNavigation%3B%0A%20%20%20%20%20%20%20%20%20uri%20%3D%20webNav.currentURI%3B%0A%20%20%20%20%20%20%20%20%20if%20%28%20uri.spec%20in%20seenURIs%20%29%20continue%3B%0A%20%20%20%20%20%20%20%20%20seenURIs%5Buri.spec%5D%20%3D%20true%3B%0A%20%20%20%20%20%20%20%20%20tabList.push%20%28%7B%20uri%3A%20uri%2C%20label%3A%20tabs%5Bi%5D.label%20%7D%29%3B%0A%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%0A%20%20%20return%20tabList%3B%0A%7D%3B%0A%0A%0A%0A//%20%u041F%u043E%u043B%u0443%u0447%u0438%u0442%u044C%20%u043D%u0443%u0436%u043D%u0443%u044E%20%u043F%u0430%u043F%u043A%u0443%20%u0437%u0430%u043A%u043B%u0430%u0434%u043E%u043A%20................................%20%0Afunction%20getChildFolder%28%20parentId%2C%20title%20%29%20%7B%0A%20%20%20var%20res%20%3D%20null%3B%0A%20%20%20try%20%7B%0A%20%20%20%20%20%20%20%20var%20hs%20%3D%20Cc%20%5B%22@mozilla.org/browser/nav-history-service%3B1%22%5D.getService%28Ci.nsINavHistoryService%29%3B%0A%20%20%20%20%20%20%20%20var%20options%20%3D%20hs.getNewQueryOptions%28%29%3B%0A%20%20%20%20%20%20%20%20options.excludeItems%20%3D%20true%3B%0A%20%20%20%20%20%20%20%20var%20query%20%3D%20hs.getNewQuery%28%29%3B%0A%20%20%20%20%20%20%20%20query.setFolders%28%20%5BparentId%5D%2C%201%20%29%3B%0A%20%20%20%20%20%20%20%20var%20result%20%3D%20hs.executeQuery%28%20query%2C%20options%20%29%3B%0A%20%20%20%20%20%20%20%20var%20rn%20%3D%20result.root%3B%0A%20%20%20%20%20%20%20%20rn.containerOpen%20%3D%20true%3B%0A%20%20%20%20%20%20%20%20var%20i%2C%20node%3B%0A%20%20%20%20%20%20%20%20for%20%28%20i%20%3D%200%3B%20i%20%3C%20rn.childCount%3B%20i++%20%29%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20node%20%3D%20rn.getChild%28i%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%20node.title%20%3D%3D%20title%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20res%20%3D%20node.itemId%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%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%20%20%20%7D%0A%20%20%20%20%20%20%20%20rn.containerOpen%20%3D%20false%3B%0A%20%20%20%20%20%20%20%7D%20%0A%20%20%20catch%28e%29%20%7B%7D%0A%20%20%20%0A%20%20%20return%20res%3B%0A%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%22Quick%20bookmarks%5Cn%u041B%u041A%u041C%20%3D%3E%20%u0434%u043E%u0431%u0430%u0432%u0438%u0442%u044C%20%u0432%u0441%u0435%20%u043E%u0442%u043A%u0440%u044B%u0442%u0438%u0435%20%u0432%u043A%u043B%u0430%u0434%u043A%u0438%20%u0432%20%u043F%u0430%u043F%u043A%u0443%20%u0437%u0430%u043A%u043B%u0430%u0434%u043E%u043A%5Cn%u0421%u041A%u041C%20%3D%3E%20%u0434%u043E%u0431%u0430%u0432%u0438%u0442%u044C%20%u0442%u0435%u043A%u0443%u0449%u0443%u044E%20%u0432%u043A%u043B%u0430%u0434%u043A%u0443%20%u0432%20%u043F%u0430%u043F%u043A%u0443%20%u0437%u0430%u043A%u043B%u0430%u0434%u043E%u043A%5Cn%u041F%u041A%u041C%20%3D%3E%20%u0443%u0434%u0430%u043B%u0438%u0442%u044C%20%u043F%u0430%u043F%u043A%u0443%20%u0437%u0430%u043A%u043B%u0430%u0434%u043E%u043A%5CnCtrl+%u041F%u041A%u041C%20%3D%3E%20%u043E%u0442%u043A%u0440%u044B%u0442%u044C%20%u043A%u043E%u043D%u0442%u0435%u043A%u0441%u0442%u043D%u043E%u0435%20%u043C%u0435%u043D%u044E%20%u043A%u043D%u043E%u043F%u043A%u0438%22%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 button = this;
var folderName = "Новая папка";
var alertsService = Components.classes["@mozilla.org/alerts-service;1"].getService(Components.interfaces.nsIAlertsService);



// Настройка функций кликов мыши для кнопки ................................
this.onclick = function(e) {

     var bmsvc = Components.classes ["@mozilla.org/browser/nav-bookmarks-service;1"].getService(Components.interfaces.nsINavBookmarksService);
     var rootFolder = bmsvc.toolbarFolder;

     // действие при клике ЛКМ ....
     if ( e.button == 0 ) {
          var f = getChildFolder( rootFolder, folderName );
          if ( !f ) {
               bmsvc.createFolder( rootFolder, folderName, bmsvc. DEFAULT_INDEX );
               f = getChildFolder( rootFolder, folderName );
               }
          var uris = getTabsURIs();
          var ios = Components. classes ["@mozilla.org/network/io-service;1"].getService (Components. interfaces. nsIIOService);
          var uri;
          bmsvc.runInBatchMode({
                runBatched: function( data ) {
                for ( var i = 0; i < uris. length; i++ )
                      bmsvc.insertBookmark( f, uris[i].uri, bmsvc.DEFAULT_INDEX, uris[i].label );
                      alertsService.showAlertNotification( button.image, button.label, 'Добавил все вкладки в папку закладок: ' + folderName, false, "", null, ""); 
                }
                }, null );
          };
          
     // действие при клике СКМ ....    
     if ( e.button == 1 ) { 
          var f = getChildFolder( rootFolder, folderName );
          if ( !f ) {
               bmsvc.createFolder( rootFolder, folderName, bmsvc.DEFAULT_INDEX );
               f = getChildFolder( rootFolder, folderName );
               }
          var br = gBrowser. getBrowserForTab (gBrowser. mCurrentTab);
          bmsvc.insertBookmark( f, br.webNavigation.currentURI, bmsvc.DEFAULT_INDEX, gBrowser.mCurrentTab.label );
          /*
          var sebp = StarUI.showEditBookmarkPopup;
          StarUI.showEditBookmarkPopup = function() {};
          PlacesCommandHook.bookmarkCurrentPage( false, f );
          StarUI.showEditBookmarkPopup = sebp;
          */
          alertsService.showAlertNotification( button.image, button.label, 'Добавил вкладку в папку закладок: ' + folderName, false, "", null, ""); 
          };
     
     // действие при клике ПКМ ....    
     if ( e.button == 2 && !e.ctrlKey && !e.shiftKey && !e.altKey && !e.metaKey ) { 
          e.preventDefault();  
          
          var bmsvc = Components.classes["@mozilla.org/browser/nav-bookmarks-service;1"].getService(Components.interfaces.nsINavBookmarksService);
          var f = getChildFolder( rootFolder, folderName );
          if ( f ) {
               bmsvc.removeItem( f );
               alertsService.showAlertNotification( button.image, button.label, 'Удалил папку закладок: ' + folderName, false, "", null, ""); 
               }
          };
};



// Получить массив с адресами и названиями вкладок ................................ 
function getTabsURIs() {
   var tabList = [];
   var seenURIs = [];        
   var br, webNav, uri;
   
   var tabs = getBrowser().mTabs;
   for ( var i = 0; i < tabs. length; ++i ) {
         br = gBrowser.getBrowserForTab( tabs[i] );
         var webNav = br.webNavigation;
         uri = webNav.currentURI;
         if ( uri.spec in seenURIs ) continue;
         seenURIs[uri.spec] = true;
         tabList.push ({ uri: uri, label: tabs[i].label });
         }
   
   return tabList;
};



// Получить нужную папку закладок ................................ 
function getChildFolder( parentId, title ) {
   var res = null;
   try {
        var hs = Cc ["@mozilla.org/browser/nav-history-service;1"].getService(Ci.nsINavHistoryService);
        var options = hs.getNewQueryOptions();
        options.excludeItems = true;
        var query = hs.getNewQuery();
        query.setFolders( [parentId], 1 );
        var result = hs.executeQuery( query, options );
        var rn = result.root;
        rn.containerOpen = true;
        var i, node;
        for ( i = 0; i < rn.childCount; i++ ){
              var node = rn.getChild(i);
              if ( node.title == title ) {
                   res = node.itemId;
                   break;
                   }
              }
        rn.containerOpen = false;
       } 
   catch(e) {}
   
   return res;
};


// Подсказка для кнопки ............................
this.tooltipText = "Quick bookmarks\nЛКМ => добавить все открытие вкладки в папку закладок\nСКМ => добавить текущую вкладку в папку закладок\nПКМ => удалить папку закладок\nCtrl+ПКМ => открыть контекстное меню кнопки";


Автор кода: Anton

Очистить кэш и удалить флэш куки( Firefox 17-45 )
кнопка очищает кэш и удаляет Flash cookie. Сплывающая подсказка у кнопки отображает в MB максимально возможное и текущее заполнение дискового кеша, оффлайн кеша и кеша в оперативной памяти.

Скриншот подсказки у кнопки:
fd4706b8dc27ec552cfa3b298ff7abb0.png

Left => очистить кэш Firefox и удалить Flash cookie.
Код кнопки для Firefox 17-26:

Выделить код

Код:

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%3EClear%20Cache%20/%20Delete%20flash%20cookies%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/x-icon%3Bbase64%2CAAABAAEAExEAAAEAIAB4BQAAFgAAACgAAAATAAAAIgAAAAEAIAAAAAAAUAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDAwAAAAAAAQEBCxMTEyElJSU/KywrWC4sLWUzMzNrPDs8a0NEQ2MsLCxKDg0PKgABAA8AAAAAAgICAAAAAAAAAAAAAAAAAQAAAAIZGhoHQ0NDUGJiYqZxcXHVcXFx6XNzc/STlJT2t7e2+NDP0Pjb3dz11tbY67GwsNtsbWy0JyYnYQICAg8CAgICAAAAAgICAgUAAAAAJykpJ5CRkM64t7f/q6ut/7m5uf/Lx8b/19bW/9nY2P7a2dz+4d/g/+rq6P/r7Or/1NTU/3V1ddkKCwo+AQEBAQEBAQQCAgIDAAABARMTEhdubmy/rq6w/snIyfbj4+H94uXn/d/l7f3W2+X9xc3R/a20u/2oqKr9paWi96Wmpf5ubW3NFRMTNgAAAA4BAQEJAQIBAQICAgUAAQUBhY6UpuDi5f7b2Nj609ng/rfB1v+ssc3/wcja/6qyx/99hqL/iZOr/rW4vfrZ2Nf+io2VuQQHDiICAgETAQEBBgIDBAIDAgEDAQoSAau8wq3/////4Oft+tzm7v7d4On/q6zJ/0tLoP9cXKb/tbXM/9Hb5v7f5/H6/////7K6wrYBDRkNAwEABQICAQECAwQCAQIBAggNEQest7+4+v7+/8rY6Pnf5u7++/r6/6OmzP9kZa//aGmu/8rN4//7+vv/3Obr+Pn9/f+/wsK7ChIWDAIBAQECAwMDAwQEBAEBAQINFhgPprXAvPb////K1OT5vcDX/6SlzP+Bg7z/5ebu/7S11P9+gbv/l5jE/7G60fj1/P7/w8TIwBYYIRcAAQEBBAQEBAQEBQQCAAAAESIsGbTGzMH5////5u70+dTW6P+Dg7//gIC//8PD3f+gocr/OTyf/3J0t/+/xd349P7//73EzsYgIy8hAAAAAAQEBAQEBAUEAAAAABoiLSLAyszH+f///9/q9vj0+Pz/2Nfp/7e32P+9vtz/ubvX/25vtP+/weD/5/D1+Pb////AytHLJSw3KwAAAAAEBAUFBAQFBQAAAAAgKzQrvsvOyvb+/v/I2e/42ef3//L19v/p6Ov//vv7//Hy8v/Jydv/1ODu/97r9Pj9/v//zdHY0C44RjgAAAAABAUFBQQFBQUAAAAAKzpJN8TV2dD4/v7/1Oj++NDq///Q6P7/4PH//+Pw/v/U5fb/xt3z/8Tc9f/X5/f4//7//9PX29c3QktFAAAAAAUFBQUEBQUFAAAAADE5Rj7G09rT8Pr7/8PV6fi60eX/q8ff/63G4P+uxt//s8vl/7PN6//F2fD/0N/r+Pr8/P/W3+TaP09aSwAAAAAFBQUFBAUFBQAAAAA4PUhRqrW/3bK6wP57gIn2cXeD/nh+gv2Rlpf9rrKz/crNz/3c4eT94uft/tDU2/bX2dr+tL3F4kJNWl0AAAAABAUGBgMDAwYAAAAAX15jfq+vsvqjpqb/mJ2f/qmyt/+vvMP+u8nT/8jT3f/R3Ob/2OTs/97l7P/N0dX+wsLE/62usP5WV1uLAAAAAAIDBAUDAwMEAAAAAEdGRkqJiYi6mZma57CztO/Q1tr20tni98PL1vettb/3maGs94uSnfeIjpL3iY2M8ZycnOmZmJfDTUtMVgAAAAACAgIDAAAAAAAAAAAEBAUBDxEQEickJCtAODtEVlFTW2RjZGljYl9yXVxadVdWVHNRUFNqR0RHXT03NkcpJyctFBUWEwgHCAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%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%3D%20function%28e%29%20%7B%0A%20%20%20%20%20if%20%28%20e.button%20%29%20return%3B%0A%20%20%20%20%20%0A%20%20%20%20%20//%20%u041E%u0447%u0438%u0441%u0442%u0438%u0442%u044C%20%u043A%u0435%u0448%20....%0A%20%20%20%20%20var%20cacheService%20%3D%20Cc%5B%22@mozilla.org/network/cache-service%3B1%22%5D.getService%28Ci.nsICacheService%29%3B%0A%20%20%20%20%20cacheService.evictEntries%28Ci.nsICache.STORE_IN_MEMORY%29%3B%0A%20%20%20%20%20cacheService.evictEntries%28Ci.nsICache.STORE_ON_DISK%29%3B%0A%0A%20%20%20%20%20//%20%u0423%u0434%u0430%u043B%u0438%u0442%u044C%20Flash%20%u043A%u0443%u043A%u0438%u0441%u0438%20....%0A%20%20%20%20%20var%20dir%20%3D%20Cc%5B%22@mozilla.org/file/directory_service%3B1%22%5D.getService%28Ci.nsIProperties%29.get%28%22Home%22%2C%20Ci.nsIFile%29%3B%0A%20%20%20%20%20dir.append%28%22Application%20Data%22%29%3B%0A%20%20%20%20%20dir.append%28%22Macromedia%22%29%3B%0A%20%20%20%20%20if%20%28%20dir.exists%28%29%20%29%20dir.remove%28true%29%3B%0A%20%20%20%20%20if%20%28%20%21dir.exists%28%29%20%29%20dir.create%28Ci.nsIFile.DIRECTORY_TYPE%2C%200777%29%3B%0A%0A%20%20%20%20%20//%20%u0412%u0441%u043F%u043B%u044B%u0432%u0430%u044E%u0449%u0435%u0435%20%u0441%u043E%u043E%u0431%u0449%u0435%u043D%u0438%u0435%20....%0A%20%20%20%20%20const%20alertsService%20%3D%20Cc%5B%22@mozilla.org/alerts-service%3B1%22%5D.getService%28Ci.nsIAlertsService%29%3B%0A%20%20%20%20%20alertsService.showAlertNotification%28self.image%2C%20self.label%2C%20%27%u041E%u0447%u0438%u0441%u0442%u0438%u043B%20%u043A%u0435%u0448%20%u0438%20%u0443%u0434%u0430%u043B%u0438%u043B%20Flash%20%u043A%u0443%u043A%u0438%u0441%u0438%27%2C%20false%2C%20%22%22%2C%20null%2C%20%22%22%29%3B%0A%0A%7D%3B%0A%0A%0A//%20%u0421%u043F%u043B%u044B%u0432%u0430%u044E%u0449%u0430%u044F%20%u043F%u043E%u0434%u0441%u043A%u0430%u0437%u043A%u0430%20%u0443%20%u043A%u043D%u043E%u043F%u043A%u0438%20....%0Avar%20k%20%3D%20100%2C%20mb%20%3D%201024%20*%201024%2C%20str%20%3D%20%22%22%2C%0Acs%20%3D%20Cc%5B%22@mozilla.org/network/cache-service%3B1%22%5D.getService%28Ci.nsICacheService%29%2C%0Avisitor%20%3D%20%7B%20visitDevice%3A%20addInfo%20%7D%3B%0A%0Afunction%20addInfo%28device%2C%20info%29%20%7B%0A%20%20%20//%20if%20%28device%5B0%5D%20%3D%3D%20%22o%22%29%20return%3B%0A%20%20%20str%20+%3D%20%28str%20%3F%20%22%5Cn%22%20%3A%20%22%22%29%20+%20device%5B0%5D.toUpperCase%28%29%20+%20device.slice%281%29%20+%20%22%20Cache%3A%20%20%22%20+%0A%20%20%20%5Binfo.totalSize%2C%20info.maximumSize%5D.map%28function%28num%29%20Math.round%28k%20*%20num%20/%20mb%29%20/%20k%20+%20%22%20MB%22%29.join%28%22%20/%20%22%29%3B%0A%7D%3B%0A%0Athis.onmouseenter%20%3D%20function%28%29%20%7B%0A%20%20%20%20str%20%3D%20%22%22%3B%0A%20%20%20%20cs.visitEntries%28visitor%29%3B%0A%20%20%20%20this.tooltipText%20%3D%20str%3B%0A%7D%3B%0A%0A%0A%0A%0A%0A%0A%0A%0A%0A%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


Код кнопки для Firefox 26-51:

Выделить код

Код:

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%u0447%u0438%u0441%u0442%u0438%u0442%u044C%20%u043A%u044D%u0448%20%u0438%20%u0443%u0434%u0430%u043B%u0438%u0442%u044C%20%u0444%u043B%u044D%u0448%20%u043A%u0443%u043A%u0438%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/x-icon%3Bbase64%2CAAABAAEAExEAAAEAIAB4BQAAFgAAACgAAAATAAAAIgAAAAEAIAAAAAAAUAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDAwAAAAAAAQEBCxMTEyElJSU/KywrWC4sLWUzMzNrPDs8a0NEQ2MsLCxKDg0PKgABAA8AAAAAAgICAAAAAAAAAAAAAAAAAQAAAAIZGhoHQ0NDUGJiYqZxcXHVcXFx6XNzc/STlJT2t7e2+NDP0Pjb3dz11tbY67GwsNtsbWy0JyYnYQICAg8CAgICAAAAAgICAgUAAAAAJykpJ5CRkM64t7f/q6ut/7m5uf/Lx8b/19bW/9nY2P7a2dz+4d/g/+rq6P/r7Or/1NTU/3V1ddkKCwo+AQEBAQEBAQQCAgIDAAABARMTEhdubmy/rq6w/snIyfbj4+H94uXn/d/l7f3W2+X9xc3R/a20u/2oqKr9paWi96Wmpf5ubW3NFRMTNgAAAA4BAQEJAQIBAQICAgUAAQUBhY6UpuDi5f7b2Nj609ng/rfB1v+ssc3/wcja/6qyx/99hqL/iZOr/rW4vfrZ2Nf+io2VuQQHDiICAgETAQEBBgIDBAIDAgEDAQoSAau8wq3/////4Oft+tzm7v7d4On/q6zJ/0tLoP9cXKb/tbXM/9Hb5v7f5/H6/////7K6wrYBDRkNAwEABQICAQECAwQCAQIBAggNEQest7+4+v7+/8rY6Pnf5u7++/r6/6OmzP9kZa//aGmu/8rN4//7+vv/3Obr+Pn9/f+/wsK7ChIWDAIBAQECAwMDAwQEBAEBAQINFhgPprXAvPb////K1OT5vcDX/6SlzP+Bg7z/5ebu/7S11P9+gbv/l5jE/7G60fj1/P7/w8TIwBYYIRcAAQEBBAQEBAQEBQQCAAAAESIsGbTGzMH5////5u70+dTW6P+Dg7//gIC//8PD3f+gocr/OTyf/3J0t/+/xd349P7//73EzsYgIy8hAAAAAAQEBAQEBAUEAAAAABoiLSLAyszH+f///9/q9vj0+Pz/2Nfp/7e32P+9vtz/ubvX/25vtP+/weD/5/D1+Pb////AytHLJSw3KwAAAAAEBAUFBAQFBQAAAAAgKzQrvsvOyvb+/v/I2e/42ef3//L19v/p6Ov//vv7//Hy8v/Jydv/1ODu/97r9Pj9/v//zdHY0C44RjgAAAAABAUFBQQFBQUAAAAAKzpJN8TV2dD4/v7/1Oj++NDq///Q6P7/4PH//+Pw/v/U5fb/xt3z/8Tc9f/X5/f4//7//9PX29c3QktFAAAAAAUFBQUEBQUFAAAAADE5Rj7G09rT8Pr7/8PV6fi60eX/q8ff/63G4P+uxt//s8vl/7PN6//F2fD/0N/r+Pr8/P/W3+TaP09aSwAAAAAFBQUFBAUFBQAAAAA4PUhRqrW/3bK6wP57gIn2cXeD/nh+gv2Rlpf9rrKz/crNz/3c4eT94uft/tDU2/bX2dr+tL3F4kJNWl0AAAAABAUGBgMDAwYAAAAAX15jfq+vsvqjpqb/mJ2f/qmyt/+vvMP+u8nT/8jT3f/R3Ob/2OTs/97l7P/N0dX+wsLE/62usP5WV1uLAAAAAAIDBAUDAwMEAAAAAEdGRkqJiYi6mZma57CztO/Q1tr20tni98PL1vettb/3maGs94uSnfeIjpL3iY2M8ZycnOmZmJfDTUtMVgAAAAACAgIDAAAAAAAAAAAEBAUBDxEQEickJCtAODtEVlFTW2RjZGljYl9yXVxadVdWVHNRUFNqR0RHXT03NkcpJyctFBUWEwgHCAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%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%20//%20%u043E%u0447%u0438%u0441%u0442%u0438%u0442%u044C%20%u043A%u044D%u0448%20....%0A%20%20%20try%20%7B%20%0A%20%20%20%20%20%20%20Services.cache.evictEntries%281%29%3B%0A%20%20%20%20%20%20%20Services.cache.evictEntries%282%29%3B%0A%20%20%20%20%20%20%20%7D%20%0A%20%20%20catch%28e%29%20%7B%20Services.cache2.clear%28%29%20%7D%3B%0A%0A%20%20%20//%20%u0423%u0434%u0430%u043B%u0438%u0442%u044C%20Flash%20%u043A%u0443%u043A%u0438%u0441%u044B%20....%0A%20%20%20var%20dir%20%3D%20Services.dirsvc.get%28%27Home%27%2C%20Ci.nsIFile%29%3B%0A%20%20%20dir.append%28%22Application%20Data%22%29%3B%0A%20%20%20dir.append%28%22Macromedia%22%29%3B%0A%20%20%20dir.exists%28%29%20%26%26%20dir.remove%28true%29%3B%0A%20%20%20%21dir.exists%28%29%20%26%26%20dir.create%28Ci.nsIFile.DIRECTORY_TYPE%2C%200777%29%3B%0A%0A%20%20%20//%20%u0412%u0441%u043F%u043B%u044B%u0432%u0430%u044E%u0449%u0435%u0435%20%u0441%u043E%u043E%u0431%u0449%u0435%u043D%u0438%u0435%20....%0A%20%20%20Cc%5B%22@mozilla.org/alerts-service%3B1%22%5D.getService%28Ci.nsIAlertsService%29%0A%20%20%20.showAlertNotification%28self.image%2C%20self.label%2C%20%27%u041E%u0447%u0438%u0441%u0442%u0438%u043B%20%u043A%u0435%u0448%20%u0438%20%u0443%u0434%u0430%u043B%u0438%u043B%20Flash%20%u043A%u0443%u043A%u0438%u0441%u0438%27%29%3B%0A%7D%3B%0A%0A%0A//%20%u0412%u0441%u043F%u043B%u044B%u0432%u0430%u044E%u0449%u0430%u044F%20%u043F%u043E%u0434%u0441%u043A%u0430%u0437%u043A%u0430%20%u0443%20%u0441%u0447%u0451%u0442%u0447%u0438%u043A%u0430%20%u043E%u0442%u043E%u0431%u0440%u0430%u0436%u0430%u0435%u0442%20%u0437%u0430%u043F%u043E%u043B%u043D%u0435%u043D%u0438%u0435%20%u0434%u0438%u0441%u043A%u043E%u0432%u043E%u0433%u043E%20%u043A%u0435%u0448%u0430%20..............%0Avar%20data%20%3D%20%7B%0A%20%20%20%20memory%3A%20%22Memory%20Cache%3A%20%20%22%2C%0A%20%20%20%20disk%3A%20%22Disk%20Cache%3A%20%20%22%2C%0A%20%20%20%20offline%3A%20%22Offline%20Cache%3A%20%20%22%0A%7D%3B%20%20%20%0Afunction%20getSize%28size%29%20%7B%0A%20%20%20if%20%28%21size%29%20return%20size%20%3D%3D%3D%200%20%3F%20%220%22%20%3A%20%22%3F%22%3B%0A%20%20%20for%28var%20count%20%3D%20-1%3B%20size%20%3E%3D%201024%3B%20size%20/%3D%201024%2C%20count++%29%3B%0A%20%20%20return%20size.toFixed%282%29.replace%28/0+%24/%2C%20%22%22%29.replace%28/%5C.%24/%2C%20%22%22%29%20+%20%22%20%22%20+%20%28%22KMGT%22%5Bcount%5D%20%7C%7C%20%22%22%29%20+%20%22B%22%3B%0A%7D%0Afunction%20setInf%28tot%2C%20max%2C%20type%2C%20i%29%20%7B%0A%20%20%20var%20inf%20%3D%20getSize%28tot%29%20+%20%22%20/%20%22%20+%20getSize%28max%29%3B%0A%20%20%20var%20key%20%3D%20%22browser.cache.%22%20+%20type%20+%20%22.enable%22%3B%0A%20%20%20if%20%28%21Services.prefs.getBoolPref%28key%29%29%20inf%20+%3D%20%22%20%28disabled%29%22%3B%0A%20%20%20self.tooltipText%20%3D%20self.tooltipText.replace%28zws%28i%29%2C%20inf%29%3B%0A%7D%0Afunction%20zws%28ind%29%20%22%5Cu200B%5Cu200B%5Cu200B%22.slice%280%2C%20++ind%29%3B%0A%0Avar%20types%20%3D%20Object.keys%28data%29%3B%0Avar%20ttt%20%3D%20types.map%28function%28key%2C%20i%29%20data%5Bkey%5D%20+%20zws%28i%29%29.join%28%22%5Cn%22%29%3B%0A%20%20%20%0Avar%20context%20%3D%20Cu.import%28%22resource%3A//gre/modules/LoadContextInfo.jsm%22%2C%20%7B%7D%29.LoadContextInfo.default%3B%0Aself.onmouseenter%20%3D%20function%28%29%20%7B%0A%20%20%20self.tooltipText%20%3D%20%22%u041B%3A%20%u041E%u0447%u0438%u0441%u0442%u0438%u0442%u044C%20%u043A%u044D%u0448%20%u0438%20%u0443%u0434%u0430%u043B%u0438%u0442%u044C%20Flash-%u043A%u0443%u043A%u0438%5Cn%22%20+%20ttt%3B%0A%20%20%20try%20%7B%0A%20%20%20%20%20%20%20var%20entries%20%3D%20%7B%7D%3B%0A%20%20%20%20%20%20%20Services.cache.visitEntries%28%7B%0A%20%20%20%20%20%20%20visitDevice%3A%20function%28device%2C%20info%29%20entries%5Bdevice%5D%20%3D%20info%2C%0A%20%20%20%20%20%20%20visitEntry%3A%20function%28%29%20%7B%7D%0A%20%20%20%20%20%20%20%7D%29%3B%0A%20%20%20types.forEach%28function%28type%2C%20i%29%20%7B%0A%20%20%20%20%20%20var%20info%20%3D%20entries%5Btype%5D%3B%0A%20%20%20%20%20%20setInf%28info%20%26%26%20info.totalSize%2C%20info%20%26%26%20info.maximumSize%2C%20type%2C%20i%29%0A%20%20%20%7D%29%3B%0A%20%20%20%20%20%20%20%7D%20%0A%20%20%20catch%28ex%29%20%7B%0A%20%20%20%20%20%20%20Services.cache2%20%26%26%20types.forEach%28function%28type%2C%20i%29%20%7B%0A%20%20%20%20%20%20%20var%20func%20%3D%20function%28aEntryCount%2C%20aConsumption%2C%20aCapacity%2C%20aDiskDirectory%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20setInf%28aConsumption%2C%20aCapacity%2C%20type%2C%20i%29%3B%0A%20%20%20%20%20%20%20var%20storage%20%3D%20Services.cache2%5B%28type%20%3D%3D%20%22offline%22%20%3F%20%22app%22%20%3A%20type%29%20+%20%22CacheStorage%22%5D%28context%2C%20null%29%3B%0A%20%20%20%20%20%20%20try%20%7B%20storage.asyncVisitStorage%28%7BonCacheStorageInfo%3A%20func%7D%2C%20false%29%20%7D%20catch%28ex%29%20%7B%7D%3B%0A%20%20%20%20%20%20%20%7D%29%3B%0A%20%20%20%20%20%20%20%7D%0A%7D%3B%0A%0A%0A%0A%0A%0A%0A%0A%0A%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


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

Session Stacked Bookmarks ([nightly] 8.0)
Позволяет хранить несколько закладок в одной кнопке (с выпадающим списком). Можно одним кликом добавить текущую просматриваемую страницу как закладку вовнутрь кнопки.
Управление:
ЛКМ - открыть список сохранённых страниц.
СКМ или ЛКМ+любой модификатор - добавить текущую (просматриваемую) вкладку в список сохранённых страниц.
В списке:
ЛКМ - открыть выбранную страницу в текущей вкладке.
СКМ - открыть выбранную страницу в новой вкладке.
ПКМ - вызывает меню, через которое можно удалить выбранную страницу.

Т.к. код установки не влезает сюда в сообщение из-за лимита в 64кб на 1 сообщение, то просто публикую ссылки на кнопку и её обсуждение.
Код стабильной версии кнопки.
Код beta-версии кнопки.
Тема на этом форуме, посвящённая обсуждению этой кнопки, там же выкладываются и её обновления.

Автор: Infocatcher.

Toggle  Find ( Firefox 3.6+ )
показать-скрыть поиск по странице

Left => показать-скрыть поиск по странице.

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

Выделить код

Код:

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%3EToggle%20%20Find%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/gif%3Bbase64%2CR0lGODlhEAAQAMQWAJmZzJlmzGZmzGZm/2aZ/5mZ/5nM/8zM/8z//5mZmWZmmf///8yZzMzMmZlmmZmZM8zMM8zMZsz/ZsyZZpmZZmZmM////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAHoAxYALAAAAAAQABAAAAVsoCUCgQCIaCoKA1G4p7q6RmEXcQoMxYEYQEMOJSAYEL+D8jC0CG6GJTKhUtiAPiSCmlK4er7FgiGzWLGIBUJRZliVCLMi0Sg7FHhq4gGJlFUNEBIQE38pExGDFIYoFIkQi4wWjhEVkiIUFQohADs%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%5BgFindBar.hidden%20%3F%20gFindBar.onFindCommand%28%29%20%3A%20gFindBar.close%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%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

Код:

Выделить код

Код:

gFindBar.hidden ? gFindBar.onFindCommand() : gFindBar.close();

Translate( Firefox 24 + ) от 27.02.2017.
Переводит страницы в обычном переводчике Google или с заменой текста на странице в переводчике Google в новой активной вкладке сразу справа от текущей вкладки или в текущей вкладке. Перевод с заменой текста переводит все и в том числе большие страницы и https страницы, но не умеет переводить автоматически как обычный переводчик Google.
Переводит выделенный текст или текст из буфера обмена с помощью сервиса Google Translate в новой активной вкладке сразу справа или в маленьком окошке который можно закрыть кликом на странице, выделенный текст также можно перевести двойным правым кликом на странице или из контекстного меню на странице.

Как изменить фон и размер шрифта, ширина и высоту окошка перевода?
Для изменения нужных параметров измените в вкладке инициализации этот кусок кода:

Выделить код

Код:

var background = 'none', fontSize = 'medium'; // фон и размер шрифта окошка перевода
var winWidth = 0.4, winHeight = 0.4;          // ширина и высота окошка перевода относительно размера страницы


Меню кнопки и перевод в маленьком окошке
c1fc2a8b384e860fe0f0813bf74438ef.png1996aa311981.jpg488ef1c14c92.jpg

ЛКМ => перевести страницу / выделенный текст.
СКМ => перевести текст, из буфера обмена.
ПКМ => Mеню кнопки с настройками,
Двойной ПКМ => Стандартное меню кнопки.

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

Выделить код

Код:

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%3ETranslate%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEhIAAAEAIACABQAAFgAAACgAAAASAAAAJAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBKBMpTCYX4GMrH/9gMxn/YDQV/2cyG/9nLxr/YjMd/10xHv9cMRz/XjIa/2ExHP9gNRn/YDIV/2IwHf9ULSL/RCcU4EEoEylLKBfgcjUe/349IP98QRr/gEEd/39AKP+FUjv/h2NL/4lkUP+GYEv/hVQ+/35CJv9+Phz/gEIb/4c8H/96PCT/azgb/0koFOBpMyT/jD8i/4RFIf97RB3/hEUr/7GCdf/q29L/+e3e/97HuP/dwLD/6M2+/76VhP9+RSr/hUMg/5NAH/+NQCX/h0Ai/2Q1Iv9yOyf/lkYn/4xFJP+HSSn/m25Y//7y6v/bw7f/fkw2/3hBJv90QSX/hFI9/+nUxv+2k4H/i0kq/5VIJP+QRiL/lkYn/3Q5Kv9zQSn/mUkp/5tJKf+XSin/roJr//757f+0gG//l0oq/5NMI/+WTCH/i00u/8q0o//jx7j/mFU6/5JMJP+TTiL/l0wl/3Y/K/93Rif/oE4p/6ZNK/+jTSz/pGpS//rn2v/Np5b/kFEx/5BSK/+XTyv/nmFJ/+rTyP/lyrv/nlk+/5NRJv+WUib/l1Ik/3lFK/+BSyr/plQt/6ZULP+mUyv/nFIz/6d3Yf/hxrX/3b6n/7SUf/+7l4b/8NjL//7z6//BkoH/mlMz/55TLP+iUyv/olMp/4FJK/+FSzP/qVUz/61ZMf+sWSv/rFYs/59TM/+cWT//nmJJ/8OSgf/+8ub/+O/b/8ikkv+iVTb/qVgv/6pVMP+1WDT/qVY1/4ZMMf+MUTX/q1sx/7RZMf+2WjH/t1wv/7JbLf+oXDT/nVtD/8yajv/+8uf/ybGZ/5VYOP+zWDL/t1sx/7NYMv+5WjX/sFk2/49SM/+VVDn/s143/7hfNP+8WzX/v141/6xeMv/ZoYD/+9/I/+DBtP/Ss6P/7L+l/7l1Tf+1XjT/vlw0/7tdM/+6YC//tV42/5FYNP+cU0D/uGE9/75fNf/GZTb/wGI4/8OBYv//5tT/5byr/6RjSP+lXD//26eM//TNsf+3YkH/xGI3/8NjNf+7Yi//uGE3/5pZOv+hWEH/wGY9/8RlNP/KaDf/xWY3/9+ef///5tv/v4Vt/8NmOv+9ZUD/xI16//7o2v/FgGX/x2g5/8poNv/KaDb/xWU5/6ZYQv+mYUH/y2s7/8xwN//TbTf/0m46/+CYd///59X/vIJk/81tOv/Bbz//4a6b//7n2P/FiGL/yWw4/9FtN//KcDf/zG45/6dfQP+tZT//1W4//9pxPf/VbTz/1G5B/75wTf/31L7/z56C/8V5TP/TkGP/+NXC//XSv/+4cEr/0nA7/9VwO//Ubz7/1G88/61kP/+0bkj/4XNC/99wPv/gckL/321B/9VwR//Gf2D/6reX/+/DoP/82br//uHO//LSvv/mp33/3nhJ/9dwQv/bb0X/23BG/7RrSP+wb0r/4nhK/+V3Rf/qeEX/8HZE/+lzQf/adUf/yWg+/7lfO/+tYDz/qWFA/6xeOf/IaTn/5nND/+h1SP/pdkj/3ndN/7RtUP+NWTrg2oJX/+uGVf/ofkv/84FN/++ETv/qfk//6n5Q/+h+Uv/ngFP/5oFS/+d/UP/nfk//839O/+5+Tv/uhVj/3YFa/5JYPOCRVkEppFo64NN8UP/dgVT/3oRR/92DTP/ihVj/34FX/+ODVf/mg1T/5IRO/96ET//cglH/4YJT/+CCVv/Te1D/oVk44JBVQCkAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEE%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B//%20Translate%20%u043E%u0442%2027.02.2017.%20...............%0A%0A//%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%20%7B%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20var%20sel%20%3D%20getSelect%28%29%3B%0A%20%20%20%20%20%20%20%20sel%20%3F%20translateText%28sel%29%20%3A%20translatePage%28%29%3B%20%20%20%20%0A%20%20%20%20%20%20%20%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%20%20if%20%28%20e.button%20%3D%3D%201%20%29%0A%20%20%20%20%20%20%20%20translateText%28gClipboard.read%28%29%2C%20true%29%3B%0A%20%20%20%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%20menu.showPopup%28self%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%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%0Avar%20background%20%3D%20%27white%27%2C%20fontSize%20%3D%20%27medium%27%3B%20//%20%u0444%u043E%u043D%20%u0438%20%u0440%u0430%u0437%u043C%u0435%u0440%20%u0448%u0440%u0438%u0444%u0442%u0430%20%u043E%u043A%u043E%u0448%u043A%u0430%20%u043F%u0435%u0440%u0435%u0432%u043E%u0434%u0430%0Avar%20winWidth%20%3D%200.4%2C%20winHeight%20%3D%200.4%3B%20%20%20%20%20%20%20%20%20%20//%20%u0448%u0438%u0440%u0438%u043D%u0430%20%u0438%20%u0432%u044B%u0441%u043E%u0442%u0430%20%u043E%u043A%u043E%u0448%u043A%u0430%20%u043F%u0435%u0440%u0435%u0432%u043E%u0434%u0430%20%u043E%u0442%u043D%u043E%u0441%u0438%u0442%u0435%u043B%u044C%u043D%u043E%20%u0440%u0430%u0437%u043C%u0435%u0440%u0430%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u044B%0A%0A%0A//%20%u0421%u043E%u0437%u0434%u0430%u0442%u044C%20%u043C%u0435%u043D%u044E%20...............%0Avar%20array%20%3D%20%5B%20%20%20%20%0A%20%20%20%20%7B%20label%3A%20%22%u041F%u0435%u0440%u0435%u0432%u043E%u0434%20%u0442%u0435%u043A%u0441%u0442%u0430%20%u0432%20%u043C%u0430%u043B%u0435%u043D%u044C%u043A%u043E%u043C%20%u043E%u043A%u043E%u0448%u043A%u0435%22%2C%20checkbox%3A%20%27%27%2C%20value%3A%20%27Translate.textInPopup%27%20%7D%2C%0A%20%20%20%20%7B%20label%3A%20%22%u041F%u0435%u0440%u0435%u0432%u043E%u0434%20%u0442%u0435%u043A%u0441%u0442%u0430%20%u0432%20%u0434%u0432%u043E%u0439%u043D%u044B%u043C%20%u043F%u0440%u0430%u0432%u044B%u043C%20%u043A%u043B%u0438%u043A%u043E%u043C%22%2C%20checkbox%3A%20%27%27%2C%20value%3A%20%27Translate.textWithDoubleRightClick%27%20%7D%2C%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%7B%20label%3A%20%22%u041F%u0435%u0440%u0435%u0432%u043E%u0434%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u044B%20%u0432%20%u043D%u043E%u0432%u043E%u0439%20%u0432%u043A%u043B%u0430%u0434%u043A%u0435%20%u0441%u0440%u0430%u0437%u0443%20%u0441%u043F%u0440%u0430%u0432%u0430%22%2C%20checkbox%3A%20%27%27%2C%20value%3A%20%27Translate.nextPage%27%20%7D%2C%0A%20%20%20%20%7B%20label%3A%20%22%u041F%u0435%u0440%u0435%u0432%u043E%u0434%20%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u043D%u043E%u0433%u043E%20%u0442%u0435%u043A%u0441%u0442%u0430%20%u0438%u0437%20%u043A%u043E%u043D%u0442%u0435%u043A%u0441%u0442%u043D%u043E%u0433%u043E%20%u043C%u0435%u043D%u044E%22%2C%20checkbox%3A%20%27%27%2C%20value%3A%20%27Translate.textFromContextMenu%27%20%7D%2C%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%7B%20separator%3A%20%27%27%7D%2C%0A%20%20%20%20%7B%20label%3A%20%22%u0423%u0434%u0430%u043B%u044F%u0442%u044C%20%u043F%u043E%u0434%u0441%u043A%u0430%u0437%u043A%u0438%20%u0432%20%u043F%u0435%u0440%u0435%u0432%u043E%u0434%u0447%u0438%u043A%u0430%u0445%22%2C%20checkbox%3A%20%27%27%2C%20value%3A%20%27Translate.noTooltipForTranslate%27%2C%20func%3A%20%27%27%20%7D%2C%0A%20%20%20%20%7B%20label%3A%20%22%u0423%u0434%u0430%u043B%u044F%u0442%u044C%20%u043F%u0430%u043D%u0435%u043B%u044C%20%u0443%u043F%u0440%u0430%u0432%u043B%u0435%u043D%u0438%u044F%20%u0432%20%u043F%u0435%u0440%u0435%u0432%u043E%u0434%u0447%u0438%u043A%u0435%20Googl%u0435%22%2C%20checkbox%3A%20%27%27%2C%20value%3A%20%27Translate.removeGoogleTranslatorHeader%27%2C%20func%3A%20%27%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%22%u041F%u0435%u0440%u0435%u0432%u043E%u0434%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u044B%20%u0432%20%u043E%u0431%u044B%u0447%u043D%u043E%u043C%20%u043F%u0435%u0440%u0435%u0432%u043E%u0434%u0447%u0438%u043A%u0435%20Google%22%2C%20radio%3A%20%27%27%2C%20value%3A%20%27google%27%20%7D%2C%20%20%20%20%0A%20%20%20%20%7B%20label%3A%20%22%u041F%u0435%u0440%u0435%u0432%u043E%u0434%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u044B%20%u0441%20%u0437%u0430%u043C%u0435%u043D%u043E%u0439%20%u0442%u0435%u043A%u0441%u0442%u0430%20%u0432%20%u043F%u0435%u0440%u0435%u0432%u043E%u0434%u0447%u0438%u043A%u0435%20Google%22%2C%20radio%3A%20%27%27%2C%20value%3A%20%27googleBookmarklet%27%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%5D%3B%0Avar%20menu%20%3D%20self.appendChild%28%20document.createElement%28%22menupopup%22%29%20%29%3B%20%20%0Aarray.forEach%28%28m%29%3D%3E%20%7B%0A%20%20%20if%20%28%20%22separator%22%20in%20m%20%29%20%7B%20menu.appendChild%28%20document.createElement%28%22menuseparator%22%29%20%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%20%0A%20%20%20if%20%28%20%22radio%22%20in%20m%20%29%20%7B%20%0A%20%20%20%20%20%20%20%20mItem.setAttribute%28%22type%22%2C%20%22radio%22%29%3B%0A%20%20%20%20%20%20%20%20mItem.setAttribute%28%27checked%27%2C%20cbu.getPrefs%28%22Translate.pageIn%22%29%20%3D%3D%20m.value%20%29%3B%0A%20%20%20%20%20%20%20%20mItem.onclick%20%3D%28%29%3D%3E%20cbu.setPrefs%28%22Translate.pageIn%22%2C%20m.value%29%3B%20%20%0A%20%20%20%20%20%20%20%20%7D%20%20%0A%20%20%20if%20%28%20%22checkbox%22%20in%20m%20%29%20%7B%20%20%20%20%20%20%20%20%20%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.value%29%20%29%3B%0A%20%20%20%20%20%20%20%20mItem.onclick%20%3D%28%29%3D%3E%20cbu.setPrefs%28m.value%2C%20%21cbu.getPrefs%28m.value%29%29%3B%20%20%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20if%20%28%20%22func%22%20in%20m%20%29%20mItem.addEventListener%28%22command%22%2C%20%28%29%3D%3E%20toggleGoogleTranslatorStyle%28%29%29%3B%0A%20%20%20%20%20%20%20%0A%20%20%20menu.appendChild%28mItem%29%3B%0A%7D%29%3B%0Amenu.setAttribute%28%22onclick%22%2C%20%22event.stopPropagation%28%29%22%29%3B%0A%0A%0A//%20%u041F%u043E%u043B%u0443%u0447%u0438%u0442%u044C%20%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u043D%u044B%u0439%20%u0442%u0435%u043A%u0441%u0442%20%u0438%u0437%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u044B%20%u0438%u043B%u0438%20false%20...............%0Afunction%20getSelect%28%29%20%7B%0A%20%20%20var%20sel%20%3D%20gBrowser.contentDocument.defaultView.getSelection%28%29%3B%0A%20%20%20return%20%28sel%20%3D%3D%20%27%27%29%20%3F%20false%20%3A%20sel.toString%28%29%3B%0A%7D%3B%0A%0A%0A//%20%u0423%u0434%u0430%u043B%u0438%u0442%u044C%20%u043F%u0430%u043D%u0435%u043B%u044C%20%u0443%u043F%u0440%u0430%u0432%u043B%u0435%u043D%u0438%u044F%20%u0432%20%u043F%u0435%u0440%u0435%u0432%u043E%u0434%u0447%u0438%u043A%u0435%20Googl%u0435%20%u0438%20%u043F%u043E%u0434%u0441%u043A%u0430%u0437%u043A%u0438%20%u0432%20%u043F%u0435%u0440%u0435%u0432%u043E%u0434%u0447%u0438%u043A%u0430%u0445%20...............%0Afunction%20toggleGoogleTranslatorStyle%28arg%29%20%7B%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%20try%20%7B%20sss.unregisterSheet%28%20self.uri%2C%200%29%20%7D%20catch%28e%29%20%7B%7D%3B%0A%20%20%20%0A%20%20%20if%20%28%20cbu.getPrefs%28%22Translate.removeGoogleTranslatorHeader%22%29%20%29%20%7B%20%20//%20%u043F%u0430%u043D%u0435%u043B%u044C%20%u0443%u043F%u0440%u0430%u0432%u043B%u0435%u043D%u0438%u044F%0A%20%20%20%20%20%20%20%20var%20removeHeader%20%3D%20%27%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20@-moz-document%20domain%28%22translate.google.com%22%29%20%7B%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%23gb%2C%20%23gt-bbar%2C%20%23gt-c%3Anot%28%5Bclass%3D%22g-section%22%5D%29%20%7B%20display%3A%20none%20%21important%3B%20%7D%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%23contentframe%20%7B%20top%3A%200%20%21important%3B%20%7D%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%27%3B%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%0A%20%20%20if%20%28%20cbu.getPrefs%28%22Translate.noTooltipForTranslate%22%29%20%29%20%7B%20%20//%20%u043F%u043E%u0434%u0441%u043A%u0430%u0437%u043A%u0438%20%u0432%20%u043F%u0435%u0440%u0435%u0432%u043E%u0434%u0447%u0438%u043A%u0430%u0445%0A%20%20%20%20%20%20%20%20var%20noPopup%20%3D%20%27%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20/*Microsoft*/%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20DIV%5Btranslate%3D%22no%22%5D%20%7B%20display%3A%20none%20%21important%3B%20%7D%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20*%5Blang%3D%22ru%22%5D%20%7B%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20color%3A%20black%20%21important%3B%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20background-color%3A%20transparent%20%21important%3B%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20/*Google*/%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20@-moz-document%20domain%28%22translate.google.com%22%29%20%7B%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.jfk-tooltip%20%7B%20display%3A%20none%20%21important%3B%20%7D%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20@-moz-document%20regexp%28%22%5Ehttps%3F%3A//translate%5C.google%5C..*%22%29%20%7B/**/%7D%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20@-moz-document%20domain%28%22translate.googleusercontent.com%22%29%20%7B%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20span%5Bonmouseout%5D%5Bonmouseover%5D%5Bstyle%5D%20%7B%20background-color%3A%20transparent%20%21important%3B%20%7D%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20.gmnoprint%20%7B%20display%3A%20none%20%21important%3B%20%7D%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20.goog-text-highlight%20%7B%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20background-color%3A%20transparent%20%21important%3B%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20border%3A%20none%20%21important%3B%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20box-shadow%3A%20none%20%21important%3B%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20.goog-tooltip.skiptranslate%20%7B%20display%3A%20none%20%21important%3B%20%7D%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%27%3B%0A%20%20%20%20%20%20%20%20%7D%20%20%20%0A%20%20%20self.css%20%3D%20removeHeader%20+%20noPopup%3B%0A%0A%20%20%20if%20%28%20%21%21self.css%20%29%20%7B%0A%20%20%20%20%20%20%20%20self.uri%20%3D%20makeURI%28%22data%3Atext/css%2C%22%20+%20encodeURIComponent%28self.css%29%29%3B%0A%20%20%20%20%20%20%20%20sss.loadAndRegisterSheet%28self.uri%2C%200%29%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%0A%20%20%20arg%20%26%26%20addDestructor%28%28%29%3D%3E%20sss.unregisterSheet%28self.uri%2C%200%29%20%29%3B%20%20%0A%7D%3B%0AtoggleGoogleTranslatorStyle%28true%29%3B%20%0A%0A%0A//%20%u041F%u0435%u0440%u0435%u0432%u043E%u0434%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u044B%20...............%20%20%20%0Afunction%20translatePage%28%29%20%7B%0A%20%20%20var%20translator%20%3D%20cbu.getPrefs%28%22Translate.pageIn%22%29%3B%0A%20%20%20%0A%20%20%20//%20%u043F%u0435%u0440%u0435%u0432%u043E%u0434%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u044B%20%u0432%20%u043E%u0431%u044B%u0447%u043D%u043E%u043C%20%u043F%u0435%u0440%u0435%u0432%u043E%u0434%u0447%u0438%u043A%u0435%20Google%20%u0432%20%u043D%u043E%u0432%u043E%u0439%20%u0430%u043A%u0442%u0438%u0432%u043D%u043E%u0439%20%u0432%u043A%u043B%u0430%u0434%u043A%u0435%20%u0438%u043B%u0438%20%u0442%u0435%u043A%u0443%u0449%u0435%u0439%20%u0432%u043A%u043B%u0430%u0434%u043A%u0435%0A%20%20%20if%20%28%20translator%20%3D%3D%20%22google%22%20%29%20%7B%0A%20%20%20%20%20%20%20%20var%20url%20%3D%20%22http%3A//translate.google.com/translate%3Fu%3D%22%20+%20content.location%20+%20%22%26hl%3Dru%26ie%3DUTF-8%26sl%3Dauto%26tl%3Dru%22%3B%0A%20%20%20%20%20%20%20%20cbu.getPrefs%28%22Translate.nextPage%22%29%0A%20%20%20%20%20%20%20%20%3F%20gBrowser.moveTabTo%28gBrowser.selectedTab%20%3D%20gBrowser.addTab%28url%29%2C%20gBrowser.mCurrentTab._tPos%20+%201%29%0A%20%20%20%20%20%20%20%20%3A%20loadURI%28url%29%3B%0A%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20%20%20%20%20%7D%20%0A%0A%20%20%20//%20%u043F%u0435%u0440%u0435%u0432%u043E%u0434%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u044B%20%u0441%20%u0437%u0430%u043C%u0435%u043D%u043E%u0439%20%u0442%u0435%u043A%u0441%u0442%u0430%20%u043D%u0430%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u0435%20%u0432%20%u043F%u0435%u0440%u0435%u0432%u043E%u0434%u0447%u0438%u043A%u0435%20Microsoft%20%u0438%u043B%u0438%20Google%20%0A%20%20%20if%20%28%20cbu.getPrefs%28%22Translate.nextPage%22%29%20%29%20%7B%0A%20%20%20%20%20%20%20%20gBrowser.getBrowserForTab%28gBrowser.selectedTab%20%3D%20gBrowser.duplicateTab%28gBrowser.mCurrentTab%29%29%0A%20%20%20%20%20%20%20%20%20%20%20.addEventListener%28%22pageshow%22%2C%20function%20c%28e%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20this.removeEventListener%28e.type%2C%20c%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20runBukmarklet%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%7D%29%3B%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%7D%20%20%20%20%0A%20%20%20else%20runBukmarklet%28%29%3B%0A%20%20%20%0A%20%20%20//%20%u0437%u0430%u043F%u0443%u0441%u0442%u0438%u0442%u044C%20%u0431%u0443%u043A%u043C%u0430%u0440%u043A%u043B%u0435%u0442%20%u0434%u043B%u044F%20%u043F%u0435%u0440%u0435%u0432%u043E%u0434%u0430%0A%20%20%20function%20runBukmarklet%28%29%20%7B%0A%20%20%20%20%20%20cbu.setPrefs%28%22security.mixed_content.block_active_content%22%2C%20false%29%3B%0A%20%20%20%20%20%20%0A%20%20%20%20%20%20content.document.location%20%3D%20%22javascript%3A%7Bvar%20d%3Ddocument%3B%20var%20b%3Dd.body%3B%20var%20o%3Dd.createElement%28%27script%27%29%3Bo.setAttribute%28%27src%27%2C%27http%3A//translate.google.com/translate_a/element.js%3Fcb%3DgoogleTranslateElementInit%26hl%3Dru%27%29%3Bo.setAttribute%28%27type%27%2C%27text/javascript%27%29%3Bb.appendChild%28o%29%3B%20var%20v%3Db.insertBefore%28d.createElement%28%27div%27%29%2Cb.firstChild%29%3Bv.id%3D%27google_translate_element%27%3Bv.style.display%3D%27none%27%3B%20var%20p%3Dd.createElement%28%27scri%27+%27pt%27%29%3Bp.text%3D%27function%2520googleTranslateElementInit%28%29%7Bvar%2520tElem%2520%3D%2520new%2520google.translate.TranslateElement%28%7BpageLanguage%3A%2522%2522%7D%2C%2522google_translate_element%2522%29%3BsetTimeout%28function%28%29%2520%7B%2520tElem.showBanner%28true%29%3B%2520%7D%2C100%29%3B%7D%27%3Bp.setAttribute%28%27type%27%2C%27text/javascript%27%29%3Bb.appendChild%28p%29%3B%7Dvoid%25200%22%3B%0A%20%20%20%7D%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%u0434%u0432%u043E%u0439%u043D%u044B%u043C%20%u043F%u0440%u0430%u0432%u044B%u043C%20%u043A%u043B%u0438%u043A%u043E%u043C%20%u043C%u044B%u0448%u0438%20%u043D%u0430%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u0435%20%u0438%20%u0437%u0430%u043F%u0443%u0441%u043A%u0430%u0435%u0442%20%u043F%u0435%u0440%u0435%u0432%u043E%u0434%20%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u043D%u043E%u0433%u043E%20%u0442%u0435%u043A%u0441%u0442%u0430%20...............%0AaddEventListener%28%22dblclick%22%2C%20e%3D%3E%20%7B%0A%20%20%20if%20%28%20e.button%20%26%26%20cbu.getPrefs%28%22Translate.textWithDoubleRightClick%22%29%20%29%20%7B%0A%20%20%20%20%20%20%20%20e.preventDefault%28%29%3B%0A%20%20%20%20%20%20%20%20document.getElementById%28%22contentAreaContextMenu%22%29.hidePopup%28%29%3B%0A%0A%20%20%20%20%20%20%20%20translateText%28getSelect%28%29%29%3B%0A%20%20%20%20%20%20%20%20%7D%0A%7D%2C%20false%2C%20gBrowser%29%3B%0A%0A%0A//%20%u041F%u0435%u0440%u0435%u0432%u043E%u0434%20%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u043D%u043E%u0433%u043E%20%u0442%u0435%u043A%u0441%u0442%u0430%20%u0438%u0437%20%u043A%u043E%u043D%u0442%u0435%u043A%u0441%u0442%u043D%u043E%u0433%u043E%20%u043C%u0435%u043D%u044E%20...............%20%20%20%0Avar%20contextMenu%20%3D%20document.getElementById%28%22contentAreaContextMenu%22%29%3B%0Avar%20mItem%20%3D%20contextMenu.insertBefore%28document.createElement%28%22menuitem%22%29%2C%20contextMenu.children%5B1%5D%29%3B%0AmItem.setAttribute%28%22label%22%2C%20%22%u041F%u0435%u0440%u0435%u0432%u043E%u0434%20%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u043D%u043E%u0433%u043E%20%u0442%u0435%u043A%u0441%u0442%u0430%22%29%3B%0AmItem.onclick%20%3D%28%29%3D%3E%20translateText%28getSelect%28%29%29%3B%0AaddEventListener%28%22popupshowing%22%2C%20%28%29%3D%3E%20%7B%0A%20%20%20mItem.hidden%20%3D%20%21cbu.getPrefs%28%22Translate.textFromContextMenu%22%29%20%7C%7C%20%21gContextMenu.isTextSelected%3B%20%0A%7D%2C%20false%2C%20contextMenu%29%3B%0AaddDestructor%28%28%29%3D%3E%20mItem.remove%28%29%29%3B%0A%0A%0A//%20%u041F%u0435%u0440%u0435%u0432%u0435%u0441%u0442%u0438%20%u0442%u0435%u043A%u0441%u0442%20%u0432%20Google%20%u043F%u0435%u0440%u0435%u0432%u043E%u0434%u0447%u0438%u043A%u0435%20%u0432%20%u043D%u043E%u0432%u043E%u0439%20%u0432%u043A%u043B%u0430%u0434%u043A%u0435%20%u0441%u0440%u0430%u0437%u0443%20%u0441%u043F%u0440%u0430%u0432%u0430%20%u0438%u043B%u0438%20%u0432%20%u043C%u0430%u043B%u0435%u043D%u044C%u043A%u043E%u043C%20%u043E%u043A%u043E%u0448%u043A%u0435%20...............%0Afunction%20translateText%28text%2C%20clipboard%29%20%7B%0A%20%20%20if%20%28%20text%20%3D%3D%20false%20%29%20return%3B%0A%0A%20%20%20//%20%u043F%u0435%u0440%u0435%u0432%u043E%u0434%20%u0432%20Google%20%u043F%u0435%u0440%u0435%u0432%u043E%u0434%u0447%u0438%u043A%u0435%20%u0442%u0435%u043A%u0441%u0442%u0430%0A%20%20%20if%20%28%20%21cbu.getPrefs%28%22Translate.textInPopup%22%29%20%29%20%7B%0A%20%20%20%20%20%20%20%20var%20url%20%3D%20%22http%3A//translate.google.com/translate_t%3Fhl%3Dru%23auto%7Cru%7C%22%20+%20text%3B%0A%20%20%20%20%20%20%20%20gBrowser.moveTabTo%28gBrowser.selectedTab%20%3D%20gBrowser.addTab%28url%29%2C%20gBrowser.mCurrentTab._tPos%20+%201%29%3B%0A%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20%20%20%20%20%7D%3B%0A%0A%20%20%20var%20beg%20%3D%20%22http%3A//translate.google.com/translate_t%3Fprev%3Dhp%26hl%3Dru%26js%3Dy%26text%3D%22%3B%0A%20%20%20var%20end%20%3D%20%22%26file%3D%26sl%3Dauto%26tl%3Dru%26history_state0%3D%23%22%3B%0A%20%20%20var%20url%20%3D%20beg%20+%20text%20+%20end%3B%0A%20%20%20%20%0A%20%20%20var%20req%20%3D%20new%20XMLHttpRequest%28%29%3B%0A%20%20%20req.open%28%22GET%22%2C%20url%2C%20true%29%3B%0A%20%20%20%0A%20%20%20req.onload%20%3D%28%29%3D%3E%20%7B%0A%20%20%20%20%20%20%20var%20res%20%3D%20req.responseText%3B%0A%20%20%20%20%20%20%20var%20suHTML%20%3D%20Cc%5B%22@mozilla.org/feed-unescapehtml%3B1%22%5D.getService%28Ci.nsIScriptableUnescapeHTML%29%3B%0A%20%20%20%20%20%20%20var%20doc%20%3D%20document.implementation.createHTMLDocument%28%22%22%29%3B%0A%20%20%20%20%20%20%20doc.body.appendChild%28suHTML.parseFragment%28res%2C%20false%2C%20null%2C%20doc.body%29%29%3B%0A%0A%20%20%20%20%20%20%20var%20ruHTML%20%3D%20doc.getElementById%28%22result_box%22%29.innerHTML%3B%0A%20%20%20%20%20%20%20var%20dataURL%20%3D%20%27data%3Atext/html%3Bcharset%3Dutf-8%2C%20%3Chtml%20contenteditable/%3E%3Ctitle%3ETranslate%3C/title%3E%27%0A%20%20%20%20%20%20%20dataURL%20+%3D%20%27%3Cstyle%3Ebody%20%7B%20background-color%3A%20%27+%20background%20+%27%3B%20font-size%3A%20%27+%20fontSize%20+%27%20%7D%3C/style%3E%27%3B%0A%20%20%20%20%20%20%20dataURL%20+%3D%20ruHTML%20+%20%27%3C/body%3E%3C/html%3E%27%3B%0A%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20var%20width%20%3D%20%280%29%20%7C%7C%20winWidth%20*%20gBrowser.boxObject.width%3B%20%0A%20%20%20%20%20%20%20var%20height%20%3D%20%280%29%20%7C%7C%20winHeight%20*%20gBrowser.boxObject.height%3B%0A%0A%20%20%20%20%20%20%20//%20%u043F%u043E%u043B%u0443%u0447%u0438%u0442%u044C%20%u043A%u043E%u043E%u0440%u0434%u0438%u043D%u0430%u0442%u044B%20%u043A%u043D%u043E%u043F%u043A%u0438%20%u0438%u043B%u0438%20%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u043D%u043E%u0433%u043E%20%u0442%u0435%u043A%u0441%u0442%u0430%0A%20%20%20%20%20%20%20if%20%28%20clipboard%20%26%26%20cbu.getPrefs%28%22Translate.textInPopup%22%29%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20var%20bcr%20%3D%20self.getBoundingClientRect%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20var%20posX%20%3D%20bcr.left%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20var%20posY%20%3D%20bcr.bottom%20+%205%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20else%0A%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20var%20bcr%20%3D%20gBrowser.contentDocument.defaultView.getSelection%28%29.getRangeAt%280%29.getBoundingClientRect%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20var%20posX%20%3D%20window.content.mozInnerScreenX%20+%20bcr.left%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20var%20posY%20%3D%20window.content.mozInnerScreenY%20+%20bcr.bottom%20+%205%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20var%20deltaX%20%3D%20posX%20+%20width%20-%20%28fullScreen%20%3F%20screen.width%20%3A%20screen.availWidth%29%3B%0A%20%20%20%20%20%20%20if%20%28deltaX%20%3E%200%29%20posX%20-%3D%20deltaX%3B%0A%20%20%20%20%20%20%20var%20deltaY%20%3D%20posY%20+%20height%20-%20%28fullScreen%20%3F%20screen.height%20%3A%20screen.availHeight%29%3B%0A%20%20%20%20%20%20%20if%20%28deltaY%20%3E%200%29%20posY%20-%3D%20deltaY%3B%20%20%20%20%20%0A%0A%20%20%20%20%20%20%20var%20win%20%3D%20window.openDialog%28dataURL%2C%20%22%22%2C%20%22outerWidth%3D%22+width+%22%2C%20outerHeight%3D%22+height+%22%2C%20screenX%3D%22+posX+%22%2C%20screenY%3D%22+posY+%22%2C%20status%3Dno%2C%20scrollbars%3Dyes%2C%20resizable%3Dyes%22%29%3B%0A%20%20%20%20%20%20%20win.focus%28%29%3B%0A%0A%20%20%20%20%20%20%20//%20%u0437%u0430%u043A%u0440%u044B%u0432%u0430%u0442%u044C%20%u043E%u043A%u043E%u0448%u043A%u043E%20%u043F%u0435%u0440%u0435%u0432%u043E%u0434%u0430%20%u043A%u043B%u0438%u043A%u043E%u043C%20%u043D%u0430%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u0435%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20gBrowser.addEventListener%28%22click%22%2C%20function%20c%28%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20this.removeEventListener%28%22click%22%2C%20c%29%3B%0A%20%20%20%20%20%20%20%20%20%20win%20%26%26%20win.close%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%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%7D%29%3B%0A%20%20%20%7D%3B%0A%20%20%20req.channel.loadFlags%20%7C%3D%20req.channel.LOAD_FROM_CACHE%3B%0A%20%20%20req.send%28null%29%0A%7D%3B%0A%0A%0A//%20%u041F%u043E%u0434%u0441%u043A%u0430%u0437%u043A%u0430%20%u0443%20%u043A%u043D%u043E%u043F%u043A%u0438%20...............%0Athis.tooltipText%20%3D%20%22Translate%20%5Cn%u041B%3A%20%u041F%u0435%u0440%u0435%u0432%u0435%u0441%u0442%u0438%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u0443%20/%20%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u043D%u044B%u0439%20%u0442%u0435%u043A%u0441%u0442%20%5Cn%u0421%3A%20%u041F%u0435%u0440%u0435%u0432%u0435%u0441%u0442%u0438%20%u0442%u0435%u043A%u0441%u0442%20%u0438%u0437%20%u0431%u0443%u0444%u0435%u0440%u0430%20%u043E%u0431%u043C%u0435%u043D%u0430%20%5Cn%u041F%3A%20%u041C%u0435%u043D%u044E%20%5Cn%u0414%u041F%3A%20CB%20%u043C%u0435%u043D%u044E%22%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

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

Выделить код

Код:

// Translate от 27.02.2017. ...............

// Настройка функций кликов мыши для кнопки ...............
this.onclick =e=> {
   if ( e.button == 0 ) {         
        var sel = getSelect();
        sel ? translateText(sel) : translatePage();    
        }
                    
   if ( e.button == 1 )
        translateText(gClipboard.read(), true);
          
   if ( e.button == 2 && !e.ctrlKey && !e.shiftKey && !e.altKey && !e.metaKey ) { 
        e.preventDefault();  
        menu.showPopup(self, -1, -1, "popup", "bottomleft", "topleft");
        } 
};
this.oncontextmenu =e=> { e.button && !e.ctrlKey && e.preventDefault() };


var background = 'white', fontSize = 'medium'; // фон и размер шрифта окошка перевода
var winWidth = 0.4, winHeight = 0.4;          // ширина и высота окошка перевода относительно размера страницы


// Создать меню ...............
var array = [    
    { label: "Перевод текста в маленьком окошке", checkbox: '', value: 'Translate.textInPopup' },
    { label: "Перевод текста в двойным правым кликом", checkbox: '', value: 'Translate.textWithDoubleRightClick' },              
    { label: "Перевод страницы в новой вкладке сразу справа", checkbox: '', value: 'Translate.nextPage' },
    { label: "Перевод выделенного текста из контекстного меню", checkbox: '', value: 'Translate.textFromContextMenu' },              
    { separator: ''},
    { label: "Удалять подсказки в переводчиках", checkbox: '', value: 'Translate.noTooltipForTranslate', func: '' },
    { label: "Удалять панель управления в переводчике Googlе", checkbox: '', value: 'Translate.removeGoogleTranslatorHeader', func: '' },
    { separator: ''},
    { label: "Перевод страницы в обычном переводчике Google", radio: '', value: 'google' },    
    { label: "Перевод страницы с заменой текста в переводчике Google", radio: '', value: 'googleBookmarklet' }
            ];
var menu = self.appendChild( document.createElement("menupopup") );  
array.forEach((m)=> {
   if ( "separator" in m ) { menu.appendChild( document.createElement("menuseparator") ); return };
   var mItem = document.createElement("menuitem");
   mItem.setAttribute("label", m.label);
   
   if ( "radio" in m ) { 
        mItem.setAttribute("type", "radio");
        mItem.setAttribute('checked', cbu.getPrefs("Translate.pageIn") == m.value );
        mItem.onclick =()=> cbu.setPrefs("Translate.pageIn", m.value);  
        }  
   if ( "checkbox" in m ) {          
        mItem.setAttribute('type', 'checkbox');
        mItem.setAttribute('checked', cbu.getPrefs(m.value) );
        mItem.onclick =()=> cbu.setPrefs(m.value, !cbu.getPrefs(m.value));  
        }
   if ( "func" in m ) mItem.addEventListener("command", ()=> toggleGoogleTranslatorStyle());
       
   menu.appendChild(mItem);
});
menu.setAttribute("onclick", "event.stopPropagation()");


// Получить выделенный текст из страницы или false ...............
function getSelect() {
   var sel = gBrowser.contentDocument.defaultView.getSelection();
   return (sel == '') ? false : sel.toString();
};


// Удалить панель управления в переводчике Googlе и подсказки в переводчиках ...............
function toggleGoogleTranslatorStyle(arg) {
   var sss = Cc["@mozilla.org/content/style-sheet-service;1"].getService(Ci.nsIStyleSheetService);
   try { sss.unregisterSheet( self.uri, 0) } catch(e) {};
   
   if ( cbu.getPrefs("Translate.removeGoogleTranslatorHeader") ) {  // панель управления
        var removeHeader = '\
            @-moz-document domain("translate.google.com") {\
               #gb, #gt-bbar, #gt-c:not([class="g-section"]) { display: none !important; }\
               #contentframe { top: 0 !important; }\
            }';           
        }
   
   if ( cbu.getPrefs("Translate.noTooltipForTranslate") ) {  // подсказки в переводчиках
        var noPopup = '\
            /*Microsoft*/\
            DIV[translate="no"] { display: none !important; }\
            *[lang="ru"] {\
            color: black !important;\
            background-color: transparent !important;\
            }\
            /*Google*/\
            @-moz-document domain("translate.google.com") {\
               .jfk-tooltip { display: none !important; }\
            }\
            @-moz-document regexp("^https?://translate\.google\..*") {/**/}\
            @-moz-document domain("translate.googleusercontent.com") {\
              span[onmouseout][onmouseover][style] { background-color: transparent !important; }\
              .gmnoprint { display: none !important; }\
            }\
            .goog-text-highlight {\
            background-color: transparent !important;\
            border: none !important;\
            box-shadow: none !important;\
            }\
            .goog-tooltip.skiptranslate { display: none !important; }\
            ';
        }   
   self.css = removeHeader + noPopup;

   if ( !!self.css ) {
        self.uri = makeURI("data:text/css," + encodeURIComponent(self.css));
        sss.loadAndRegisterSheet(self.uri, 0);
        }
        
   arg && addDestructor(()=> sss.unregisterSheet(self.uri, 0) );  
};
toggleGoogleTranslatorStyle(true); 


// Перевод страницы ...............   
function translatePage() {
   var translator = cbu.getPrefs("Translate.pageIn");
   
   // перевод страницы в обычном переводчике Google в новой активной вкладке или текущей вкладке
   if ( translator == "google" ) {
        var url = "http://translate.google.com/translate?u=" + content.location + "&hl=ru&ie=UTF-8&sl=auto&tl=ru";
        cbu.getPrefs("Translate.nextPage")
        ? gBrowser.moveTabTo(gBrowser.selectedTab = gBrowser.addTab(url), gBrowser.mCurrentTab._tPos + 1)
        : loadURI(url);
        return;
        } 

   // перевод страницы с заменой текста на странице в переводчике Microsoft или Google 
   if ( cbu.getPrefs("Translate.nextPage") ) {
        gBrowser.getBrowserForTab(gBrowser.selectedTab = gBrowser.duplicateTab(gBrowser.mCurrentTab))
           .addEventListener("pageshow", function c(e) {
               this.removeEventListener(e.type, c);
               runBukmarklet();
           });              
        }    
   else runBukmarklet();
   
   // запустить букмарклет для перевода
   function runBukmarklet() {
      cbu.setPrefs("security.mixed_content.block_active_content", false);
      
      content.document.location = "javascript:{var d=document; var b=d.body; var o=d.createElement('script');o.setAttribute('src','http://translate.google.com/translate_a/element.js?cb=googleTranslateElementInit&hl=ru');o.setAttribute('type','text/javascript');b.appendChild(o); var v=b.insertBefore(d.createElement('div'),b.firstChild);v.id='google_translate_element';v.style.display='none'; var p=d.createElement('scri'+'pt');p.text='function%20googleTranslateElementInit(){var%20tElem%20=%20new%20google.translate.TranslateElement({pageLanguage:%22%22},%22google_translate_element%22);setTimeout(function()%20{%20tElem.showBanner(true);%20},100);}';p.setAttribute('type','text/javascript');b.appendChild(p);}void%200";
   } 
};


// Обработчик следит за двойным правым кликом мыши на странице и запускает перевод выделенного текста ...............
addEventListener("dblclick", e=> {
   if ( e.button && cbu.getPrefs("Translate.textWithDoubleRightClick") ) {
        e.preventDefault();
        document.getElementById("contentAreaContextMenu").hidePopup();

        translateText(getSelect());
        }
}, false, gBrowser);


// Перевод выделенного текста из контекстного меню ...............   
var contextMenu = document.getElementById("contentAreaContextMenu");
var mItem = contextMenu.insertBefore(document.createElement("menuitem"), contextMenu.children[1]);
mItem.setAttribute("label", "Перевод выделенного текста");
mItem.onclick =()=> translateText(getSelect());
addEventListener("popupshowing", ()=> {
   mItem.hidden = !cbu.getPrefs("Translate.textFromContextMenu") || !gContextMenu.isTextSelected; 
}, false, contextMenu);
addDestructor(()=> mItem.remove());


// Перевести текст в Google переводчике в новой вкладке сразу справа или в маленьком окошке ...............
function translateText(text, clipboard) {
   if ( text == false ) return;

   // перевод в Google переводчике текста
   if ( !cbu.getPrefs("Translate.textInPopup") ) {
        var url = "http://translate.google.com/translate_t?hl=ru#auto|ru|" + text;
        gBrowser.moveTabTo(gBrowser.selectedTab = gBrowser.addTab(url), gBrowser.mCurrentTab._tPos + 1);
        return;
        };

   var beg = "http://translate.google.com/translate_t?prev=hp&hl=ru&js=y&text=";
   var end = "&file=&sl=auto&tl=ru&history_state0=#";
   var url = beg + text + end;
    
   var req = new XMLHttpRequest();
   req.open("GET", url, true);
   
   req.onload =()=> {
       var res = req.responseText;
       var suHTML = Cc["@mozilla.org/feed-unescapehtml;1"].getService(Ci.nsIScriptableUnescapeHTML);
       var doc = document.implementation.createHTMLDocument("");
       doc.body.appendChild(suHTML.parseFragment(res, false, null, doc.body));

       var ruHTML = doc.getElementById("result_box").innerHTML;
       var dataURL = 'data:text/html;charset=utf-8, <html contenteditable/><title>Translate</title>'
       dataURL += '<style>body { background-color: '+ background +'; font-size: '+ fontSize +' }</style>';
       dataURL += ruHTML + '</body></html>';
       
       var width = (0) || winWidth * gBrowser.boxObject.width; 
       var height = (0) || winHeight * gBrowser.boxObject.height;

       // получить координаты кнопки или выделенного текста
       if ( clipboard && cbu.getPrefs("Translate.textInPopup") ) {
            var bcr = self.getBoundingClientRect();
            var posX = bcr.left;
            var posY = bcr.bottom + 5;
            }
       else
            {
            var bcr = gBrowser.contentDocument.defaultView.getSelection().getRangeAt(0).getBoundingClientRect();
            var posX = window.content.mozInnerScreenX + bcr.left;
            var posY = window.content.mozInnerScreenY + bcr.bottom + 5;
            }
       
       var deltaX = posX + width - (fullScreen ? screen.width : screen.availWidth);
       if (deltaX > 0) posX -= deltaX;
       var deltaY = posY + height - (fullScreen ? screen.height : screen.availHeight);
       if (deltaY > 0) posY -= deltaY;     

       var win = window.openDialog(dataURL, "", "outerWidth="+width+", outerHeight="+height+", screenX="+posX+", screenY="+posY+", status=no, scrollbars=yes, resizable=yes");
       win.focus();

       // закрывать окошко перевода кликом на странице                 
       gBrowser.addEventListener("click", function c() {
          this.removeEventListener("click", c);
          win && win.close();                                    
       });
   };
   req.channel.loadFlags |= req.channel.LOAD_FROM_CACHE;
   req.send(null)
};


// Подсказка у кнопки ...............
this.tooltipText = "Translate \nЛ: Перевести страницу / выделенный текст \nС: Перевести текст из буфера обмена \nП: Меню \nДП: CB меню";


За код который переводит текст в маленьком окошке спасибо okkamas_knife и Dumby
За код который удаляет панель управления(заголовок) в переводчике Googlе спасибо Kamui

Greasemonkey menu(Firefox 3.6 - 4.0+)
Имитирует старое меню greasemonkey с перехватом правой кнопки мыши.

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

Выделить код

Код:

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%3EGreasemonkey%20menu%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAyVJREFUOMt1k0toXGUAhb//n5vMjDczmUeaO3nNdMYkTCKNpKGpUWzHYsSkGrALHwiufCDuFLFIwUUVBHeiIApZVCqFIii2LqymWk0nbcWWaGxompd53HQmkzQTO6+be38XWrSlnuXhHDiL78Ad9MEg4qPHcN3uv/8o7sMp9P962u2hDweRr3yNA9gAR57AqNhszxXZcb1M1FF8Bky+/RDy0Gkcwf/o48fplZJUscJAvkxPaQufEBz3u3lNKbKvn6J0xwXv9lJf7eHVconnKoKG1QKUyqBrcJeHSMXmSdvmGLB0OIW8ZcGbCcKRNoaDRt2QY9uYi+sULTCag/hqPGSXTDb/5NBbo7xzsyMADvYxqBQHat3cfc9996Z2pPbhQjrj356UdrFI98CQkrouJs78wPhP6ZPXNjCl5Mf3znFEi0AoFIu+EfB59jg38iTvf5CG1g5HOUruPhBWtrVFbcQQ0iVU8gFHLM4t7vfH3BTKzu6952a+02qhVnj1WFWNB6VpKmw0MrOSkacuT6s9yU5haVX8fPaC6m9NCMNoVJ6wQdmyhJB2k9tHnVaAG+bqxmIum421xaPCXxtQX42Nc3RkQuSyW5SkzfcXrxDsr+aZh3dR5a0Rl6cmKDrapuViUy5AZmYuc2IzX6Al3kJVwC8C1V61ZebUNj1AQHmVyuQxQiFwV4lovBnLsrl61fz89HX+EABJ6Hz+6eiJwaeG4raloweDlLxeEvE4UrqYW1xQerkk1pZX8Ppsvjn+5canw1cG0pDWAJqg4hLKQsLSvMnyyG+qOdYolkYn8eheHNsSU79Pq/qWgOjsaURKVaqrpkjlH5AaEqzNTi/M/nrhUntf/z48fl2Ysxm2LIUSIByHpnZDJHdGmTg/xtTk3Jy3jhzL4Hq5CzE8SXG7xvzG+rW9hc18MNYWIbmrnURXlObWbTS3hfHqDr+cSXN2JL1umpWDx+YZAxAvdCM+uYgCGKqnIxDiWaPB/4gv4I+5q7WgS5PCtp3MxnreXFleO7+2ytEvTEYBXtz5N4i81CNuQToJkUZIJCDZC9190JWEpg7Xv9+5Wf4LG9k8TnFGv1sAAAAASUVORK5CYII%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%0Athis.pref%3D%27greasemonkey.enabled%27%3B%0A%0Athis.onImage%3D%27data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAyVJREFUOMt1k0toXGUAhb//n5vMjDczmUeaO3nNdMYkTCKNpKGpUWzHYsSkGrALHwiufCDuFLFIwUUVBHeiIApZVCqFIii2LqymWk0nbcWWaGxompd53HQmkzQTO6+be38XWrSlnuXhHDiL78Ad9MEg4qPHcN3uv/8o7sMp9P962u2hDweRr3yNA9gAR57AqNhszxXZcb1M1FF8Bky+/RDy0Gkcwf/o48fplZJUscJAvkxPaQufEBz3u3lNKbKvn6J0xwXv9lJf7eHVconnKoKG1QKUyqBrcJeHSMXmSdvmGLB0OIW8ZcGbCcKRNoaDRt2QY9uYi+sULTCag/hqPGSXTDb/5NBbo7xzsyMADvYxqBQHat3cfc9996Z2pPbhQjrj356UdrFI98CQkrouJs78wPhP6ZPXNjCl5Mf3znFEi0AoFIu+EfB59jg38iTvf5CG1g5HOUruPhBWtrVFbcQQ0iVU8gFHLM4t7vfH3BTKzu6952a+02qhVnj1WFWNB6VpKmw0MrOSkacuT6s9yU5haVX8fPaC6m9NCMNoVJ6wQdmyhJB2k9tHnVaAG+bqxmIum421xaPCXxtQX42Nc3RkQuSyW5SkzfcXrxDsr+aZh3dR5a0Rl6cmKDrapuViUy5AZmYuc2IzX6Al3kJVwC8C1V61ZebUNj1AQHmVyuQxQiFwV4lovBnLsrl61fz89HX+EABJ6Hz+6eiJwaeG4raloweDlLxeEvE4UrqYW1xQerkk1pZX8Ppsvjn+5canw1cG0pDWAJqg4hLKQsLSvMnyyG+qOdYolkYn8eheHNsSU79Pq/qWgOjsaURKVaqrpkjlH5AaEqzNTi/M/nrhUntf/z48fl2Ysxm2LIUSIByHpnZDJHdGmTg/xtTk3Jy3jhzL4Hq5CzE8SXG7xvzG+rW9hc18MNYWIbmrnURXlObWbTS3hfHqDr+cSXN2JL1umpWDx+YZAxAvdCM+uYgCGKqnIxDiWaPB/4gv4I+5q7WgS5PCtp3MxnreXFleO7+2ytEvTEYBXtz5N4i81CNuQToJkUZIJCDZC9190JWEpg7Xv9+5Wf4LG9k8TnFGv1sAAAAASUVORK5CYII%3D%27%3B%0Athis.offImage%3D%27data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAyBJREFUOMt1k8trK3Ucxc/3N888+kgmjGlu4yQqrZRW+qKlWdi0gtR4K8WFG8E/QhcKuvXfEBQUQdxpFw0S6I1Q+liUUtKmkNY0kuaGaDppemcmM7+fi8uFq9Sz/MDhnMU5Eh5QoVCgyclJqVqtipf5xsaGlk6n9aurq8ELJj9gZtvb2xxAAABbW1uvBEGQcRxnxnXdVznnPwA4W1tbY6VSiRP+R5ubm0tElB8MBu+5rrvg+/4QEf2kqupnANrFYtF5sMHKyoqpadqnrut+AmDs/v4erutCURRompYMguAjIcSPAP7M5/PsXw2mpqaMdDr9jWEYH3DOcXNzg8FggGQyiUgkglarhX6//1W5XP76hYcAIJfLFYQQH2qa9vrs7Gx+eXkZjDFeLpeZ53lYXV0VmqbRwcEBDg8Pf7Vtu8kYe7K3t/edDCA+Njb2eTQafdt1XczPzyObzXIhBCsUCsL3fSQSCSIiwTmnRqPxfiqVgud5y0dHR78xACOqqlqhUAiRSESYpimazSYrFovCcRzyfZ9KpZJotVpkmqaIxWJC13UoivJoeHg4IQPodzqdRqfTsTKZDI2MjIiTkxPs7u7S7e0tOOc4Pj6GqqpYX1+HpmlUrVbBOe/JstxjAJ42Go1f7u7uYFkWQqEQ6bouHMcR4+PjMAxDBEEAwzBARJROpxEEAer1+s+tVqsuAUC73f5raWmpkMvlYuFwGOFwmKLRKCUSCcTjcUqlUshms8QYg6IouL6+vi2Xy19yzusyACiK4jHGBpxzVCoVnJ2dCUVR6OLiArIsAwDt7OyIiYkJMk0TROREIpFn3W4XEgBkMhkEQfCOJElv6LqOoaEhmp6ehmVZMAwD8XgcsiyT53moVqs4PT097ff739q2bUszMzN0fn7+TFXVP3q93qoQImZZFkZHR0H0fGeMMUiShEqlgv39/b/b7fYXl5eXewAgq6oKAKjVak88z3vc6/U+rtVq70ajUUtV1ZgkSeT7/lPbtpudTme/2+1+X6vVfgeAhYWF5wmLi4v/PVUSwGsA3mSMzWma9haARy9/Z25ujgDgH7jkWH58xN7+AAAAAElFTkSuQmCC%27%3B%0A%0Athis.PS%3DComponents.classes%5B%27@mozilla.org/preferences-service%3B1%27%5D.getService%28Components.interfaces.nsIPrefBranch%29%3B%0A%0Athis.oncontextmenu%20%3D%20function%28event%29%20%7B%0A%20%20%20%20if%28event.button%20%3D%3D%202%20%26%26%20%21event.shiftKey%20%26%26%20%21event.altKey%20%26%26%20%21event.metaKey%20%26%26%20%21event.ctrlKey%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%20%0Athis.setAttribute%28%22onclick%22%2C%22if%28event.button%3D%3D0%29%7Bthis.toggleStatus%28%29%3B%7D%20else%20if%28event.button%3D%3D1%29%20%7BGM_OpenScriptsMgr%28%29%3B%7D%20else%20if%28event.button%3D%3D2%29%7Bif%28%21this.lastChild%29%7Bvar%20gm_menu%3Ddocument.getElementById%28%27gm_general_menu%27%29.getElementsByTagName%28%27menupopup%27%29%5B0%5D.cloneNode%28true%29%3Bthis.appendChild%28gm_menu%29%3B%7D%20var%20popup%3Ddocument.getBoxObjectFor%28this%29%3Bthis.lastChild.showPopup%28this%2C-1%2C-1%2C%27popup%27%2C%27bottomleft%27%2C%27topleft%27%29%3B%7D%22%29%3B%0A%0Athis.setStatus%3Dfunction%28%29%20%7B%0A%20var%20status%20%3D%20this.PS.getBoolPref%28this.pref%29%3B%0A%20if%20%28status%3D%3Dtrue%29%20%7B%0A%20%20this.image%3Dthis.onImage%3B%0A%20%20this.tooltipText%3D%22Greasemonkey%20enabled%22%0A%20%7D%20else%20%7B%0A%20%20this.image%3Dthis.offImage%3B%0A%20%20this.tooltipText%3D%22Greasemonkey%20disabled%22%0A%20%7D%0A%7D%0A%0Athis.ob%3D%7B%7D%3B%0Athis.ob.observe%3Dthis.setStatus.bind%28this%29%3B%0Athis.PS.addObserver%28this.pref%2Cthis.ob%2Cfalse%29%3B%0Athis.setStatus%28%29%3B%0A%0Athis.toggleStatus%3Dfunction%28%29%20%7B%0A%20switch%28this.PS.getBoolPref%28this.pref%29%29%20%7B%0A%20%20case%20true%3A%20this.PS.setBoolPref%28this.pref%2Cfalse%29%3B%20break%3B%0A%20%20case%20false%3A%20this.PS.setBoolPref%28this.pref%2Ctrue%29%3B%20break%3B%0A%20%7D%0A%7D%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

Код:

Выделить код

Код:

/*Initialization code*/

this.pref='greasemonkey.enabled';

this.onImage='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAyVJREFUOMt1k0toXGUAhb//n5vMjDczmUeaO3nNdMYkTCKNpKGpUWzHYsSkGrALHwiufCDuFLFIwUUVBHeiIApZVCqFIii2LqymWk0nbcWWaGxompd53HQmkzQTO6+be38XWrSlnuXhHDiL78Ad9MEg4qPHcN3uv/8o7sMp9P962u2hDweRr3yNA9gAR57AqNhszxXZcb1M1FF8Bky+/RDy0Gkcwf/o48fplZJUscJAvkxPaQufEBz3u3lNKbKvn6J0xwXv9lJf7eHVconnKoKG1QKUyqBrcJeHSMXmSdvmGLB0OIW8ZcGbCcKRNoaDRt2QY9uYi+sULTCag/hqPGSXTDb/5NBbo7xzsyMADvYxqBQHat3cfc9996Z2pPbhQjrj356UdrFI98CQkrouJs78wPhP6ZPXNjCl5Mf3znFEi0AoFIu+EfB59jg38iTvf5CG1g5HOUruPhBWtrVFbcQQ0iVU8gFHLM4t7vfH3BTKzu6952a+02qhVnj1WFWNB6VpKmw0MrOSkacuT6s9yU5haVX8fPaC6m9NCMNoVJ6wQdmyhJB2k9tHnVaAG+bqxmIum421xaPCXxtQX42Nc3RkQuSyW5SkzfcXrxDsr+aZh3dR5a0Rl6cmKDrapuViUy5AZmYuc2IzX6Al3kJVwC8C1V61ZebUNj1AQHmVyuQxQiFwV4lovBnLsrl61fz89HX+EABJ6Hz+6eiJwaeG4raloweDlLxeEvE4UrqYW1xQerkk1pZX8Ppsvjn+5canw1cG0pDWAJqg4hLKQsLSvMnyyG+qOdYolkYn8eheHNsSU79Pq/qWgOjsaURKVaqrpkjlH5AaEqzNTi/M/nrhUntf/z48fl2Ysxm2LIUSIByHpnZDJHdGmTg/xtTk3Jy3jhzL4Hq5CzE8SXG7xvzG+rW9hc18MNYWIbmrnURXlObWbTS3hfHqDr+cSXN2JL1umpWDx+YZAxAvdCM+uYgCGKqnIxDiWaPB/4gv4I+5q7WgS5PCtp3MxnreXFleO7+2ytEvTEYBXtz5N4i81CNuQToJkUZIJCDZC9190JWEpg7Xv9+5Wf4LG9k8TnFGv1sAAAAASUVORK5CYII=';
this.offImage='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAyBJREFUOMt1k8trK3Ucxc/3N888+kgmjGlu4yQqrZRW+qKlWdi0gtR4K8WFG8E/QhcKuvXfEBQUQdxpFw0S6I1Q+liUUtKmkNY0kuaGaDppemcmM7+fi8uFq9Sz/MDhnMU5Eh5QoVCgyclJqVqtipf5xsaGlk6n9aurq8ELJj9gZtvb2xxAAABbW1uvBEGQcRxnxnXdVznnPwA4W1tbY6VSiRP+R5ubm0tElB8MBu+5rrvg+/4QEf2kqupnANrFYtF5sMHKyoqpadqnrut+AmDs/v4erutCURRompYMguAjIcSPAP7M5/PsXw2mpqaMdDr9jWEYH3DOcXNzg8FggGQyiUgkglarhX6//1W5XP76hYcAIJfLFYQQH2qa9vrs7Gx+eXkZjDFeLpeZ53lYXV0VmqbRwcEBDg8Pf7Vtu8kYe7K3t/edDCA+Njb2eTQafdt1XczPzyObzXIhBCsUCsL3fSQSCSIiwTmnRqPxfiqVgud5y0dHR78xACOqqlqhUAiRSESYpimazSYrFovCcRzyfZ9KpZJotVpkmqaIxWJC13UoivJoeHg4IQPodzqdRqfTsTKZDI2MjIiTkxPs7u7S7e0tOOc4Pj6GqqpYX1+HpmlUrVbBOe/JstxjAJ42Go1f7u7uYFkWQqEQ6bouHMcR4+PjMAxDBEEAwzBARJROpxEEAer1+s+tVqsuAUC73f5raWmpkMvlYuFwGOFwmKLRKCUSCcTjcUqlUshms8QYg6IouL6+vi2Xy19yzusyACiK4jHGBpxzVCoVnJ2dCUVR6OLiArIsAwDt7OyIiYkJMk0TROREIpFn3W4XEgBkMhkEQfCOJElv6LqOoaEhmp6ehmVZMAwD8XgcsiyT53moVqs4PT097ff739q2bUszMzN0fn7+TFXVP3q93qoQImZZFkZHR0H0fGeMMUiShEqlgv39/b/b7fYXl5eXewAgq6oKAKjVak88z3vc6/U+rtVq70ajUUtV1ZgkSeT7/lPbtpudTme/2+1+X6vVfgeAhYWF5wmLi4v/PVUSwGsA3mSMzWma9haARy9/Z25ujgDgH7jkWH58xN7+AAAAAElFTkSuQmCC';

this.PS=Components.classes['@mozilla.org/preferences-service;1'].getService(Components.interfaces.nsIPrefBranch);

this.oncontextmenu = function(event) {
    if(event.button == 2 && !event.shiftKey && !event.altKey && !event.metaKey && !event.ctrlKey) {
        // Блокируем контекстное меню при клике ПКМ без модификаторов
        event.preventDefault();
        event.stopPropagation();
    }
};
 
this.setAttribute("onclick","if(event.button==0){this.toggleStatus();} else if(event.button==1) {GM_OpenScriptsMgr();} else if(event.button==2){if(!this.lastChild){var gm_menu=document.getElementById('gm_general_menu').getElementsByTagName('menupopup')[0].cloneNode(true);this.appendChild(gm_menu);} var popup=document.getBoxObjectFor(this);this.lastChild.showPopup(this,-1,-1,'popup','bottomleft','topleft');}");

this.setStatus=function() {
 var status = this.PS.getBoolPref(this.pref);
 if (status==true) {
  this.image=this.onImage;
  this.tooltipText="Greasemonkey enabled"
 } else {
  this.image=this.offImage;
  this.tooltipText="Greasemonkey disabled"
 }
}

this.ob={};
this.ob.observe=this.setStatus.bind(this);
this.PS.addObserver(this.pref,this.ob,false);
this.setStatus();

this.toggleStatus=function() {
 switch(this.PS.getBoolPref(this.pref)) {
  case true: this.PS.setBoolPref(this.pref,false); break;
  case false: this.PS.setBoolPref(this.pref,true); break;
 }
}

Extension List ( Firefox 24+ )
показывает и даёт возможность легко скопировать список установленных расширений, тем, плагинов, языков, словарей, GreaseMonkey скриптов и Stylish стилей и список установленных Custom Buttons кнопок.

Скриншот:
ea51a756160b8f9c4de91987ebd7d955.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%u043F%u0438%u0441%u043E%u043A%20%u0440%u0430%u0441%u0448%u0438%u0440%u0435%u043D%u0438%u0439%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAACXBIWXMAAAsSAAALEgHS3X78AAAFHUlEQVQ4jX2UW4id1RmGv2+t9e9/H/5/9mF2Zh8m455tdMjJatpqQERIUUOhiNAWCqa1hwsvWoQ24E17a5EqlOKF0BPeKBLBeKC9EqoSo8SW0kQbO8l2MpnzzD7O/s9rre/rRWpvCn0v3xeemwdeZGYAACAitGAREQEBJQA4DGyZmRAAAYARUTIgIrBmZssAfGthECBBCgmK4Rbw3PVz/Nu//w7afot917uj5tfONivNOgqKjckkANpYJ972cOvTaTx9IaJsm4idct6z42xMD7Tux5/c/VNWDIzMzNcG19oXb3xwe7PctErKZiGXKxxbPP61Tmu+YoWmIErE8tr1zZXNleuZMXdFWTIHTMtVb0bvBLtYQMV8D4ESICCjTHh577tnTj3+y/lyMwqSMARJKQIKrQ2nlBIyiGZ1zinP+A/VCrUnr6+t3NwZbHyr6lVyIMRJP++/BwD/UgyMQkgGgb3ljavnx4PtP6UmXWw25n88W6nO9OOxidNIEhEbZQ+AMPXQjrla9haU035eOuJQvlroZgDnLNEPFQGRQARme3l5ezlwZg/9JdLx0r4Ov7HkLM1O06kN4khIRLRoWesMhmbErnRz+aL7QMZJSQFIS9wmAKkkSLRkQYJ6ZLHVebpUql5M9s1MYKLDe9MROw6gI5VFQhxMxnoUDuhgrV0Kg3R7befq8wfK9Tu04Hs7VfO2AExvSQGGUEdlRFxwCu63C9YT0XTAqU54rtpQVlqMwhSjvSRIEp1EWVqaBNNJp3jojSQJbvR2e/5X/ROhEsgKAYGIoB8OKaI4TWwYFQp5dax+xCMgDLIADGeY6BQ8zy0WSgckSgBEIU+0v+L9bfvSsUgnX56Y6ccM8JkCAJYo4WjtyJUtu/r7Gvofrk5WDu7a3afm6gfae8FQR8lUMTJq1+Q0aSVJgSpx69L44jNxIep0l1p3JkSvamueVADAQgpoePU1dzd/Yc6ZO78S9w5f3fnsjHRkO8oimkQBCYnCkIE0TYUQDETkfbK7e7rsF52y64lROF4iJkcxMFoiuNy/fN+F/rtPLZv6Y4N4WJKJ0w3XY1Ayh56tkACEUTDOwnRC7pwqsZFbJysnnttI1hfWR4OTj971ndfyKv8fKUww3B82huPhcSenjloBQoECmADXZ+sO5QzHUYr9yShjxjQZ61IRCqNnHn729U8GVzbeufnebT84/r0tiZIUAAAAg4yVbiStrBU2NCBjvlksgCUIaJ8NWcgg5bwvC3lRl9YA6Iicf6xf8Zb3lr/0ea938tX8KxeOnD7+qUJAECh5sdb5Z2e789KsqLyzPl5fGAXDn9VmK/OTZGoSnSACoBXWMVo7OZEDxqz9q/effS7FpBvE0e1uzz33CzI/UghIQgjoNrq9zt7im91K589Bsn/4wxuXzuSLx+YRmUbTkYMohMopynRqI4gVIJQmZnLa90qyXWxg2a12GFgqZhaWCS5d++upt6689XS1MtPTWepU65Wjqzurg/1w/NGs39hBZt7a2Wy5RfeeQinfTgKz3vU7P18bbNy9NRh+/f4HHzzvKidTjMzAjPt24o/0cF4aOOgoZVylnNXNjVHXv+21P37zD+eZCJ54+fuP3QzWO9JR7UKuOP7Noy9eWJusvvLR6se/PnvqbF+hw/jFY+9F/cow7tdzIscMTJYtGDLOjDMzbvmtPgPD5nSzHuiwIlGyQqUXygtbjnRSwwYU3vL7X+D/yxevjoD/0yMwEgAKEAQA8G+QDuH4X0FBaQAAAABJRU5ErkJggg%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%3Etry%20%7B%20Cu.import%28%22resource%3A//custombuttons-modules/addons4.js%22%2C%20%7B%7D%29%3B%20%7D%20catch%28ex%29%20%7B%7D%0A%0Afunction%20gatherInfo%28type%29%20%7B%0A%0A%09var%20tmp%20%3D%20%5B%5D%2C%20map%20%3D%20%7B%7D%2C%20sort%20%3D%20%5B%5D%3B%0A%09items.forEach%28function%28item%29%20%7B%0A%09%09if%20%28item.type%20%21%3D%20type%29%20return%3B%0A%0A%09%09var%20name%20%3D%20item.name%20%3F%20item.name.toUpperCase%28%29%20%3A%20%22UNNAMED%22%3B%0A%09%09name%20+%3D%20item.id%0A%0A%09%09tmp.push%28name%29%3B%0A%09%09map%5Bname%5D%20%3D%20item%3B%0A%09%7D%29%3B%0A%09tmp.sort%28%29%3B%0A%09tmp.forEach%28function%28name%29%20%7B%20sort.push%28map%5Bname%5D%29%20%7D%29%3B%0A%09%0A%09var%20list%20%3D%20%22%22%2C%20enabled%20%3D%200%2C%20disabled%20%3D%200%3B%0A%09sort.forEach%28function%28item%29%20%7B%0A%09%0A%09%09list%20+%3D%20%28item.name%20%7C%7C%20%22unnamed%22%29%20+%20%22%20%22%20+%20%28item.version%20%7C%7C%20%22%22%29%3B%0A%0A%09%09if%20%28item.type%20%21%3D%20%22custombuttons%22%20%26amp%3B%26amp%3B%20%28item.userDisabled%20%7C%7C%20item.appDisabled%29%29%20%7B%0A%09%09%09list%20+%3D%20%22%20%5B%20%u0432%u044B%u043A%u043B%u044E%u0447%u0435%u043D%20%5D%5Cn%22%3B%20disabled++%3B%20return%3B%0A%09%09%7D%0A%0A%09%09else%20if%20%28item.type%20%3D%3D%20%22custombuttons%22%29%20%7B%0A%0A%09%09%09var%20str%20%3D%20item.id%3B%0A%09%09%09var%20id%20%3D%20str.substring%28str.lastIndexOf%28%22custombuttons-button%22%29%2C%20str.length%29%3B%0A%09%09%09var%20button%20%3D%20document.getElementById%28id%29%3B%0A%0A%09%09%09if%20%28%21button%29%20%7B%0A%09%09%09%09list%20+%3D%20%22%20%5B%20%u041D%u0415%20%u0412%u042B%u0422%u0410%u0429%u0415%u041D%u0410%20%5D%5Cn%22%3B%20disabled++%3B%20return%3B%0A%09%09%09%7D%0A%09%09%09if%20%28button.hasAttribute%28%22initializeerror%22%29%29%20%7B%0A%09%09%09%09list%20+%3D%20%22%20%5B%20%u041E%u0428%u0418%u0411%u041A%u0410%20%u0418%u041D%u0418%u0426%u0418%u0410%u041B%u0418%u0417%u0410%u0426%u0418%u0418%20%5D%5Cn%22%3B%20disabled++%3B%20return%3B%0A%09%09%09%7D%0A%09%09%7D%0A%0A%09%09enabled++%3B%20list%20+%3D%20%22%5Cn%22%3B%0A%09%7D%29%3B%0A%09return%20%5Benabled%20+%20disabled%2C%20enabled%2C%20disabled%2C%20list%5D%3B%0A%7D%0Avar%20items%20%3D%20%5B%5D%3B%0Afunction%20extensionsCallback%28extensions%29%20%7B%0A%09var%20list%20%3D%20%22%22%3B%0A%09items%20%3D%20extensions%3B%0A%20%20%20%20%0A%09var%20info%20%3D%20Cc%5B%22@mozilla.org/xre/app-info%3B1%22%5D.getService%28Ci.nsIXULAppInfo%29%3B%0A%20%20%20%20%0A%09list%20+%3D%20info.vendor%20+%20%22%20%22%20+%20info.name%20+%20%22%20%22%20+%20info.version%20+%20%22%20%28build%20%22%20+%20info.appBuildID%20+%20%22%29%5Cn%22%3B%0A%09list%20+%3D%20%22User%20Agent%3A%20%22%20+%20navigator.userAgent%20+%20%22%5Cn%5Cn%22%3B%0A%0A%09for%28var%20type%20in%20AddonManager.addonTypes%29%20%7B%0A%09%09%0A%09%09var%20name%3B%0A%09%09var%20addonType%20%3D%20AddonManager.addonTypes%5Btype%5D%3B%0A%09%09if%20%28addonType.name%29%20name%20%3D%20addonType.name%3B%09%09%0A%09%09else%20if%20%28addonType.id%20%3D%3D%20%22custombuttons%22%29%20name%20%3D%20%22%u041A%u043D%u043E%u043F%u043A%u0438%22%3B%0A%0A%09%09list%20+%3D%20%22***%20%22%20+%20name%3B%0A%09%09var%20ext%20%3D%20gatherInfo%28addonType.id%29%3B%0A%09%09list%20+%3D%20%22%20%28%20%u0412%u043A%u043B%u044E%u0447%u0435%u043D%u043E%3A%20%22%20+%20ext%5B1%5D%20+%20%22%2C%20%u041E%u0442%u043A%u043B%u044E%u0447%u0435%u043D%u043E%3A%20%22%20+%20ext%5B2%5D%20+%20%22%2C%20%u0412%u0441%u0435%u0433%u043E%3A%20%22%20+%20ext%5B0%5D%20+%20%22%20%29%5Cn%22%20+%20ext%5B3%5D%20+%20%22%5Cn%22%3B%0A%09%7D%0A%0A%09var%20dialog%20%3D%20%27%5C%0A%09%09%26lt%3B%3Fxml-stylesheet%20href%3D%22chrome%3A//global/skin/%22%3F%26gt%3B%5Cn%5C%0A%09%09%26lt%3Bdialog%20xmlns%3D%22http%3A//www.mozilla.org/keymaster/gatekeeper/there.is.only.xul%22%5Cn%5C%0A%09%09%09xmlns%3Ahtml%3D%22http%3A//www.w3.org/1999/xhtml%22%5Cn%5C%0A%09%09%09id%3D%22cbbExtensionsLister%22%5Cn%5C%0A%09%09%09persist%3D%22width%20height%20screenX%20screenY%22%5Cn%5C%0A%09%09%09title%3D%22%u0421%u043F%u0438%u0441%u043E%u043A%20%u0440%u0430%u0441%u0448%u0438%u0440%u0435%u043D%u0438%u0439%22%5Cn%5C%0A%09%09%09width%3D%22640%22%20height%3D%22480%22%5Cn%5C%0A%09%09%09buttons%3D%22accept%2Cextra1%22%5Cn%5C%0A%09%09%09buttonlabelextra1%3D%22%u041A%u043E%u043F%u0438%u0440%u043E%u0432%u0430%u0442%u044C%20%u0432%u0441%u0435%u2026%22%5Cn%5C%0A%09%09%09onload%3D%22init%28%29%22%5Cn%5C%0A%09%09%09ondialogextra1%3D%22copy%28%29%22%26gt%3B%5Cn%5C%0A%09%09%09%26lt%3Bscript%20type%3D%22application/x-javascript%22%26gt%3B%5Cn%5C%0A%09%09%09%09%26lt%3B%21%5BCDATA%5B%5Cn%5C%0A%09%09%09%09%09function%20init%20%28%29%20%7B%7D%5Cn%5C%0A%09%09%09%09%09function%20copy%20%28%29%20%7B%5Cn%5C%0A%09%09%09%09%09%09var%20tb%20%3D%20document.getElementById%28%22addonslist%22%29%3B%5Cn%5C%0A%09%09%09%09%09%09window.arguments%5B0%5D.write%28%28opener.navigator.platform.indexOf%28%22Win%22%29%20%21%3D%20-1%29%20%3F%20tb.value.replace%28/%5C%5Cn/g%2C%20%22%5C%5Cr%5C%5Cn%22%29%20%3A%20tb.value%29%3B%5Cn%5C%0A%09%09%09%09%09%09tb.focus%20%28%29%3B%5Cn%5C%0A%09%09%09%09%09%7D%5Cn%5C%0A%09%09%09%09%5D%5D%26gt%3B%5Cn%5C%0A%09%09%09%26lt%3B/script%26gt%3B%5Cn%5C%0A%09%09%09%26lt%3Btextbox%20id%3D%22addonslist%22%20flex%3D%221%22%20multiline%3D%22true%22%20/%26gt%3B%5Cn%5C%0A%09%26lt%3B/dialog%26gt%3B%27%3B%0A%09dialog%20%3D%20%22data%3Aapplication/vnd.mozilla.xul+xml%2C%22%20+%20encodeURIComponent%28dialog%29%3B%0A//%09var%20win%20%3D%20window.openDialog%20%28dialog%2C%20%22%22%2C%20%22chrome%2Cdependent%2Cdialog%3Dno%2Cminimizable%22%2C%20custombuttonsUtils.gClipboard%29%3B%0A%09var%20win%20%3D%20window.openDialog%20%28dialog%2C%20%22%22%2C%20%22chrome%2Cdependent%2Cdialog%3Dno%22%2C%20custombuttonsUtils.gClipboard%29%3B%0A%0A%09addEventListener%28%22load%22%2C%20function%28%29%20%7B%0A%09%09var%20doc%20%3D%20win.document%3B%0A%09%09var%20textbox%20%3D%20doc.querySelector%28%22textbox%22%29%3B%0A%09%09textbox.value%20%3D%20list%3B%0A%09%09textbox.inputField.selectionStart%20%3D%0A%09%09textbox.inputField.selectionEnd%20%3D%200%3B%0A%09%7D%2C%20true%2C%20win%29%3B%0A%7D%0AAddonManager.getAllAddons%28extensionsCallback%29%3B%0A%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

Код:

Выделить код

Код:

try { Cu.import("resource://custombuttons-modules/addons4.js", {}); } catch(ex) {}

function gatherInfo(type) {

    var tmp = [], map = {}, sort = [];
    items.forEach(function(item) {
        if (item.type != type) return;

        var name = item.name ? item.name.toUpperCase() : "UNNAMED";
        name += item.id

        tmp.push(name);
        map[name] = item;
    });
    tmp.sort();
    tmp.forEach(function(name) { sort.push(map[name]) });
    
    var list = "", enabled = 0, disabled = 0;
    sort.forEach(function(item) {
    
        list += (item.name || "unnamed") + " " + (item.version || "");

        if (item.type != "custombuttons" && (item.userDisabled || item.appDisabled)) {
            list += " [ выключен ]\n"; disabled++; return;
        }

        else if (item.type == "custombuttons") {

            var str = item.id;
            var id = str.substring(str.lastIndexOf("custombuttons-button"), str.length);
            var button = document.getElementById(id);

            if (!button) {
                list += " [ НЕ ВЫТАЩЕНА ]\n"; disabled++; return;
            }
            if (button.hasAttribute("initializeerror")) {
                list += " [ ОШИБКА ИНИЦИАЛИЗАЦИИ ]\n"; disabled++; return;
            }
        }

        enabled++; list += "\n";
    });
    return [enabled + disabled, enabled, disabled, list];
}
var items = [];
function extensionsCallback(extensions) {
    var list = "";
    items = extensions;
    
    var info = Cc["@mozilla.org/xre/app-info;1"].getService(Ci.nsIXULAppInfo);
    
    list += info.vendor + " " + info.name + " " + info.version + " (build " + info.appBuildID + ")\n";
    list += "User Agent: " + navigator.userAgent + "\n\n";

    for(var type in AddonManager.addonTypes) {
        
        var name;
        var addonType = AddonManager.addonTypes[type];
        if (addonType.name) name = addonType.name;        
        else if (addonType.id == "custombuttons") name = "Кнопки";

        list += "*** " + name;
        var ext = gatherInfo(addonType.id);
        list += " ( Включено: " + ext[1] + ", Отключено: " + ext[2] + ", Всего: " + ext[0] + " )\n" + ext[3] + "\n";
    }

    var dialog = '\
        <?xml-stylesheet href="chrome://global/skin/"?>\n\
        <dialog xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"\n\
            xmlns:html="http://www.w3.org/1999/xhtml"\n\
            id="cbbExtensionsLister"\n\
            persist="width height screenX screenY"\n\
            title="Список расширений"\n\
            width="640" height="480"\n\
            buttons="accept,extra1"\n\
            buttonlabelextra1="Копировать все…"\n\
            onload="init()"\n\
            ondialogextra1="copy()">\n\
            <script type="application/x-javascript">\n\
                <![CDATA[\n\
                    function init () {}\n\
                    function copy () {\n\
                        var tb = document.getElementById("addonslist");\n\
                        window.arguments[0].write((opener.navigator.platform.indexOf("Win") != -1) ? tb.value.replace(/\\n/g, "\\r\\n") : tb.value);\n\
                        tb.focus ();\n\
                    }\n\
                ]]>\n\
            </script>\n\
            <textbox id="addonslist" flex="1" multiline="true" />\n\
    </dialog>';
    dialog = "data:application/vnd.mozilla.xul+xml," + encodeURIComponent(dialog);
//    var win = window.openDialog (dialog, "", "chrome,dependent,dialog=no,minimizable", custombuttonsUtils.gClipboard);
    var win = window.openDialog (dialog, "", "chrome,dependent,dialog=no", custombuttonsUtils.gClipboard);

    addEventListener("load", function() {
        var doc = win.document;
        var textbox = doc.querySelector("textbox");
        textbox.value = list;
        textbox.inputField.selectionStart =
        textbox.inputField.selectionEnd = 0;
    }, true, win);
}
AddonManager.getAllAddons(extensionsCallback);


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

Downloads( Firefox 3.6 - 24 )
Кнопка открывает стандартный менеджер загрузок в боковой панели, новом окне или вкладке.

ЛКМ => открыть менеджер загрузок в боковой панели.
СКМ => открыть менеджер загрузок в новом окне.
ПКМ =>  открыть менеджер загрузок в новой активной вкладке.
Ctrl + ПКМ =>  контекстное меню кнопки

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

Выделить код

Код:

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%3EDownloads%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAACXBIWXMAAAsTAAALEwEAmpwYAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAACmElEQVR42oyU3UtUQRiHn9k9c47Ho+4uhrkthmUfkHeB91GJ1paiJl0EQZd9U3f+E1EX0b8QEUQX0ScZWd0E3VhBrWJFuZuEqyLsOTtnznSxx9rSzPdq5p13nhl+729GTBXL/BUJwAFcwAZEnDdAFagAARDVb7JYHQ6QBTKsHWWgGAPXBblAZu/ubTdUQ6YnKWslWoVIv/z6zYeZ08DCRkA2QPOW7T2dXTuwLAsMhDrk03Shp77mfyABkE6laGluRgiBACJjSKXSf9T8D1RbsBJIy0IIgcGQMAYrKfhn/b9BFtKWv1sWGZKJ5LqgJNAQiyyB1hpI4ti/pYiiCEvKlWlrbIcwFt23YkgH4NWf4DV5OI4DQmCMwWiN53n1FsnF42Xgq5gqljPA9u7OjjvupmxHUypF++Z2duzsIp3O1DQyhkhr5svzFAoFSsUSy0uL6KW5z29nZkeAaSt2a/Xy2Nit8RevLmS3bJUtqRSNXiOOLX+BwlCTTmfY091NLpujNPtF5fvP3IxdrizAB2bPnjt/r21zm3g6PnHe3tQqGxwHy5KIhMBEBoTCMQalAsJqJTh18sS1oeFjD32liysaaWDRV3pydPQ4rtMQPh6fuNjouo7luiREgshEGBPhhyHzc9+DwXz/1YGh4fu+0u+ARUCvtD8EFnylJ/MDg5G0ZfT42cSlnN3peF4TRkWoasCPuWLl6OH+a4fyRx4ENUg5vsgfPgqBcqD0u96+wwYET5+/vNjWnnONiSh9+1rJ9x28cqC3/1Gg9Pt6yFqG1EC5Gur3vX2HsG2pbt+5exYDI0OD1/ftP/ikGq6GAIg1/iNik6Ydmdzl2nI3QKWqPgRKf4xfvt7oE9HAQqD0ZKB0Ic75sYv1Wht+DgB8pQ6678CoOAAAAABJRU5ErkJggg%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.onclick%20%3D%20function%28e%29%20%7B%0A%0A%20%20%20%20%20//%20%u0434%u0435%u0439%u0441%u0442%u0432%u0438%u0435%20%u043F%u0440%u0438%20%u043A%u043B%u0438%u043A%u0435%20%u041B%u041A%u041C%20....%0A%20%20%20%20%20if%20%28%20e.button%20%3D%3D%200%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20document.getElementById%28%27sidebar-box%27%29.getAttribute%28%27sidebarcommand%27%29%20%3F%20toggleSidebar%28%29%20%3A%20openWebPanel%28%22Downloads%22%2C%20downTabUrl%20%29%3B%20%20%20%20%20%09%0A%20%20%20%20%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20//%20%u0434%u0435%u0439%u0441%u0442%u0432%u0438%u0435%20%u043F%u0440%u0438%20%u043A%u043B%u0438%u043A%u0435%20%u0421%u041A%u041C%20....%20%20%20%20%0A%20%20%20%20%20if%20%28%20e.button%20%3D%3D%201%20%29%20%7B%20%0A%20%20%20%20%20%20%20%20%20%20var%20windows%20%3D%20Components.%20classes%20%5B%27@mozilla.org/appshell/window-mediator%3B1%27%5D.getService%28Components.%20interfaces.%20nsIWindowMediator%29.getEnumerator%20%28null%29%3B%0A%20%20%20%20%20%20%20%20%20%20while%28%20windows.%20hasMoreElements%28%29%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20win%20%3D%20windows.getNext%20%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%20win.document.documentURI%20%3D%3D%20%22chrome%3A//mozapps/content/downloads/downloads.xul%22%29%20%7B%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20win.close%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20%20%20%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%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%20%20%20%20%20%20BrowserDownloadsUI%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%20%0A%20%20%20%20%20//%20%u0434%u0435%u0439%u0441%u0442%u0432%u0438%u0435%20%u043F%u0440%u0438%20%u043A%u043B%u0438%u043A%u0435%20%u041F%u041A%u041C%20....%20%20%20%20%0A%20%20%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%20%20%20e.preventDefault%28%29%3B%20%20%0A%20%20%20%20%20%20%20%20%20%20downloadManagerInTab%28%20true%20%29%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%7D%3B%0A%0A%0A%0A//%20%u041E%u0431%u044A%u044F%u0432%u043B%u044F%u0435%u043C%20%u043F%u0435%u0440%u0435%u043C%u0435%u043D%u043D%u044B%u0435%20%u0434%u043B%u044F%20%u044D%u0442%u043E%u0439%20%u0432%u043A%u043B%u0430%u0434%u043A%u0438%20...................................................................%0Avar%20downTabUrl%20%3D%20%27chrome%3A//mozapps/content/downloads/downloads.xul%27%3B%0A%0A//%20%u0438%u043A%u043E%u043D%u043A%u0438%20%u0434%u043B%u044F%20%u0432%u043A%u043B%u0430%u0434%u043A%u0438%20%u0437%u0430%u0433%u0440%u0443%u0437%u043E%u043A%20....%0Aconst%20trueDownloadsImg%20%3D%20%22data%3Aimage/x-icon%3Bbase64%2CAAABAAEAEhIAAAEAIACABQAAFgAAACgAAAASAAAAJAAAAAEAIAAAAAAAWAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEDAAIAAAMACyIAEGyoLtVqpyrVDSIADwAAAgABAgACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQIAAgAAAgALHwAPZaAmwsXxnv+t63n/XpwbwAcUAA0AAAIAAQIAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAwADAAACAAwgAA9loyXFv+2W/7/wl/yg52b8n+Nj/1OJG8EBCAAMAAACAAECAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAECAAIAAAIADCEADmSiI8Sx4oX/suWH+7HmhP+T3FX/i9dK+5LZUv9RhxnAAQkADAAAAgABAgACAAAAAAAAAAAAAAAAAQIAAgAAAgANIQANY6Eiw6nbfP+l23f7p913/6fed/+I0kj/gs5A/37KPvuL0Ev/UIYYvwIJAAsAAAIAAQIAAgAAAAABAQABAAABAAsgAA1gnh/BoNJy/5vSa/qe1W3/odhx/5/Ybv+Cy0H/fsg8/3zFOv92vjX6g8VD/0yCFL0BCAALAAABAAABAAEAAAEACRUAEmqmKcyn2Hr/n9Ry/Z3Tbv+Yz2b/mtJp/5nRZv99xDz/ecI3/3e/Nv97wT7/e78//YvKT/9Xjhy/BAwACQAAAQAAAAEAFCkAL2CUKdxhkTDXXI4o1m+mN/KWzGb/ksth/pLLX/93vTn/croz/nm9Pf9noizyVoog1lqNJtlbkx/TDyAAHwAAAQAAAAAAAAAAAAAAAAACAwEEAAAAAD5oFqeXz2X/icFY+4rDWP9ytjX/bLEu+3/CQv8+ZxSnAAAAAAIDAQQAAAAAAAAAAAAAAAAAAAAAAAEAAQEBAQEDBAMEAAAAAEFqFqeSyV7/g7pR+4S8Uf9usDP/aKsr+3u9Pv9AaRSnAAAAAAMEAgQBAQEBAAAAAQAAAAAAAAAAAAAAAAAAAAACAwEEAAAAAEBpFKeNxVj/fbRK+3+2Sv9rqzD/ZaYo+3m5PP8/aBOnAAAAAAIDAQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAwEEAAAAAEBpFKeJwlT/eLBF+3qyRv9qqS7/ZKQo+3m4PP8/aBOnAAAAAAIDAQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAwEEAAAAAEBpFKeHwFD/da5B+3exQv9pqS7/ZKQo+3m4PP8/aBOnAAAAAAIDAQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAwEEAAAAAEBpFKeEv03/cqw8+3WvPv9pqS7/ZKQo+3m4PP8/aBOnAAAAAAIDAQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAwEEAAAAAEBpFKeCvkn/cKs4+3OuO/9pqS7/ZKQo+3m4PP8/aBOnAAAAAAIDAQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAwEEAAAAAD9oE6d+vET/bKky+2+sNf9oqCv/Y6Mm+3e3Ov8/aBOnAAAAAAIDAQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAwEEAAAAAEBpFaeDv0v/cKw5+3OvPP9vqzX/aqcx+3+8RP9AaRSnAAAAAAIDAQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAgAEAAAAADlkCox1szT/a6Yv+W2oMPxspy78aqQt+XSyMv85ZAqMAAAAAAECAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%3D%22%3B%0Aconst%20falseDownloadsImg%20%3D%20%22data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAACXBIWXMAAAsTAAALEwEAmpwYAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAACmElEQVR42oyU3UtUQRiHn9k9c47Ho+4uhrkthmUfkHeB91GJ1paiJl0EQZd9U3f+E1EX0b8QEUQX0ScZWd0E3VhBrWJFuZuEqyLsOTtnznSxx9rSzPdq5p13nhl+729GTBXL/BUJwAFcwAZEnDdAFagAARDVb7JYHQ6QBTKsHWWgGAPXBblAZu/ubTdUQ6YnKWslWoVIv/z6zYeZ08DCRkA2QPOW7T2dXTuwLAsMhDrk03Shp77mfyABkE6laGluRgiBACJjSKXSf9T8D1RbsBJIy0IIgcGQMAYrKfhn/b9BFtKWv1sWGZKJ5LqgJNAQiyyB1hpI4ti/pYiiCEvKlWlrbIcwFt23YkgH4NWf4DV5OI4DQmCMwWiN53n1FsnF42Xgq5gqljPA9u7OjjvupmxHUypF++Z2duzsIp3O1DQyhkhr5svzFAoFSsUSy0uL6KW5z29nZkeAaSt2a/Xy2Nit8RevLmS3bJUtqRSNXiOOLX+BwlCTTmfY091NLpujNPtF5fvP3IxdrizAB2bPnjt/r21zm3g6PnHe3tQqGxwHy5KIhMBEBoTCMQalAsJqJTh18sS1oeFjD32liysaaWDRV3pydPQ4rtMQPh6fuNjouo7luiREgshEGBPhhyHzc9+DwXz/1YGh4fu+0u+ARUCvtD8EFnylJ/MDg5G0ZfT42cSlnN3peF4TRkWoasCPuWLl6OH+a4fyRx4ENUg5vsgfPgqBcqD0u96+wwYET5+/vNjWnnONiSh9+1rJ9x28cqC3/1Gg9Pt6yFqG1EC5Gur3vX2HsG2pbt+5exYDI0OD1/ftP/ikGq6GAIg1/iNik6Ydmdzl2nI3QKWqPgRKf4xfvt7oE9HAQqD0ZKB0Ic75sYv1Wht+DgB8pQ6678CoOAAAAABJRU5ErkJggg%3D%3D%22%3B%0A%0A%0A%0A/*%20%u041E%u0442%u043A%u0440%u044B%u0432%u0430%u0442%u044C%20%u0437%u0430%u0433%u0440%u0443%u0437%u043A%u0438%20%u0432%20%u0442%u0430%u0431%u0435%20%u0438%u043B%u0438%20%u043F%u0435%u0440%u0435%u043C%u0435%u0441%u0442%u0438%u0442%u044C%20%u0432%u043A%u043B%u0430%u0434%u043A%u0443%20%u0437%u0430%u0433%u0440%u0443%u0437%u043E%u043A%20%u0440%u044F%u0434%u043E%u043C%20%u0441%20%u0442%u0435%u043A%u0443%u0449%u0435%u0439%20%u0432%u043A%u043B%u0430%u0434%u043A%u043E%u0439%20%0A%20%20%20%u0435%u0441%u043B%u0438%20%u0437%u0430%u0433%u0440%u0443%u0437%u0438%20%u0443%u0436%u0435%20%u043E%u0442%u043A%u0440%u044B%u0442%u044B%20%u0438%20%u0437%u0430%u043A%u0440%u044B%u0442%u044C%20%u0432%u0441%u0435%20%u043B%u0438%u0448%u043D%u0438%u0435%20%u0432%u043A%u043B%u0430%u0434%u043A%u0438%20%u0437%u0430%u0433%u0440%u0443%u0437%u043E%u043A%20%20..........................................*/%0Afunction%20downloadManagerInTab%28%20foregroundTab%20%29%20%7B%20%20%20%20%20%20%20%20%20%20%0A%20%20%0A%20%20%20%20%20setTimeout%28function%28%29%20%7B%20closeDownloadManager%28%29%20%7D%2C%200%29%3B%20//%20%u0437%u0430%u043A%u0440%u044B%u0442%u044C%20%u0441%u0442%u0430%u043D%u0434%u0430%u0440%u0442%u043D%u044B%u0439%20%u043C%u0435%u043D%u0435%u0434%u0436%u0435%u0440%20%u0437%u0430%u0433%u0440%u0443%u0437%u043E%u043A%20%20%20%20%20%0A%20%20%20%20%20%0A%20%20%20%20%20//%20%u0437%u0430%u043A%u0440%u044B%u0442%u044C%20%u0432%u0441%u0435%20%u0432%u043A%u043B%u0430%u0434%u043A%u0438%20%u0437%u0430%u0433%u0440%u0443%u0437%u043E%u043A%20%u043A%u0440%u043E%u043C%u0435%20%u043F%u0435%u0440%u0432%u043E%u0439%20....%0A%20%20%20%20%20var%20downTab%20%3D%20null%3B%0A%20%20%20%20%20Array.slice%28%20gBrowser.tabs%20%29.forEach%28function%28tab%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20if%20%28%20tab.linkedBrowser.currentURI.spec%20%21%3D%3D%20downTabUrl%20%29%20return%3B%0A%20%20%20%20%20%20%20%20%20%20%20%21downTab%20%3F%20downTab%20%3D%20tab%20%3A%20gBrowser.removeTab%28tab%29%3B%0A%20%20%20%20%20%7D%29%0A%20%20%20%0A%20%20%20%20%20//%20%u043F%u0435%u0440%u0435%u043C%u0435%u0441%u0442%u0438%u0442%u044C%20%u0438%u043B%u0438%20%u043E%u0442%u043A%u0440%u044B%u0442%u044C%20%u0432%u043A%u043B%u0430%u0434%u043A%u0443%20%u0437%u0430%u0433%u0440%u0443%u0437%u043E%u043A%20%u0440%u044F%u0434%u043E%u043C%20%u0441%20%u0442%u0435%u043A%u0443%u0449%u0435%u0439%20%u0432%u043A%u043B%u0430%u0434%u043A%u043E%u0439%20....%0A%20%20%20%20%20var%20selTab%20%3D%20gBrowser.selectedTab%3B%0A%20%20%20%20%20if%20%28%20downTab%20%21%3D%3D%20selTab%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20if%20%28%20downTab%20%26%26%20gBrowser.visibleTabs.indexOf%28%20downTab%20%29%20%3D%3D%20-1%20%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20TabView.moveTabTo%28%20downTab%2C%20TabView._window.GroupItems._activeGroupItem.id%20%29%3B%0A%20%20%20%20%20%20%20%20%20%20downTab%20%3D%20downTab%20%7C%7C%20gBrowser.addTab%28%20downTabUrl%20%29%3B%0A%20%20%20%20%20%20%20%20%20%20var%20pos%20%3D%20selTab._tPos%20+%20%28%20downTab._tPos%20%3E%20selTab._tPos%20%29%3B%0A%20%20%20%20%20%20%20%20%20%20gBrowser.moveTabTo%28%20downTab%2C%20pos%20%29%3B%0A%20%20%20%20%20%20%20%20%20%20gBrowser.selectedTab%20%3D%20downTab%3B%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%7D%20%0A%7D%3B%0A%0A%0A%0A//%20%u0410%u0432%u0442%u043E%u043C%u0430%u0442%u0438%u0447%u0435%u0441%u043A%u0438%20%u043C%u0435%u043D%u044F%u0435%u043C%20%u0438%u043A%u043E%u043D%u043A%u0443%20%u0434%u043B%u044F%20%u0442%u0430%u0431%u0430%20%22%u0417%u0430%u0433%u0440%u0443%u0437%u043A%u0438%22%20.........................................................%0AaddEventListener%28%22TabAttrModified%22%2C%20function%28e%29%20%7B%20%0A%20%20%20%20%20if%20%28%20e.target.linkedBrowser.currentURI.spec%20%3D%3D%20downTabUrl%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20var%20tabIndex%20%3D%20gBrowser.getBrowserIndexForDocument%28%20e.target.linkedBrowser.contentDocument%20%29%3B%0A%20%20%20%20%20%20%20%20%20%20var%20tab%20%3D%20gBrowser.mTabContainer.childNodes%5BtabIndex%5D%3B%0A%20%20%20%20%20%20%20%20%20%20LOG%28tab.label%29%0A%20%20%20%20%20%20%20%20%20%20tab.image%20%3D%20%28%20tab.label%20%3D%3D%20%22%u0417%u0430%u0433%u0440%u0443%u0437%u043A%u0438%22%20%29%3F%20falseDownloadsImg%3A%20trueDownloadsImg%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%20%20%20%20%20%20%0A%7D%2C%20true%2C%20gBrowser.tabContainer%29%3B%0A%0A%0A%0A//%20%u041E%u0442%u0441%u043B%u0435%u0436%u0438%u0432%u0430%u0442%u044C%20%u0432%u0441%u0435%20%u043A%u043E%u043C%u0430%u043D%u0434%u044B%20%u0441%u0432%u044F%u0437%u043D%u044B%u0435%20%u0441%20%u0437%u0430%u0433%u0440%u0443%u0437%u043A%u043E%u0439%20%u0438%20%u0437%u0430%u043F%u0443%u0441%u043A%u0430%u0442%u044C%20%u043D%u0443%u0436%u043D%u044B%u0435%20%u0444%u0443%u043D%u043A%u0446%u0438%u0438%20%u0438%20%u043A%u043E%u043C%u0430%u043D%u0434%u044B%20%20........%0Afunction%20getCommand%28e%29%20%7B%0A%20%20%20%20%20var%20command%20%3D%20e.target.getAttribute%28%22oncommand%22%29%3B%0A%20%20%20%20%20if%20%28%20command%20%3D%3D%20%22performCommand%28%27cmd_removeFromList%27%29%3B%22%20%7C%7C%20command%20%3D%3D%20%27clearDownloadList%28%29%3B%27%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20if%20%28%20content.document.location%20%3D%3D%20downTabUrl%29%20document.getElementById%28%22Browser%3AReload%22%29.doCommand%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20if%20%28%20document.getElementById%28%27sidebar-box%27%29.getAttribute%28%27sidebarcommand%27%29%20%29%20openWebPanel%28%22Downloads%22%2C%20downTabUrl%20%29%3B%20%20%20%20%20%20%20%20%20%20%20%20%09%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%7D%3B%20%20%20%20%20%0AaddEventListener%28%22command%22%2C%20getCommand%2C%20true%2C%20window%29%3B%0A%0A%0A%0A//%20%u0418%u0441%u043F%u0440%u0430%u0432%u043B%u044F%u0435%u043C%20%u043E%u0448%u0438%u0431%u043A%u0438%20.......................................................................................%0Afunction%20setFakeArguments%28e%29%20%7B%0A%20%20%20%20%20if%20%28%20e.target.location.href%20%3D%3D%20%27chrome%3A//mozapps/content/downloads/downloads.xul%27%20%29%20%7B%0A%20%20%20%20%20var%20win%20%3D%20e.target.defaultView%3B%0A%20%20%20%20%20win%20%3D%20win.wrappedJSObject%20%7C%7C%20win%3B%0A%20%20%20%20%20win.arguments%20%3D%20%5B%5D%3B%0A%20%20%20%20%20%7D%0A%7D%3B%0AaddEventListener%28%22TabClose%22%2C%20setFakeArguments%2C%20true%2C%20gBrowser%29%3B%0AaddEventListener%28%22DOMContentLoaded%22%2C%20setFakeArguments%2C%20true%2C%20gBrowser%29%3B%0AaddEventListener%28%22DOMContentLoaded%22%2C%20setFakeArguments%2C%20true%2C%20document.getElementById%28%27sidebar-box%27%29%29%3B%0A%0A%0A%0A%0A//%20%u0417%u0430%u043A%u0440%u044B%u0442%u044C%20%u0441%u0442%u0430%u043D%u0434%u0430%u0440%u0442%u043D%u044B%u0439%20%u043C%u0435%u043D%u0435%u0434%u0436%u0435%u0440%20%u0437%u0430%u0433%u0440%u0443%u0437%u043E%u043A%20....................................................................%0Afunction%20closeDownloadManager%28%29%20%7B%0A%20%20%20%20%20var%20wm%20%3D%20Cc%5B%22@mozilla.org/appshell/window-mediator%3B1%22%5D.getService%28Ci.nsIWindowMediator%29%3B%0A%20%20%20%20%20var%20dm%20%3D%20wm.getMostRecentWindow%28%22Download%3AManager%22%29%3B%0A%20%20%20%20%20if%20%28%20dm%20%29%20dm.close%28%29%3B%20%20%0A%7D%3B%0A%0A%0A%09%09%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%22L%3A%20Download%20Manager%20in%20the%20Sidebar%5CnM%3A%20Download%20Manager%20%5CnR%3A%20Download%20Manager%20in%20the%20Tab%5CnCtrl+R%3A%20CB%20menu%20%22%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

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

Выделить код

Код:

// Настройка функций кликов мыши для кнопки ................................................................
this.onclick = function(e) {

     // действие при клике ЛКМ ....
     if ( e.button == 0 ) {
          document.getElementById('sidebar-box').getAttribute('sidebarcommand') ? toggleSidebar() : openWebPanel("Downloads", downTabUrl );         
          };
          
     // действие при клике СКМ ....    
     if ( e.button == 1 ) { 
          var windows = Components. classes ['@mozilla.org/appshell/window-mediator;1'].getService(Components. interfaces. nsIWindowMediator).getEnumerator (null);
          while( windows. hasMoreElements() ) {
                 var win = windows.getNext ();
                 if ( win.document.documentURI == "chrome://mozapps/content/downloads/downloads.xul") {    
                      win.close();
                      return;
                      }
                 };
          BrowserDownloadsUI();
          };
     
     // действие при клике ПКМ ....    
     if ( e.button == 2 && !e.ctrlKey && !e.shiftKey && !e.altKey && !e.metaKey ) { 
          e.preventDefault();  
          downloadManagerInTab( true );
          }
};



// Объявляем переменные для этой вкладки ...................................................................
var downTabUrl = 'chrome://mozapps/content/downloads/downloads.xul';

// иконки для вкладки загрузок ....
const trueDownloadsImg = "data:image/x-icon;base64,AAABAAEAEhIAAAEAIACABQAAFgAAACgAAAASAAAAJAAAAAEAIAAAAAAAWAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEDAAIAAAMACyIAEGyoLtVqpyrVDSIADwAAAgABAgACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQIAAgAAAgALHwAPZaAmwsXxnv+t63n/XpwbwAcUAA0AAAIAAQIAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAwADAAACAAwgAA9loyXFv+2W/7/wl/yg52b8n+Nj/1OJG8EBCAAMAAACAAECAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAECAAIAAAIADCEADmSiI8Sx4oX/suWH+7HmhP+T3FX/i9dK+5LZUv9RhxnAAQkADAAAAgABAgACAAAAAAAAAAAAAAAAAQIAAgAAAgANIQANY6Eiw6nbfP+l23f7p913/6fed/+I0kj/gs5A/37KPvuL0Ev/UIYYvwIJAAsAAAIAAQIAAgAAAAABAQABAAABAAsgAA1gnh/BoNJy/5vSa/qe1W3/odhx/5/Ybv+Cy0H/fsg8/3zFOv92vjX6g8VD/0yCFL0BCAALAAABAAABAAEAAAEACRUAEmqmKcyn2Hr/n9Ry/Z3Tbv+Yz2b/mtJp/5nRZv99xDz/ecI3/3e/Nv97wT7/e78//YvKT/9Xjhy/BAwACQAAAQAAAAEAFCkAL2CUKdxhkTDXXI4o1m+mN/KWzGb/ksth/pLLX/93vTn/croz/nm9Pf9noizyVoog1lqNJtlbkx/TDyAAHwAAAQAAAAAAAAAAAAAAAAACAwEEAAAAAD5oFqeXz2X/icFY+4rDWP9ytjX/bLEu+3/CQv8+ZxSnAAAAAAIDAQQAAAAAAAAAAAAAAAAAAAAAAAEAAQEBAQEDBAMEAAAAAEFqFqeSyV7/g7pR+4S8Uf9usDP/aKsr+3u9Pv9AaRSnAAAAAAMEAgQBAQEBAAAAAQAAAAAAAAAAAAAAAAAAAAACAwEEAAAAAEBpFKeNxVj/fbRK+3+2Sv9rqzD/ZaYo+3m5PP8/aBOnAAAAAAIDAQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAwEEAAAAAEBpFKeJwlT/eLBF+3qyRv9qqS7/ZKQo+3m4PP8/aBOnAAAAAAIDAQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAwEEAAAAAEBpFKeHwFD/da5B+3exQv9pqS7/ZKQo+3m4PP8/aBOnAAAAAAIDAQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAwEEAAAAAEBpFKeEv03/cqw8+3WvPv9pqS7/ZKQo+3m4PP8/aBOnAAAAAAIDAQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAwEEAAAAAEBpFKeCvkn/cKs4+3OuO/9pqS7/ZKQo+3m4PP8/aBOnAAAAAAIDAQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAwEEAAAAAD9oE6d+vET/bKky+2+sNf9oqCv/Y6Mm+3e3Ov8/aBOnAAAAAAIDAQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAwEEAAAAAEBpFaeDv0v/cKw5+3OvPP9vqzX/aqcx+3+8RP9AaRSnAAAAAAIDAQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAgAEAAAAADlkCox1szT/a6Yv+W2oMPxspy78aqQt+XSyMv85ZAqMAAAAAAECAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=";
const falseDownloadsImg = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAACXBIWXMAAAsTAAALEwEAmpwYAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAACmElEQVR42oyU3UtUQRiHn9k9c47Ho+4uhrkthmUfkHeB91GJ1paiJl0EQZd9U3f+E1EX0b8QEUQX0ScZWd0E3VhBrWJFuZuEqyLsOTtnznSxx9rSzPdq5p13nhl+729GTBXL/BUJwAFcwAZEnDdAFagAARDVb7JYHQ6QBTKsHWWgGAPXBblAZu/ubTdUQ6YnKWslWoVIv/z6zYeZ08DCRkA2QPOW7T2dXTuwLAsMhDrk03Shp77mfyABkE6laGluRgiBACJjSKXSf9T8D1RbsBJIy0IIgcGQMAYrKfhn/b9BFtKWv1sWGZKJ5LqgJNAQiyyB1hpI4ti/pYiiCEvKlWlrbIcwFt23YkgH4NWf4DV5OI4DQmCMwWiN53n1FsnF42Xgq5gqljPA9u7OjjvupmxHUypF++Z2duzsIp3O1DQyhkhr5svzFAoFSsUSy0uL6KW5z29nZkeAaSt2a/Xy2Nit8RevLmS3bJUtqRSNXiOOLX+BwlCTTmfY091NLpujNPtF5fvP3IxdrizAB2bPnjt/r21zm3g6PnHe3tQqGxwHy5KIhMBEBoTCMQalAsJqJTh18sS1oeFjD32liysaaWDRV3pydPQ4rtMQPh6fuNjouo7luiREgshEGBPhhyHzc9+DwXz/1YGh4fu+0u+ARUCvtD8EFnylJ/MDg5G0ZfT42cSlnN3peF4TRkWoasCPuWLl6OH+a4fyRx4ENUg5vsgfPgqBcqD0u96+wwYET5+/vNjWnnONiSh9+1rJ9x28cqC3/1Gg9Pt6yFqG1EC5Gur3vX2HsG2pbt+5exYDI0OD1/ftP/ikGq6GAIg1/iNik6Ydmdzl2nI3QKWqPgRKf4xfvt7oE9HAQqD0ZKB0Ic75sYv1Wht+DgB8pQ6678CoOAAAAABJRU5ErkJggg==";



/* Открывать загрузки в табе или переместить вкладку загрузок рядом с текущей вкладкой 
   если загрузи уже открыты и закрыть все лишние вкладки загрузок  ..........................................*/
function downloadManagerInTab( foregroundTab ) {          
  
     setTimeout(function() { closeDownloadManager() }, 0); // закрыть стандартный менеджер загрузок     
     
     // закрыть все вкладки загрузок кроме первой ....
     var downTab = null;
     Array.slice( gBrowser.tabs ).forEach(function(tab) {
           if ( tab.linkedBrowser.currentURI.spec !== downTabUrl ) return;
           !downTab ? downTab = tab : gBrowser.removeTab(tab);
     })
   
     // переместить или открыть вкладку загрузок рядом с текущей вкладкой ....
     var selTab = gBrowser.selectedTab;
     if ( downTab !== selTab ) {
          if ( downTab && gBrowser.visibleTabs.indexOf( downTab ) == -1 )
               TabView.moveTabTo( downTab, TabView._window.GroupItems._activeGroupItem.id );
          downTab = downTab || gBrowser.addTab( downTabUrl );
          var pos = selTab._tPos + ( downTab._tPos > selTab._tPos );
          gBrowser.moveTabTo( downTab, pos );
          gBrowser.selectedTab = downTab;        
          } 
};



// Автоматически меняем иконку для таба "Загрузки" .........................................................
addEventListener("TabAttrModified", function(e) { 
     if ( e.target.linkedBrowser.currentURI.spec == downTabUrl ) {
          var tabIndex = gBrowser.getBrowserIndexForDocument( e.target.linkedBrowser.contentDocument );
          var tab = gBrowser.mTabContainer.childNodes[tabIndex];
          LOG(tab.label)
          tab.image = ( tab.label == "Загрузки" )? falseDownloadsImg: trueDownloadsImg;
          }      
}, true, gBrowser.tabContainer);



// Отслеживать все команды связные с загрузкой и запускать нужные функции и команды  ........
function getCommand(e) {
     var command = e.target.getAttribute("oncommand");
     if ( command == "performCommand('cmd_removeFromList');" || command == 'clearDownloadList();') {
          if ( content.document.location == downTabUrl) document.getElementById("Browser:Reload").doCommand();
          if ( document.getElementById('sidebar-box').getAttribute('sidebarcommand') ) openWebPanel("Downloads", downTabUrl );                
          }
};     
addEventListener("command", getCommand, true, window);



// Исправляем ошибки .......................................................................................
function setFakeArguments(e) {
     if ( e.target.location.href == 'chrome://mozapps/content/downloads/downloads.xul' ) {
     var win = e.target.defaultView;
     win = win.wrappedJSObject || win;
     win.arguments = [];
     }
};
addEventListener("TabClose", setFakeArguments, true, gBrowser);
addEventListener("DOMContentLoaded", setFakeArguments, true, gBrowser);
addEventListener("DOMContentLoaded", setFakeArguments, true, document.getElementById('sidebar-box'));




// Закрыть стандартный менеджер загрузок ....................................................................
function closeDownloadManager() {
     var wm = Cc["@mozilla.org/appshell/window-mediator;1"].getService(Ci.nsIWindowMediator);
     var dm = wm.getMostRecentWindow("Download:Manager");
     if ( dm ) dm.close();  
};


        
// Подсказка для кнопки .....................................................................................
this.tooltipText = "L: Download Manager in the Sidebar\nM: Download Manager \nR: Download Manager in the Tab\nCtrl+R: CB menu ";

Сохранить всю страницу как  PNG / PDF ( Firefox 24 + ) от 06.02.2017.
Сохраняет страницу как PNG-изображение( делает скриншот страницы ) или как PDF файл через сервис pdfmyurl.com  JavaScript на странице должны быть включены для сохранения страницы в PDF. Если страница слишком большая то кнопка сохранит страницу как PNG не полностью. Кнопка не работает если включен e10.

ЛКМ  => Сохранить всю страницу как PNG,
СКМ  => Контекстное меню кнопки,
ПКМ  => Сохранить страницу как PDF файл.
Ctrl + ПКМ  =>  Контекстное меню кнопки

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

Выделить код

Код:

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%u043E%u0445%u0440%u0430%u043D%u0438%u0442%u044C%20%u0432%u0441%u044E%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u0443%20%u043A%u0430%u043A%20%20PNG%20/%20PDF%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/x-icon%3Bbase64%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%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................%20%0Athis.onclick%20%3De%3D%3E%20%7B%20%20%20%20%20%0A%20%20%20%0A%20%20%20if%20%28%20e.button%20%3D%3D%200%20%29%20savePageInPNG%28%29%3B%0A%20%20%20%0A%20%20%20if%20%28%20e.button%20%3D%3D%201%20%29%20gShowPopup%28this%29%3B%0A%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%0A%20%20%20%20%20%20%20%20e.preventDefault%28%29%3B%0A%20%20%20%20%20%20%20%20savePageToPDF%28%29%3B%0A%20%20%20%20%20%20%20%20%7D%0A%7D%3B%0A%0A%0A//%20%u0421%u043E%u0445%u0440%u0430%u043D%u044F%u0435%u0442%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u0443%20%u043A%u0430%u043A%20PDF%20%u0444%u0430%u0439%u043B%20%u0447%u0435%u0440%u0435%u0437%20%u0441%u0435%u0440%u0432%u0438%u0441%20%27pdfmyurl.com%27%20................%0Afunction%20savePageToPDF%28%29%20loadURI%28%22http%3A//pdfmyurl.com%3Furl%3D%22%20+%20content.location%29%3B%0A%0A%20%0A//%20%u0421%u043E%u0445%u0440%u0430%u043D%u0438%u0442%u044C%20%u0432%u0441%u044E%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u0443%20%u043A%u0430%u043A%20PNG%20................%0Afunction%20savePageInPNG%28%29%20%7B%0A%20%20%20var%20canvas%20%3D%20document.createElementNS%28xhtmlns%2C%20%27canvas%27%29%3B%0A%20%20%20canvas.width%20%3D%20content.innerWidth%20+%20content.scrollMaxX%3B%20%0A%20%20%20canvas.height%20%3D%20content.innerHeight%20+%20content.scrollMaxY%3B%0A%20%20%20var%20context%20%3D%20canvas.getContext%28%222d%22%29%3B%0A%20%20%20%28%28i%20%3D%2017%29%3D%3E%20%7B%0A%20%20%20%20%20%20try%20%7B%20context.drawWindow%28content%2C%200%2C%200%2C%20canvas.width%2C%20canvas.height%2C%20%22white%22%29%20%7D%0A%20%20%20%20%20%20catch%28e%29%20%7B%20canvas.height%20%3D%20canvas.width*i%3B%20arguments.callee%28--i%29%3B%20%7D%3B%0A%20%20%20%7D%29%28%29%3B%0A%20%20%20var%20uri%20%3D%20makeURI%28canvas.toDataURL%28%22image/png%22%29%29%3B%0A%20%20%20%0A%20%20%20var%20fp%20%3D%20window.makeFilePicker%28%29%3B%0A%20%20%20fp.init%28window%2C%20%22Save%20Screenshot%20As%22%2C%20fp.modeSave%29%3B%0A%20%20%20fp.appendFilter%28%22%22%2C%20%22*.png%22%29%3B%0A%20%20%20var%20title%20%3D%20gBrowser.mCurrentTab.label.replace%28/%5B%3A+.%5C%5C%5C/%3C%3E%3F*%7C%22%5D+/g%2C%20%22%20%22%29.replace%28/%5Cs%5Cs+/g%2C%20%22%20%22%29%3B%0A%20%20%20fp.defaultString%20%3D%20title%20+%20new%20Date%28%29.toLocaleFormat%28%22%20%20%25d.%25m.%25Y.%20%28%20%25I%3A%25M%3A%25S%20%29%22%29%20+%20%22.png%22%3B%0A%20%20%20if%20%28fp.show%28%29%20%3D%3D%20fp.returnCancel%20%7C%7C%20%21fp.file%29%20return%3B%0A%0A%20%20%20var%20wbp%20%3D%20window.makeWebBrowserPersist%28%29%3B%0A%20%20%20parseInt%28Services.appinfo.version%29%20%3C%2036%0A%20%20%20%3F%20wbp.saveURI%28uri%2C%20null%2C%20null%2C%20null%2C%20null%2C%20fp.file%2C%20null%29%0A%20%20%20%3A%20wbp.saveURI%28uri%2C%20null%2C%20null%2C%20null%2C%20null%2C%20null%2C%20fp.file%2C%20null%29%3B%20//%20%u0435%u0441%u043B%u0438%20FF36+%0A%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%20%u0421%u043E%u0445%u0440%u0430%u043D%u0438%u0442%u044C%20%u0432%u0441%u044E%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u0443%20%u043A%u0430%u043A%20PNG%20%5Cn%u0421%3A%20%20CB%20%u041C%u0435%u043D%u044E%20%5Cn%u041F%3A%20%20%u0421%u043E%u0445%u0440%u0430%u043D%u0438%u0442%u044C%20%u0432%u0441%u044E%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u0443%20%u043A%u0430%u043A%20PDF%22%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

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

Выделить код

Код:

// Настройка функций кликов мыши для кнопки ................ 
this.onclick =e=> {     
   
   if ( e.button == 0 ) savePageInPNG();
   
   if ( e.button == 1 ) gShowPopup(this);
   
   if ( e.button == 2 && !e.ctrlKey && !e.shiftKey && !e.altKey && !e.metaKey ) {
        e.preventDefault();
        savePageToPDF();
        }
};


// Сохраняет страницу как PDF файл через сервис 'pdfmyurl.com' ................
function savePageToPDF() loadURI("http://pdfmyurl.com?url=" + content.location);

 
// Сохранить всю страницу как PNG ................
function savePageInPNG() {
   var canvas = document.createElementNS(xhtmlns, 'canvas');
   canvas.width = content.innerWidth + content.scrollMaxX;
   canvas.height = content.innerHeight + content.scrollMaxY;
   var context = canvas.getContext("2d");
   ((i = 17)=> { 
      try { context.drawWindow(content, 0, 0, canvas.width, canvas.height, "white") }
      catch(e) { canvas.height = canvas.width*i; arguments.callee(--i); };
   })();
   var uri = makeURI(canvas.toDataURL("image/png"));
   
   var fp = window.makeFilePicker();
   fp.init(window, "Save Screenshot As", fp.modeSave);
   fp.appendFilter("", "*.png");
   var title = gBrowser.mCurrentTab.label.replace(/[:+.\\\/<>?*|"]+/g, " ").replace(/\s\s+/g, " ");
   fp.defaultString = title + new Date().toLocaleFormat("  %d.%m.%Y. ( %I:%M:%S )") + ".png";
   if (fp.show() == fp.returnCancel || !fp.file) return;

   var wbp = window.makeWebBrowserPersist();
   parseInt(Services.appinfo.version) < 36
   ? wbp.saveURI(uri, null, null, null, null, fp.file, null)
   : wbp.saveURI(uri, null, null, null, null, null, fp.file, null); // если FF36+
};


// Подсказка для кнопки ................
this.tooltipText = "Л:  Сохранить всю страницу как PNG \nС:  CB Меню \nП:  Сохранить всю страницу как PDF";

Make bookmarklet button( Firefox 3.6+ ) от 25.08.2016.
кнопка преобразует букмарклеты в кнопки. При нажатии кнопки открывается окошко где для кнопки запускающей букмарклет можно установить название и иконку и адрес букмарклета, после вода нужных данных создаётся новая кнопка.
Автор: Anton

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

Выделить код

Код:

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%3EMake%20bookmarklet%20button%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bcustombuttons-stdicon-4%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%3Evar%20XML%20%3D%20window.XML%20%7C%7C%20%7B%7D%3B%0A%0Athis.%20showBookmarkletDialog%20%3D%20function%20%28callback%29%0A%7B%0A%20%20%20%20var%20ipi%20%3D%20XML.%20ignoreProcessingInstructions%3B%0A%20%20%20%20XML.%20ignoreProcessingInstructions%20%3D%20false%3B%0A%20%20%20%20var%20dialog%20%3D%20%27%5C%0A%20%20%20%20%20%20%20%20%26lt%3B%3Fxml-stylesheet%20href%3D%22chrome%3A//global/skin/%22%3F%26gt%3B%5Cn%5C%0A%20%20%20%20%20%20%20%20%26lt%3B%3Fxml-stylesheet%20href%3D%22resource%3A//gre/res/html.css%22%3F%26gt%3B%5Cn%5C%0A%20%20%20%20%20%20%20%20%26lt%3Bdialog%20xmlns%3D%22http%3A//www.mozilla.org/keymaster/gatekeeper/there.is.only.xul%22%5Cn%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20id%3D%22dlg02%22%5Cn%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20title%3D%22Custom%20Buttons%20bookmarklet%20maker%22%5Cn%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20ondialogaccept%3D%22return%20windowController.accept%28%29%3B%22%26gt%3B%5Cn%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%26lt%3Bscript%20type%3D%22application/x-javascript%22%26gt%3B%5Cn%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%26lt%3B%21%5BCDATA%5B%5Cn%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20windowController%20%3D%5Cn%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%5Cn%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20accept%3A%20function%20%28%29%5Cn%5C%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%7B%5Cn%5C%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%20var%20name%20%3D%20document.%20getElementById%20%28%22nametb%22%29.%20value%3B%5Cn%5C%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%20var%20url%20%3D%20document.%20getElementById%20%28%22urltb%22%29.%20value%3B%5Cn%5C%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%20var%20img%20%3D%20document.%20getElementById%20%28%22imgtb%22%29.%20value%3B%5Cn%5C%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%20window.%20arguments%20%5B0%5D%20%28name%2C%20url%2C%20img%29%3B%5Cn%5C%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%7D%5Cn%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%3B%5Cn%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5D%5D%26gt%3B%5Cn%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%26lt%3B/script%26gt%3B%5Cn%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%26lt%3Bvbox%20flex%3D%221%22%26gt%3B%5Cn%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%26lt%3Bgrid%26gt%3B%5Cn%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%26lt%3Bcolumns%26gt%3B%5Cn%5C%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%26lt%3Bcolumn/%26gt%3B%5Cn%5C%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%26lt%3Bcolumn%20flex%3D%221%22/%26gt%3B%5Cn%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%26lt%3B/columns%26gt%3B%5Cn%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%26lt%3Brows%26gt%3B%5Cn%5C%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%26lt%3Brow%20align%3D%22center%22%26gt%3B%5Cn%5C%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%26lt%3Blabel%20value%3D%22Bookmarklet%20Name%22/%26gt%3B%5Cn%5C%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%26lt%3Btextbox%20id%3D%22nametb%22%20flex%3D%221%22/%26gt%3B%5Cn%5C%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%26lt%3B/row%26gt%3B%5Cn%5C%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%26lt%3Brow%20align%3D%22center%22%26gt%3B%5Cn%5C%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%26lt%3Blabel%20value%3D%22Bookmarklet%20URL%22/%26gt%3B%5Cn%5C%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%26lt%3Btextbox%20id%3D%22urltb%22%20flex%3D%221%22/%26gt%3B%5Cn%5C%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%26lt%3B/row%26gt%3B%5Cn%5C%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%26lt%3Brow%20align%3D%22center%22%26gt%3B%5Cn%5C%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%26lt%3Blabel%20value%3D%22Icon%20URL%22/%26gt%3B%5Cn%5C%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%26lt%3Btextbox%20id%3D%22imgtb%22%20flex%3D%221%22/%26gt%3B%5Cn%5C%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%26lt%3B/row%26gt%3B%5Cn%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%26lt%3B/rows%26gt%3B%5Cn%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%26lt%3B/grid%26gt%3B%5Cn%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%26lt%3B/vbox%26gt%3B%5Cn%5C%0A%20%20%20%20%20%20%20%20%26lt%3B/dialog%26gt%3B%5Cn%5C%0A%20%20%20%20%27%3B%0A%20%20%20%20window.%20openDialog%20%28%22data%3Aapplication/vnd.mozilla.xul+xml%2C%22%20+%20dialog%2C%20%22%22%2C%20%22chrome%2Cdependent%2Cminimizable%2Cresizable%3Dyes%2Ccenterscreen%2Cdialog%3Dyes%22%2C%20callback%29%3B%0A%20%20%20%20XML.%20ignoreProcessingInstructions%20%3D%20ipi%3B%0A%7D%3B%0A%0Avar%20THIS%20%3D%20this%3B%0A%0Athis.%20makeBookmarklet%20%3D%20function%20%28bookmarkletName%2C%20bookmarkletCode%2C%20bookmarkletIcon%29%0A%7B%0A%20%20%20%20var%20bookmarklet%20%3D%20btoa%20%28bookmarkletCode%29%3B%0A%20%20%20%20custombuttons.%20cloneButton%20%28THIS%29%3B%0A%20%20%20%20var%20newButtonLink%20%3D%20custombuttons.%20makeButtonLink%20%28%22update%22%2C%20THIS.%20nextSibling.%20id%29%3B%0A%20%20%20%20var%20params%20%3D%20custombuttons.%20cbService.%20getButtonParameters%20%28newButtonLink%29.%20wrappedJSObject%3B%0A%20%20%20%20params.%20name%20%3D%20bookmarkletName%3B%0A%20%20%20%20params.%20code%20%3D%20%22getBrowser%20%28%29.%20loadURI%20%28atob%20%28%5C%22%22%20+%20bookmarklet%20+%20%22%5C%22%29%29%3B%22%3B%0A%20%20%20%20params.%20image%20%3D%20bookmarkletIcon%3B%0A%20%20%20%20params.%20wrappedJSObject%20%3D%20params%3B%0A%20%20%20%20custombuttons.%20cbService.%20installButton%20%28params%29%3B%0A%7D%3B%0A%0Athis.%20showBookmarkletDialog%20%28this.%20makeBookmarklet%29%3B%0A%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 XML = window.XML || {};

this. showBookmarkletDialog = function (callback)
{
    var ipi = XML. ignoreProcessingInstructions;
    XML. ignoreProcessingInstructions = false;
    var dialog = '\
        <?xml-stylesheet href="chrome://global/skin/"?>\n\
        <?xml-stylesheet href="resource://gre/res/html.css"?>\n\
        <dialog xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"\n\
                id="dlg02"\n\
                title="Custom Buttons bookmarklet maker"\n\
                ondialogaccept="return windowController.accept();">\n\
            <script type="application/x-javascript">\n\
                <![CDATA[\n\
                    var windowController =\n\
                    {\n\
                        accept: function ()\n\
                        {\n\
                            var name = document. getElementById ("nametb"). value;\n\
                            var url = document. getElementById ("urltb"). value;\n\
                            var img = document. getElementById ("imgtb"). value;\n\
                            window. arguments [0] (name, url, img);\n\
                        }\n\
                    };\n\
                ]]>\n\
            </script>\n\
            <vbox flex="1">\n\
                <grid>\n\
                    <columns>\n\
                        <column/>\n\
                        <column flex="1"/>\n\
                    </columns>\n\
                    <rows>\n\
                        <row align="center">\n\
                            <label value="Bookmarklet Name"/>\n\
                            <textbox id="nametb" flex="1"/>\n\
                        </row>\n\
                        <row align="center">\n\
                            <label value="Bookmarklet URL"/>\n\
                            <textbox id="urltb" flex="1"/>\n\
                        </row>\n\
                        <row align="center">\n\
                            <label value="Icon URL"/>\n\
                            <textbox id="imgtb" flex="1"/>\n\
                        </row>\n\
                    </rows>\n\
                </grid>\n\
            </vbox>\n\
        </dialog>\n\
    ';
    window. openDialog ("data:application/vnd.mozilla.xul+xml," + dialog, "", "chrome,dependent,minimizable,resizable=yes,centerscreen,dialog=yes", callback);
    XML. ignoreProcessingInstructions = ipi;
};

var THIS = this;

this. makeBookmarklet = function (bookmarkletName, bookmarkletCode, bookmarkletIcon)
{
    var bookmarklet = btoa (bookmarkletCode);
    custombuttons. cloneButton (THIS);
    var newButtonLink = custombuttons. makeButtonLink ("update", THIS. nextSibling. id);
    var params = custombuttons. cbService. getButtonParameters (newButtonLink). wrappedJSObject;
    params. name = bookmarkletName;
    params. code = "getBrowser (). loadURI (atob (\"" + bookmarklet + "\"));";
    params. image = bookmarkletIcon;
    params. wrappedJSObject = params;
    custombuttons. cbService. installButton (params);
};

this. showBookmarkletDialog (this. makeBookmarklet);


Custom Buttons² Context Menu Demo( Firefox 3.6+ ) Кнопка - образец , показывающий , что кроме  модефикаторов клавиш мыши и хоткеев можно использовать контекстное меню .
Автор: nicholas
Код кнопки и инициализации:
Код кнопки:

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3ECustom%20Buttons%B2%20Context%20Menu%20Demo%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMnR0RjM1NPPtr+/LAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALq1sjvLysTAxsbAGQAAAAAAAAAAAAAAAAAAAACnsK8UpK2sy6Cqqr6msLEaAAAAAAAAAAAAAAAAwbS3DtDGxs6jmZnajYeEvI+LhxcAAAAAAAAAAAAAAAAAAAAAqLGxBa+5ucymsbPwtsDCxcvQ1aDV1twUuauxFK+fpayklZn3jH+A/YuBf9OOh4QaAAAAAAAAAAAAAAAAAAAAAAAAAADX4OK7u8bI+rC5vPvJzdLx3NnesdbM0rO/r7XXlIGH/Yh3evuvo6Ljt6yqGAAAAAAAAAAAAAAAAAAAAAAAAAAA6/DysLTAxP+4wMX7y87T8e3r8Ozt5urt1MbM9rWhqPeeiI7p1MHDh9bGxwcAAAAAAAAAAAAAAAAAAAAAz9reBdvk6L2qtrz/tr3E/NHU2fno5+v37OXp99zO1Pi/q7L2pIuT6su2vGHIsLYCAAAAAAAAAAAAAAAAjJmfAaGvtCGptbuzmaWt+7S7w/vX2t/86Ofr++7o7Pzg0tj8vqiw+5B0ff6pj5Xamn+FKpBzegIAAAAAkpufAoqVmyWJlpyokp+m146aof+3vsX71Njd/eno7P3v5+z93s/W/begqP17XGb9clVd9H1iaL19ZmsyemhsApCZnSSIkpbHg4+VyYuXnumLmJ//qa63/tTX3f7z8vb+9O3x/eTV3P22nab9dlZg/l1BSPtgSE3ocl9ivoJwcyaWn6O9fIWKz4aRlqaTnqTEmaat/7K4wf/W2eD+8e/0/fDp7vrj09r4uqGr8oFkbfxpT1XmUTtAw2VSVsCSgYTDAAAAAAAAAAAAAAAAq7S6U7/IztG2vcT+2Nrg8+rn7fzp3+b43s3V6ragqdWxmKCqkXh/LQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1NvigdHS2fDl3uf+3tDa/s+8xuzRu8RsAAAA/wAAAP8AAAD/AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANjc4wvX193A5uLo/d/U2v7Wyc/Z1sbMEAAAAAAAAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA5OPp2eDc4fLVy9H75dnfmwAAAAAAAAAAAAAAAAAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAODd4hTa1tnIzsfK59rQ1Q4AAAAAAAAA/wAAAAAAAAAAAAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4+Di7NnU1gwAAAAAAAAAAAAAAAAAAAD/AAAA/wAAAAAAAAAAx+OcQcODnEHAA5xB4AOcQeADnEHAA5xBgAGcQQAAnEEAAJxBAACcQeAHnEH4AZxB+BecQfw7nEH8LZxB/nOcQQ%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%20Cb%20%3D%20custombuttons%3B%0A%0A//%20Two%20functions%20for%20testing%2C%20this.one%28%29%20and%20this.two%28%29%0Athis.one%20%3D%20function%28%29%20%7B%0A%20%20var%20Msg%20%3D%20createMsg%28this.label%29%3B%0A%20%20Msg.aMsg%28%22Function%201%22%29%3B%0A%7D%0A%0Athis.two%20%3D%20function%28%29%20%7B%0A%20%20custombuttons.alertSlide%28%22Function%202%22%2C%20%22It%20throws%20up%20a%20different%20alert%22%29%3B%0A%7D%0A%0A//%20Our%20menu%20items%0Athis.ss%20%3D%20%5B%0A%20%20%7B%20label%3A%20%27MenuItem%201%27%2C%20cmd%3A%20%27document.popupNode.one%28%29%27%2C%20sItemId%3A%20%27%27%20%7D%2C%0A%20%20%7B%20label%3A%20%27MenuItem%202%27%20%20%2C%20cmd%3A%20%27document.popupNode.two%28%29%27%2C%20sItemId%3A%20%27%27%20%7D%5D%3B%0A%0A//%20Our%20Initialization%20function%20for%20creating%20the%20context%20menu%2C%20setting%20up%20menuitems%20and%20telling%0A//%20custombuttons2%20extension%20to%20put%20cb%20context%20in%20a%20submenu%0Athis.mObj%20%3D%20Cb.getCbContextObj%28this%29%3B%0Athis.init%20%3D%20function%28x%29%20%7B%0A%20%20x.mObj.setSub%28%29%3B%0A%20%20var%20nItem%20%3D%20%7B%7D%2C%20mItem%20%3D%20%7B%7D%3B%0A%20%20document.getElementById%28CB2const.sCBCtxtMenu%29.setAttribute%28%22oncommand%22%2C%20%22event.stopPropagation%28%29%22%29%3B%0A%20%20for%28var%20i%20in%20x.ss%29%20%7B%0A%20%20%20%20nItem%20%3D%20new%20x.mObj.getItem%28%29%3B%0A%20%20%20%20nItem.id%20%3D%20%27Note%27%3B%0A%20%20%20%20nItem.label%20%3D%20x.ss%5Bi%5D.label%3B%0A%20%20%20%20nItem.value%20%3D%20String%28i%29%3B%0A%20%20%20%20mItem%20%3D%20x.mObj.insertBefore%28nItem%20%2C%20x.mObj.oMenu.lastChild%29%3B%0A%20%20%20%20this.ss%5Bi%5D.sItemId%20%3D%20mItem.id%3B%0A%20%20%20%20mItem.setAttribute%28%27oncommand%27%2Cx.ss%5Bi%5D.cmd%29%0A%20%20%7D%0A%20%20x.mObj.getItem%28%29%3B%0A%20%20nItem%20%3D%20x.mObj.getItem%28%29%3B%0A%20%20nItem.id%20%3D%20%27Note%27%3B%0A%20%20this.separator%20%3D%20x.mObj.insertBefore%28%20nItem%20%2C%20x.mObj.oMenu.lastChild%29%3B%0A%7D%0Athis.init%28this%29%3B%0A%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.gShowPopup%28this%29%3B%27%29%3B%0A%0A/*this.style.opacity%20%3D%20%27.65%27%3B%0Athis.setAttribute%28%22onmouseover%22%2C%20%22if%20%28custombuttons%29%20custombuttons.ButtonBrt%28event%29%3B%22%20%29%3B%0Athis.setAttribute%28%22onmouseout%22%2C%20%22if%20%28custombuttons%29%20custombuttons.ButtonDim%28event%29%3B%22%20%29%3B*/%0A%0Athis.setAttribute%28%27author%27%2C%27nicholas%27%29%3B%0Athis.setAttribute%28%27version%27%2C%2720081119.00%27%29%3B%0Athis.setAttribute%28%27homepage%27%2C%20%27http%3A//custombuttons2.com/forum/buttons/buttons-database/custom-buttons2-context-menu-demo.html%27%29%3B%0Athis.setAttribute%28%27dependency%27%2C%27FF3.0*%2C%20FL2.0*%2C%20TB2.0*%2C%20CB2%202.0.5*%27%29%3B%0Athis.setAttribute%28%27status%27%2C%27Complete%27%29%3B%0Athis.setAttribute%28%27public%27%2Ctrue%29%3B%0A%0Athis.setAttribute%28%27homepage%27%2C%20%27http%3A//custombuttons2.com/forum/buttons/buttons-database/custom-buttons2-context-menu-demo.html%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%5BNo%20help%20developed%20for%20%0A%3Clabel%3E%20button%0Acustombuttons-button%3Cid%3E.%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

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

Выделить код

Код:

var Cb = custombuttons;

// Two functions for testing, this.one() and this.two()
this.one = function() {
  var Msg = createMsg(this.label);
  Msg.aMsg("Function 1");
}

this.two = function() {
  custombuttons.alertSlide("Function 2", "It throws up a different alert");
}

// Our menu items
this.ss = [
  { label: 'MenuItem 1', cmd: 'document.popupNode.one()', sItemId: '' },
  { label: 'MenuItem 2'  , cmd: 'document.popupNode.two()', sItemId: '' }];

// Our Initialization function for creating the context menu, setting up menuitems and telling
// custombuttons2 extension to put cb context in a submenu
this.mObj = Cb.getCbContextObj(this);
this.init = function(x) {
  x.mObj.setSub();
  var nItem = {}, mItem = {};
  document.getElementById(CB2const.sCBCtxtMenu).setAttribute("oncommand", "event.stopPropagation()");
  for(var i in x.ss) {
    nItem = new x.mObj.getItem();
    nItem.id = 'Note';
    nItem.label = x.ss[i].label;
    nItem.value = String(i);
    mItem = x.mObj.insertBefore(nItem , x.mObj.oMenu.lastChild);
    this.ss[i].sItemId = mItem.id;
    mItem.setAttribute('oncommand',x.ss[i].cmd)
  }
  x.mObj.getItem();
  nItem = x.mObj.getItem();
  nItem.id = 'Note';
  this.separator = x.mObj.insertBefore( nItem , x.mObj.oMenu.lastChild);
}
this.init(this);


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

/*this.style.opacity = '.65';
this.setAttribute("onmouseover", "if (custombuttons) custombuttons.ButtonBrt(event);" );
this.setAttribute("onmouseout", "if (custombuttons) custombuttons.ButtonDim(event);" );*/

this.setAttribute('author','nicholas');
this.setAttribute('version','20081119.00');
this.setAttribute('homepage', 'http://custombuttons2.com/forum/buttons/buttons-database/custom-buttons2-context-menu-demo.html');
this.setAttribute('dependency','FF3.0*, FL2.0*, TB2.0*, CB2 2.0.5*');
this.setAttribute('status','Complete');
this.setAttribute('public',true);

this.setAttribute('homepage', 'http://custombuttons2.com/forum/buttons/buttons-database/custom-buttons2-context-menu-demo.html');

Savefrom( Firefox24+ ) от 07.02.2016.
Кнопка даёт возможность сохранить видео с текущей страницы через сервис http://ru.savefrom.net/. Кнопка меняет свой цвет на зелёный, если вы находитесь на странице закачку с которой поддерживает сервис ru.savefrom.net. Тут указаны Поддерживаемые ресурсы. JavaScript для нужных сайтов должны быть включены. Пример - смотрим видео на youtube, понравилась. Нажимаем кнопку, открывается ru.savefrom.ne, выбираем ссылку для скачивание и скачиваем. Эсли кнопка не работает на Palemoon 28.0.1 то можно добавить в файл user.js параметр: user_pref("general.useragent.override.savefrom.net", "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:62.0) Gecko/20100101 Firefox/62.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%3ESavefrom%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBEAAAEAIACsBAAAFgAAACgAAAAQAAAAIgAAAAEAIAAAAAAAhAQAAAAAAAAAAAAAAAAAAAAAAAAFQKUABUClAAVApQAFQKUABUGmBQZBpwAHPqEUAkSrtAFErL0FPaIZBkGnAAVBpgUFQKUABUClAAVApQAFQKUABUClAAVApQAFQKUABUClBQdFqAEFOp8QAj6nnS2U6P8ymuz/BUKqqAQ5nhQIRagABT+mBQVApQAFQKUABUClAAVApQAFQKUABT+lBAdEqAAGPKAQAD+poTaW5f+H3P/4juD/+ESi6P8EQ6urBDqgEwdEqAAFP6UFBUClAAVApQAFQKUABUClAwdDpwAGPKAOAD6poDyZ5v+J3v/6fMj6/XXC+f6K3f/5Tqjq/wVEq6sEOp8TB0SnAAU/pQMFQKUABUClAwZDpwAHPaEPAD2oojmZ5f+J3P/4crz4/Vyo9/9cqPb/YKr1/XfI//hEoOn/BESrqwQ7oBQHRKcABUClAgVCpwAGPKAMADyooDOV5P+H2//4a7j3/VSk9v9bqvf/W6v3/1Wo9v9XpfP+X7b++SmM5v8AQampBjqgEAVCpwAGPKEGAEKrmS2S5v+B1f/5ZrT2/k6j9f9Xq/b/Vqv2/1Wr9v9Vq/b/Uan2/1On8/9Vsvz7H4ro/wFGrKEFPKEJBUGntgVt1P8ol/D/TaTy/0+n9v9Rqvb/Uav1/1Cs9f9QrfX/T6z1/0+s9f9Orfb/RKXw/yKW7v8HctX/BkOnwAVDqHsGQ6d2ADihlxhx0vRNsf3+UKv0/Uqr9P9MrvX/S671/0qt9P9MrPT9S7f7/hp+1PgAO6GeBkOndwVDqH4FQaUCBT+kAAE5oDkZc87iSbP8/0qr9PpGrfT/SLD1/0iw9f9FrvP/R67z+ke4+/0afNHuATqgQQU/owAFQqUDBUGlBgY/pAAAOKA8J37R51O9/f5BqvL6Qq7z/0Ox9P9DsfT/QbDz/0Kv8/xEu/v9HIDS8QE8oUQFP6QABUKlBwVBpQMFQKQAADefOzWG0eZny//+PKrx+jyu8v9BtPP/P7Pz/z2z8v8+sfH7Qr37/R2C0vABOqFDBT+kAAVCpQMGQaUDBz+kAAA2nzs2htHmg9r//ky28/ovq/D/PrX0/z638/86tvL/O7Px+z+/+/0dg9LwATuhQwU+pAAFQqUDBkGlAwc/pAAAN6A7M4bS5one//54zfr6Sbn1/zKz8v8xt/L/Mbfx/zC08fsyv/r9GoPR8AI6okMEPqQABUKlAwZBpQMHP6QAADegOziG0uaM3v/+h9L8+oTR/P9xyvr/WcP3/07A9f9KvPT7Vsz9/SuK0/ABOqFDBT+kAAVCpQMFQaUDBj+kAAA3oT0fgNHnXtP//mjO/fto0f7/cNf//3TY//9u1v7/bdX8/Gni//0nkdXzADihRQY/pAAFQqUDBUClAgU/pAAFPqQzBVO12ARqxfkHa8LsCnDD8gx1w/MMd8TzC3jE9Ap3xPAHesf8Bl635gU9pDwFQKQABUClAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%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%20gBrowser.selectedTab%20%3D%20gBrowser.addTab%28%27http%3A//savefrom.net/%3Furl%3D%27%20+%20escape%28content.location.href%29%29%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%u0421%u043F%u0440%u0430%u0432%u043A%u0430%20%u043C%u0430%u0441%u0441%u0438%u0432%20%u0441%20%u0434%u043E%u043C%u0435%u043D%u0430%u043C%u0438%20%u0437%u0430%u043A%u0430%u0447%u043A%u0443%20%u0438%u0437%20%u043A%u043E%u0442%u043E%u0440%u044B%u0435%20%u043F%u043E%u0434%u0435%u0440%u0436%u0438%u0432%u0430%u0435%u0442%20savefrom%20..............%0Avar%20hosts%20%3D%20self.Help.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%u0415%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%u043C%u0435%u043D%u044F%u0435%u043C%20%u0438%u043A%u043E%u043D%u043A%u0443%20%u0438%20%u043F%u043E%u0434%u0441%u043A%u0430%u0437%u043A%u0443%20..............%0Avar%20%5Bimg%5D%20%3D%20document.getAnonymousNodes%28self%29%3B%0AaddEventListener%28%22TabAttrModified%22%2C%20%28e%2C%20tab%20%3D%20e.target%29%3D%3E%20%7B%0A%20%20%20if%20%28%20%21tab.selected%20%29%20return%3B%20%20%20%0A%20%20%20%0A%20%20%20if%20%28%20%7Ehosts.indexOf%28content.document.domain.replace%28%22www.%22%2C%20%22%22%29%29%20%29%20%0A%20%20%20%20%20%20%20%20self.tooltipText%20%3D%20%22%u0415%u0441%u0442%u044C%20%u0432%u0438%u0434%u0435%u043E%20%u0434%u043B%u044F%20%u0437%u0430%u0433%u0440%u0443%u0437%u043A%u0438%22%2C%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20img.src%20%3D%20%22data%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBEAAAEAIACsBAAAFgAAACgAAAAQAAAAIgAAAAEAIAAAAAAAhAQAAAAAAAAAAAAAAAAAAAAAAAAFpUAABaVAAAWlQAAFpUAABaZBBQanQQAHoT4UAqtEtAGsRL0Foj0ZBqdBAAWmQQUFpUAABaVAAAWlQAAFpUAABaVAAAWlQAAFpUAABaVABQeoRQEFnzoQAqc+nS3olP8y7Jr/BapCqASeORQIqEUABaY/BQWlQAAFpUAABaVAAAWlQAAFpUAABaU/BAeoRAAGoDwQAKk/oTbllv+H/9z4jv/g+EToov8Eq0OrBKA6EweoRAAFpT8FBaVAAAWlQAAFpUAABaVAAwenQwAGoDwOAKk+oDzmmf+J/976fPrI/XX5wv6K/935Tuqo/wWrRKsEnzoTB6dEAAWlPwMFpUAABaVAAwanQwAHoT0PAKg9ojnlmf+J/9z4cvi8/Vz3qP9c9qj/YPWq/Xf/yPhE6aD/BKtEqwSgOxQHp0QABaVAAgWnQgAGoDwMAKg8oDPklf+H/9v4a/e4/VT2pP9b96r/W/er/1X2qP9X86X+X/62+SnmjP8AqUGpBqA6EAWnQgAGoTwGAKtCmS3mkv+B/9X5Zva0/k71o/9X9qv/Vvar/1X2q/9V9qv/Ufap/1Pzp/9V/LL7H+iK/wGsRqEFoTwJBadBtgXUbf8o8Jf/TfKk/0/2p/9R9qr/UfWr/1D1rP9Q9a3/T/Ws/0/1rP9O9q3/RPCl/yLulv8H1XL/BqdDwAWoQ3sGp0N2AKE4lxjScfRN/bH+UPSr/Ur0q/9M9a7/S/Wu/0r0rf9M9Kz9S/u3/hrUfvgAoTueBqdDdwWoQ34FpUECBaQ/AAGgOTkZznPiSfyz/0r0q/pG9K3/SPWw/0j1sP9F867/R/Ou+kf7uP0a0XzuAaA6QQWjPwAFpUIDBaVBBgakPwAAoDg8J9F+51P9vf5B8qr6QvOu/0P0sf9D9LH/QfOw/0Lzr/xE+7v9HNKA8QGhPEQFpD8ABaVCBwWlQQMFpEAAAJ83OzXRhuZn/8v+PPGq+jzyrv9B87T/P/Oz/z3ys/8+8bH7Qvu9/R3SgvABoTpDBaQ/AAWlQgMGpUEDB6Q/AACfNjs20Ybmg//a/kzztvov8Kv/PvS1/z7zt/868rb/O/Gz+z/7v/0d0oPwAaE7QwWkPgAFpUIDBqVBAwekPwAAoDc7M9KG5on/3v54+s36SfW5/zLys/8x8rf/MfG3/zDxtPsy+r/9GtGD8AKiOkMEpD4ABaVCAwalQQMHpD8AAKA3OzjShuaM/97+h/zS+oT80f9x+sr/WffD/071wP9K9Lz7Vv3M/SvTivABoTpDBaQ/AAWlQgMFpUEDBqQ/AAChNz0f0YDnXv/T/mj9zvto/tH/cP/X/3T/2P9u/tb/bfzV/Gn/4v0n1ZHzAKE4RQakPwAFpUIDBaVAAgWkPwAFpD4zBbVT2ATFavkHwmvsCsNw8gzDdfMMxHfzC8R49ArEd/AHx3r8Brde5gWkPTwFpEAABaVAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%22%3B%0A%20%20%20else%20%0A%20%20%20%20%20%20%20%20self.tooltipText%20%3D%20%22%u041D%u0435%u0442%20%u0432%u0438%u0434%u0435%u043E%20%u0434%u043B%u044F%20%u0437%u0430%u0433%u0440%u0443%u0437%u043A%u0438%22%2C%0A%20%20%20%20%20%20%20%20img.src%20%3D%20self.image%3B%0A%20%20%20%20%20%20%20%20%0A%7D%2C%20true%2C%20gBrowser.tabContainer%20%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%5Bfilefactory.com%0Asendspace.com%0Ayoutube.com%0Ametacafe.com%0Abreak.com%0Adailymotion.com%0Avimeo.com%0Asevenload.com%0Amail.ru%0Asmotri.com%0Ayandex.ru%0Arambler.ru%0Atvigle.ru%0Aintv.ru%0Afacebook.com%0Alivejournal.com%0Avk.com%0Aodnoklassniki.ru%0Asoundcloud.com%0Aliveinternet.ru%0Aguitar-tube.com%0Agametrailers.com%0Atwitch.tv%0Azaycev.net%0A1tv.ru%0Arutv.ru%0Antv.ru%0Avesti.ru%0Amreporter.ru%0Akarusel-tv.ru%0Aautoplustv.ru%0Arussia.ru%0Aamik.ru%0Alife.ru%0Aa1tv.ru%0Akiwi.kz%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

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

Выделить код

Код:

// Настройка функций кликов мыши для кнопки ..............
this._handleClick =()=> gBrowser.selectedTab = gBrowser.addTab('http://savefrom.net/?url=' + escape(content.location.href));


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


// Если домен сайта совпадает с массивом меняем иконку и подсказку ..............
var [img] = document.getAnonymousNodes(self);
addEventListener("TabAttrModified", (e, tab = e.target)=> {
   if ( !tab.selected ) return;   
   
   if ( ~hosts.indexOf(content.document.domain.replace("www.", "")) ) 
        self.tooltipText = "Есть видео для загрузки",      
        img.src = "data:image/x-icon;base64,AAABAAEAEBEAAAEAIACsBAAAFgAAACgAAAAQAAAAIgAAAAEAIAAAAAAAhAQAAAAAAAAAAAAAAAAAAAAAAAAFpUAABaVAAAWlQAAFpUAABaZBBQanQQAHoT4UAqtEtAGsRL0Foj0ZBqdBAAWmQQUFpUAABaVAAAWlQAAFpUAABaVAAAWlQAAFpUAABaVABQeoRQEFnzoQAqc+nS3olP8y7Jr/BapCqASeORQIqEUABaY/BQWlQAAFpUAABaVAAAWlQAAFpUAABaU/BAeoRAAGoDwQAKk/oTbllv+H/9z4jv/g+EToov8Eq0OrBKA6EweoRAAFpT8FBaVAAAWlQAAFpUAABaVAAwenQwAGoDwOAKk+oDzmmf+J/976fPrI/XX5wv6K/935Tuqo/wWrRKsEnzoTB6dEAAWlPwMFpUAABaVAAwanQwAHoT0PAKg9ojnlmf+J/9z4cvi8/Vz3qP9c9qj/YPWq/Xf/yPhE6aD/BKtEqwSgOxQHp0QABaVAAgWnQgAGoDwMAKg8oDPklf+H/9v4a/e4/VT2pP9b96r/W/er/1X2qP9X86X+X/62+SnmjP8AqUGpBqA6EAWnQgAGoTwGAKtCmS3mkv+B/9X5Zva0/k71o/9X9qv/Vvar/1X2q/9V9qv/Ufap/1Pzp/9V/LL7H+iK/wGsRqEFoTwJBadBtgXUbf8o8Jf/TfKk/0/2p/9R9qr/UfWr/1D1rP9Q9a3/T/Ws/0/1rP9O9q3/RPCl/yLulv8H1XL/BqdDwAWoQ3sGp0N2AKE4lxjScfRN/bH+UPSr/Ur0q/9M9a7/S/Wu/0r0rf9M9Kz9S/u3/hrUfvgAoTueBqdDdwWoQ34FpUECBaQ/AAGgOTkZznPiSfyz/0r0q/pG9K3/SPWw/0j1sP9F867/R/Ou+kf7uP0a0XzuAaA6QQWjPwAFpUIDBaVBBgakPwAAoDg8J9F+51P9vf5B8qr6QvOu/0P0sf9D9LH/QfOw/0Lzr/xE+7v9HNKA8QGhPEQFpD8ABaVCBwWlQQMFpEAAAJ83OzXRhuZn/8v+PPGq+jzyrv9B87T/P/Oz/z3ys/8+8bH7Qvu9/R3SgvABoTpDBaQ/AAWlQgMGpUEDB6Q/AACfNjs20Ybmg//a/kzztvov8Kv/PvS1/z7zt/868rb/O/Gz+z/7v/0d0oPwAaE7QwWkPgAFpUIDBqVBAwekPwAAoDc7M9KG5on/3v54+s36SfW5/zLys/8x8rf/MfG3/zDxtPsy+r/9GtGD8AKiOkMEpD4ABaVCAwalQQMHpD8AAKA3OzjShuaM/97+h/zS+oT80f9x+sr/WffD/071wP9K9Lz7Vv3M/SvTivABoTpDBaQ/AAWlQgMFpUEDBqQ/AAChNz0f0YDnXv/T/mj9zvto/tH/cP/X/3T/2P9u/tb/bfzV/Gn/4v0n1ZHzAKE4RQakPwAFpUIDBaVAAgWkPwAFpD4zBbVT2ATFavkHwmvsCsNw8gzDdfMMxHfzC8R49ArEd/AHx3r8Brde5gWkPTwFpEAABaVAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA";
   else 
        self.tooltipText = "Нет видео для загрузки",
        img.src = self.image;
        
}, true, gBrowser.tabContainer );

Anti Boss Key+ ( Firefox 3.6+ )
Сворачивает FF, удаляет все изображения на активной странице, удаляет иконку сайта и меняет названые на about:blank на активной вкладке, переключает FF на первую открытую вкладку. Изменить сочетание клавиш которые запускает Anti Boss Key можно в вкладке Настройки кнопки нажмите нужные нужные вам сочетание клавиш или одну клавишу, потом сохранит изменения.

ЛКМ => свернуть FF и спрятать активную вкладку
Ctrl + SPACE => свернуть FF и спрятать активную вкладку

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

Выделить код

Код:

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%3EAnti%20Boss%20Key+%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEhIAAAEAGABgBAAAFgAAACgAAAASAAAAJAAAAAEAGAAAAAAAOAQAAAAAAAAAAAAAAAAAAAAAAACqqqpGRkZNTU1MTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExLS0tQUFAoKCgAAOfn566urq+vr6ysrKysrKysrK2tra6urq6urq6urq6urq6urq6urq+vr62traysrLi4uExMTAAA4uLio6Ojra2tubm5tbW1tbW1tra2sbGxrq6ur6+vsLCwsbGxsLCwra2ts7Ozrq6ura2tSEhIAADi4uKqqqqRkZFSUlJjY2NdXV1LS0tNTU1ISEhGRkZDQ0M/Pz9ERERQUFBFRUWSkpK4uLhGRkYAAOHh4bCwsG5ubhYWFkRERAsLCwQEBBMTEwYGBgAAAAAAAAAAAAICAiMjIwUFBWtra76+vkVFRQAA4eHhsLCwb29vNzc3bm5uDg4ODQ0NCAgIAwMDBAQEBQUFBAQECgoKKysrBQUFZ2dnu7u7RUVFAADh4eGxsbFtbW09PT1+fn4EBAQAAAABAQEAAAAAAAAAAAAAAAAAAAAREREAAABdXV26urpFRUUAAOHh4bGxsWxsbD4+PpycnGBgYGRkZG1tbWdnZ2hoaGlpaWhoaGZmZjY2NgAAAFJSUrm5uUZGRgAA4eHhsbGxbW1tNTU1wMDAjY2NiYmJvb293Nzc3d3d1NTUsrKyrKysfX19AAAASkpKubm5RkZGAADh4eGxsbFvb28pKSnBwcFycnJ2dnbIyMjBwcGvr6/S0tLDw8OamppfX18AAABHR0e5ublGRkYAAOHh4bCwsHBwcCcnJ7a2tmtra4iIiLe3t4iIiLu7u6amptra2p+fn1BQUAAAAEhISLm5uUZGRgAA4eHhsbGxbGxsREREubm5aWlpZmZmxsbGqampu7u7vr6+ycnJkpKSSkpKAAAATExMuLi4RkZGAADh4eGxsbFubm4zMzPBwcFsbGxMTEx0dHSoqKi8vLyioqJ0dHRvb29HR0cODg5JSUm5ublGRkYAAOHh4bCwsHJycgAAALGxsXp6el5eXlxcXGxsbHx8fGlpaXh4eGBgYFBQUAYGBj8/P7q6ukVFRQAA4uLiq6urjIyMQ0NDoKCgd3d3k5OTjY2Nj4+PjY2Nl5eXpKSkdnZ2YGBgVFRUcXFxtLS0R0dHAADj4+OlpaWrq6uysrKsrKx+fn6FhYV7e3t3d3d6enp0dHRxcXFzc3OMjIy0tLStra2vr69KSkoAAOLi4qKioqWlpaOjo6WlpampqaWlpaampqioqKqqqqmpqaioqKioqKioqKOjo6Ojo62trT8/PwAA9fX14uLi4+Pj4+Pj4+Pj4uLi4+Pj4uLi4uLi4uLi4uLi4uLi4uLi4uLi4+Pj4uLi6enppqamAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E2%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%u0441%u0432%u0435%u0440%u043D%u0443%u0442%u044C%20....%0AsetTimeout%28function%28%29%20%7B%20window.minimize%28%29%3B%20%7D%2C%200%29%3B%0A%0A//%20%u043F%u0435%u0440%u0435%u043A%u043B%u044E%u0447%u0438%u0442%u044C%20%u0438%u043A%u043E%u043D%u043A%u0443%20%u0438%20%u043D%u0430%u0437%u0432%u0430%u043D%u0438%u0435%20%u0442%u0435%u043A%u0443%u0449%u0435%u0439%20%u0432%u043A%u043B%u0430%u0434%u043A%u0438%20...%0Avar%20CurTab%20%3D%20document.getElementById%28%27content%27%29.selectedTab%3B%0ACurTab.removeAttribute%28%27image%27%29%3B%0ACurTab.setAttribute%28%22label%22%2C%22about%3Ablank%22%29%3B%0A%0A//%20%u0441%u043F%u0440%u044F%u0442%u0430%u0442%u044C%20%u0438%u0437%u043E%u0431%u0440%u0430%u0436%u0435%u043D%u0438%u0435%20%u043D%u0430%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u0435%20....%0Avar%20style%20%3D%20content.document.createElement%28%22style%22%29%3B%0A%20%20%20%20style.setAttribute%28%22type%22%2C%20%22text/css%22%29%3B%0A%20%20%20%20style.setAttribute%28%22id%22%2C%20%22hideImg%22%29%3B%0A%20%20%20%20style.innerHTML%20%3D%20%22img%2C%20embed%2C%20object%20%7B%20visibility%3A%20hidden%20%21important%3B%20%7D%20%22%20+%0A%20%20%20%20%20%20%22html%20*%20%7B%20background-image%3A%20none%20%21important%3B%20%7D%22%3B%0A%20%20%20%20var%20head%20%3D%20content.document.getElementsByTagName%28%22head%22%29%5B0%5D%3B%0A%20%20%20%20head.appendChild%28style%29%3B%0A%20%20%20%20%0A//%20%u043F%u0435%u0440%u0435%u043A%u043B%u044E%u0447%u0438%u0442%u0441%u044F%20%u043D%u0430%20%u043F%u0435%u0440%u0432%u0443%u044E%20%u0432%u043A%u043B%u0430%u0434%u043A%u0443%20....%20%20%0AgBrowser.selectedTab%20%3D%20gBrowser.tabContainer.childNodes%5B0%5D%3B%20%0A%0A%0A%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5BCtrl+%20%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

Код:

Выделить код

Код:

// свернуть ....
setTimeout(function() { window.minimize(); }, 0);

// переключить иконку и название текущей вкладки ...
var CurTab = document.getElementById('content').selectedTab;
CurTab.removeAttribute('image');
CurTab.setAttribute("label","about:blank");

// спрятать изображение на странице ....
var style = content.document.createElement("style");
    style.setAttribute("type", "text/css");
    style.setAttribute("id", "hideImg");
    style.innerHTML = "img, embed, object { visibility: hidden !important; } " +
      "html * { background-image: none !important; }";
    var head = content.document.getElementsByTagName("head")[0];
    head.appendChild(style);
    
// переключится на первую вкладку ....  
gBrowser.selectedTab = gBrowser.tabContainer.childNodes[0];

Save( Firefox 24 + ) от 07.03.2017.
Кнопка для сохранения веб-страниц и элементов веб-страниц, открывает меню из которого можно:
Сохранить закладку текущей страницы с ярлыком сайта, иконки для ярлыков хранятся в папке C:\Documents and Settings\Favicon\, можно сохранить ярлык страницы без запроса на сохранение в последнюю папку где сохранялся ярлык сайта,
Сохранить иконку сайта с диалогом сохранения,
Сохранить иконку сайта в буфере обмена как код base64.
Сохранить выделенную область страницы как PNG-изображение,
Сохранить выбранный элемент страницы как PNG-изображение,
Сохранить видимую область страницы как PNG-изображение,
Сохранить всю страницу как  PNG-изображение, если страница слишком большая то кнопка сохранит сколько возможно от страницы,
Сохранить страницу как PDF файл, через сервис pdfmyurl.com,
Добавить вверху страницы ссылку на её адрес и сохранить страницу через диалог сохранения,
Сохранить выделенный текст в текстовой txt файл, если текст не выделен сохранить весь текст на странице в txt файл,
Добавить в контекстного меню изображений новый пункт 'Запомнить изображение как base64',
Добавить в контекстного меню выделенного текста новый пункт 'Сохранить выделенный текст в файл', который позволяет сохранить выделенный текст в .txt файл на рабочем столе без запроса и с добавлением текста к тексту который уже был сохранен ранее,
Добавить в контекстного меню выделенного текста новый пункт 'Открыть выделенный текст в внешнем редакторе', который позволяет открыть выделенный текст из страницы или текстового поля в внешнем текстовом редакторе.

Скриншот меню кнопки:
13556733e69c7db6f99a662149ac61d2.png

ЛКМ => Открыть меню кнопки.
Код инициализации:

Выделить код

Код:

// Save, от 07.03.2017. .............

self.label = "Save";
self._handleClick =()=> menuPopup.showPopup(this, -1, -1, "popup", "bottomleft", "topleft");
self.image = "data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAAAAADAgBEDRIXnwxQjKQNWp6pDFWXqAxXm6gMV5moDFeaqAxXmqgMV5qoDFebqAxVlqgNW5+pCkyIogwSFqgDAgBHDQoFhyszOv8hheP+IJH7/x+L8v8fjfb/H433/x+N9v8fjfb/H432/x+N9/8fi/L/IJH7/yGF5P0kLTTvDAcDgwgICIQ8Ojf/0czA+Oji1fzh18r85NzO/OTbz/zj287849vO/OPbzvzk3M/84dfK++ji1f3Sy8D5NDIvywYGB3kKCgqFQ0A8/+XXw/v979f/9uTO//rp0f/66NH/+ujR//rn0f/66NH/+ujR//bkzv/979f/5tfD/UZBPv8KCwqEDQwMhUVDQP/f08X7+OrZ/+zf0P/v5NP/8OPT/+/j0//v4tP/8OPT/+/j0//s39D/+OrZ/+DTxfxEQj//DAwMhA8PD4VKR0T/4dXG+/rr2v/v4tH/9OXU//Ll1P/z5dT/8+XU//Pl1P/05NT/7+DR//rr2v/i1cX7SkhE/w8PD4USEhKFT0xI/+XXxfv97tr/9ePR//no1P/459T/+OfU//jn1P/459T/+OfU//Xk0f/97tr/5dfF+09MSf8SEhGFFRQUhVNQTv/j2cv7+u/g//Hm2P/169v/9Orb//Tq2//06tv/9erb//br3P/x5tf/+e/g/+PZzPtTUU7/FBQUhRgXF4VXU1D/2828+/Lk0f/q2sf/7d3K/+3dyv/t3cr/7N3K/+rayP/r28n/69vI//Ll0v/azbv7VlNP/xgXF4UfHh6FTktJ/1JOTPtZVFL/Uk5L/1FNSv9RTUr/UU1K/1JPTP9YVVD/VVJP/09NSv9WUk//UU1L+05LSf8fHh2FIR8fhVVTUP9FQkD7UlBM/6Wlj/+4uJ7/sLCX/7S0mv+xsJn/oKCQ/6+vmv+hoYv/TEtH/0NCQPtVUk//IR8fhSMhIIVcWVb/SEVF+19dVv/f3sP////e//X10v///93/2di8/1lYWP+eno//5+fG/19dV/9JRkb7W1hV/yMhIYUkJCOFXltZ/0tJSPtdW1f/0NC4/+/u1P/h4cj/8PDV/7++q/8vLC7/e3lw/9fWv/9eXVf/TElJ+15bWf8lJCKEJSQjhF9cWf9LSUf5XVtX/tbVwf/5+OL/6enV//j54v/GxrX/QD0+/42Kgv/d3cr/YF5a/k5LSvlhXlv/JSUjhCkoKIZpZWT/VVJR/WNhXP/V1cT//f3s/+3t3v/8/Or/zc2//01LSf+VlIz/4eDS/2hmYv9YVVT8aWVj/ycmJoIaGRlYSEVE1DYzM8NKSUfP0dHG9/X16P/n59v+7e3g/+jo3f/X2M3+6uve/9bWzPdOTUvNOjg3y0RBQLwPDw8lAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==";


var pref = "CB.Shortcuts.pathToSaveShortcuts";
var faviconFolder = "C:\\Documents and Settings\\Favicon\\";   // папка для сохранения иконок для ярлыков и ярлыков сайтов
var alertsService = Cc["@mozilla.org/alerts-service;1"].getService(Ci.nsIAlertsService);


// Создать меню для кнопки .............
var array = [
   { label: "Сохранить значок веб-сайта", func: "saveFavicon()", image: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAACPVBMVEX09ff////C3L+Uq8+Vq8+Uqs+Zr9CZrtCZr9Gfu+ear8+mt9JRf8ORxl3t8vfF06+Twojs8/d9otl8o9s+aquZrs/X9KLp8Pft8fZhisf//+DBzN2hveihv+pii8hti9pgicl6oNlojs1zncNsi836/P2duebx8/eYyWqBp+Gn0IKBvlKHsm9qmaVuk8zt7/FEbauEv1Tp7/JdhL9oi9Pl8e2LwlmdsdD7/P76+/3H7ofo8+peh8eHwFaSteZ0pkp2gl7q8/Ohy5OApt2by2eZuOqbuOWaezWuvtd7nN2HvWxul9Ty9feQxV5ljcqBp+JEcLCVtOOo0nR7odx5n9suX6Z1mtBzmtSXyGPv9PewzfOzx+O6zu/s8fd9o95Xfrthi8lYhMN5oNnw9ffw9Pjw9Pf8/f6ewO/m8O9zmdE6aapsjdyUwouPxWPDzd6XteOSs9B5nNVpnpqHt7h/s6F6n9d7ntSTttGHwVh4qp+Ev1HH7ox6qk5wj+Hm8e3t9fOm0IKAtqOBpNrx+P9ljcyhs9FpkM2hv+/u8/fF0eOLu4N+vFKgzX3p9OSFqN13qExekIl4n9j7/P3x9PhxmNDm8e9Vg8Zfkozr8veq0YTX9qL//92AtamOwnHFz96Fot1diMh+pd13ntmatu+YyW/3+/+Tqs5UgcShzJNbhsdTf8GHs7bo8PaXtuqMr+Ty8/SZt+SUqs7r7Ox3ndb9/f7t8feZyXGYyWWCpNbz9PRuiteNtNDn7/V4ntjx8fGo3JqNAAAAv3RSTlP/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AEVuhDkAAAD+SURBVBhXY5jHzcUMAqxAICq9bx8D96adDFAgaGQOFOBaH7h7zoqZDTlFyptncAAFWBjyi52CXCI0unRLxcECPhsatbbzmlXMnS60hg0kkOxW0uNrq93tNaFpD1ggUm21QK532ZQdSm1hmXKdDCwdnOWVOi1RjNGMQCCrwMDMJ8NZ4LAynVGPkXFp8zpJBubYmn579wXtqhZb0iwn9a1iWLaViYmJ3891obOwYtLEvcYMGyWAAkwJdv6accEhi8LjGVr11SenpC5f61g3NcO0vjCAIc+DjZ2dnWexddWSbYa9nlkM+8BgWsxsK7FZ1VLzRaACNokmtdnyu1QMQgF7Rlh4zWWTAwAAAABJRU5ErkJggg=="},
   { label: "Запомнить значок веб-сайта как base64", func: "copyFaviconData()", image: "data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAAAAAAAAAAAAAI2bv/9RVpf/AAAAAAAAAAAAAAAAAAAA/wbwAf8G8AH/BvAB/wbwAf8G8AH/BvAB/wbwAf8G8AH/AAAAAAAAAACIkvD/Jia6/ywpq/8AAAAAAAAAAAAAAAAAAAD/AAAA/wbwAf90qpv/Ymic/1RWqP9OUKr/W2Ch/2dumf9YYKT/Ly/B/xQP3/8MB9P/JCGb/wAAAAAAAAAAAAAAAAAAAP8G8AH/U5ea/ycr8f8VIP3/HiP4/ywo8v8sIvb/LCL2/ywi9v8KBOj/BQDe/wQAtv8tK4P/AAAAAAAAAAAAAAD/BvAB/3Sqm/9iaJz/Tim3/0UuuP9GPrT/R0ex/zk8uf8gIMz/FRDe/xEMzv8jIJz/AAAAAAAAAAAAAAAAAAAA/wbwAf8G8AH/BvAB/wAAAAAAAAAAAAAAAAAAAP8AAAD/SqOR/yImvP8sLKj/AAAAAAAAAAAAAAAAAAAAAAAAAP8G8AH/BvAB/wbwAf8AAAD/AAAA/wAAAP8AAAD/BvAB/3Sqm/9KW5r/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/BvAB/wbwAf8G8AH/BvAB/wbwAf8G8AH/BvAB/wbwAf8G8AH/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wbwAf8G8AH/BvAB/wbwAf8G8AH/BvAB/wbwAf8G8AH/BvAB/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8G8AH/BvAB/wbwAf8AAAAAAAAAAAAAAAAAAAAABvAB/wbwAf8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/BvAB/wbwAf8G8AH/AAAAAAAAAAAAAAAAAAAAAAAAAAAG8AH/AAAAAAAAAP8G8AH/AAAAAAAAAAAAAAAAAAAA/wbwAf8G8AH/BvAB/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8G8AH/BvAB/wAAAAAAAAAAAAAAAAAAAP8G8AH/BvAB/wbwAf8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/BvAB/wbwAf8AAAAAAAAA/wAAAP8G8AH/BvAB/wbwAf8G8AH/BvAB/wbwAf8G8AH/BvAB/wbwAf8G8AH/BvAB/wbwAf8G8AH/AAAAAAAAAAAG8AH/BvAB/wbwAf8G8AH/BvAB/wbwAf8G8AH/BvAB/wbwAf8G8AH/BvAB/wbwAf8G8AH/BvAB/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOesQQBjrEGAAaxBwACsQcABrEHDg6xBwAesQcAPrEHAD6xBw8+sQcPprEHD8axBwAGsQQABrEGAAaxB//+sQQ=="},  
   { separator: ''},
   { label: "Сохранить ярлык страницы как…", func: "saveShortcuts('true')", image: "data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADzqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA/5XLDv/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA/5XLDv8E/yT/lcsO//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA/5XLDv8E/yT/BP8k/wT/JP+Vyw7/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA/5XLDv8E/yT/BP8k/wT/JP8E/yT/BP8k/5XLDv/zqgD/86oA//I1///yNf//86oA//OqAP/zqgD/86oA//OqAP+Vyw7/lcsO/wT/JP8E/yT/BP8k/5XLDv+Vyw7/86oA//OqAP/yNf//8jX///OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP+Vyw7/BP8k/5XLDv/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/lcsO/wT/JP+Vyw7/86oA//OqAP/zqgD/86oA//02AP/9NgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA/5XLDv8E/yT/lcsO//OqAP/zqgD/86oA//OqAP/9NgD//TYA//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP+Vyw7/BP8k/5XLDv/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/lcsO/wT/JP+Vyw7/86oA//OqAP/zqgD/86oA/wA31v8AN9b/86oA//9If///SH//86oA//OqAP/zqgD/86oA/5XLDv8E/yT/lcsO//OqAP/zqgD/86oA//OqAP8AN9b/ADfW//OqAP//SH///0h///OqAP/zqgD/86oA//OqAP+Vyw7/BP8k/5XLDv/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/lcsO/5XLDv+Vyw7/86oA//OqAP/zqgD/86oA/0CA//9AgP//86oA/07+9f9O/vX/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP9AgP//QID///OqAP9O/vX/Tv71//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/AACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQ=="},
   { label: "Сохранить ярлык страницы без запроса на сохранение", func: "saveShortcuts()", image: false},
   { separator: ''},
   { label: "Сохранить всю страницу как PNG", func: "WebScreenShot.captureAll()", image: "data:image/x-icon;base64,AAABAAEAEREAAAEAIADwBAAAFgAAACgAAAARAAAAIgAAAAEAIAAAAAAAyAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAzAAAAiAcFBa4KCQmvCgkJrwoJCa8KCQmvCgkJrwoJCa8KCQmvCgkJrwoJCa8KCQmvCgkJrwsJCaECAQE/BQMDAAAAAJUgICD4V1ZW/2FhYf5hYWH/YmFh/2BgYP9fX1//X19f/19fX/9gYGD/YmFh/2FhYf9gYGD+ZmVl/1RSUuIVFBQtCgkJy1paWv+Li4v9h4eH/oiIiP6FhYX+i4uL/pKSkv6Sk5P+kpKS/ouLi/6FhYX+iIiI/oiIiP6Hh4f7lZaW/25tbYQNDQ3OcHBw/5KSkv6Li4v/i4uL/5mZmf+EhIT/ZGRk/1tbWv9kZGT/hISE/5mZmf+Li4v/jY2N/4yMjPyWl5f/iomJjQ4NDc13d3f/m5ub/pWVlf+goKD/XFxc/ygoKP8fHyD/GBsb/yAhIv8pKSn/W1tb/6CgoP+Wlpb/lpaW/J6env+Jh4eMDg4OzX1+fv+ioqL+qqqq/1hYWP8ZGRn/Ghwb/x4dHP8mIh//FhQR/xUWF/8aGhr/WFhY/6urq/+cnJz8pKSk/4qJiYwPDg7Ng4OD/7W1tf6MjIz/Ghoa/xYYGP8uKCb/ZEAo/5xyOP++saL/RD45/xISE/8bGxv/jY2N/6+vr/ypqan/ioiIjA8PD82IiIj/xMTE/l1cXP8LDAz/JiId/1o3LP9ADgD/mGog//Dt6P/VysX/Ih4Z/wsMDf9eXl7/v7+//K6urv+KiYmMEA8PzY+Pj//Kysr+SEhH/wEDBv9MPi7/hlES/3dCAP+VZAn/tJVO/7eVXf9OQTL/AAIE/0pJSf/FxcX8tLS0/4qJiYwQEBDNm5ub/9/e3/5SUlL/AAAA/0M7Mf/aya7/ybiO/5RmEf9aIAD/cjkX/z80KP8AAAD/U1JS/9nZ2fzAwMD/i4qKjBEREc2oqKn/8O/w/oeGhv8AAAD/DAsK/6qkof/17uj/nW8l/14eCf9hPTr/ExUU/wAAAP+Hh4f/6urq/MzMzf+Mi4uMERERzbCwsv/r6uz+3Nzd/yoqKv8AAAD/ExEP/2heU/9yWjv/UD0u/xcXFv8AAAD/Kioq/93d3v/l5eb81NTV/4yLi4wSERHNuLm5/+/v8P7z8/P/xsbG/yAgIP8AAAD/AQEB/wAAAP8BAQH/AAAA/yAgIP/Gxsb/9PT0/+np6vzb29v/jIuLjBIREc2+vb7/+Pj5/uvr7P/7+/v/4ODg/3Nyc/8uLi7/Hh4d/y0sLP9zc3P/4ODg//v7+//s7O3/8/P0/OHg4f+Mi4uLFBMTyMPDw//////7+Pj4/ff29v38/Pz9/////fr6+v3u7u79+vr6/f////38/Pz99/b2/fn5+f37+/v53t7e/5KSko4GBgZ7m5yc//j4+P/w8fH/8fLy//Dw8P/u7u7/8vLy//X19f/y8vL/7u7u//Dw8P/x8vL/8vLy/uXl5f/BwcH+k5GRUAAAAAQeHR1yb25uxn59fcZ9fHzGfXx8xn18fMZ9e3vGfHt7xn17e8Z9fHzGfXx8xn18fMZ9fHzGgH9/xYmIiGVaV1cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="},
   { label: "Сохранить видимую часть страницы как PNG", func: "WebScreenShot.capturePage()", image: false},
   { label: "Сохранить выбранный элемент страницы как PNG", func: "WebScreenShotByClick.init()", image: "data:image/x-icon;base64,AAABAAEAIBkAAAEAIAAMDQAAFgAAACgAAAAgAAAAMgAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD29fT/2tra/8jIyP/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8jIyP/a2tr/9vX0/+zs7P/ak0b/4n0O/+J9Dv/ifQ7/4n0O/+J9Dv/ifQ7/4n0O/+J9Dv/ifQ7/4n0O/+J9Dv/ifQ7/4n0O/+J9Dv/ifQ7/4n0O/+J9Dv/ifQ7/4n0O/+J9Dv/ifQ7/4n0O/+J9Dv/ifQ7/4n0O/+J9Dv/ifQ7/4n0O/9qTRv/s7Oz/7Ozs/+J9Dv/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+/6SdmP/8+/r//Pv6//z7+v/8+/r//Pv6//z7+v/8+/r//Pv6//z7+v/8+/r/+vn4//z7+v/6+fj/4n0O/+zs7P/s7Oz/4n0O//z7+v/8+/r//Pv6//z7+v/8+/r//Pv6//z7+v/8+/r//Pv6//z7+v/8+/r//Pv6//z7+v/8+/r/aFtT//Lw7//y8O//8vDv//Lw7//y8O//8vDv//Lw7//y8O//8vDv//Lw7//y8O//8vDv//j39v/ifQ7/7Ozs/+zs7P/ifQ7/+vn4//r5+P/6+fj/+vn4//r5+P/6+fj/+vn4//r5+P/6+fj/+vn4//r5+P/6+fj/+vn4//r5+P9oW1P/7+zq/+/s6v/v7Or/8O3r//Dt6//w7ev/8O3r//Dt6//w7ev/8O3r/+/s6v/w7ev/9fTy/+J9Dv/s7Oz/7Ozs/+J9Dv/49/b/+Pf2//r5+P/6+fj/+vn4//r5+P/6+fj/+vn4//r5+P/6+fj/+vn4//r5+P/6+fj/+vn4/2hbU//q5uT/6ubk/+rm5P/q5uT/6ubk/+rm5P/q5uT/6ubk/+rm5P/q5uT/6ubk/+rm5P/y8O//4n0O/+zs7P/s7Oz/4n0O//j39v/49/b/+Pf2//j39v/49/b/+Pf2//j39v/49/b/+Pf2//j39v/49/b/+Pf2//j39v/49/b/aFtT/+bh3v/m4d7/5uHe/+bh3v/m4d7/5uHe/+bh3v/m4d7/5uHe/+bh3v/m4d7/5uHe//Dt6//ifQ7/7Ozs/+zs7P/ifQ7/9vX0//b19P/29fT/9vX0//b19P/29fT/9vX0//b19P/29fT/9vX0//b19P/29fT/9vX0//b19P9oW1P/4tzZ/+Lc2f/i3Nn/4tzZ/+Lc2f/i3Nn/4tzZ/+Lc2f/i3Nn/4tzZ/+Lc2f/i3Nn/7uro/+J9Dv/s7Oz/7Ozs/+J9Dv/08vH/9PLx//Ty8f/08vH/9PLx//Ty8f/08vH/9PLx//Ty8f/08vH/9PLx//Ty8f/08vH/9PLx/2hbU//x7+3/8vDv//Hv7f/x7+3/8e/t//Lw7//x7+3/8e/t//Lw7//x7+3/8vDv//Hv7f/29fT/4n0O/+zs7P/s7Oz/4n0O//Lw7//y8O//8vDv//Lw7//y8O//8vDv//Lw7//y8O//8vDv//Lw7//y8O//8vDv//Lw7//y8O//aFtT/6igmP+ooJj/qKCY/6igmP+ooJj/qKCY/6igmP+ooJj/qKCY/6igmP+ooJj/qKCY/8vGwf/ifQ7/7Ozs/+zs7P/ifQ7/8e/t//Hv7f/x7+3/8e/t//Hv7f/x7+3/8e/t//Hv7f/x7+3/8e/t//Hv7f/x7+3/8e/t//Hv7f9nWlL/aFtT/2hbU/9nWlL/Z1pS/2hbU/9oW1P/Z1pS/2daUv9oW1P/aFtT/2hbU/9nWlL/pJyX/+J9Dv/s7Oz/7Ozs/+J9Dv/w7ev/8O3r//Dt6//w7ev/8O3r//Dt6//x7+3/8O3r//Dt6//w7ev/8e/t//Dt6//w7ev/8O3r//Hv7f/w7ev/8O3r//Dt6//x7+3/8O3r//Dt6//w7ev/8e/t//Dt6//w7ev/8O3r//Dt6//w7ev/4n0O/+zs7P/s7Oz/4n0O/+/s6v/v7Or/7uro/+/s6v/v7Or/7+zq/+/s6v/v7Or/7+zq/+/s6v/v7Or/7+zq/+/s6v/v7Or/7+zq/+/s6v/v7Or/7+zq/+/s6v/v7Or/7+zq/+/s6v/v7Or/7+zq/+/s6v/u6uj/7+zq/+/s6v/ifQ7/7Ozs/+zs7P/ifQ7/7uro/+7q6P/u6uj/7uro/+zo5v/u6uj/7uro/+7q6P/s6Ob/7uro/+7q6P/u6uj/7Ojm/+7q6P/u6uj/7uro/+zo5v/u6uj/7uro/+7q6P/s6Ob/7uro/+7q6P/u6uj/7Ojm/+7q6P/u6uj/7Ojm/+J9Dv/s7Oz/7Ozs/+J9Dv/s6Ob/7Ojm/+zo5v/s6Ob/7Ojm/+zo5v/s6Ob/7Ojm/+zo5v/s6Ob/7Ojm/+zo5v/s6Ob/7Ojm/+zo5v/s6Ob/7Ojm/+zo5v/s6Ob/7Ojm/+zo5v/s6Ob/7Ojm/+zo5v/s6Ob/7Ojm/+zo5v/s6Ob/4n0O/+zs7P/s7Oz/4n0O/+rm5P/q5uT/6ubk/+rm5P/q5uT/6ubk/+rm5P/q5uT/6ubk/+rm5P/q5uT/6ubk/+rm5P/q5uT/6ubk/+rm5P/q5uT/6ubk/+rm5P/q5uT/6ubk/+rm5P/q5uT/6ubk/+rm5P/q5uT/6ubk/+rm5P/ifQ7/7Ozs/+zs7P/ifQ7/6eXi/+nl4v/p5eL/6eXi/+nl4v/p5eL/6eXi/+nl4v/p5eL/6eXi/+nl4v/p5eL/6eXi/+nl4v/p5eL/6eXi/+nl4v/p5eL/6eXi/+nl4v/p5eL/6eXi/+nl4v/p5eL/6eXi/+nl4v/p5eL/6eXi/+J9Dv/s7Oz/7Ozs/+J9Dv/m4d7/5uHe/+bh3v/p5eL/5uHe/+bh3v/m4d7/6eXi/+bh3v/m4d7/5uHe/+nl4v/m4d7/5uHe/+bh3v/p5eL/5uHe/+bh3v/m4d7/6eXi/+bh3v/m4d7/5uHe/+nl4v/m4d7/5uHe/+bh3v/p5eL/4n0O/+zs7P/s7Oz/4n0O/+bh3v/m4d7/5uHe/+bh3v/m4d7/5uHe/+bh3v/m4d7/5uHe/+bh3v/m4d7/5uHe/+bh3v/m4d7/5uHe/+bh3v/m4d7/5uHe/+bh3v/m4d7/5uHe/+bh3v/m4d7/5uHe/+bh3v/m4d7/5uHe/+bh3v/ifQ7/7Ozs/+zs7P/ifQ7/5uHe/+Tf3P/m4d7/5N/c/+bh3v/k39z/5uHe/+Tf3P/m4d7/5N/c/+bh3v/k39z/5uHe/+Tf3P/m4d7/5N/c/+bh3v/k39z/5uHe/+Tf3P/m4d7/5N/c/+bh3v/k39z/5uHe/+Tf3P/m4d7/5N/c/+J9Dv/s7Oz/7Ozs/+J9Dv/i3Nn/4tzZ/+Lc2f/i3Nn/4tzZ/+Lc2f/i3Nn/4tzZ/+Lc2f/i3Nn/4tzZ/+Lc2f/i3Nn/4tzZ/+Lc2f/i3Nn/4tzZ/+Lc2f/i3Nn/4tzZ/+Lc2f/i3Nn/4tzZ/+Lc2f/i3Nn/4tzZ/+Lc2f/k39z/4n0O/+zs7P/s7Oz/4n0O/+Lc2f/h29j/4dvY/+Hb2P/h29j/4dvY/+Hb2P/h29j/4dvY/+Hb2P/h29j/4dvY/+Hb2P/h29j/4dvY/+Hb2P/h29j/4dvY/+Hb2P/h29j/4dvY/+Hb2P/h29j/4dvY/+Hb2P/h29j/4dvY/+Hb2P/ifQ7/7Ozs/+zs7P/ifQ7/4NnW/+DZ1v/g2db/4NnW/+DZ1v/g2db/4NnW/+DZ1v/g2db/4NnW/+DZ1v/g2db/4NnW/+DZ1v/g2db/4NnW/+DZ1v/g2db/4NnW/+DZ1v/g2db/4NnW/+DZ1v/g2db/4NnW/+DZ1v/g2db/4NnW/+J9Dv/s7Oz/9fTy/+J9Dv/8+/r/+vn4//r5+P/6+fj/+vn4//r5+P/6+fj/+vn4//r5+P/6+fj/+vn4//r5+P/6+fj/+vn4//r5+P/6+fj/+vn4//r5+P/6+fj/+vn4//r5+P/6+fj/+vn4//r5+P/6+fj/+vn4//r5+P/6+fj/4n0O//X08v/8+/r/6KFU/+J9Dv/ifQ7/4n0O/+J9Dv/ifQ7/4n0O/+J9Dv/ifQ7/4n0O/+J9Dv/ifQ7/4n0O/+J9Dv/ifQ7/4n0O/+J9Dv/ifQ7/4n0O/+J9Dv/ifQ7/4n0O/+J9Dv/ifQ7/4n0O/+J9Dv/ifQ7/4n0O/+J9Dv/ooVT//Pv6/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="},
   { label: "Сохранить выбранную область страницы как PNG", func: "WebScreenShotByClipping.init()", image: "data:image/x-icon;base64,AAABAAEAEREAAAEAIADwBAAAFgAAACgAAAARAAAAIgAAAAEAIAAAAAAAyAQAAAAAAAAAAAAAAAAAAAAAAADDn2Hfz5pE/8eVQP7IlkH/yJZB/8iWQf/IlUH/yJVA/8iVQP/IlED/yJQ//8iUP//IlD//yJM+/8iTPv/Hkj3/nI1w//bDbP//8OH//+zW///s1///69b//+rV///p1P//59L//+XQ///izf//38n//9vG///ZxP//1b///dG////Prf/KlkX/88N4/v37///99Pj//fT6//vy9v/68fT/+u/y//rt8P/66u3/+ufq//rl6P/64eT/+93h//3a3//71d7//9LK/86XR//0xHb//vv////18///9fT///f5///4////9f7///P8///v+f//7Pb//+nz///m8f//4eb//9vZ//3Y2v//1Mb/zphH//TGd//+/////Pj1///7///Q58r/m9aV/6TZnv+i15r/otWY/6LTlv+j0pb/mc6M/9DXuf//3+P//Nnc///Wyf/OmUf/9MZ3//7////8+/j//////53WnP+Y5pn/rvGv/6PvpP+e7p//me6b/5nvm/95533/mM+L///j7f/629z//9jL/86ZR//0xnf//v////z9+v//////qtup/8Xzxf/a/tn/z/vO/8n7yf/D+sL/xPvD/6Hzo/+j05b//+Tu//re3///2cz/zplI//XGeP/+/////P36//////+n26f/uvC6/9T71P/K+Mr/xvjG/8D3wP+/+L//nfCf/6LTlf//5u//+t/g///cz//OmUj/9MZ3//7////8/fr//////6rcqv/G9MX/3//f/9n92f/V/NX/0PzQ/9H+0P+s9a7/pdSY///o8f/64OL//9zP/86aSP/0xnf//v////z9+f//////ndid/5TjlP+v7q//qeyp/6jsqf+k7KX/p+6n/4Tlh/+Z0Y7//+r0//rh4v//3tH/zppI//TGd//+/////v77///////Y8Nj/p9+n/6/jr/+t4a3/rd2p/67bpv+u2ab/p9Wc/9jgx///6Oz//OPl///e0f/Omkj/9MV1//7//////fr///78///+/f///////////////////P////j////0+///8fn//+vu///m4v/94+P//97P/86ZSP/zx3v//v/////+/f///////f////v////7////+/////v+///7+///+/f///vz/P/98Pr//+33//3p9///5OL/zppL//a1Sv/0xoL/9cR7//XEfP/1xHz/9cR8//XEfP/1xH3/9cR8//XCev/1wXr/9b94//W9d//1u3X/87l0//y6bP/Llj7/+pMA/vWBAP/1gwD/9YMA//WDAP/1gwD/9YMA//WDAP/1gwD/9YQA//WEAP/1hAD/9YQA//WEAP/zhAH//okA/8qLIv3xpzP/4ptV/+OdU//jnVP/451T/+OdU//jnVP/451T/+OdU//jnVL/451S/+OdUv/jnVL/451S/+GdVf/qnUf/2aRJ/9q0c9/8yn7/98V5/vjGev/4xnr/+MZ6//jGev/4xnr/+MZ6//jGev/4xnr/+MZ6//jGev/4xnr/+MZ6/vrIe/+jj2y4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="},
   { separator: ''},
   { label: "Сохранить всю страницу как PDF", func: "savePageToPDF()", image: "data:image/x-icon;base64,AAABAAEAEREAAAEAIADwBAAAFgAAACgAAAARAAAAIgAAAAEAIAAAAAAAyAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYUw4pJt3V/+Rb1D8lnFP/55zTf+VcVH/lXJS/5VyUv+VclL/lXJS/5VyUv+VclL/k3BR/J56Wv9cRzSkAAAAAJNvUKTto2L/4ppe/uehZf/Pmmr/noZv/9Scav/Wl17/1plh/9eZYf/XmWH/15lh/9eZYf/WmGD/2Jlg/suRXP9mRiuk8rWA/397dP1akKn/rqqi/3LF3f8Mntj/4dLJ///+9f/48u3/9e7n//bt5v/47+f/+O/n//jv5//rvZP/1ZJX/a9/VP9+lrD8AIvz/xOt+f8Douv/ALb6/wC28/9tmar/z8jJ//Lq5/////7//v////n9///6/P3//////+Ta0P/PjVP/pnpT/IWds/+aiXj/5efl/8Px//951/3/LMz//wCx8/8GltL/NIu3/4ycqf/l29L////+//n6+//8/v//3tXM/8+OVP+oe1P/6K57/86QWP/r6Ob////////++v/r9/z/oOb9/zDL//8Arf//AI/r/ydysv+hpqr//PTr///////d1Mz/0I5U/6h7U//osH//wo5g/+fm5P/7/f//9vf5//z7+////vv/9/r8/5Dc/P8Oqv7/AJf//wF02v9ffZ7/8Ojh/+Ha1P/NjFL/qHtT/+ewf//Ej1//7O3r///////+/v7//v7+//f5+v/6+vv////8/8Tq/f8hp/7/AJH//wB18/8/bqj/1MGu/9mXXv+leVH/569+/8iSYv+/tKn/wLew/8O5sf/P0M////////7+/v/3+fv////7/9Hv/v8hoP3/AIn//wB4/v84ZqL/w4NH/619VP/nsYD/x45c/9W5of/bv6j/0Jxt/6J/YP+spqD/2N3i//7////6+/3///76/8vr/v8Slv7/AIb+/wBz//83VH7/nW1B/+ewfv/Fjl7/7Ozr///////9+/r/9d7K/9Ghdv+jd1D/pJ6Y/+jt8f/9///////7/6fb/v8Ahv7/AYD//wRp6f95YlT/57B//8SOXv/n5uT//v7///r7/P/8/v////////XRsv/DhEv/loBu/9DX3P/9/v/////7/2O6/f8Afv//FnTU/5JtTf/nsH//xY9e/+jn5f/+/f//+fj5//n4+P/5+Pn/+/////Xbxf/Wj1D/nX1h/+Ll6P////7/3+/3/w+V//8tcbP/qHJB/+WuffzCjV7/5efn///////+/v7//////////////v7///////XRsP/TnW3/8fT3//////////z/ddD//0Nxl/+zdkH88LmH/9CRWP2+qJT/0M7N/8/Jxv/Pysf/z8rH/8/Kxv/Py8n/zsO6/7+pmP/PzMv/zsnG/9bNyP+nsK7/h4R3/b2BT/+Sb1Ck7qxw/9GSW/69hlb/wYhX/8CIV//AiFf/wIhX/8CIVv/BiVj/xI1d/8CIVv/BiFf/vYZW/9STW/7ppmv/bE80pAAAAACUd16k+sui/+7AmPzwwpr/8MKa//DCmv/wwpr/8MKa//DCmf/vwZj/8MKa//DCmv/uwJj8+cui/5N3XaQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="},
   { label: "Добавить url и сохранить страницу", func: "savePage()", image: "data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgICAyMjIzwyMjFeLi0tVS8vLlcuLy9XLS4uVywsLFUuLi5aKSkpUggICBMAAAAAAgICAQAAAAAAAAAAAAAAABQTEyOgoJ/yysvL/s3Pz/7Z293/4OPk/+bp6f/t7u7/5eXl/LOysv97e3vLFRUWJQAAAAACAgIDAAAAAAAAAAA8PDxSz9HT/83Qz/fLx8T8z7+5/M/AsPzez8n89e3r/PDx8fyusLL43dzc/52dndMWFhY2AAAAAAICAgIAAAAAODg5T8bEv/+9o476vIR1/7WDcv+uj3v/spCA/8Wqk//Gtab/rqyq/+Pk5fn19fX+np6e4BQUFCgAAAAAAAAAAC4uJU29oYj/wLao+tLDqf/Mv7P/yLik/7zEvP/F0cr/v62Y/6+Kef/Z2NP/6Ors+d3c3P97e3vNBAQEDgIDAAZhRCuYxaSb/8Gvqfu2inL/vIF0/7FmUv+ygG//waaX/8m8tP/CoIn/vqOF/9zg3//l5ef7ycnJ/zY2Nm0hFw08rGJD/6BlYf2mWUD/rW9g/7aNff+ZRyL/pmxR/7RyWv+qaEz/uYR0/69kSf/k1tD//////Ozs6/1iYmK4WTMck61mVv+Yemj8hjsg/51bQ/+wem//n084/6+pq/+3p6H/l0Ux/4lFOf+gWDr/zq2X//b7/fzo6Oj/YWBgsXpXSbnMsp//wNC8/I9jWv+WX1X/tn5w/7iKfv/Tzc7/ztXc/513bf+MSjH/rWJG/7iRd//o7Oz85OPl/2BgYLN1aFqu2tO+/7ejnvyohYD/ybGb/7q1ov/HwrX/7/Lr//T19v/Hzs3/p4V0/6hvW/+6gHf/4uDh/N3e3v9hYWC0dWNPuaVXRP6cfWv8w7Gz/8vHsv/U2dP/4OHf//b08//9/Pv/3drZ/7rBw/+0ppv/wZ2F/9zc3PzW1tj/ZWRktE1HPW2oa1f/lX1t/cTP0v/Ew8T/3Nvd/9LR0//W1tf/5OXl/+/t6v/i6vD/wK+i/8y2o//b3t/81NTU/2FhYbMMDAsPsZ2a1tDX2P++vL390c/P/+Dh4P/b29r/09PS/9rY1//6+Pf/8PP3/8Kqlf/c0sv/3N7g/NTU1P9iYmKyAAAAAEY6MmXozcP/5ezt+OHk6Pzt7Oz9+Pj4/urq6/zs7/T8+f///NXGsPzey8P87vDy/OXm5vnf39//ZWVlrgAAAAAGBQQQdFdHy8Wfhv/d18797e7w/+3t7P/y8u7/7N/G/7unff+/uqT/4+Tl/97d3v/c3Nz/sLCw+h8fH0IBAQABAAEBABEVFx8vJB1cWy8ciZNrU8itknHrkWdIxUsqFnEnJSBRMjQ3WS8uL1csLCtVMjIyXiIiIj4BAQECAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=="},
   { label: "Сохранить выделенный текст как txt файл", func: "saveSelectionToTxt()", image: "data:image/x-icon;base64,AAABAAEAEREAAAEAIADwBAAAFgAAACgAAAARAAAAIgAAAAEAIAAAAAAAyAQAAAAAAAAAAAAAAAAAAAAAAAAAAQE6AAAAZAAAAGgAAAJmAAACZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABlAAAAaQABAmYAAQEjAAAAADlVkOdVcKHxVXKi8kdklPJLZpfyU3Cg8lJvn/JRbZ7yUW+g8lFun/JRbp/yUG6e8lVyofFVdKjzLkV45wAAAFABAQEAaIzF/3y34v9wsuL/cJe0/0lpgv9bjLP/dLLh/2+v3v9sq9v/cK3d/3Gv3v9sqtv/b7Df/4G77P9VcqT2AAAAVAMDAQBnir/+ZqfU/pDB4/7a3uD+j46N/kxYXv6To6/+1er4/tXp+P7J3/D+1ej4/svg8v6Gut/9aqzd/lhxnvAAAABSAwIBAGaIvv9pptX/ocfj//f4/P/P0tX/g4CA/1xZWf+Woqr/2uz8/9Hl+f/W5fT/2Of3/5fC4v5tq93/Vm+e8QAAAFIDAgEAaYm+/3mw2/+iyeX/9Pn8/+z0+//IzNL/d3h5/0tMTv+Mkpn/xdvs/9Hp/f/O4PL/msXk/nmz4/9XcJ/xAAAAUgMDAQBti7//k7/h/6fL5v/v9fn/4u73/9Dk9P+8wMT/YGpx/zJJWv94iJf/ztzo/9Pp/P+ZwuD+gLfk/1dwnvEAAABSAwMBAHOPwf+myub/sNHp//j7/P/6/P3/8fr///r39P+sxdP/IXWq/xJJcv+NjZD/0+Lu/6TN7f6Ft+L/WXGf8QAAAFIDAwEAd5LD/7PR6/+ZxOP/0ePx/97r9f/Y5/L/3e32/8Tc7f9gseT/CHK3/zBYdv+HiY7/lL/f/pLE7/9bcJ3xAAAAUgMDAQB4k8P/xNvx/5/F5f+kyOX/qMrn/6TH5f+kyOX/sM/q/5e51P9Mm83/GHm3/xxIav9fdYf+pMvs/1x1pfIAAABTAwMBAHmSxf/O4/T/y9/y/8Hb9P/C3PX/wNv0/7vW7/+93ff/utDm/42fsf9Gjbn/EXS2/ytSbv6Fj5r/WnGc8gAAAFICAwEBepPE/tHk9f/S5PX/vMjV/7fCzP+3w8//uMPP/7XBzP+6ytf/qa+4/3h/hv9Ghaz/JoO+/jNXdP82PVnyAAAAVgACAgCBmcb/2+r3/dHh8fyPkpX/kI6N/5yam/+dnJ3/paWk/6enpf+sr6//mpSR/3Bubf9SjbD8H4C+/QsrSvcCAAB/AAAAA3yVx//j8///3u/7/52gpf6pqKf+uLm5/rq7u/7Ly8v+ycnI/paWlf6LjY/+np2f/Xh+g/5gnL7/MX+y/xcgJ80BAgNNN1OUs6W84fDA1O73mJyj/ainpv+2trb/t7e4/8fHyP/Fxsb/kZGQ/4eGhP+vucT/j6G+/W53k/NlkbnwNoOv/AgiNb8CCBsQDRo/YwsaO3B0d33arKyp9q2trfWvr6/2u7u79ru7vPawr7H1sbCt9nJ2gOQIGD6bFCFEYB0qPE1Bf6SpEz9cggAAAAMCAQEBAQAAADIyMmlDQ0ONQUFBhUFBQYVCQkGFQkJBhUhISIRNTU2OKysrZAEAAAUBAQAAAgEAAAkEAAEDAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="},
   { separator: ''},
   { label: "Запомнить изображение как base64, в контекстном меню", value: "CB.Save.WebScreenShotOnImage"},
   { label: "Сохранить выделенный текст в файл, в контекстном меню", value: "CB.Save.SelectionToFile" },
   { label: "Открыть выделенный текст в внешнем редакторе, в контекстном меню", value: "CB.Save.TextToEditor"},
];

var menuPopup = self.appendChild(document.createElement("menupopup"));
array.forEach((m,i)=> {
   if ("separator" in m) { menuPopup.appendChild(document.createElement("menuseparator")); return };
   var mItem = menuPopup.appendChild(document.createElement("menuitem"));
   mItem.setAttribute("label", m.label);
   mItem.setAttribute("class", "menuitem-iconic");
   if ("image" in m) mItem.setAttribute("image", m.image || array[i-1].image); 
   if ("value" in m) { 
       mItem.setAttribute('type', 'checkbox');
       mItem.setAttribute('checked', cbu.getPrefs(m.value) );
       mItem.onclick =()=> cbu.setPrefs(m.value, !cbu.getPrefs(m.value));
       }
   if ("func" in m) mItem.addEventListener("command", ()=> eval(m.func.toString()));
});
menuPopup.setAttribute("onclick", "event.stopPropagation()");



// Сохранить как PNG страницу или части страницы .............
WebScreenShot = {
   capture: function(win, x, y, width, height) {
      var canvas = document.createElementNS(xhtmlns, 'canvas');
      canvas.width = width;
      canvas.height = height;
      var ctx = canvas.getContext("2d");
      ((i = 17)=> { 
         try { ctx.drawWindow(win, x, y, canvas.width, canvas.height, "white") }
         catch(e) { canvas.height = canvas.width*i; arguments.callee(--i) };
      })();
      var url = makeURI(canvas.toDataURL("image/png"));
      
      var fp = window.makeFilePicker();
      fp.init(window, "Сохранить как…", fp.modeSave);
      fp.appendFilter("", "*.png");
      fp.defaultString = getTabLabel() + "  " + (new Date().toLocaleFormat("%d.%m.%Y. %H:%M:%S")) + ".png";
      if (fp.show() == fp.returnCancel || !fp.file) return;
      
      var wbp = window.makeWebBrowserPersist();
      parseInt(Services.appinfo.version) < 36
      ? wbp.saveURI(url, null, null, null, null, fp.file, null)
      : wbp.saveURI(url, null, null, null, null, null, fp.file, null); // если FF36+
   },
   captureAll: function() {
      var win = content;
      WebScreenShot.capture(win, 0, 0, win.innerWidth + win.scrollMaxX, win.innerHeight + win.scrollMaxY);
   },
   capturePage: function() {
      var win = content, doc = win.document, body = doc.body, html = doc.documentElement;
      var scrX = (body.scrollLeft || html.scrollLeft) - html.clientLeft;
      var scrY = (body.scrollTop || html.scrollTop) - html.clientTop;
      WebScreenShot.capture(win, scrX, scrY, win.innerWidth, win.innerHeight);
   },
   onImage: function(image) {
      var canvas = document.createElementNS(xhtmlns, 'canvas');
      canvas.width = image.naturalWidth;
      canvas.height = image.naturalHeight;
      var ctx = canvas.getContext('2d');
      ctx.drawImage(image, 0, 0);
      var base64 = canvas.toDataURL();
      gClipboard.write(base64);
   
      // стиль для изображение в сплывающей подсказке ....
      var sss = Cc["@mozilla.org/content/style-sheet-service;1"].getService(Ci.nsIStyleSheetService);
      var uri = makeURI('data:text/css,'+ encodeURIComponent('#alertImage { height: 25px !important; width: 25px !important; }'));
      sss.loadAndRegisterSheet(uri, 0);
      
      alertsService.showAlertNotification(base64, self.label, "Запомнил изображение как base64", false, "", (s, t)=> { 
         if (t == 'alertfinished')
             sss.unregisterSheet(uri, 0); // удалить стиль когда подсказка закрывается
      }, "");
   }
};

// Сохранить выбранную область страницы как PNG ....
WebScreenShotByClipping = {
   capture: WebScreenShot.capture,
   handleEvent: function(e) {
      if (e.button) return false;
          e.preventDefault();
          e.stopPropagation();
          switch(e.type){
                 case 'mousedown':
                    this.downX = e.pageX;
                    this.downY = e.pageY;
                    this.bs.left = this.downX + 'px';
                    this.bs.top = this.downY + 'px';
                    this.body.appendChild(this.box);
                    this.flag = true;
                    break;
                 case 'mousemove':
                    if (!this.flag) return;
                    this.moveX = e.pageX;
                    this.moveY = e.pageY;
                    if (this.downX > this.moveX) this.bs.left = this.moveX + 'px';
                    if (this.downY > this.moveY) this.bs.top  = this.moveY + 'px';
                    this.bs.width = Math.abs(this.moveX - this.downX) + 'px';
                    this.bs.height = Math.abs(this.moveY - this.downY) + 'px';
                    break;
                 case 'mouseup':
                    this.uninit();
                    break;
          }
   },
   init: function() {
      this.win = document.commandDispatcher.focusedWindow;
      if (this.win == window) this.win = content;
      this.doc = this.win.document;
      this.body = this.doc.body;
      if (!this.body instanceof HTMLBodyElement){
          alertsService.showAlertNotification(self.image, self.label, "Не удается захватить!");
          return false;
          }
      this.flag = null;
      this.box = this.doc.createElement('div');
      this.bs = this.box.style;
      this.bs.border = '#0f0 dashed 2px';
      this.bs.position = 'absolute';
      this.bs.zIndex = '2147483647';
      this.defaultCursor = getComputedStyle(this.body, '').cursor;
      this.body.style.cursor = 'crosshair';
      ["click", "mouseup", "mousemove", "mousedown"].forEach(type=> this.doc.addEventListener(type, this, true));
   },
   uninit: function() {
      var pos = [this.win, parseInt(this.bs.left), parseInt(this.bs.top), parseInt(this.bs.width), parseInt(this.bs.height)];
      this.body.style.cursor = this.defaultCursor;
      this.body.removeChild(this.box);
      this.capture.apply(this, pos);
      ["click", "mouseup", "mousemove", "mousedown"].forEach(type=> this.doc.removeEventListener(type, this, true));
   },
};

// Сохранить выбранный элемент на странице как PNG ....
WebScreenShotByClick = {
   capture: WebScreenShot.capture,
   getPosition: function() {
      var html = this.doc.documentElement;
      var body = this.doc.body;
      var rect = this.target.getBoundingClientRect();
      return [
              this.win
             ,Math.round(rect.left) + (body.scrollLeft || html.scrollLeft) - html.clientLeft
             ,Math.round(rect.top) + (body.scrollTop || html.scrollTop) - html.clientTop
             ,parseInt(rect.width)
             ,parseInt(rect.height)
          ];
   },
   highlight: function() {
      this.orgStyle = this.target.hasAttribute('style') ? this.target.style.cssText : false;
      this.target.style.cssText += 'outline: red 2px solid; outline-offset: 2px; -moz-outline-radius: 2px;';
   },
   lowlight: function(e) {
      if (this.orgStyle) this.target.style.cssText = this.orgStyle;
      else this.target.removeAttribute('style'); 
   },
   handleEvent: function(e) {
      switch(e.type){
             case 'click':
                if (e.button) return;
                e.preventDefault();
                e.stopPropagation();
                this.lowlight();
                this.capture.apply(this, this.getPosition());
                this.uninit();
                break;
             case 'mouseover':
                if (this.target) this.lowlight();
                this.target = e.target;
                this.highlight();
                break;
      }
   },
   init: function() {
      this.win = content;
      this.doc = content.document;
      ["click", "mouseover"].forEach(type=> this.doc.addEventListener(type, this, true));
   },
   uninit: function() {
      this.target = false;
      ["click", "mouseover"].forEach(type=> this.doc.removeEventListener(type, this, true));
   },
};


// Сохранить страницу как PDF файл через сервис 'pdfmyurl.com' .............
function savePageToPDF(loc = content.location) {
   loc.href.startsWith("http") && loadURI("http://pdfmyurl.com?url=" + loc);
}; 

 
// Сохранить ярлык страницы в указанную папку или в последнюю папку сохранения ..............
function saveShortcuts(saveAs, shortcutName) {
   var url = content.document.location;
   cbu.isPref(pref, "C:\\");
  
   // блокируем создание ярлыков для внутренних страниц FF
   if ( ["about:", "chrome:", "jar:", "data:"].indexOf(url.protocol) !== -1 ) {   
         alertsService.showAlertNotification("chrome://global/skin/icons/error-16.png", self.label, "Не поддерживается");
         return;
         }          
   
   // получить название ярлыка 
   if ( saveAs ) shortcutName = setPathToShortcut(shortcutName)
   else 
        shortcutName = shortcutName ? shortcutName : getSiteName() + getTabLabel() + " " + Date.now();
   if ( saveAs && shortcutName == false ) return;
   
   // сохранить иконку таба в установленную папку
   var faviconName = "favicon" + Date.now();
   var favicon = saveFaviconToFolder(faviconName);
 
   // получить путь для сохранения ярлыка из 'about:config' 
   var pathToFolder = gPrefService.getComplexValue(pref, Ci.nsISupportsString).data;
   var pathToShortcut = pathToFolder + shortcutName + ".url";
       
   // адрес страницы в UTF-8 если это протокол 'file' или в 'Punycode' если это .рф домен
   if ( url.protocol == 'file:' ) url = convertFromUnicode("UTF-8", url);   
   if ( url.host.slice(-3) == '.рф') url = Services.io.newURI(url, null, null).asciiSpec;
     
   // текст ярлыка из адреса страницы и пути к иконке таба    
   var text = "[InternetShortcut]" + "\r\n" + "URL=" + url;
   var pathToFavicon = "IconFile=" + faviconFolder + faviconName + ".ico" + "\r\n";
   if ( favicon == false ) var pathToFavicon = "";
   var data = text + "\r\n" + pathToFavicon + "IconIndex=0";      

   // записать текст в ярлык
   var file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsILocalFile);
   var foStream = Cc["@mozilla.org/network/file-output-stream;1"].createInstance(Ci.nsIFileOutputStream);
   file.initWithPath(pathToShortcut);
   foStream.init(file, 0x02|0x08|0x20, 0666, 0);
   foStream.write(data, data.length);
   foStream.close();

   // подсказка
   var notification = 'Сохранил в: ' + pathToFolder;
   var image = (favicon == false) ? self.image : gBrowser.selectedBrowser.mIconURL;
   alertsService.showAlertNotification(image, shortcutName, notification);
};


// Установка пути и названия для сохранения ярлыка через диалог сохранения, отмена отдаст 'false' ..............
function setPathToShortcut(shortcutName) {     
   var pathToFile = gPrefService.getComplexValue(pref, Ci.nsISupportsString).data;
   var shortcutName = shortcutName ? shortcutName : getSiteName() + getTabLabel() + " " + Date.now();

   // диалог создания и установки пути    
   var fp = window.makeFilePicker();
   fp.init(window, "Укажите где сохранить ярлык страницы!", fp.modeSave);
   fp.appendFilters(fp.filterAll);
   fp.defaultString = shortcutName;
     
   if ( fp.show() == fp.returnCancel ) return false;          
     
   // убрать название файла из пути к файлу и записать путь в 'about:config'
   var filePath = fp.file.path.toString();
   var fileName = fp.file.leafName.toString();
   cbu.setPrefs(pref, convertFromUnicode("UTF-8", filePath.replace(fileName, "")) );      
   return fileName;
};


// Сохранить в указанную папку иконку таба как .ico и без диалога сохранения ..............
function saveFaviconToFolder(faviconName) {
   var url = gBrowser.mCurrentTab.image.replace("#-moz-resolution=16,16","");
   if ( !url || content.document.mozSyntheticDocument ) return false;
   if ( url.startsWith("http") ) url = "moz-anno:favicon:" + url;

   var img = new Image();
   img.onload = function() {
       var tools = Cc["@mozilla.org/image/tools;1"].getService(Ci.imgITools);
       var stream = Cc["@mozilla.org/scriptableinputstream;1"].createInstance(Ci.nsIScriptableInputStream);
       var file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsILocalFile);

       var request = img.QueryInterface(Ci.nsIImageLoadingContent).getRequest(img.CURRENT_REQUEST);
       var istrm = tools.encodeImage(request.image, "image/vnd.microsoft.icon", "format=bmp;bpp=32");
       stream.init(istrm);
       var data = stream.readBytes(stream.available());
       istrm.close(); stream.close();

       var path = faviconFolder + faviconName + ".ico";
       file.initWithPath(path);
       file.exists() && file.remove(false);
       try { file.create(file.NORMAL_FILE_TYPE, 448) } 
       catch(e) {
          setTimeout(()=> {  
             alertsService.showAlertNotification("chrome://global/skin/icons/error-16.png", self.label,
             "Не могу сохранить иконку вкладки в " + faviconFolder + "\n" + "Укажите в начале кода кнопки другой диск!");
          }, 2500);
       };
       cbu.writeFile(path, data);
   }
   img.setAttribute("src", url);
};


// Добавить адрес наверху страницы и открыть диалог сохранения страницы .............
function savePage() {
   var sURL = gURLBar.value;
   content.document.body.innerHTML = "<table width=100%><tr><td align=left><small><a target=_blank href=" + 
                                        sURL + ">"+ sURL + "</a></small>\n</td></tr></table>" + content.document.body.innerHTML;
   saveDocument(window.content.document);
};


// Сохранить иконку текущего сайта с диалогом сохранения .............
function saveFavicon() { saveImageURL(gBrowser.mCurrentTab.image, "save", null, false, false, null, content.document) };


// Скопировать иконку текущего сайта как base64 код .............
function copyFaviconData() {
   var img = new Image();
   img.src = gBrowser.mCurrentTab.image;
   WebScreenShot.onImage(img);
};


// Сохранить выделенный текст или весь текст на странице как txt файл .............
function saveSelectionToTxt() {
   var sel = getSelect();
   !sel && document.getElementById("cmd_selectAll").doCommand(); 
     
   // создать название файла из заголовка страницы и текущего времени и сохранить текст ....
   var fileTitle = getTabLabel() + '  ' + (new Date()).toLocaleFormat("%H·%M·%S");
   saveURL("data:text/plain," + encodeURIComponent(content.location + ("\r\n\r\n" + sel)), 
                                fileTitle + ".txt", null, false, false, null, content.document);
   !sel && goDoCommand("cmd_selectNone"); 
};

 
// Добавляем в контекстного меню страницы новые пункты .............
((contextMenu, el)=> {
   // в контекстного меню изображений ....
   var baseItem = contextMenu.appendChild(document.createElement("menuitem"));
   baseItem.id = "content-baseItem";
   baseItem.setAttribute("label", "Запомнить изображение как base64");
   baseItem.onclick =()=> WebScreenShot.onImage(gContextMenu.target);

   // в контекстного меню выделенного текста ....
   var saveItem = contextMenu.insertBefore(document.createElement("menuitem"), el);
   saveItem.id = "content-saveItem";
   saveItem.setAttribute("label", "Сохранить выделенный текст в файл");
   saveItem.onclick =()=> saveSelectionToFile();

   var editorItem = contextMenu.insertBefore(document.createElement("menuitem"), el);
   editorItem.id = "content-editorItem";
   editorItem.setAttribute("label", "Открыть выделенный текст в внешнем редакторе");
   editorItem.onclick =()=> textToEditor();

   // устанавливаем где и при каких настройках показывать новые пункты ....
   addEventListener('popupshowing', e=> {
      if (e.target != e.currentTarget) return;
      var sel = gContextMenu.isTextSelected;
      saveItem.hidden = !sel || !cbu.getPrefs("CB.Save.SelectionToFile");
      editorItem.hidden = !sel || !cbu.getPrefs("CB.Save.TextToEditor"); 
      baseItem.hidden =  !gContextMenu.onImage || !cbu.getPrefs("CB.Save.WebScreenShotOnImage"); 
   }, false, contextMenu);

   // удалять новые пункти при изминениях ....
   addDestructor(()=> {
      baseItem.remove(); saveItem.remove(); editorItem.remove();
   });   
})(document.getElementById("contentAreaContextMenu"), document.getElementById("context-sep-open"));


// Сохранить выделенный текст в файл на рабочем столе .............
function saveSelectionToFile() {
   // создать текст для записи
   var url = content.document.location;
   if (/\.рф/.test(url.host)) url = convertFromUnicode("UTF-8", url);
   
   var time = new Date().toLocaleFormat("%H:%M:%S");
   var text = convertFromUnicode("UTF-8", getSelect()); 
   var title = convertFromUnicode("UTF-8", getTabLabel());
   
   var text = "..............................................................\n"
            + title + " - " + time + "\n" + url + "\n\n" + text + "\n\n\n";
   var text = text.replace(/\u000A/g, "\u000D\u000A").replace(/\u000D\u000D\u000A/g, "\u000D\u000A");

   // путь к файлу и название файла
   var file = Services.dirsvc.get("Desk", Ci.nsIFile); 
   file.append("Save - " + (new Date()).toLocaleFormat("%d.%m.%Y") + ".txt");
          
   // создать файл с текстом или добавлять текст в файл
   var foStream = Cc["@mozilla.org/network/file-output-stream;1"].createInstance(Ci.nsIFileOutputStream);
   file.exists() ? foStream.init(file, 0x02 | 0x10, 0664, 0) : foStream.init(file, 0x02|0x08|0x20, 0666, 0);
   foStream.write(text, text.length);
   foStream.close();

   // всплывающая подсказка дает возможность открыть файл если кликнуть на подсказке
   var notification = 'Сохранил выделенный текст в файл на рабочий стол'; 
   var image = gBrowser.mCurrentTab.image || self.image;
   alertsService.showAlertNotification(image, notification, "Кликни чтобы открыть файл", true, "", (s, t)=> { 
      if (t == 'alertclickcallback') file.launch();
   }, "");
};


// Создать текстовой файл с выделенным текстом в папке профиля и открыть в редакторе .............
function textToEditor() {
   var text = convertFromUnicode("UTF-16", getSelect()); 
   var file = Services.dirsvc.get('ProfD', Ci.nsIFile);
   file.append("TextToEditor.txt");
   custombuttonsUtils.writeFile(file.path, text);
   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();
};


// Получить название домена с заглавным первым символом и без приставок( типа .ru и .com ) ..............
function getSiteName() {
   try { var domain = content.document.domain.split('.') } catch(e) { return "" };
   domain = (domain.length == 2) ? domain[0] : domain[1]
   return domain[0].toUpperCase() + domain.slice(1).split('.')[0] + " ";  
};


// Получить название вкладки без не сохраняемых символов и лишних пробелов ..............
function getTabLabel() { 
   var label = gBrowser.mCurrentTab.label;      
   var label = label.replace(/[:+.\\\/<>?*|"]+/g, " ").replace(/\s\s+/g, " ");
   return label.substring(0, 50);
};

    
// Получить выделенный текст из страницы или 'false' ..............
function getSelect() {
   var el = document.commandDispatcher.focusedElement;
   try { return el.value.substring(el.selectionStart, el.selectionEnd) } catch(e) {};
   var sel = document.commandDispatcher.focusedWindow.getSelection();
   return (sel == '') ? false : sel.toString().replace(/^\s+|\s+$/g,"").replace(/\u000A/g, "\u000D\u000A").replace(/\u000D\u000D\u000A/g, "\u000D\u000A");
};


Установка кнопки: устанавливаем расширение Сustom Buttons, создаём новую кнопку, откроется окно диалога добавления кнопки, копируем в вкладку Инициализация код инициализации и нажимаем Ok, потом откроется сообщение о успешном создании кнопки, опять нажимаем Ok. Потом открываем настройку панелей инструментов, перетаскиваем кнопку в нужное место на панели и начинаем пользоваться кнопкой.

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

Открыть внешние win приложения( Firefox24+ )от 12.12.2015.
Кнопка открывает меню с Windows приложениями и даёт возможность их запустить. В меню кнопки легко добавить для запуска другие win приложения или в системе установленные программы.

Меню кнопки:
09943b704b0c3c010a984bd3fae6c16a.jpg

ЛКМ => Показать меню.
Код кнопки и код для инициализации:
Код кнопки:

Выделить код

Код:

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%u043D%u0435%u0448%u043D%u0438%u0435%20win%20%u043F%u0440%u0438%u043B%u043E%u0436%u0435%u043D%u0438%u044F%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAMAAwQAKCImDyo4IWkYaBzFQ6xI8FG/V/VCq0jcGGQbkwAQACQAAAAAAAIAAwAAAAAAAAAAAAAAAAEAAAIAAgIAQy4iYp9YOuZUah3/QMJQ/nfxgP97+Yb/f/+L/m/7ev87v0L1BzwIawAAAAAAAgADAAAAAAEAAAIAAAAAQR4Ki7pwNP//tG79aXQg/CGwM/tL3lP+SeJU/krmVf5I5lT8ROZQ/SjIMf8DQgWFAAAAAAACAAMAAAAAMRoKX5hKHP/qoVT69JtU/WVsGP8RmyP/LMAz/ynHM/4ozTP8Jc4w+x/KK/sbxyn7Daoa/wAlA1QAAAEAAgAAA2o5G9GhVyT/z305/N54Nv9eWxTyAnMR6Qp+DvsIig//CpQR/wucE/8KnQ//CpkG/QedAf8FZADWAwIACigYIklrMln7h0VB/6dcJPvBaCz/XC8RlgABAAACDgAlABUANAAfAUsAKABeAz8RlAhfUvkDZnP/CFtw+gcXKklSLEeVlUiB/6VamPykYGD7o1wl/2A4H5YAAAAAAgEBBAAAAAAAAQMEAAAAAAUoVmcHcfT/AIL5+QCK//8BOZ2rXjJRsJtOhf/SgLr9zoK++5hbW/9AKhaGAAAAAAICAQYAAQACAAMDBwAAAAABLlprD4///wqh9/oJsf//Al7M1FsxT6ucUYf/1Iq//Oyd1vzYkMf/X0FVhQAAAAADAgMEAAAAAAACBAQBAAAAAC1aYRSQ//8lpPr6Irj//wtt1t5GJT2DmlCF/82Juvz2reH/8Kbb/eej1P9jR1t+AAAAAAMCAwQBAwUGAAAAAAYkV2wjkv//PLP7+jzE//8VaMXMHhAaP5FLff+4d6b++rno//iz5P/3suP88rLg/2hPYn8AAAAAAQAAAAgPYW1bXeD/PJL0/1DB/fxSy///EkiRlwAAAABqOFzBp16S/+ev2Pz/we///b7s//u86vr7wev/dFxfcgAJYmhxeP//lJH+/juS+/5q0f/+V7n4/AASODwAAAAAHA4YP5NMgP+6fKj9/Mzw/f3H8/7/y/X/7LvU811Ywd54gPv8r6z//puZ/P1Akff5g+L//y5hmZ8AAAAAAgECAwAAAAA1Gy5vmlGG/8iOuP3/1vX/8sfe811YxNZ6g/f5ubb9/a6u+/uvrfz8TZPt/1GFvMcAAQwNAQAAAAAAAAACAQEDAAAAACoVJVh/QW3umWuP7V5fzeSMk/j9zcn//7+//v7Av///o6Pz+yU2XH0AAwYKAQAAAAAAAQEAAAAAAAAAAAEBAQMAAAAADwkHFAcCKUsJGb3VO0vn9lRf5/RdZMzXRkmTmw4OKTUAAAAAAgIDAwABAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%3D%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bthis._handleClick%20%3D%28%29%3D%3E%20menuPopup.showPopup%28this%2C%20-1%2C%20-1%2C%20%22popup%22%2C%20%22bottomleft%22%2C%20%22topleft%22%29%3B%0A%0Avar%20array%20%3D%20%5B%0A%20%20%20%5B%22IE%22%2C%20%22c%3A%5C%5CProgram%20files%5C%5CInternet%20Explorer%5C%5Ciexplore.exe%22%5D%2C%0A%20%20%20%5B%22Explorer%22%2C%20%22c%3A%5C%5Cwindows%5C%5Cexplorer.exe%22%5D%2C%0A%20%20%20%5B%22separator%22%5D%2C%0A%20%20%20%5B%22Cmd%20Prompt%22%2C%20%22C%3A%5C%5Cwindows/system32%5C%5Ccmd.exe%22%5D%2C%0A%20%20%20%5B%22Media%20Player%22%2C%20%22C%3A%5C%5CProgram%20Files%5C%5CWindows%20Media%20Player%5C%5Cwmplayer.exe%22%5D%2C%0A%20%20%20%5B%22Task%20Manager%22%2C%20%22C%3A%5C%5Cwindows%5C%5Csystem32%5C%5Ctaskmgr.exe%22%5D%2C%20%0A%20%20%20%5B%22Control%20Panel%22%2C%20%22C%3A%5C%5Cwindows%5C%5Csystem32%5C%5Ccontrol.exe%22%5D%2C%0A%20%20%20%5B%22separator%22%5D%2C%0A%20%20%20%5B%22Notepad%22%2C%20%22c%3A%5C%5Cwindows%5C%5Cnotepad.exe%22%5D%2C%0A%20%20%20%5B%22Calculator%22%2C%20%22C%3A%5C%5Cwindows%5C%5Csystem32%5C%5Ccalc.exe%22%5D%2C%0A%20%20%20%5B%22Virtual%20Keyboard%22%2C%20%22C%3A%5C%5Cwindows%5C%5Csystem32%5C%5COSK.exe%22%5D%2C%0A%20%20%20%5B%22Character%20table%22%2C%20%22C%3A%5C%5Cwindows%5C%5Csystem32%5C%5Ccharmap.exe%22%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%5D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%0Avar%20menuPopup%20%3D%20self.appendChild%28%20document.createElement%28%22menupopup%22%29%20%29%3B%0Aarray.forEach%28%28m%29%3D%3E%20%7B%0A%20%20%20if%20%28m%20%3D%3D%20%22separator%22%29%20%7B%20menuPopup.appendChild%28%20document.createElement%28%22menuseparator%22%29%20%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%5B0%5D%29%3B%20%20%20%20%20%0A%20%20%20mItem.setAttribute%28%22class%22%2C%20%22menuitem-iconic%22%29%3B%0A%20%20%20mItem.setAttribute%28%22image%22%2C%20%22moz-icon%3A//file%3A//%22%20+%20m%5B1%5D%29%3B%0A%20%20%20mItem.onclick%20%3De%3D%3E%20Components.Constructor%28%22@mozilla.org/file/local%3B1%22%2C%20%22nsIFile%22%2C%20%22initWithPath%22%29%28m%5B1%5D%29.launch%28%29%3B%0A%20%20%20menuPopup.appendChild%28mItem%29%3B%0A%7D%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 =()=> menuPopup.showPopup(this, -1, -1, "popup", "bottomleft", "topleft");

var array = [
   ["IE", "c:\\Program files\\Internet Explorer\\iexplore.exe"],
   ["Explorer", "c:\\windows\\explorer.exe"],
   ["separator"],
   ["Cmd Prompt", "C:\\windows/system32\\cmd.exe"],
   ["Media Player", "C:\\Program Files\\Windows Media Player\\wmplayer.exe"],
   ["Task Manager", "C:\\windows\\system32\\taskmgr.exe"], 
   ["Control Panel", "C:\\windows\\system32\\control.exe"],
   ["separator"],
   ["Notepad", "c:\\windows\\notepad.exe"],
   ["Calculator", "C:\\windows\\system32\\calc.exe"],
   ["Virtual Keyboard", "C:\\windows\\system32\\OSK.exe"],
   ["Character table", "C:\\windows\\system32\\charmap.exe"]
            ];
            
var menuPopup = self.appendChild( document.createElement("menupopup") );
array.forEach((m)=> {
   if (m == "separator") { menuPopup.appendChild( document.createElement("menuseparator") ); return };
   var mItem = document.createElement("menuitem");
   mItem.setAttribute("label", m[0]);     
   mItem.setAttribute("class", "menuitem-iconic");
   mItem.setAttribute("image", "moz-icon://file://" + m[1]);
   mItem.onclick =e=> Components.Constructor("@mozilla.org/file/local;1", "nsIFile", "initWithPath")(m[1]).launch();
   menuPopup.appendChild(mItem);
});

Панель поиска на сайте(Firefox3.6-5.0)
Открывает панель с кнопками "Поиск Google на сайте","Поиск Yandex на сайте","Поиск Bing на сайте","Поиск BugMeNot - логины,пароли для сайта","Информация о браузере и открытой странице","Leader-When security matters-Информация о сайте ","Leader-When security matters-Информация об IP адресе"
В кнопке использованы фрагменты кода Lex1, Anton, Infocatcher

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

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3E%u041F%u0430%u043D%u0435%u043B%u044C%20%u043F%u043E%u0438%u0441%u043A%u0430%20%u043D%u0430%20%u0441%u0430%u0439%u0442%u0435%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAACB0RVh0U29mdHdhcmUATWFjcm9tZWRpYSBGaXJld29ya3MgTVi7kSokAAAAFnRFWHRDcmVhdGlvbiBUaW1lADExLzA1LzA33bqJ2wAAAmBJREFUeJx9k09IVGEUxc/33pvJMZ2mxiCY2WolFANjQtDCKIIIQcOVtBDatTJo5aIyENoUroKEtrr0rXLTnxFbhIwyGg3+KZiccRQsnfHNjPNm3r23hfScl9HZfd/9nXsuF64SETTq4teBy37lG9VF69KhRYkJNtdyNteTNteeZOMzy428amwQSw9O60rr27C3sUcWCAQA0KGhBQGEJYg6O+ZG90y/p8Gj3HjTrLW4/tMpRDO1PP6nMLUiQP5cpHym/fPNqaoBAO/256eKVHLNfaEexJo7EAucR6aWh1lIIGEtAAB+6RZC3Bz93rQ9BaBfdaXvXWHI/GJlxU2RePJY8vjWJB7mX7rvtnILmLlbq3JtbMPe9sBP8xOIJQYQensV5tYHAMBQWy9QcFym5K+irmhMC6gTnXtkeRqMbk1gyfmGYshGitcBAIW6BZTIZWyDoOrSaYhI5M+2PTptYCjci+Fzg4dTrbwCtKOyKAETRwzif5gBfOx4jZ7WOFLlVQwvPcfsThII6h6GhKE5TJt6Y+u/ZGbfY3ZvAQj7gKDh/isBiGnTKHEl3YJApIiyxzicfYFQKYBMMQc0a0DAG6KqABmc1nysj4QleCw51TmJRPcbDF24C5zUj9U1i8B1GtFW42ayzo4ZplYPkLAWkNhNIrOTBXYdr3mfQWCT7ywnlYjgxtz9pjUjt15SB9GCr3JEFhygLoBPASHDNUuFcvLjoF0erFU9x3T20/VpsPSV/FXYBkGUuAtT1cOxCWzy7SXvMTXq1Ny1SyB5JiRd4nCUhEGgHClOspLHfCv1pZH/DQCsPJc3oUS/AAAAAElFTkSuQmCC%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E/*Initialization%20Code*/%0Avar%20menu%20%3D%20%26lt%3Bpanel%20xmlns%3D%22http%3A//www.mozilla.org/keymaster/gatekeeper/there.is.only.xul%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20onclick%3D%22this.%20parentNode.%20handleClick%20%28event%29%3B%22%26gt%3B%0A%20%20%20%20%20%20%20%20%26lt%3Bvbox%26gt%3B%0A%20%20%20%20%20%20%20%20%0A%20%20%20%26lt%3Btoolbarbutton%20id%3D%22custombuttons-button%22%0A%20%20%20%20%20tooltiptext%3D%22%u041F%u043E%u0438%u0441%u043A%20Google%20%u043D%u0430%20%u0441%u0430%u0439%u0442%u0435%22%0A%20%20%20%20%20image%3D%22data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAYAAAA71pVKAAAACXBIWXMAAAsSAAALEgHS3X78AAACyElEQVQokTWSTWhcVRhAz3fvfW/ezGQmba0ZTJvEWtNKk53UCKViNkFREH/AlSBSCqWopYtSV1oUGnGjKwV1qehGK6RgQbAFhXaitsEumhaTFtMxGWeSJp1M8mbevZ+L4OpsD5wjZyc/GnfOfdPTU+wT48gnFuNy5DLPjuo1CvN3CUkOVEEAlGwz2xCRY05VzxfscH6g8BzNWmD8RRjYZ9B/akiyDod3QW8R4giNLOI9t76u5u/cqH3qCsU4//jIBG8/m/LQkHB9Gt76UOjfW8EXK7iZKlQCOEEiC6IMjz/K/J+380YE9o56Boc9WddTm/dcPJdisKz1OO7YBWp2iUVZYiVdorPcgL/vkbbaOJ9BaZvy8vHA52eU5Vml3XYA/Dy0wIWdN+lLWkRB6FuN2b0Y8XAtxjTbuCyD5mLglaNKlAvc+MNw6PnAleaPXK5fIMoMnVaLzAjzFm4OBrp7lP7KGi7dgMnjKS8cEZ6cgJfe6GW6fpEz0yewtks52s59SYmMxWJBFRXl+0MpThXOTXWZmkp5/ajh1MeWZONB9uRHmVn+lSyyGBGc2SIKQQLBKg71HBzNmHi1zMhYCY0D+7Y/xsl4knevHmP630s8kOwEAbMVGi8BDQkuX0p457MEE/9E9941fvkuorL/GUb2j/Ha0Jvcbs5RX71LziaoBgBUlJgc9uBu3ht7qpcw9z7b5HeKoUqjNkdLdvHEIxPM1me4UvuNgknIMk/wSvDgGgVc868qpUaH/h0NolwRkTzJwiVW6geIDhwmUodPQSPQoKCAKABOg2qhdV02M8OGriPGUA6r2GSVzS74boZ2IKQQtqz/X1xNIJYvv+3g11qEtRa+U6Y9+AGFgRN8dfkTzs/+QK/JkaVdtKNoR4mWSoiKyJGnB0+L+rPi2yoiomKx5FkuOq6WV1g3GYmLEStYa3HWqjFOrDVf/AddhjkVPuJ3DwAAAABJRU5ErkJggg%3D%3D%22%0A%20%20%20%20%20cb-oncommand%3D%22var%20uri%20%3D%20%26lt%3B%21%5BCDATA%5Bjavascript%3Avoid%28str%3Dprompt%28%27%u041F%u043E%u0438%u0441%u043A%20%u0441%20%u043F%u043E%u043C%u043E%u0449%u044C%u044E%20Google%20%u043D%u0430%20%u044D%u0442%u043E%u043C%20%u0441%u0430%u0439%u0442%u0435%3A%27+document.domain%2C%27%27%29%29%3Bif%28str%29%7Bvoid%28open%28%27http%3A//www.google.com/search%3Fas_q%3D%27+str+%27%26amp%3Bamp%3Bas_sitesearch%3D%27+document.domain%29%29%3B%7D%5D%5D%26gt%3B%3B%26amp%3B%23xA%3B%26amp%3B%23xA%3Bif%28%21%28%26amp%3Bquot%3BnoscriptUtil%26amp%3Bquot%3B%20in%20window%29%20%7C%7C%20%21noscriptUtil.service.handleBookmark%28uri%29%29%26amp%3B%23xA%3B%26amp%3B%23xA%3B%20%20%20%20loadURI%28uri%29%3B%22%0A/%26gt%3B%20%20%20%20%20%0A%20%20%20%26lt%3Btoolbarbutton%20id%3D%22custombuttons-button%22%0A%20%20%20%20%20tooltiptext%3D%22%u041F%u043E%u0438%u0441%u043A%20Yandex%20%u043D%u0430%20%u0441%u0430%u0439%u0442%u0435%22%0A%20%20%20%20%20image%3D%22data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAFo9M/3AAAABGdBTUEAALGPC/xhBQAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9sEEwEgIKwpdqAAAAKSSURBVDjLjZFPaBx1FMc/MztFQ2sUSUi7JUJ2kw0psmCgUEFP3nsVpYd6EduDt4g2khaxCHrsIYVKD2m0N+kp17IQBmwyWUYsdC8ZZnelhnVlM3Tnz77Z3/PQTWyqh3zh8ePxee/x3vdn+b6/DHzLxsaGDk6dUnzfV1XFnogims2m4rqu5uu3VD+6oEmSqBOGIa999hUAf9RqWL7vKyNVq1WLLMt08HhHsyxT13XfIwxD3b90ScMw1Eajodb29vZhC2DheZ4aY/4TOzs7aozBjqKIOI6x3p55/p57iziOqVQqeJ6nTq/Xo9VqYd2+xytLS+y3e0StFgDtdvtna21t7WmpVDrNS9rd3f26VCrdtHzfbwNnX+Kr1Wr1KgD/t2Capup53uvGGGwRQURg+RPML3cRESzLwhjTExEcEQFAL1wEEfJRvrCwgOu6nzrdbheAyZVvMBMTdM+/e7hIkiRXnDiOAfi70yG9fBkZ5VEUMTMz847T7/exHz0iuXYNsgzT7x+c+cPc3BxWrVbTQqFw5Ma9vT2mpqYsAOr1enswGOhxFASB1uv1L1WVg3BE5Kxt2wyHw+fjJcN+cAfr8a/Q/RPGTjL8/gEA09PTFAqF77a2tt5cXFz8AsBO05QDL0UE+8MPyMemSJfvIhc/h/ruET45OUmxWFxyXfcnEcHOsuxIgXk2hm7/jogw/OsZ/Pb0CBcRxsfHqVQqH29ubtadJEnodDr/OnTnR169f5+TxSLJmTNkmdB9kY8UBAFJkqw6WZbRH1kPcGJlhfzJE7q1GoWHDzlx4wbpC9wYQxAE5Hn+/vz8/Ka1vr6u5XKZ4yjPc5rNJqr6Rrlc3gdw8jy/3mg0rgCnjzFjdXZ29ipw+Gv/AGlK32Dj9T2iAAAAAElFTkSuQmCC%22%0A%20%20%20%20%20cb-oncommand%3D%22var%20uri%20%3D%20%26lt%3B%21%5BCDATA%5B%20javascript%3Avoid%28str%3Dprompt%28%27%25D0%259F%25D0%25BE%25D0%25B8%25D1%2581%25D0%25BA%2520%25D1%2581%2520%25D0%25BF%25D0%25BE%25D0%25BC%25D0%25BE%25D1%2589%25D1%258C%25D1%258E%2520Yandex%2520%25D0%25BD%25D0%25B0%2520%25D1%258D%25D1%2582%25D0%25BE%25D0%25BC%2520%25D1%2581%25D0%25B0%25D0%25B9%25D1%2582%25D0%25B5%3A%27+document.domain%2C%27%27%29%29%3Bif%28str%29%7Bvoid%28open%28%27http%3A//www.yandex.ru/yandsearch%3Frpt%3Drad%26amp%3Bamp%3Btext%3D%27+str+%27%26amp%3Bamp%3Bserverurl%3D%27+document.domain%29%29%3B%7D%26amp%3B%23xA%3B%26amp%3B%23xA%3B%5D%5D%26gt%3B%3B%26amp%3B%23xA%3Bif%28%21%28%26amp%3Bquot%3BnoscriptUtil%26amp%3Bquot%3B%20in%20window%29%20%7C%7C%20%21noscriptUtil.service.handleBookmark%28uri%29%29%26amp%3B%23xA%3B%20%20%20%20loadURI%28uri%29%3B%22%0A/%26gt%3B%0A%20%20%20%20%20%0A%20%20%20%26lt%3Btoolbarbutton%20id%3D%22custombuttons-button%22%0A%20%20%20%20%20tooltiptext%3D%22%u041F%u043E%u0438%u0441%u043A%20Bing%20%u043D%u0430%20%u0441%u0430%u0439%u0442%u0435%22%0A%20%20%20%20%20image%3D%22data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAYAAAA71pVKAAAACXBIWXMAAAsSAAALEgHS3X78AAAB50lEQVQokY3TP2xNYRzG8c855173ttrS1t9GakCFVBASg0TCIrGI2UBiMBoMJoOJVSIWk4FVIhESkfg7+DOIQQkGrTSlbVT1323PPa/hvbdak2d6T875Pu/7e97nJOH22kDwV4n/VQmEJXCyFE4sN/4XTjI2HaWyhl8fGH1FViXkhKLhkUWjUCwzK0nL7L5IRx+fbzL4gHILSUqpSlGQT8ZDZG1k5UXTEoGFKRQUC3TtoGtPNGvpoT7D5Cd+DTD5hdoYpbYlMycZUjYcYuNh2rcw+53aKFkrrT0kJb7e4ctNRp6QVhpwc46OvrjDy3N8f8rsOOVWVu9k62k2n6DnCC/OMvJYGtlGMNODPDvFwHWmBinmqI3z7T7Pz/DtHpVu9l+m1NqE8whPvOfHa1b2kpZjaElKdR3FPEN3mZ+gYxtJJlXkTH6OcLmdSif5b9IVDbiMOvkUXXvjNw2l6nN8vBGfuvdx4Go82tQQ8z+ZGSav0X+eLSdjuG8vkU9Lwq3uIORsOsauC3TtZnqIsTfM/mDFKjr7WbU9bvDuCgPXCHVJuL02CCHOtLKX9QfZfJz2PsJCvKqZIYYfMfwwtlBA2oCbqtcazWojq8Q1FDXymfi+mcViSZrKqrFp9ekY2uL/0Ug9a1nW7T+z2Kt7++dAvwAAAABJRU5ErkJggg%3D%3D%22%20%0A%20%20%20%20%20cb-oncommand%3D%22var%20uri%20%3D%20%26lt%3B%21%5BCDATA%5B%20javascript%3Avoid%28str%3Dprompt%28%27%u041F%u043E%u0438%u0441%u043A%20%u0441%20%u043F%u043E%u043C%u043E%u0449%u044C%u044E%20Bing%20%u043D%u0430%20%u044D%u0442%u043E%u043C%20%u0441%u0430%u0439%u0442%u0435%3A%27+document.domain%2C%27%27%29%29%3Bif%28str%29%7Bvoid%28open%28%27http%3A//www.bing.com/search%3Fq%3Dsite%3A%27+document.location.hostname+%20%27+%27%20+str+%27%26amp%3Bamp%3Bgo%3D%26amp%3Bamp%3Bform%3DQBRE%26amp%3Bamp%3Bfilt%3Dall%27%29%29%3B%7D%26amp%3B%23xA%3B%5D%5D%26gt%3B%3B%26amp%3B%23xA%3Bif%28%21%28%26amp%3Bquot%3BnoscriptUtil%26amp%3Bquot%3B%20in%20window%29%20%7C%7C%20%21noscriptUtil.service.handleBookmark%28uri%29%29%26amp%3B%23xA%3B%20%20%20%20loadURI%28uri%29%3B%22%0A/%26gt%3B%0A%20%20%20%20%20%0A%20%20%20%26lt%3Btoolbarbutton%20id%3D%22custombuttons-button%22%0A%20%20%20%20%20tooltiptext%3D%22%u041F%u043E%u0438%u0441%u043A%20BugMeNot%20%u043B%u043E%u0433%u0438%u043D%u044B%2C%u043F%u0430%u0440%u043E%u043B%u0438%20%u0434%u043B%u044F%20%u0441%u0430%u0439%u0442%u0430%22%20%0A%20%20%20%20%20image%3D%22data%3Aimage/x-icon%3Bbase64%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%22%0A%20%20%20%20%20cb-oncommand%3D%22var%20uri%20%3D%20%26lt%3B%21%5BCDATA%5B%20javascript%3Avoid%28window.open%28%27http%3A//www.bugmenot.com/view/%27+location.hostname%2C%27BugMeNot_%27+location.hostname%2C%27width%3D500%2Cheight%3D400%2Cleft%3D100%2Ctop%3D100%2Cscrollbars%3Dyes%2Clocation%3Dno%27%29%29%26amp%3B%23xA%3B%5D%5D%26gt%3B%3B%26amp%3B%23xA%3Bif%28%21%28%26amp%3Bquot%3BnoscriptUtil%26amp%3Bquot%3B%20in%20window%29%20%7C%7C%20%21noscriptUtil.service.handleBookmark%28uri%29%29%26amp%3B%23xA%3B%20%20%20%20loadURI%28uri%29%3B%22%0A%20/%26gt%3B%20%0A%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%26lt%3Btoolbarbutton%20id%3D%22custombuttons-button%22%20%0A%20%20%20%20%20tooltiptext%3D%22%u0418%u043D%u0444%u043E%u0440%u043C%u0430%u0446%u0438%u044F%20%u043E%20%u0431%u0440%u0430%u0443%u0437%u0435%u0440%u0435%20%u0438%20%u043E%u0442%u043A%u0440%u044B%u0442%u043E%u0439%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u0435%22%20%0A%20%20%20%20%20image%3D%22data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAACB0RVh0U29mdHdhcmUATWFjcm9tZWRpYSBGaXJld29ya3MgTVi7kSokAAAAFnRFWHRDcmVhdGlvbiBUaW1lADExLzA1LzA33bqJ2wAAAfpJREFUeJydk0trU0EUx/9n5ia9SbwI2lBsaUTsItbqTsGFIjbgVxBd+A1cdVNwXwi4cCGIrt121ZWYLqrdVAUfIGpbKUlqqolJSe773jnjwqp5XAp6VsP8zvmfx8whrTX67elO62LGkEuC6BwB+YgZbsRNL1bvfaUWb56Z3Oj3p36BF7udiinFtYYTwA4V+IARACkIBMBTvHr77NT8sID5aq9b7YZRvmEHOMyU1vBjbn53w8LdS6d9cZB5JSl42jIxbZkDd5IIgpC30nIFAOh5vX3ZlGLtU9sZyXZrdhIA8PBNDVZaDrCGEyBUfMVgrcsNJ7nstVobdTvAru2jeCw3wKyUxA/FZZGWYsYOVaJAreejG8SYOmKOsGxKwg7VjMGMcR56SgCYyI2hdPI4AODJh68jXBAhUDwuIubE7N/62vqYMB8AiBRDeDG3KBEfboo1Yq1bwo3UlhT/LtHyQpiG3BIh88L/VLC976IXxgviRvHEuqe4ooYGOZEb+3M+dTQzwDY7DkBUeXx9bp201nj0tmYCqApCPmP8/TBupFDt+QCAgmUim5LY7Dio94Lm8ue9QvtOyR9Ypvuvd55FrOetlEQ2JSHoV3OKNVpeiO19FyCqPCjNln7H0PA6lze+XAiVXvJjPu/FKh8pBghNInpnCFq8d7X4st//J3JK/Ibf2DGRAAAAAElFTkSuQmCC%22%0A%20%20%20%20%20cb-oncommand%3D%22var%20uri%20%3D%20%26lt%3B%21%5BCDATA%5B%20javascript%3A%28function%28%29%7Bvar%20meta%3D%27%27%3Bvar%20scripts%3D%27%27%3Bvar%20embed%3D%27%27%3Bvar%20m%3Ddocument.getElementsByTagName%28%27meta%27%29%3Bfor%28var%20i%3D0%2Cmi%3Bmi%3Dm%5Bi%5D%3Bi++%29%7Bmeta+%3D%28mi.name%3Fmi.name+%27%3A%20%27%3A%28mi.httpEquiv%3Fmi.httpEquiv+%27%3A%27%3A%27%27%29%29+mi.content+%27%255Cn%27%7D%3Bvar%2520s%3Ddocument.getElementsByTagName%28%27script%27%29%3Bfor%28var%2520i%3D0%2Csi%3Bsi%3Ds%5Bi%5D%3Bi++%29%7Bif%28si.src%29scripts+%3Dsi.src+%27%255Cn%27%7D%3Bvar%2520e%3Ddocument.getElementsByTagName%28%27embed%27%29%3Bvar%2520o%3Ddocument.getElementsByTagName%28%27object%27%29%3Bvar%2520fullUrl%3Dfunction%28url%29%7Bvar%2520a%3Ddocument.createElement%28%27a%27%29%3Ba.href%3Durl%3Breturn%2520url%3Fa.href+%27%255Cn%27%3A%27%27%7D%3Bfor%28var%2520i%3D0%2Cei%3Bei%3De%5Bi%5D%3Bi++%29%7Bembed+%3DfullUrl%28ei.getAttribute%28%27src%27%29%29%7D%3Bfor%28var%2520i%3D0%2Coi%3Boi%3Do%5Bi%5D%3Bi++%29%7Bvar%2520src%3Doi.getAttribute%28%27data%27%29%7C%7Coi.getAttribute%28%27src%27%29%3Bif%28%21src%29%7Bfor%28var%2520j%3D0%2Cp%3Bp%3Doi.childNodes%5Bj%5D%3Bj++%29%7Bif%28p.tagName%26amp%3Bamp%3B%26amp%3Bamp%3Bp.tagName.toLowerCase%28%29%3D%3D%27param%27%26amp%3Bamp%3B%26amp%3Bamp%3Bp.getAttribute%28%27name%27%29.match%28/%5E%28movie%7Cdata%7Csrc%7Ccode%7Cfilename%7Curl%29%24/i%29%29%7Bsrc%3Dp.getAttribute%28%27value%27%29%3B%2520break%7D%7D%7D%3Bvar%2520lnk%3DfullUrl%28src%29%3Bif%28embed.indexOf%28lnk%29%3D%3D-1%29embed+%3Dlnk%7D%3Bvar%2520lastmod%3D%28Date.parse%28document.lastModified%29%3D%3D0%29%3F%27%27%3Adocument.lastModified%3Bvar%2520mode%3Ddocument.getElementsByTagName%28%27HTmL%27%29.length%3D%3D0%3F%27Really%2520strict%27%3A%28document.compatMode%3D%3D%27CSS1Compat%27%3F%27Normal%2520strict%27%3A%27Quirks%27%29%3Bvar%2520title%3Ddocument.title%7C%7C%28document.getElementsByTagName%28%27title%27%29%5B0%5D%26amp%3Bamp%3B%26amp%3Bamp%3Bdocument.getElementsByTagName%28%27title%27%29%5B0%5D.text%29%7C%7C%27%27%3B%2520if%28meta%29meta%3D%27%255CnMeta-%25D0%25B4%25D0%25B0%25D0%25BD%25D0%25BD%25D1%258B%25D0%25B5%3A%255Cn%27+meta%3Bif%28scripts%29scripts%3D%27%255Cn%25D0%25A1%25D0%25BA%25D1%2580%25D0%25B8%25D0%25BF%25D1%2582%25D1%258B%3A%255Cn%27+scripts%3Bif%28embed%29embed%3D%27%255Cn%25D0%2592%25D1%2581%25D1%2582%25D1%2580%25D0%25BE%25D0%25B5%25D0%25BD%25D0%25BD%25D1%258B%25D0%25B5%2520%25D0%25BE%25D0%25B1%25D1%258A%25D0%25B5%25D0%25BA%25D1%2582%25D1%258B%3A%255Cn%27+embed%3B%2520alert%28%27%25D0%2598%25D0%25B4%25D0%25B5%25D0%25BD%25D1%2582%25D0%25B8%25D1%2584%25D0%25B8%25D0%25BA%25D0%25B0%25D1%2586%25D0%25B8%25D1%258F%2520%25D0%25B1%25D1%2580%25D0%25B0%25D1%2583%25D0%25B7%25D0%25B5%25D1%2580%25D0%25B0%3A%2520%27+navigator.userAgent+%27%255Cn%255Cn%25D0%2597%25D0%25B0%25D0%25B3%25D0%25BE%25D0%25BB%25D0%25BE%25D0%25B2%25D0%25BE%25D0%25BA%3A%2520%27+title+%27%255Cn%255Cn%25D0%2590%25D0%25B4%25D1%2580%25D0%25B5%25D1%2581%3A%2520%27+location.href+%27%255Cn%255Cn%25D0%25A0%25D0%25B5%25D1%2584%25D0%25B5%25D1%2580%25D1%2580%25D0%25B5%25D1%2580%3A%2520%27+document.referrer+%27%255Cn%255Cn%25D0%2594%25D0%25B0%25D1%2582%25D0%25B0%2520%25D0%25BF%25D0%25BE%25D1%2581%25D0%25BB%25D0%25B5%25D0%25B4%25D0%25BD%25D0%25B5%25D0%25B3%25D0%25BE%2520%25D0%25B8%25D0%25B7%25D0%25BC%25D0%25B5%25D0%25BD%25D0%25B5%25D0%25BD%25D0%25B8%25D1%258F%3A%2520%27+lastmod+%27%255Cn%255Cn%25D0%25A0%25D0%25B5%25D0%25B6%25D0%25B8%25D0%25BC%2520%25D0%25BE%25D1%2582%25D0%25BE%25D0%25B1%25D1%2580%25D0%25B0%25D0%25B6%25D0%25B5%25D0%25BD%25D0%25B8%25D1%258F%3A%2520%27+mode+%27%2520mode%255Cn%27+meta+scripts+embed%29%7D%29%28%29%5D%5D%26gt%3B%3B%26amp%3B%23xA%3Bif%28%21%28%26amp%3Bquot%3BnoscriptUtil%26amp%3Bquot%3B%20in%20window%29%20%7C%7C%20%21noscriptUtil.service.handleBookmark%28uri%29%29%26amp%3B%23xA%3B%20%20%20%20loadURI%28uri%29%3B%22%0A/%26gt%3B%0A%20%20%20%20%20%0A%20%20%20%26lt%3Btoolbarbutton%20id%3D%22custombuttons-button%22%0A%20%20%20%20%20tooltiptext%3D%22Leader-When%20security%20matters-%u0418%u043D%u0444%u043E%u0440%u043C%u0430%u0446%u0438%u044F%20%u043E%20%u0441%u0430%u0439%u0442%u0435%20%22%0A%20%20%20%20%20image%3D%22data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAASElEQVQ4jWM4c+bMf0oww5kzZ/7//MJAFkYxgFSbsRpALMBvAIMxKqa/AciGkOUFmhmAJEZHA7Bh+hhAAOA0gKKkTFFmogQDAJUMSdAatE7rAAAAAElFTkSuQmCC%22%0A%20%20%20%20%20cb-oncommand%3D%22var%20uri%20%3D%20%26lt%3B%21%5BCDATA%5B%20javascript%3Avoid%28open%28%27http%3A//leader.ru/secure/whoiz.html%3Fq%3D%27+document.domain%29%29%3B%26amp%3B%23xA%3B%5D%5D%26gt%3B%3B%26amp%3B%23xA%3Bif%28%21%28%26amp%3Bquot%3BnoscriptUtil%26amp%3Bquot%3B%20in%20window%29%20%7C%7C%20%21noscriptUtil.service.handleBookmark%28uri%29%29%26amp%3B%23xA%3B%20%20%20%20loadURI%28uri%29%3B%22%0A/%26gt%3B%0A%20%20%20%20%20%0A%20%20%20%26lt%3Btoolbarbutton%20id%3D%22custombuttons-button%22%0A%20%20%20%20%20tooltiptext%3D%22Leader-When%20security%20matters-%u0418%u043D%u0444%u043E%u0440%u043C%u0430%u0446%u0438%u044F%20%u043E%u0431%20IP%20%22%0A%20%20%20%20%20image%3D%22data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAASElEQVQ4jWM4c+bMf0oww5kzZ/7//MJAFkYxgFSbsRpALMBvAIMxKqa/AciGkOUFmhmAJEZHA7Bh+hhAAOA0gKKkTFFmogQDAJUMSdAatE7rAAAAAElFTkSuQmCC%22%0A%20%20%20%20%20cb-oncommand%3D%22var%20uri%20%3D%20%26lt%3B%21%5BCDATA%5B%20javascript%3Avoid%28str%3Dprompt%28%27%25D0%2592%25D0%25B2%25D0%25B5%25D1%2581%25D1%2582%25D0%25B8%2520IP%2520%25D0%25B0%25D0%25B4%25D1%2580%25D0%25B5%25D1%2581%27%29%29%3Bif%28str%29%7Bvoid%28open%28%27http%3A//leader.ru/secure/whoiz.html%3Fq%3D%27+str%29%29%3B%7D%3B%26amp%3B%23xA%3B%5D%5D%26gt%3B%3B%26amp%3B%23xA%3Bif%28%21%28%26amp%3Bquot%3BnoscriptUtil%26amp%3Bquot%3B%20in%20window%29%20%7C%7C%20%21noscriptUtil.service.handleBookmark%28uri%29%29%26amp%3B%23xA%3B%20%20%20%20loadURI%28uri%29%3B%22%0A/%26gt%3B%0A%20%20%20%20%20%0A%20%20%20%20%20%20%20%26lt%3B/vbox%26gt%3B%0A%26lt%3B/panel%26gt%3B%3B%0Athis.%20appendChild%20%28custombuttonsUtils.%20makeXML%20%28menu%29%29%3B%0Athis.%20type%20%3D%20%22menu%22%3B%0Athis.%20orient%20%3D%20%22horizontal%22%3B%0A%0Athis.%20handleClick%20%3D%20function%20%28event%29%0A%7B%0A%20%20%20%20var%20menuitem%20%3D%20event.%20target%3B%0A%20%20%20%20var%20url%20%3D%20menuitem.%20getAttributeNS%20%28%22http%3A//xsms.nm.ru/custombuttons/%22%2C%20%22url%22%29%3B%0A%20%20%20%20if%20%28%21url%29%20return%3B%0A%20%20%20%20if%20%28event.%20button%20%3D%3D%200%29%0A%20%20%20%20%20%20%20%20loadURI%20%28url%29%3B%0A%20%20%20%20else%20if%20%28event.%20button%20%3D%3D%201%29%0A%20%20%20%20%20%20%20%20gBrowser.%20addTab%20%28url%29%3B%0A%20%20%20%20this.%20open%20%3D%20false%3B%0A%7D%3B%0A%0A%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*/
var menu = <panel xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
              xmlns:cb="http://xsms.nm.ru/custombuttons/"
              onclick="this. parentNode. handleClick (event);">
        <vbox>
        
   <toolbarbutton id="custombuttons-button"
     tooltiptext="Поиск Google на сайте"
     image="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAYAAAA71pVKAAAACXBIWXMAAAsSAAALEgHS3X78AAACyElEQVQokTWSTWhcVRhAz3fvfW/ezGQmba0ZTJvEWtNKk53UCKViNkFREH/AlSBSCqWopYtSV1oUGnGjKwV1qehGK6RgQbAFhXaitsEumhaTFtMxGWeSJp1M8mbevZ+L4OpsD5wjZyc/GnfOfdPTU+wT48gnFuNy5DLPjuo1CvN3CUkOVEEAlGwz2xCRY05VzxfscH6g8BzNWmD8RRjYZ9B/akiyDod3QW8R4giNLOI9t76u5u/cqH3qCsU4//jIBG8/m/LQkHB9Gt76UOjfW8EXK7iZKlQCOEEiC6IMjz/K/J+380YE9o56Boc9WddTm/dcPJdisKz1OO7YBWp2iUVZYiVdorPcgL/vkbbaOJ9BaZvy8vHA52eU5Vml3XYA/Dy0wIWdN+lLWkRB6FuN2b0Y8XAtxjTbuCyD5mLglaNKlAvc+MNw6PnAleaPXK5fIMoMnVaLzAjzFm4OBrp7lP7KGi7dgMnjKS8cEZ6cgJfe6GW6fpEz0yewtks52s59SYmMxWJBFRXl+0MpThXOTXWZmkp5/ajh1MeWZONB9uRHmVn+lSyyGBGc2SIKQQLBKg71HBzNmHi1zMhYCY0D+7Y/xsl4knevHmP630s8kOwEAbMVGi8BDQkuX0p457MEE/9E9941fvkuorL/GUb2j/Ha0Jvcbs5RX71LziaoBgBUlJgc9uBu3ht7qpcw9z7b5HeKoUqjNkdLdvHEIxPM1me4UvuNgknIMk/wSvDgGgVc868qpUaH/h0NolwRkTzJwiVW6geIDhwmUodPQSPQoKCAKABOg2qhdV02M8OGriPGUA6r2GSVzS74boZ2IKQQtqz/X1xNIJYvv+3g11qEtRa+U6Y9+AGFgRN8dfkTzs/+QK/JkaVdtKNoR4mWSoiKyJGnB0+L+rPi2yoiomKx5FkuOq6WV1g3GYmLEStYa3HWqjFOrDVf/AddhjkVPuJ3DwAAAABJRU5ErkJggg=="
     cb-oncommand="var uri = <![CDATA[javascript:void(str=prompt('Поиск с помощью Google на этом сайте:'+document.domain,''));if(str){void(open('http://www.google.com/search?as_q='+str+'&amp;as_sitesearch='+document.domain));}]]>;&#xA;&#xA;if(!(&quot;noscriptUtil&quot; in window) || !noscriptUtil.service.handleBookmark(uri))&#xA;&#xA;    loadURI(uri);"
/>     
   <toolbarbutton id="custombuttons-button"
     tooltiptext="Поиск Yandex на сайте"
     image="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAFo9M/3AAAABGdBTUEAALGPC/xhBQAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9sEEwEgIKwpdqAAAAKSSURBVDjLjZFPaBx1FMc/MztFQ2sUSUi7JUJ2kw0psmCgUEFP3nsVpYd6EduDt4g2khaxCHrsIYVKD2m0N+kp17IQBmwyWUYsdC8ZZnelhnVlM3Tnz77Z3/PQTWyqh3zh8ePxee/x3vdn+b6/DHzLxsaGDk6dUnzfV1XFnogims2m4rqu5uu3VD+6oEmSqBOGIa999hUAf9RqWL7vKyNVq1WLLMt08HhHsyxT13XfIwxD3b90ScMw1Eajodb29vZhC2DheZ4aY/4TOzs7aozBjqKIOI6x3p55/p57iziOqVQqeJ6nTq/Xo9VqYd2+xytLS+y3e0StFgDtdvtna21t7WmpVDrNS9rd3f26VCrdtHzfbwNnX+Kr1Wr1KgD/t2Capup53uvGGGwRQURg+RPML3cRESzLwhjTExEcEQFAL1wEEfJRvrCwgOu6nzrdbheAyZVvMBMTdM+/e7hIkiRXnDiOAfi70yG9fBkZ5VEUMTMz847T7/exHz0iuXYNsgzT7x+c+cPc3BxWrVbTQqFw5Ma9vT2mpqYsAOr1enswGOhxFASB1uv1L1WVg3BE5Kxt2wyHw+fjJcN+cAfr8a/Q/RPGTjL8/gEA09PTFAqF77a2tt5cXFz8AsBO05QDL0UE+8MPyMemSJfvIhc/h/ruET45OUmxWFxyXfcnEcHOsuxIgXk2hm7/jogw/OsZ/Pb0CBcRxsfHqVQqH29ubtadJEnodDr/OnTnR169f5+TxSLJmTNkmdB9kY8UBAFJkqw6WZbRH1kPcGJlhfzJE7q1GoWHDzlx4wbpC9wYQxAE5Hn+/vz8/Ka1vr6u5XKZ4yjPc5rNJqr6Rrlc3gdw8jy/3mg0rgCnjzFjdXZ29ipw+Gv/AGlK32Dj9T2iAAAAAElFTkSuQmCC"
     cb-oncommand="var uri = <![CDATA[ javascript:void(str=prompt('%D0%9F%D0%BE%D0%B8%D1%81%D0%BA%20%D1%81%20%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C%D1%8E%20Yandex%20%D0%BD%D0%B0%20%D1%8D%D1%82%D0%BE%D0%BC%20%D1%81%D0%B0%D0%B9%D1%82%D0%B5:'+document.domain,''));if(str){void(open('http://www.yandex.ru/yandsearch?rpt=rad&amp;text='+str+'&amp;serverurl='+document.domain));}&#xA;&#xA;]]>;&#xA;if(!(&quot;noscriptUtil&quot; in window) || !noscriptUtil.service.handleBookmark(uri))&#xA;    loadURI(uri);"
/>
     
   <toolbarbutton id="custombuttons-button"
     tooltiptext="Поиск Bing на сайте"
     image="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAYAAAA71pVKAAAACXBIWXMAAAsSAAALEgHS3X78AAAB50lEQVQokY3TP2xNYRzG8c855173ttrS1t9GakCFVBASg0TCIrGI2UBiMBoMJoOJVSIWk4FVIhESkfg7+DOIQQkGrTSlbVT1323PPa/hvbdak2d6T875Pu/7e97nJOH22kDwV4n/VQmEJXCyFE4sN/4XTjI2HaWyhl8fGH1FViXkhKLhkUWjUCwzK0nL7L5IRx+fbzL4gHILSUqpSlGQT8ZDZG1k5UXTEoGFKRQUC3TtoGtPNGvpoT7D5Cd+DTD5hdoYpbYlMycZUjYcYuNh2rcw+53aKFkrrT0kJb7e4ctNRp6QVhpwc46OvrjDy3N8f8rsOOVWVu9k62k2n6DnCC/OMvJYGtlGMNODPDvFwHWmBinmqI3z7T7Pz/DtHpVu9l+m1NqE8whPvOfHa1b2kpZjaElKdR3FPEN3mZ+gYxtJJlXkTH6OcLmdSif5b9IVDbiMOvkUXXvjNw2l6nN8vBGfuvdx4Go82tQQ8z+ZGSav0X+eLSdjuG8vkU9Lwq3uIORsOsauC3TtZnqIsTfM/mDFKjr7WbU9bvDuCgPXCHVJuL02CCHOtLKX9QfZfJz2PsJCvKqZIYYfMfwwtlBA2oCbqtcazWojq8Q1FDXymfi+mcViSZrKqrFp9ekY2uL/0Ug9a1nW7T+z2Kt7++dAvwAAAABJRU5ErkJggg==" 
     cb-oncommand="var uri = <![CDATA[ javascript:void(str=prompt('Поиск с помощью Bing на этом сайте:'+document.domain,''));if(str){void(open('http://www.bing.com/search?q=site:'+document.location.hostname+ '+' +str+'&amp;go=&amp;form=QBRE&amp;filt=all'));}&#xA;]]>;&#xA;if(!(&quot;noscriptUtil&quot; in window) || !noscriptUtil.service.handleBookmark(uri))&#xA;    loadURI(uri);"
/>
     
   <toolbarbutton id="custombuttons-button"
     tooltiptext="Поиск BugMeNot логины,пароли для сайта" 
     image="data:image/x-icon;base64,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"
     cb-oncommand="var uri = <![CDATA[ javascript:void(window.open('http://www.bugmenot.com/view/'+location.hostname,'BugMeNot_'+location.hostname,'width=500,height=400,left=100,top=100,scrollbars=yes,location=no'))&#xA;]]>;&#xA;if(!(&quot;noscriptUtil&quot; in window) || !noscriptUtil.service.handleBookmark(uri))&#xA;    loadURI(uri);"
 /> 
           
   <toolbarbutton id="custombuttons-button" 
     tooltiptext="Информация о браузере и открытой странице" 
     image="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAACB0RVh0U29mdHdhcmUATWFjcm9tZWRpYSBGaXJld29ya3MgTVi7kSokAAAAFnRFWHRDcmVhdGlvbiBUaW1lADExLzA1LzA33bqJ2wAAAfpJREFUeJydk0trU0EUx/9n5ia9SbwI2lBsaUTsItbqTsGFIjbgVxBd+A1cdVNwXwi4cCGIrt121ZWYLqrdVAUfIGpbKUlqqolJSe773jnjwqp5XAp6VsP8zvmfx8whrTX67elO62LGkEuC6BwB+YgZbsRNL1bvfaUWb56Z3Oj3p36BF7udiinFtYYTwA4V+IARACkIBMBTvHr77NT8sID5aq9b7YZRvmEHOMyU1vBjbn53w8LdS6d9cZB5JSl42jIxbZkDd5IIgpC30nIFAOh5vX3ZlGLtU9sZyXZrdhIA8PBNDVZaDrCGEyBUfMVgrcsNJ7nstVobdTvAru2jeCw3wKyUxA/FZZGWYsYOVaJAreejG8SYOmKOsGxKwg7VjMGMcR56SgCYyI2hdPI4AODJh68jXBAhUDwuIubE7N/62vqYMB8AiBRDeDG3KBEfboo1Yq1bwo3UlhT/LtHyQpiG3BIh88L/VLC976IXxgviRvHEuqe4ooYGOZEb+3M+dTQzwDY7DkBUeXx9bp201nj0tmYCqApCPmP8/TBupFDt+QCAgmUim5LY7Dio94Lm8ue9QvtOyR9Ypvuvd55FrOetlEQ2JSHoV3OKNVpeiO19FyCqPCjNln7H0PA6lze+XAiVXvJjPu/FKh8pBghNInpnCFq8d7X4st//J3JK/Ibf2DGRAAAAAElFTkSuQmCC"
     cb-oncommand="var uri = <![CDATA[ javascript:(function(){var meta='';var scripts='';var embed='';var m=document.getElementsByTagName('meta');for(var i=0,mi;mi=m[i];i++){meta+=(mi.name?mi.name+': ':(mi.httpEquiv?mi.httpEquiv+':':''))+mi.content+'%5Cn'};var%20s=document.getElementsByTagName('script');for(var%20i=0,si;si=s[i];i++){if(si.src)scripts+=si.src+'%5Cn'};var%20e=document.getElementsByTagName('embed');var%20o=document.getElementsByTagName('object');var%20fullUrl=function(url){var%20a=document.createElement('a');a.href=url;return%20url?a.href+'%5Cn':''};for(var%20i=0,ei;ei=e[i];i++){embed+=fullUrl(ei.getAttribute('src'))};for(var%20i=0,oi;oi=o[i];i++){var%20src=oi.getAttribute('data')||oi.getAttribute('src');if(!src){for(var%20j=0,p;p=oi.childNodes[j];j++){if(p.tagName&amp;&amp;p.tagName.toLowerCase()=='param'&amp;&amp;p.getAttribute('name').match(/^(movie|data|src|code|filename|url)$/i)){src=p.getAttribute('value');%20break}}};var%20lnk=fullUrl(src);if(embed.indexOf(lnk)==-1)embed+=lnk};var%20lastmod=(Date.parse(document.lastModified)==0)?'':document.lastModified;var%20mode=document.getElementsByTagName('HTmL').length==0?'Really%20strict':(document.compatMode=='CSS1Compat'?'Normal%20strict':'Quirks');var%20title=document.title||(document.getElementsByTagName('title')[0]&amp;&amp;document.getElementsByTagName('title')[0].text)||'';%20if(meta)meta='%5CnMeta-%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5:%5Cn'+meta;if(scripts)scripts='%5Cn%D0%A1%D0%BA%D1%80%D0%B8%D0%BF%D1%82%D1%8B:%5Cn'+scripts;if(embed)embed='%5Cn%D0%92%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%BD%D1%8B%D0%B5%20%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D1%8B:%5Cn'+embed;%20alert('%D0%98%D0%B4%D0%B5%D0%BD%D1%82%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D1%8F%20%D0%B1%D1%80%D0%B0%D1%83%D0%B7%D0%B5%D1%80%D0%B0:%20'+navigator.userAgent+'%5Cn%5Cn%D0%97%D0%B0%D0%B3%D0%BE%D0%BB%D0%BE%D0%B2%D0%BE%D0%BA:%20'+title+'%5Cn%5Cn%D0%90%D0%B4%D1%80%D0%B5%D1%81:%20'+location.href+'%5Cn%5Cn%D0%A0%D0%B5%D1%84%D0%B5%D1%80%D1%80%D0%B5%D1%80:%20'+document.referrer+'%5Cn%5Cn%D0%94%D0%B0%D1%82%D0%B0%20%D0%BF%D0%BE%D1%81%D0%BB%D0%B5%D0%B4%D0%BD%D0%B5%D0%B3%D0%BE%20%D0%B8%D0%B7%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D1%8F:%20'+lastmod+'%5Cn%5Cn%D0%A0%D0%B5%D0%B6%D0%B8%D0%BC%20%D0%BE%D1%82%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F:%20'+mode+'%20mode%5Cn'+meta+scripts+embed)})()]]>;&#xA;if(!(&quot;noscriptUtil&quot; in window) || !noscriptUtil.service.handleBookmark(uri))&#xA;    loadURI(uri);"
/>
     
   <toolbarbutton id="custombuttons-button"
     tooltiptext="Leader-When security matters-Информация о сайте "
     image="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAASElEQVQ4jWM4c+bMf0oww5kzZ/7//MJAFkYxgFSbsRpALMBvAIMxKqa/AciGkOUFmhmAJEZHA7Bh+hhAAOA0gKKkTFFmogQDAJUMSdAatE7rAAAAAElFTkSuQmCC"
     cb-oncommand="var uri = <![CDATA[ javascript:void(open('http://leader.ru/secure/whoiz.html?q='+document.domain));&#xA;]]>;&#xA;if(!(&quot;noscriptUtil&quot; in window) || !noscriptUtil.service.handleBookmark(uri))&#xA;    loadURI(uri);"
/>
     
   <toolbarbutton id="custombuttons-button"
     tooltiptext="Leader-When security matters-Информация об IP "
     image="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAASElEQVQ4jWM4c+bMf0oww5kzZ/7//MJAFkYxgFSbsRpALMBvAIMxKqa/AciGkOUFmhmAJEZHA7Bh+hhAAOA0gKKkTFFmogQDAJUMSdAatE7rAAAAAElFTkSuQmCC"
     cb-oncommand="var uri = <![CDATA[ javascript:void(str=prompt('%D0%92%D0%B2%D0%B5%D1%81%D1%82%D0%B8%20IP%20%D0%B0%D0%B4%D1%80%D0%B5%D1%81'));if(str){void(open('http://leader.ru/secure/whoiz.html?q='+str));};&#xA;]]>;&#xA;if(!(&quot;noscriptUtil&quot; in window) || !noscriptUtil.service.handleBookmark(uri))&#xA;    loadURI(uri);"
/>
     
       </vbox>
</panel>;
this. appendChild (custombuttonsUtils. makeXML (menu));
this. type = "menu";
this. orient = "horizontal";

this. handleClick = function (event)
{
    var menuitem = event. target;
    var url = menuitem. getAttributeNS ("http://xsms.nm.ru/custombuttons/", "url");
    if (!url) return;
    if (event. button == 0)
        loadURI (url);
    else if (event. button == 1)
        gBrowser. addTab (url);
    this. open = false;
};


                       *Добавлено "Leader-When security matters-Информация об IP адресе" 21.07.2011
24-05-2011 22:46:54
Открыть в Opera(Ubuntu)(Firefox3.6-5.0)
Открывает текущую страницу в Opera
скрытый текст
Код кнопки:

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3EOpera%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAFo9M/3AAAABGdBTUEAAK/INwWK6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9oFFBMkGw0H7zIAAAL9SURBVDjLbZJfTJtlFMZ/30cLS6lS/pWWtBKyBruyLSSyEBMn88q5BC/0yi1uckWWeOENN2Yak116IUY3wWhkM8HFxERF1DlD3KLAHDrKhM0ULHzCJhUKtHVroXyPF7AKcefqvO95znPe5zkvbI/oYw0qHAxJmn//DAbA/MBXylqzbJhFm5A/wuV29tvPdSPIfz3vlG8l57xmfDk6Jkmb1e/r3br53GFJUn8NY1wP4LdXV7V08kUNB7bazldDb6gqnrEs+95CQuNnu9TtwV8YcOXIIVuSYq+/qvETxyRJ0+++rQuV9PG1Dy7XIntjQ3PtbYrVG5KkYT8arKWtwBI52Np5qcG9HGsJ5E417Y4279vr2mFEQceDotuDf/xsl+4tJJSxLLs3VBk/X70NEOvptiVp+r0zWo6Oaf6bAZ3zmnEA80IlfeZa1gD4Z2SIxc8+pfbwEeqbn6wDcJQ6iBQXOwDQb9fIp5cAyN0cNQDM0iJem3vjZQBcyRgPlTlA4MxlGPABI0G4EUTJjmPKXvxCdiql6Uc99mhgm5PN+/a6TjXtjk63BHKXGtzLjQdbOwur3y63pxI6lqDLSRvwQkVjfQQgORGfBD55ZZ3++5gdBB9VgcDvrgvdfuLNHjnLyoyK/fvJJhIg2FVTQ3I8yvrqqn7s7DBSs1O1RXCnfREcfV6wbdq8TS1f+g604jv0lGEYBn9+3Evm91sAuBvCBI+/BJIRfvp57vz8w+3E2NVn+7z0m0cT4DI5XZzOULFnD4axqSpzeZC10RHWRkfIXBnceq9BRThMSTqDy+D00QSYAKUmk3lrQumfLha0FS9ZOGeiOGeilCxZhfv08HfkrQmVFjG5478MBYj/GsC2jj8jSUp92KW5IJoLotQHb0mSrPY2/RLAHgoQf+AWusNVkcdzK9fq6iMu5yONclbXGADrfy9ofXbCmJmZvDtc4jlw8tbi5P8IPB4PKysrhEIhR4Wn3Jsq3uW7azrKAFx2fvXhtexfyZXlxNTUVP4+FuBfs3VpxpzbeVsAAAAASUVORK5CYII%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E1%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B/*Initialization%20Code*/%0A%0A%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*CODE*/%0Avar%20page%20%3D%20gBrowser.currentURI%3B%0Avar%20browser%20%3D%20%22/usr/bin/opera%22%3B%0A%0Avar%20file%20%3D%20%20Components.classes%5B%22@mozilla.org/file/local%3B1%22%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.createInstance%28Components.interfaces.nsILocalFile%29%3B%0Afile.initWithPath%28browser%29%3B%0A%0Avar%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%20%20%20%20%20%20%20%20%20%20.createInstance%28Components.interfaces.nsIProcess%29%3B%0Aprocess.init%28file%29%3B%0Aprocess.run%28false%2C%20%5Bpage.spec%5D%2C%201%29%3B%0Areturn%20true%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%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20%u0442%u0435%u043A%u0443%u0449%u0443%u044E%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u0443%20%u0432%20%22Opera%22%20%u0434%u043B%u044F%20Linux%20OS%0A%3Clabel%3E%20%0Aid%20%3D%20%3Cid%3E%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

Код:

Выделить код

Код:

var page = gBrowser.currentURI;
var browser = "/usr/bin/opera";

var file =  Components.classes["@mozilla.org/file/local;1"]
                      .createInstance(Components.interfaces.nsILocalFile);
file.initWithPath(browser);

var process = Components.classes["@mozilla.org/process/util;1"]
                        .createInstance(Components.interfaces.nsIProcess);
process.init(file);
process.run(false, [page.spec], 1);
return true;

Открыть в Midori(Ubuntu)(Firefox3.6-5.0)
Открывает текущую страницу в Midori

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

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3EMidori%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAKTSURBVDiNlZHPb1RVHMU/90dnXqHtDLaNtWIpnfAj0IKEAAsXmBgXxo0u3MkfYEwIC2GBGxO3sHHLzh2NEkw0JkCUxBAWZmwhKEjjD8SpkynpS2d4zpt37/deF61DTBMMZ39Ozucc9f78sddD4JxS+gDPoBjDba35wHrH+YP7Ds9Vhir/b+qWka6Cob/Jis6BWz/Vz9sQ4lxbLdNcu7vZ4AwvrB1loryLldYjfuks4F58wLApscVWCCHOWVcUdHqr/3UWlun8OK/sfIut24f57MYFHgxeZ3h6gLG/DjP0cJzG5FVcUWBdIXiRvndLq8abtffYMz1Lr8j55MuzZFN3SKxhsvEabxw6wbe3L+NFcIVgnfN48QCo5ihvz55ix2SNGCNf3ZgnnVhgJK1xfPQE+48dQilFs/07/jmPcx4rXhAReFzmnR1nGKtMkGUZSilqz88ynn3I3pcPkiRJv+VyZ4kBEcQL1vmAD8JM9io7t+/euCgCMPPSrk3DZllGW7eohIDzAe03EPaOH8EYQ5qmT71yudlAjeR48Xjn0d4JrucZKlex1lKv16lWqxhj6PV6hBAwxvQDVtdW0IPr2N4J2nvBec9qu0We54QQANBas7i4SKVSoVQq9QN+bd2FgbDewAtafCCawNf3PuXhn39gre3v8C+OUgqAzuMON1uXkCj4IIgP6w1EhPbUHT7+5l2+X7pOt9tFREiShEajQVEUAFy8dgEzkyKygeAFM3kk+WhkyhAJlEaFdPg+C9/dI+aGNFvhys0vaHfWuFL/nB8G5rFbIcRAiIH0twJ19GT157H95d3JNt3nDC7iuhFtwA5qfB6wZY16siV5Gnj0Y+++1ZbTzVvdc1HYfPpTpAxLpUSf/gcI2lvMWbR5vAAAAABJRU5ErkJggg%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*/%0A%0A%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*CODE*/%0Avar%20page%20%3D%20gBrowser.currentURI%3B%0Avar%20browser%20%3D%20%22/usr/bin/midori%22%3B%0A%0Avar%20file%20%3D%20%20Components.classes%5B%22@mozilla.org/file/local%3B1%22%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.createInstance%28Components.interfaces.nsILocalFile%29%3B%0Afile.initWithPath%28browser%29%3B%0A%0Avar%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%20%20%20%20%20%20%20%20%20%20.createInstance%28Components.interfaces.nsIProcess%29%3B%0Aprocess.init%28file%29%3B%0Aprocess.run%28false%2C%20%5Bpage.spec%5D%2C%201%29%3B%0Areturn%20true%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%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20%u0442%u0435%u043A%u0443%u0449%u0443%u044E%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u0443%20%u0432%20%22Opera%22%20%u0434%u043B%u044F%20Linux%20OS%0A%3Clabel%3E%20%0Aid%20%3D%20%3Cid%3E%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

Код:

Выделить код

Код:

var page = gBrowser.currentURI;
var browser = "/usr/bin/midori";

var file =  Components.classes["@mozilla.org/file/local;1"]
                      .createInstance(Components.interfaces.nsILocalFile);
file.initWithPath(browser);

var process = Components.classes["@mozilla.org/process/util;1"]
                        .createInstance(Components.interfaces.nsIProcess);
process.init(file);
process.run(false, [page.spec], 1);
return true;

Текстовые смайлы(Firefox3.6-5.0)
Вставка текстовых смайлов.В основе кнопки код Infocatcher

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

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3E%u0422%u0435%u043A%u0441%u0442%u043E%u0432%u044B%u0435%20%u0441%u043C%u0430%u0439%u043B%u044B%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAACB0RVh0U29mdHdhcmUATWFjcm9tZWRpYSBGaXJld29ya3MgTVi7kSokAAAAFnRFWHRDcmVhdGlvbiBUaW1lADExLzA1LzA33bqJ2wAAAi9JREFUeJyVk8tLVHEUxz+/e2dGzWlCp2wxQykyiwQlw0JbhFJBEIEugqB90L5NLnr9A+3b1KZcxeiuxYTUoskQLc1ZJGXYSBk+ynnPvfecFlPqnaDHd3P48X2cc35wjKriw8KRHkzotmL3KXZc1UO9ShatTCOVm4HeT3O75cYXkDmaxNjDVJfB2wT1fhI2YsK4JoqqM95wbHnEH5C91kju2SLuWpzqR/4EhyiuNGVzbjzRNpAuWwBspcb+xQwQZB2bfDxsvR+rTZDpOw7yiuLMX827UXD2oyon7FtXWx/grHQiRR5OJrh+vx+Ano4Nn6GeMwgitFtqNXXhbQLwaDKxU8MnfQH1XMCq4IrpslQ19uu3Lw8t1uqFA9A84Auo54xRRCRm3Le9apdnd5TNA7Xu+RdQSPsXr+M2cnswzlx3NlDNxMDjf6Bq2MyHViy8fEZMeJtIzcaZSHf8ZphId3A32bP9rroWtnEzASE4KiZ6NqTfawGvY8wvRUm9SdB9OAvA/FIrH75E6O6sQuQcbD2hWDaIeKNGVanMHEpaWhwOsk6hHODe0/OkphzfBGf6G7hyqZ1me4XC58dUHRlvGZQRo6psTJ9ubNJ3izb5eMj6BqaBr84Qq4XaKgejQdqiQSgtUFx7TqlUyq6ua6LropZ9x1Scakuq6nDIyhOwKpjAXrAjqBqcSp5CIQd44y2DUndMu1B8ua9bhDsi2ueJxlUEY9ysQaYt492InJL53fofa8ocVmP9V6MAAAAASUVORK5CYII%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*/%0Athis.appendChild%28parseFromXML%28%0A%20%20%20%20%3Cmenupopup%20xmlns%3D%22http%3A//www.mozilla.org/keymaster/gatekeeper/there.is.only.xul%22%0A%20%20%20%20%20%20%20%20oncommand%3D%22this.parentNode.insertText%28event.target.getAttribute%28%27cb_text%27%29%29%3B%22%3E%0A%20%3Cmenu%20label%3D%22%u042D%u043C%u043E%u0446%u0438%u044F%22%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%3Cmenupopup%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%3A-%29%22%20label%3D%22%3A-%29%20%u0443%u043B%u044B%u0431%u043A%u0430%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%3A-%28%22%20label%3D%22%3A-%28%20%u0433%u0440%u0443%u0441%u0442%u044C%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%3A-%7C%22%20label%3D%22%3A-%7C%20%u0437%u0430%u0434%u0443%u043C%u0447%u0438%u0432%u043E%u0441%u0442%u044C%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%3A-D%22%20label%3D%22%3A-D%20%u0441%u043C%u0435%u0445%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22X-D%22%20label%3D%22X-D%20%u0441%u043C%u0435%u0445%20%u0441%20%u0437%u0430%u0436%u043C%u0443%u0440%u0435%u043D%u043D%u044B%u043C%u0438%20%u0433%u043B%u0430%u0437%u0430%u043C%u0438%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%3A-C%22%20label%3D%22%3A-C%20%u0441%u0438%u043B%u044C%u043D%u043E%u0435%20%u043E%u0433%u043E%u0440%u0447%u0435%u043D%u0438%u0435%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%3A-/%22%20label%3D%22%3A-/%20%u043D%u0435%u0434%u043E%u0432%u043E%u043B%u044C%u0441%u0442%u0432%u043E/%u043E%u0437%u0430%u0434%u0430%u0447%u0435%u043D%u043D%u043E%u0441%u0442%u044C%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%3A-%5C%22%20label%3D%22%3A-%5C%20%u043D%u0435%u0434%u043E%u0432%u043E%u043B%u044C%u0441%u0442%u0432%u043E/%u043E%u0437%u0430%u0434%u0430%u0447%u0435%u043D%u043D%u043E%u0441%u0442%u044C%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%3A-0%22%20label%3D%22%3A-0%20%u0443%u0434%u0438%u0432%u043B%u0435%u043D%u0438%u0435%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%228-O%22%20label%3D%228-O%20%u0441%u0438%u043B%u044C%u043D%u043E%u0435%20%u0443%u0434%u0438%u0432%u043B%u0435%u043D%u0438%u0435%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%3D-O%22%20label%3D%22%3D-O%20%u0441%u0438%u043B%u044C%u043D%u043E%u0435%20%u0443%u0434%u0438%u0432%u043B%u0435%u043D%u0438%u0435%22%20/%3E%20%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%3A-%5B%20%5D%22%20label%3D%22%3A-%5B%20%5D%20%u0441%u0438%u043B%u044C%u043D%u043E%u0435%20%u0443%u0434%u0438%u0432%u043B%u0435%u043D%u0438%u0435%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%3A-%5B%22%20label%3D%22%3A-%5B%20%u0441%u043C%u0443%u0449%u0435%u043D%u0438%u0435%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%250%22%20label%3D%22%250%20%u0441%u0431%u0438%u0442%20%u0441%20%u0442%u043E%u043B%u043A%u0443%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%3E%3A-D%22%20label%3D%22%3E%3A-D%20%u0437%u043B%u043E%u0440%u0430%u0434%u043D%u044B%u0439%20%20%u0441%u043C%u0435%u0445%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%7D%3A-%3E%22%20label%3D%22%7D%3A-%3E%20%u043A%u043E%u0432%u0430%u0440%u043D%u0430%u044F%20%20%u0443%u043B%u044B%u0431%u043A%u0430%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%3A-%3E%22%20label%3D%22%5D%3A-%3E%20%u043A%u043E%u0432%u0430%u0440%u043D%u0430%u044F%20%20%u0443%u043B%u044B%u0431%u043A%u0430%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%3A%27-%29%22%20label%3D%22%3A%27-%29%20%u0441%u0438%u043B%u044C%u043D%u044B%u0439%20%u0441%u043C%u0435%u0445%28%u0434%u043E%20%u0441%u043B%u0451%u0437%29%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%3A%27-D%22%20label%3D%22%3A%27-D%20%u0441%u0438%u043B%u044C%u043D%u044B%u0439%20%u0441%u043C%u0435%u0445%28%u0434%u043E%20%u0441%u043B%u0451%u0437%29%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22D-%3A%22%20label%3D%22D-%3A%20%u0441%u0438%u043B%u044C%u043D%u0430%u044F%20%u0437%u043B%u043E%u0441%u0442%u044C%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22/%3A-%28%22%20label%3D%22/%3A-%28%20%AB%u0435%u0434%u0435%u0442%20%u043A%u0440%u044B%u0448%u0430%BB%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22/%3A-%5D%22%20label%3D%22/%3A-%5D%20%AB%u0435%u0434%u0435%u0442%20%u043A%u0440%u044B%u0448%u0430%BB%22%20/%3E%0A%20%20%20%20%20%20%20%20%20%20%3C/menupopup%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%3C/menu%3E%0A%20%3Cmenu%20label%3D%22%u0414%u0435%u0439%u0441%u0442%u0432%u0438%u0435%22%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%3Cmenupopup%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%3B-%29%22%20label%3D%22%3B-%29%20%u043F%u043E%u0434%u043C%u0438%u0433%u0438%u0432%u0430%u0442%u044C%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%3A-*%22%20label%3D%22%3A-*%20%u0446%u0435%u043B%u043E%u0432%u0430%u0442%u044C%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%3A_%28%22%20label%3D%22%3A_%28%20%u043F%u043B%u0430%u043A%u0430%u0442%u044C%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%3A%7E%28%22%20label%3D%22%3A%7E%28%20%u043F%u043B%u0430%u043A%u0430%u0442%u044C%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%3A%27%28%22%20label%3D%22%3A%27%28%20%u043F%u043B%u0430%u043A%u0430%u0442%u044C%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%3A*%28%22%20label%3D%22%3A*%28%20%u043F%u043B%u0430%u043A%u0430%u0442%u044C%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%3A-%7B%7D%22%20label%3D%22%3A-%7B%7D%20%u0441%u0442%u0440%u0430%u0441%u0442%u043D%u044B%u0439%20%u043F%u043E%u0446%u0435%u043B%u0443%u0439%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%3A-@%22%20label%3D%22%3A-@%20%u043A%u0440%u0438%u0447%u0430%u0442%u044C%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%3A-X%22%20label%3D%22%3A-X%20%u0440%u043E%u0442%20%u043D%u0430%20%u0437%u0430%u043C%u043A%u0435%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%3A-%21%22%20label%3D%22%3A-%21%20%u043E%u0442%u0432%u0440%u0430%u0449%u0435%u043D%u0438%u0435%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%3A-P%22%20label%3D%22%3A-P%20%u043F%u043E%u043A%u0430%u0437%u044B%u0432%u0430%u0442%u044C%20%u044F%u0437%u044B%u043A%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%3A-p%22%20label%3D%22%3A-p%20%u043F%u043E%u043A%u0430%u0437%u044B%u0432%u0430%u0442%u044C%20%u044F%u0437%u044B%u043A%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%3Alol%3A%22%20label%3D%22%3Alol%3A%20%u0433%u0440%u043E%u043C%u043A%u0438%u0439%20%u0441%u043C%u0435%u0445%22%20/%3E%0A%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%3C/menupopup%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%3C/menu%3E%0A%20%3Cmenu%20label%3D%22%u041F%u0435%u0440%u0441%u043E%u043D%u0430%u0436%22%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%3Cmenupopup%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%228-%29%22%20label%3D%228-%29%20%u0447%u0435%u043B%u043E%u0432%u0435%u043A%20%u0432%20%u043E%u0447%u043A%u0430%u0445%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22B-%29%22%20label%3D%22B-%29%20%u0447%u0435%u043B%u043E%u0432%u0435%u043A%20%u0432%20%u043E%u0447%u043A%u0430%u0445%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22O%3A-%29%22%20label%3D%22O%3A-%29%20%u0430%u043D%u0433%u0435%u043B%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%25%29%22%20label%3D%22%25%29%20%u0441%u0443%u043C%u0430%u0441%u0448%u0435%u0434%u0448%u0438%u0439%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%3A*%29%22%20label%3D%22%3A*%29%u043F%u044C%u044F%u043D%u044B%u0439%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22/b/%22%20label%3D%22/b/%20%u041C%u0435%u0434%u0432%u0435%u0434/%AB%u041F%u0440%u0435%u0432%u0435%u0434%21%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%5Co/%22%20label%3D%22%5Co/%20%u041C%u0435%u0434%u0432%u0435%u0434/%AB%u041F%u0440%u0435%u0432%u0435%u0434%21%BB%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%u0413%u0433Y%22%20label%3D%22%u0413%u0433Y%20%u041C%u0435%u0434%u0432%u0435%u0434/%AB%u041F%u0440%u0435%u0432%u0435%u0434%21%BB%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%7B%3A%u20AC%22%20label%3D%22%7B%3A%u20AC%20%u041A%u0442%u0443%u043B%u0445%u0443%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%3AE%22%20label%3D%22%3AE%20%u041A%u0442%u0443%u043B%u0445%u0443%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%28%3B%2C%3B%29%22%20label%3D%22%28%3B%2C%3B%29%20%u041A%u0442%u0443%u043B%u0445%u0443%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22*%3AO%29%22%20label%3D%22*%3AO%29%20%u043A%u043B%u043E%u0443%u043D%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%3A-E%22%20label%3D%22%3A-E%20%u043E%u0441%u043A%u0430%u043B%u0435%u043D%u043D%u044B%u0439%20%20%u0432%u0430%u043C%u043F%u0438%u0440%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%3A-F%22%20label%3D%22%3A-F%20%u0432%u0430%u043C%u043F%u0438%u0440%20%u0431%u0435%u0437%20%u043A%u043B%u044B%u043A%u0430%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%3A%3A-%29%22%20label%3D%22%3A%3A-%29%20%u043C%u0443%u0442%u0430%u043D%u0442/%u043F%u0440%u0438%u0448%u0435%u043B%u0435%u0446%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%5B%3A%5D%22%20label%3D%22%5B%3A%5D%20%u0440%u043E%u0431%u043E%u0442%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22-%3D%3C%3A-%29%22%20label%3D%22-%3D%3C%3A-%29%20%u0432%u043E%u043B%u0448%u0435%u0431%u043D%u0438%u043A%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%2C%u2019-/%22%20label%3D%22%2C%u2019-/%20%u043A%u0438%u0442%u0430%u0435%u0446%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%3C%7C-%29%22%20label%3D%22%3C%7C-%29%20%u043A%u0438%u0442%u0430%u0435%u0446%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%u043E-%29%22%20label%3D%22%u043E-%29%20%u0446%u0438%u043A%u043B%u043E%u043F%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22O-%29%22%20label%3D%22O-%29%20%u0446%u0438%u043A%u043B%u043E%u043F%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%3A-%5D%5B%22%20label%3D%22%3A-%5D%5B%20%u0447%u0435%u0440%u0435%u043F%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%3A-%3F%22%20label%3D%22%3A-%3F%20%u043A%u0443%u0440%u044F%u0449%u0438%u0439%20%u0442%u0440%u0443%u0431%u043A%u0443%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%u042D%3A-%29%22%20label%3D%22%u042D%3A-%29%20%u043E%u043B%u0435%u043D%u044C%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%3C3%22%20label%3D%22%3C3%20%u0441%u0435%u0440%u0434%u0446%u0435%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22@%7D-%3E--%22%20label%3D%22@%7D-%3E--%20%u0440%u043E%u0437%u0430%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%5Cm/%22%20label%3D%22%5Cm/%20%u043A%u043E%u0437%u0430%20%28%u0436%u0435%u0441%u0442%29%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%5Cm/_%22%20label%3D%22%5Cm/_%20%u043A%u043E%u0437%u0430%20%28%u0436%u0435%u0441%u0442%29%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%5B%3A%7C%7C%7C%3A%5D%22%20label%3D%22%5B%3A%7C%7C%7C%3A%5D%20%u0431%u0430%u044F%u043D%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%5B%3A%5D/%5C/%5C/%5C%5B%3A%5D%22%20label%3D%22%5B%3A%5D/%5C/%5C/%5C%5B%3A%5D%20%u0431%u0430%u044F%u043D%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%5B%3A%5D%7C%7C%7C%5B%3A%5D%22%20label%3D%22%5B%3A%5D%7C%7C%7C%5B%3A%5D%20%u0431%u0430%u044F%u043D%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%28_%21_%29%22%20label%3D%22%28_%21_%29%20%u0437%u0430%u0434%u043D%u0438%u0446%u0430%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%28%29%28%29%22%20label%3D%22%28%29%28%29%20%u0437%u0430%u0434%u043D%u0438%u0446%u0430%22%20/%3E%0A%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%3C/menupopup%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%3C/menu%3E%0A%20%20%20%20%3C/menupopup%3E%0A%29%29%3B%0Athis.type%20%3D%20%22menu%22%3B%0Athis.orient%20%3D%20%22horizontal%22%3B%0Athis.insertText%20%3D%20function%28str%29%20%7B%0A%20%20%20%20var%20command%20%3D%20%22cmd_insertText%22%3B%0A%20%20%20%20var%20controller%20%3D%20document.commandDispatcher.getControllerForCommand%28command%29%3B%0A%20%20%20%20if%28controller%20%26%26%20controller.isCommandEnabled%28command%29%29%20%7B%0A%20%20%20%20%20%20%20%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%0A%20%20%20%20%20%20%20%20%20%20%20%20.createInstance%28Components.interfaces.nsICommandParams%29%3B%0A%20%20%20%20%20%20%20%20params.setStringValue%28%22state_data%22%2C%20str%29%3B%0A%20%20%20%20%20%20%20%20controller.doCommandWithParams%28command%2C%20params%29%3B%0A%20%20%20%20%7D%0A%7D%3B%0Afunction%20parseFromXML%28xml%29%20%7B%0A%20%20%20%20var%20pp%20%3D%20XML.prettyPrinting%3B%0A%20%20%20%20XML.prettyPrinting%20%3D%20false%3B%0A%20%20%20%20var%20elt%20%3D%20new%20DOMParser%28%29.parseFromString%28xml.toXMLString%28%29%2C%20%22application/xml%22%29.documentElement%3B%0A%20%20%20%20XML.prettyPrinting%20%3D%20pp%3B%0A%20%20%20%20return%20elt%3B%0A%7D%0A%0Avar%20that%20%3D%20this%3B%0Athis.hideDropMarker%20%3D%20function%28%29%20%7B%0A%20%20var%20dropMarker%20%3D%20document.getAnonymousElementByAttribute%28that%2C%20%22class%22%2C%20%22toolbarbutton-menu-dropmarker%22%29%3B%0A%20%20if%20%28dropMarker%29%20%7B%0A%20%20%20%20dropMarker.setAttribute%28%22hidden%22%2C%20%22true%22%29%3B%0A%20%20%7D%20else%20%7B%0A%20%20%20%20setTimeout%28that.hideDropMarker%2C%2010%29%3B%0A%20%20%7D%0A%7D%0Athis.hideDropMarker%28%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%3Clabel%3E%20%0Aid%20%3D%20%3Cid%3E%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

Код:

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

Выделить код

Код:

/*Initialization Code*/
this.appendChild(parseFromXML(
    <menupopup xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
        oncommand="this.parentNode.insertText(event.target.getAttribute('cb_text'));">
 <menu label="Эмоция">
            <menupopup>
        <menuitem cb_text=":-)" label=":-) улыбка" />
        <menuitem cb_text=":-(" label=":-( грусть" />
        <menuitem cb_text=":-|" label=":-| задумчивость" />
        <menuitem cb_text=":-D" label=":-D смех" />
        <menuitem cb_text="X-D" label="X-D смех с зажмуренными глазами" />
        <menuitem cb_text=":-C" label=":-C сильное огорчение" />
        <menuitem cb_text=":-/" label=":-/ недовольство/озадаченность" />
        <menuitem cb_text=":-\" label=":-\ недовольство/озадаченность" />
        <menuitem cb_text=":-0" label=":-0 удивление" />
        <menuitem cb_text="8-O" label="8-O сильное удивление" />
        <menuitem cb_text="=-O" label="=-O сильное удивление" /> 
        <menuitem cb_text=":-[ ]" label=":-[ ] сильное удивление" />
        <menuitem cb_text=":-[" label=":-[ смущение" />
        <menuitem cb_text="%0" label="%0 сбит с толку" />
        <menuitem cb_text=">:-D" label=">:-D злорадный  смех" />
        <menuitem cb_text="}:->" label="}:-> коварная  улыбка" />
        <menuitem cb_text=":->" label="]:-> коварная  улыбка" />
        <menuitem cb_text=":'-)" label=":'-) сильный смех(до слёз)" />
        <menuitem cb_text=":'-D" label=":'-D сильный смех(до слёз)" />
        <menuitem cb_text="D-:" label="D-: сильная злость" />
        <menuitem cb_text="/:-(" label="/:-( «едет крыша»" />
        <menuitem cb_text="/:-]" label="/:-] «едет крыша»" />
          </menupopup>
             </menu>
 <menu label="Действие">
            <menupopup>
        <menuitem cb_text=";-)" label=";-) подмигивать" />
        <menuitem cb_text=":-*" label=":-* целовать" />
        <menuitem cb_text=":_(" label=":_( плакать" />
        <menuitem cb_text=":~(" label=":~( плакать" />
        <menuitem cb_text=":'(" label=":'( плакать" />
        <menuitem cb_text=":*(" label=":*( плакать" />
        <menuitem cb_text=":-{}" label=":-{} страстный поцелуй" />
        <menuitem cb_text=":-@" label=":-@ кричать" />
        <menuitem cb_text=":-X" label=":-X рот на замке" />
        <menuitem cb_text=":-!" label=":-! отвращение" />
        <menuitem cb_text=":-P" label=":-P показывать язык" />
        <menuitem cb_text=":-p" label=":-p показывать язык" />
        <menuitem cb_text=":lol:" label=":lol: громкий смех" />
        
        
          </menupopup>
             </menu>
 <menu label="Персонаж">
            <menupopup>
        <menuitem cb_text="8-)" label="8-) человек в очках" />
        <menuitem cb_text="B-)" label="B-) человек в очках" />
        <menuitem cb_text="O:-)" label="O:-) ангел" />
        <menuitem cb_text="%)" label="%) сумасшедший" />
        <menuitem cb_text=":*)" label=":*)пьяный" />
        <menuitem cb_text="/b/" label="/b/ Медвед/«Превед!" />
        <menuitem cb_text="\o/" label="\o/ Медвед/«Превед!»" />
        <menuitem cb_text="ГгY" label="ГгY Медвед/«Превед!»" />
        <menuitem cb_text="{:€" label="{:€ Ктулху" />
        <menuitem cb_text=":E" label=":E Ктулху" />
        <menuitem cb_text="(;,;)" label="(;,;) Ктулху" />
        <menuitem cb_text="*:O)" label="*:O) клоун" />
        <menuitem cb_text=":-E" label=":-E оскаленный  вампир" />
        <menuitem cb_text=":-F" label=":-F вампир без клыка" />
        <menuitem cb_text="::-)" label="::-) мутант/пришелец" />
        <menuitem cb_text="[:]" label="[:] робот" />
        <menuitem cb_text="-=<:-)" label="-=<:-) волшебник" />
        <menuitem cb_text=",’-/" label=",’-/ китаец" />
        <menuitem cb_text="<|-)" label="<|-) китаец" />
        <menuitem cb_text="о-)" label="о-) циклоп" />
        <menuitem cb_text="O-)" label="O-) циклоп" />
        <menuitem cb_text=":-][" label=":-][ череп" />
        <menuitem cb_text=":-?" label=":-? курящий трубку" />
        <menuitem cb_text="Э:-)" label="Э:-) олень" />
        <menuitem cb_text="<3" label="<3 сердце" />
        <menuitem cb_text="@}->--" label="@}->-- роза" />
        <menuitem cb_text="\m/" label="\m/ коза (жест)" />
        <menuitem cb_text="\m/_" label="\m/_ коза (жест)" />
        <menuitem cb_text="[:|||:]" label="[:|||:] баян" />
        <menuitem cb_text="[:]/\/\/\[:]" label="[:]/\/\/\[:] баян" />
        <menuitem cb_text="[:]|||[:]" label="[:]|||[:] баян" />
        <menuitem cb_text="(_!_)" label="(_!_) задница" />
        <menuitem cb_text="()()" label="()() задница" />
       
        
          </menupopup>
             </menu>
    </menupopup>
));
this.type = "menu";
this.orient = "horizontal";
this.insertText = function(str) {
    var command = "cmd_insertText";
    var controller = document.commandDispatcher.getControllerForCommand(command);
    if(controller && controller.isCommandEnabled(command)) {
        controller = controller.QueryInterface(Components.interfaces.nsICommandController);
        var params = Components.classes["@mozilla.org/embedcomp/command-params;1"]
            .createInstance(Components.interfaces.nsICommandParams);
        params.setStringValue("state_data", str);
        controller.doCommandWithParams(command, params);
    }
};
function parseFromXML(xml) {
    var pp = XML.prettyPrinting;
    XML.prettyPrinting = false;
    var elt = new DOMParser().parseFromString(xml.toXMLString(), "application/xml").documentElement;
    XML.prettyPrinting = pp;
    return elt;
}

var that = this;
this.hideDropMarker = function() {
  var dropMarker = document.getAnonymousElementByAttribute(that, "class", "toolbarbutton-menu-dropmarker");
  if (dropMarker) {
    dropMarker.setAttribute("hidden", "true");
  } else {
    setTimeout(that.hideDropMarker, 10);
  }
}
this.hideDropMarker();

25-05-2011 22:09:28
Текстовые смайлы(Азия)(Firefox3.6-5.0)
Вставка текстовых смайлов.В основе кнопки код Infocatcher

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

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3E%u0422%u0435%u043A%u0441%u0442%u043E%u0432%u044B%u0435%20%u0441%u043C%u0430%u0439%u043B%u044B%28%u0410%u0437%u0438%u044F%29%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAACB0RVh0U29mdHdhcmUATWFjcm9tZWRpYSBGaXJld29ya3MgTVi7kSokAAAAFnRFWHRDcmVhdGlvbiBUaW1lADExLzA1LzA33bqJ2wAAAi9JREFUeJyVk8tLVHEUxz+/e2dGzWlCp2wxQykyiwQlw0JbhFJBEIEugqB90L5NLnr9A+3b1KZcxeiuxYTUoskQLc1ZJGXYSBk+ynnPvfecFlPqnaDHd3P48X2cc35wjKriw8KRHkzotmL3KXZc1UO9ShatTCOVm4HeT3O75cYXkDmaxNjDVJfB2wT1fhI2YsK4JoqqM95wbHnEH5C91kju2SLuWpzqR/4EhyiuNGVzbjzRNpAuWwBspcb+xQwQZB2bfDxsvR+rTZDpOw7yiuLMX827UXD2oyon7FtXWx/grHQiRR5OJrh+vx+Ano4Nn6GeMwgitFtqNXXhbQLwaDKxU8MnfQH1XMCq4IrpslQ19uu3Lw8t1uqFA9A84Auo54xRRCRm3Le9apdnd5TNA7Xu+RdQSPsXr+M2cnswzlx3NlDNxMDjf6Bq2MyHViy8fEZMeJtIzcaZSHf8ZphId3A32bP9rroWtnEzASE4KiZ6NqTfawGvY8wvRUm9SdB9OAvA/FIrH75E6O6sQuQcbD2hWDaIeKNGVanMHEpaWhwOsk6hHODe0/OkphzfBGf6G7hyqZ1me4XC58dUHRlvGZQRo6psTJ9ubNJ3izb5eMj6BqaBr84Qq4XaKgejQdqiQSgtUFx7TqlUyq6ua6LropZ9x1Scakuq6nDIyhOwKpjAXrAjqBqcSp5CIQd44y2DUndMu1B8ua9bhDsi2ueJxlUEY9ysQaYt492InJL53fofa8ocVmP9V6MAAAAASUVORK5CYII%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*/%0Athis.appendChild%28parseFromXML%28%0A%20%20%20%20%3Cmenupopup%20xmlns%3D%22http%3A//www.mozilla.org/keymaster/gatekeeper/there.is.only.xul%22%0A%20%20%20%20%20%20%20%20oncommand%3D%22this.parentNode.insertText%28event.target.getAttribute%28%27cb_text%27%29%29%3B%22%3E%0A%20%3Cmenu%20label%3D%22%u042D%u043C%u043E%u0446%u0438%u044F%22%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%3Cmenupopup%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%28n_n%29%22%20label%3D%22%28n_n%29%u0443%u043B%u044B%u0431%u043A%u0430%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%28%5E_%5E%29%22%20label%3D%22%28%5E_%5E%29%u0440%u0430%u0434%u043E%u0441%u0442%u044C%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%28%3C_%3E%29%22%20label%3D%22%28%3C_%3E%29%u0433%u0440%u0443%u0441%u0442%u044C%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%28v_v%29%22%20label%3D%22%28v_v%29%u0433%u0440%u0443%u0441%u0442%u044C%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%28%5E%20%5E%29%22%20label%3D%22%28%5E%20%5E%29%u0443%u043B%u044B%u0431%u043A%u0430%20%u0447%u0435%u0440%u0435%u0437%20%u0441%u0438%u043B%u0443%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%28%3E_%3C%29%22%20label%3D%22%28%3E_%3C%29%u0437%u043B%u043E%u0441%u0442%u044C/%u043A%u0430%u0442%u0435%u0433%u043E%u0440%u0438%u0447%u043D%u043E%u0441%u0442%u044C%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%28%3E_%3E%29%22%20label%3D%22%28%3E_%3E%29%u0441%u043A%u0435%u043F%u0442%u0438%u0447%u043D%u043E%u0441%u0442%u044C%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%28%3C_%3C%29%22%20label%3D%22%28%3C_%3C%29%u0441%u043A%u0435%u043F%u0442%u0438%u0447%u043D%u043E%u0441%u0442%u044C%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%28-_-%A8%29%22%20label%3D%22%28-_-%A8%29%u0441%u043A%u043E%u043D%u0444%u0443%u0436%u0435%u043D%u043D%u043E%u0441%u0442%u044C%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%5E_%5E%A8%22%20label%3D%22%5E_%5E%A8%u0441%u043C%u0443%u0449%u0451%u043D%u043D%u043E%u0441%u0442%u044C%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22*%5E_%5E*%22%20label%3D%22*%5E_%5E*%u0441%u043C%u0443%u0449%u0435%u043D%u043D%u043E%u0441%u0442%u044C%20%u0441%20%u043F%u043E%u043A%u0440%u0430%u0441%u043D%u0435%u043D%u0438%u0435%u043C%22%20/%3E%20%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%28-_-%23%29%22%20label%3D%22%28-_-%23%29%u044F%u0440%u043E%u0441%u0442%u044C%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%28-_-%A4%29%22%20label%3D%22%28-_-%A4%29%u044F%u0440%u043E%u0441%u0442%u044C%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%28-_-+%29%22%20label%3D%22%28-_-+%29%u044F%u0440%u043E%u0441%u0442%u044C%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%28o_o%29%22%20label%3D%22%28o_o%29%u0443%u0434%u0438%u0432%u043B%u0435%u043D%u0438%u0435%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%280_0%29%22%20label%3D%22%280_0%29%u0441%u0438%u043B%u044C%u043D%u043E%u0435%20%u0443%u0434%u0438%u0432%u043B%u0435%u043D%u0438%u0435%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%28O_o%29%22%20label%3D%22%28O_o%29%u043E%u0447%u0435%u043D%u044C%20%u0441%u0438%u043B%u044C%u043D%u043E%u0435%20%u0443%u0434%u0438%u0432%u043B%u0435%u043D%u0438%u0435%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%28o_O%29%22%20label%3D%22%28o_O%29%u043E%u0447%u0435%u043D%u044C%20%u0441%u0438%u043B%u044C%u043D%u043E%u0435%20%u0443%u0434%u0438%u0432%u043B%u0435%u043D%u0438%u0435%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%28V_v%29%22%20label%3D%22%28V_v%29%u043D%u0435%u043F%u0440%u0438%u044F%u0442%u043D%u043E%u0435%20%u0443%u0434%u0438%u0432%u043B%u0435%u043D%u0438%u0435%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%28@_@%29%22%20label%3D%22%28@_@%29%u043E%u0431%u0430%u043B%u0434%u0435%u043D%u0438%u0435%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%28%25_%25%29%22%20label%3D%22%28%25_%25%29%u0443%u0441%u0442%u0430%u043B%u043E%u0441%u0442%u044C%20%u0433%u043B%u0430%u0437%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%28u_u%29%22%20label%3D%22%28u_u%29%u0434%u0435%u043F%u0440%u0435%u0441%u0441%u0438%u044F%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%28%3Ex%3C%21%29%22%20label%3D%22%28%3Ex%3C%21%29%u0447%u0435%u0440%u0442%21%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%228%28%3E_%3C%298%22%20label%3D%228%28%3E_%3C%298%u0440%u0435%u0432%u043D%u0438%u0432%u044B%u0439%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%28%3E%3E%29%22%20label%3D%22%28%3E%3E%29%u043A%u043E%u0441%u043E%u0439%20%u0432%u0437%u0433%u043B%u044F%u0434%2C%20%u043D%u0435%u0434%u043E%u0432%u0435%u0440%u0438%u0435%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%280_%3C%29%22%20label%3D%22%280_%3C%29%u043D%u0435%u0440%u0432%u043D%u044B%u0439%20%u0442%u0438%u043A%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%28*_*%29%22%20label%3D%22%28*_*%29%u0444%u0430%u043D%u0430%u0442%u0435%u043D%u0438%u0435%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22-__-%22%20label%3D%22-__-%u0444%u043B%u0435%u0433%u043C%u0430%u0442%u0438%u0447%u043D%u043E%u0441%u0442%u044C/%AB%u043C%u0434%u0430-%u0430-%u0430%u2026%BB%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%289_9%29%22%20label%3D%22%289_9%29%u043D%u0435%20%u0441%u043F%u0430%u043B%20%u0432%u0441%u044E%20%u043D%u043E%u0447%u044C%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%3D__%3D%22%20label%3D%22%3D__%3D%u0441%u043E%u043D%u043D%u044B%u0439%20%u0438%u043B%u0438%20%AB%u0434%u043E%u0441%u0442%u0430%u043B%u0438%u2026%BB%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%28-.-%29Zzz.%22%20label%3D%22%28-.-%29Zzz.%u0441%u043F%u044F%u0449%u0438%u0439%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%28-_-%29Zzz.%22%20label%3D%22%28-_-%29Zzz.%u0441%u043F%u044F%u0449%u0438%u0439%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%28-_-%3B%29%22%20label%3D%22%28-_-%3B%29%u0431%u043E%u043B%u0435%u0437%u043D%u0435%u043D%u043D%u043E%u0441%u0442%u044C%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%28%u0425_%u0445%29%22%20label%3D%22%28%u0425_%u0445%29%u0442%u0440%u0443%u043F%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%28+_+%29%22%20label%3D%22%28+_+%29%u0442%u0440%u0443%u043F%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%28%u0445_%u0445%29%22%20label%3D%22%28%u0445_%u0445%29%u0442%u0440%u0443%u043F%22%20/%3E%0A%20%20%20%20%20%20%20%20%20%20%3C/menupopup%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%3C/menu%3E%0A%20%3Cmenu%20label%3D%22%u0414%u0435%u0439%u0441%u0442%u0432%u0438%u0435%22%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%3Cmenupopup%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%28%5E_%7E%29%22%20label%3D%22%28%5E_%7E%29%u043F%u043E%u0434%u043C%u0438%u0433%u0438%u0432%u0430%u0442%u044C%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%28%5E_-%29%22%20label%3D%22%28%5E_-%29%u043F%u043E%u0434%u043C%u0438%u0433%u0438%u0432%u0430%u0442%u044C%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%28%3B_%3B%29%22%20label%3D%22%28%3B_%3B%29%u043F%u043B%u0430%u043A%u0430%u0442%u044C%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%28T_T%29%22%20label%3D%22%28T_T%29%u043F%u043B%u0430%u043A%u0430%u0442%u044C%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%28TT.TT%29%22%20label%3D%22%28TT.TT%29%u043F%u043B%u0430%u043A%u0430%u0442%u044C%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%28ToT%29%22%20label%3D%22%28ToT%29%u043F%u043B%u0430%u043A%u0430%u0442%u044C%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22Q__Q%22%20label%3D%22Q__Q%u043F%u043B%u0430%u043A%u0430%u0442%u044C%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%3DX%3D%22%20label%3D%22%3DX%3D%u0440%u0443%u043A%u043E%u043F%u043E%u0436%u0430%u0442%u0438%u0435%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%5E%7D%7B%5E%22%20label%3D%22%5E%7D%7B%5E%u043B%u044E%u0431%u043E%u0432%u044C%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%28%5E3%5E%29%22%20label%3D%22%28%5E3%5E%29%u043F%u043E%u0446%u0435%u043B%u0443%u0439%22%20/%3E%0A%20%20%20%20%20%20%20%20%20%20%3C/menupopup%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%3C/menu%3E%0A%20%3Cmenu%20label%3D%22%u041F%u0435%u0440%u0441%u043E%u043D%u0430%u0436%22%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%3Cmenupopup%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%28%3D%5E.%5E%3D%29%22%20label%3D%22%28%3D%5E.%5E%3D%29%u043A%u043E%u0448%u043A%u0430%28%u043D%u044F%29%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%3D%5E_%5E%3D%22%20label%3D%22%3D%5E_%5E%3D%u043A%u043E%u0448%u043A%u0430%28%u043D%u044F%29%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%28O%2Co%29%22%20label%3D%22%28O%2Co%29%u0441%u043E%u0432%u0430%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%5E..%5E%22%20label%3D%22%5E..%5E%u0441%u0432%u0438%u043D%u044C%u044F%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22///_%u0422%22%20label%3D%22///_%u0422%u044D%u043C%u043E-%u043A%u0438%u0434%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22T_%5C%5C%5C%22%20label%3D%22T_%5C%5C%5C%u044D%u043C%u043E-%u043A%u0438%u0434%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22///_%5E%22%20label%3D%22///_%5E%u044D%u043C%u043E-%u043A%u0438%u0434%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%5E_%5C%5C%5C%22%20label%3D%22%5E_%5C%5C%5C%u044D%u043C%u043E-%u043A%u0438%u0434%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%28%A8%5C%28%u043E_%u041E%29/%A8%29%22%20label%3D%22%28%A8%5C%28%u043E_%u041E%29/%A8%29%u041C%u0435%u0434%u0432%u0435%u0434/%AB%u041F%u0440%u0435%u0432%u0435%u0434%21%BB%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%28jIj%29%22%20label%3D%22%28jIj%29%u041A%u0442%u0443%u043B%u0445%u0443%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%28%3B%2C%3B%29%22%20label%3D%22%28%3B%2C%3B%29%u041A%u0442%u0443%u043B%u0445%u0443%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%28o%2C.%2CO%29%22%20label%3D%22%28o%2C.%2CO%29%u041A%u0442%u0443%u043B%u0445%u0443%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22Y%28O%2C%2C%2C%2CO%29Y%22%20label%3D%22Y%28O%2C%2C%2C%2CO%29Y%u041A%u0442%u0443%u043B%u0445%u0443%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%28x%28x_%28x_x%28%u041E_%u043E%29x_x%29_x%29x%29%22%20label%3D%22%28x%28x_%28x_x%28%u041E_%u043E%29x_x%29_x%29x%29%u0436%u0438%u0432%u043E%u0439%20%u0441%u0440%u0435%u0434%u0438%20%u0437%u043E%u043C%u0431%u0438%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22%28-%28-_%28-_-%28%u041E_%u043E%29-_-%29_-%29-%29%22%20label%3D%22%28-%28-_%28-_-%28%u041E_%u043E%29-_-%29_-%29-%29%u043F%u0440%u043E%u0441%u043D%u0443%u043B%u0441%u044F%20%u0432%20%u043C%u0435%u0442%u0440%u043E%22%20/%3E%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20cb_text%3D%22@-_-@%22%20label%3D%22@-_-@%u043E%u0432%u0435%u043D%2C%20%u0431%u0430%u0440%u0430%u0448%u043A%u0430%22%20/%3E%0A%20%20%20%20%20%20%20%20%20%20%3C/menupopup%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%3C/menu%3E%0A%20%20%20%20%3C/menupopup%3E%0A%29%29%3B%0Athis.type%20%3D%20%22menu%22%3B%0Athis.orient%20%3D%20%22horizontal%22%3B%0Athis.insertText%20%3D%20function%28str%29%20%7B%0A%20%20%20%20var%20command%20%3D%20%22cmd_insertText%22%3B%0A%20%20%20%20var%20controller%20%3D%20document.commandDispatcher.getControllerForCommand%28command%29%3B%0A%20%20%20%20if%28controller%20%26%26%20controller.isCommandEnabled%28command%29%29%20%7B%0A%20%20%20%20%20%20%20%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%0A%20%20%20%20%20%20%20%20%20%20%20%20.createInstance%28Components.interfaces.nsICommandParams%29%3B%0A%20%20%20%20%20%20%20%20params.setStringValue%28%22state_data%22%2C%20str%29%3B%0A%20%20%20%20%20%20%20%20controller.doCommandWithParams%28command%2C%20params%29%3B%0A%20%20%20%20%7D%0A%7D%3B%0Afunction%20parseFromXML%28xml%29%20%7B%0A%20%20%20%20var%20pp%20%3D%20XML.prettyPrinting%3B%0A%20%20%20%20XML.prettyPrinting%20%3D%20false%3B%0A%20%20%20%20var%20elt%20%3D%20new%20DOMParser%28%29.parseFromString%28xml.toXMLString%28%29%2C%20%22application/xml%22%29.documentElement%3B%0A%20%20%20%20XML.prettyPrinting%20%3D%20pp%3B%0A%20%20%20%20return%20elt%3B%0A%7D%0Avar%20that%20%3D%20this%3B%0Athis.hideDropMarker%20%3D%20function%28%29%20%7B%0A%20%20var%20dropMarker%20%3D%20document.getAnonymousElementByAttribute%28that%2C%20%22class%22%2C%20%22toolbarbutton-menu-dropmarker%22%29%3B%0A%20%20if%20%28dropMarker%29%20%7B%0A%20%20%20%20dropMarker.setAttribute%28%22hidden%22%2C%20%22true%22%29%3B%0A%20%20%7D%20else%20%7B%0A%20%20%20%20setTimeout%28that.hideDropMarker%2C%2010%29%3B%0A%20%20%7D%0A%7D%0Athis.hideDropMarker%28%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%3Clabel%3E%20%0Aid%20%3D%20%3Cid%3E%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

Код:

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

Выделить код

Код:

/*Initialization Code*/
this.appendChild(parseFromXML(
    <menupopup xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
        oncommand="this.parentNode.insertText(event.target.getAttribute('cb_text'));">
 <menu label="Эмоция">
            <menupopup>
        <menuitem cb_text="(n_n)" label="(n_n)улыбка" />
        <menuitem cb_text="(^_^)" label="(^_^)радость" />
        <menuitem cb_text="(<_>)" label="(<_>)грусть" />
        <menuitem cb_text="(v_v)" label="(v_v)грусть" />
        <menuitem cb_text="(^ ^)" label="(^ ^)улыбка через силу" />
        <menuitem cb_text="(>_<)" label="(>_<)злость/категоричность" />
        <menuitem cb_text="(>_>)" label="(>_>)скептичность" />
        <menuitem cb_text="(<_<)" label="(<_<)скептичность" />
        <menuitem cb_text="(-_-¨)" label="(-_-¨)сконфуженность" />
        <menuitem cb_text="^_^¨" label="^_^¨смущённость" />
        <menuitem cb_text="*^_^*" label="*^_^*смущенность с покраснением" /> 
        <menuitem cb_text="(-_-#)" label="(-_-#)ярость" />
        <menuitem cb_text="(-_-¤)" label="(-_-¤)ярость" />
        <menuitem cb_text="(-_-+)" label="(-_-+)ярость" />
        <menuitem cb_text="(o_o)" label="(o_o)удивление" />
        <menuitem cb_text="(0_0)" label="(0_0)сильное удивление" />
        <menuitem cb_text="(O_o)" label="(O_o)очень сильное удивление" />
        <menuitem cb_text="(o_O)" label="(o_O)очень сильное удивление" />
        <menuitem cb_text="(V_v)" label="(V_v)неприятное удивление" />
        <menuitem cb_text="(@_@)" label="(@_@)обалдение" />
        <menuitem cb_text="(%_%)" label="(%_%)усталость глаз" />
        <menuitem cb_text="(u_u)" label="(u_u)депрессия" />
        <menuitem cb_text="(>x<!)" label="(>x<!)черт!" />
        <menuitem cb_text="8(>_<)8" label="8(>_<)8ревнивый" />
        <menuitem cb_text="(>>)" label="(>>)косой взгляд, недоверие" />
        <menuitem cb_text="(0_<)" label="(0_<)нервный тик" />
        <menuitem cb_text="(*_*)" label="(*_*)фанатение" />
        <menuitem cb_text="-__-" label="-__-флегматичность/«мда-а-а…»" />
        <menuitem cb_text="(9_9)" label="(9_9)не спал всю ночь" />
        <menuitem cb_text="=__=" label="=__=сонный или «достали…»" />
        <menuitem cb_text="(-.-)Zzz." label="(-.-)Zzz.спящий" />
        <menuitem cb_text="(-_-)Zzz." label="(-_-)Zzz.спящий" />
        <menuitem cb_text="(-_-;)" label="(-_-;)болезненность" />
        <menuitem cb_text="(Х_х)" label="(Х_х)труп" />
        <menuitem cb_text="(+_+)" label="(+_+)труп" />
        <menuitem cb_text="(х_х)" label="(х_х)труп" />
          </menupopup>
             </menu>
 <menu label="Действие">
            <menupopup>
        <menuitem cb_text="(^_~)" label="(^_~)подмигивать" />
        <menuitem cb_text="(^_-)" label="(^_-)подмигивать" />
        <menuitem cb_text="(;_;)" label="(;_;)плакать" />
        <menuitem cb_text="(T_T)" label="(T_T)плакать" />
        <menuitem cb_text="(TT.TT)" label="(TT.TT)плакать" />
        <menuitem cb_text="(ToT)" label="(ToT)плакать" />
        <menuitem cb_text="Q__Q" label="Q__Qплакать" />
        <menuitem cb_text="=X=" label="=X=рукопожатие" />
        <menuitem cb_text="^}{^" label="^}{^любовь" />
        <menuitem cb_text="(^3^)" label="(^3^)поцелуй" />
          </menupopup>
             </menu>
 <menu label="Персонаж">
            <menupopup>
        <menuitem cb_text="(=^.^=)" label="(=^.^=)кошка(ня)" />
        <menuitem cb_text="=^_^=" label="=^_^=кошка(ня)" />
        <menuitem cb_text="(O,o)" label="(O,o)сова" />
        <menuitem cb_text="^..^" label="^..^свинья" />
        <menuitem cb_text="///_Т" label="///_Тэмо-кид" />
        <menuitem cb_text="T_\\\" label="T_\\\эмо-кид" />
        <menuitem cb_text="///_^" label="///_^эмо-кид" />
        <menuitem cb_text="^_\\\" label="^_\\\эмо-кид" />
        <menuitem cb_text="(¨\(о_О)/¨)" label="(¨\(о_О)/¨)Медвед/«Превед!»" />
        <menuitem cb_text="(jIj)" label="(jIj)Ктулху" />
        <menuitem cb_text="(;,;)" label="(;,;)Ктулху" />
        <menuitem cb_text="(o,.,O)" label="(o,.,O)Ктулху" />
        <menuitem cb_text="Y(O,,,,O)Y" label="Y(O,,,,O)YКтулху" />
        <menuitem cb_text="(x(x_(x_x(О_о)x_x)_x)x)" label="(x(x_(x_x(О_о)x_x)_x)x)живой среди зомби" />
        <menuitem cb_text="(-(-_(-_-(О_о)-_-)_-)-)" label="(-(-_(-_-(О_о)-_-)_-)-)проснулся в метро" />
        <menuitem cb_text="@-_-@" label="@-_-@овен, барашка" />
          </menupopup>
             </menu>
    </menupopup>
));
this.type = "menu";
this.orient = "horizontal";
this.insertText = function(str) {
    var command = "cmd_insertText";
    var controller = document.commandDispatcher.getControllerForCommand(command);
    if(controller && controller.isCommandEnabled(command)) {
        controller = controller.QueryInterface(Components.interfaces.nsICommandController);
        var params = Components.classes["@mozilla.org/embedcomp/command-params;1"]
            .createInstance(Components.interfaces.nsICommandParams);
        params.setStringValue("state_data", str);
        controller.doCommandWithParams(command, params);
    }
};
function parseFromXML(xml) {
    var pp = XML.prettyPrinting;
    XML.prettyPrinting = false;
    var elt = new DOMParser().parseFromString(xml.toXMLString(), "application/xml").documentElement;
    XML.prettyPrinting = pp;
    return elt;
}
var that = this;
this.hideDropMarker = function() {
  var dropMarker = document.getAnonymousElementByAttribute(that, "class", "toolbarbutton-menu-dropmarker");
  if (dropMarker) {
    dropMarker.setAttribute("hidden", "true");
  } else {
    setTimeout(that.hideDropMarker, 10);
  }
}
this.hideDropMarker();

Прокрутка страницы( Firefox 3.6+ )
Даёт возможность прокрутить страницу налево или направо до края и прокрутить страницу верх в самое начало или вниз до конца. Колёсиком мыши на кнопке можно прокручивать страницу верх - вниз, скорость прокрутки можно менять в коде инициализации кнопки.

ЛКМ => Прокрутить страницу налево до края,
Длинный ЛКМ => Прокрутить страницу на самый вверх,
СКМ => Контекстное меню кнопки,
ПКМ => Прокрутить страницу направо до края,
Длинный ПКМ => Прокрутить страницу на самый вниз,
Колёсиком мыши => Прокручивать страницу верх - вниз.

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

Выделить код

Код:

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%u0440%u043E%u043A%u0440%u0443%u0442%u043A%u0430%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u044B%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/x-icon%3Bbase64%2CAAABAAEAFBIAAAEAIAAQBgAAFgAAACgAAAAUAAAAJAAAAAEAIAAAAAAA6AUAAAAAAAAAAAAAAAAAAAAAAAD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A+Pj4DP///wCRkZGwmJiYpfLy8hT///8A/Pz8BPz8/AT///8A8vLyFJiYmKWRkZGw////APj4+Az///8A////AP///wD///8A////AP///wD4+PgM////AJGRkbCYmJil8vLyFP///wD8/PwE/Pz8BP///wDy8vIUmJiYpZGRkbD///8A+Pj4DP///wD///8A////AP///wD///8A+vr6Cf///wClpaWVOzs7/52dnYv8/PwJ////AP39/QT9/f0E////APz8/AmdnZ2LOzs7/6WlpZX///8A+vr6Cf///wD///8A/f39AP///wB9fX0JVFRUAF5eXpVfX1//aGhoi0tLSwl9fX0A7u7uBO7u7gR9fX0AS0tLCWhoaItfX1//Xl5elVRUVAB9fX0J////AP39/QD9/f0A////B319fQBUVFS5Xl5e/19fX/9oaGjzS0tL/319fcDu7u4f7u7uH319fcBKSkr/ampq81xcXP9TU1P/jIyMuf///wD7+/sH////AP39/QD///8HfX19AFRUVLleXl7/X19f/2hoaPNLS0v/fX19wO7u7h/u7u4ffX19wEpKSv9qamrzXFxc/1NTU/+MjIy5////APv7+wf///8A/f39Av///wB9fX3RVFRU/15eXv1fX1//aGho9EtLS/99fX3A7u7uH+7u7h99fX3AS0tL/2hoaPRfX1//Xl5e/VRUVP99fX3R////AP39/QL9/f0C////AH19fdFUVFT/Xl5e/V9fX/9oaGj0S0tL/319fcDu7u4f7u7uH319fcBLS0v/aGho9F9fX/9eXl79VFRU/319fdH///8A/f39Av39/QD///8HfX19AFRUVLleXl7/X19f/2hoaPNLS0v/fX19wO7u7h/u7u4ffX19wEpKSv9qamrzXFxc/1NTU/+MjIy5////APv7+wf///8A/f39AP///wd9fX0AVFRUuV5eXv9fX1//aGho80tLS/99fX3A7u7uH+7u7h99fX3ASkpK/2pqavNcXFz/U1NT/4yMjLn///8A+/v7B////wD9/f0A////AH19fQlUVFQAXl5elV9fX/9oaGiLS0tLCX19fQDu7u4E7u7uBH19fQBKSkoJampqi1xcXP9TU1OVjIyMAP///wn7+/sA////AP39/QD///8AfX19CVNTUwBoaGiVR0dH/6CgoIv6+voJ////AP39/QT9/f0E////APr6+gmioqKLRUVF/11dXZWLi4sA////Cfv7+wD///8A////AP///wD///8A+Pj4DP///wCRkZGwmJiYpfLy8hT///8A/Pz8BPz8/AT///8A8vLyFJiYmKWRkZGw////APj4+Az///8A////AP///wD///8A////AP///wD4+PgM////AJGRkbCYmJil8vLyFP///wD8/PwE/Pz8BP///wDy8vIUmJiYpZGRkbD///8A+Pj4DP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%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........%0Aself.onclick%20%3D%20this.onmousedown%20%3De%3D%3E%20%7B%0A%0A%20%20%20if%20%28%20e.type%20%3D%3D%20%27mousedown%27%20%26%26%20%21e.button%20%29%20%20%20%20%20%20//%20%u0434%u043B%u0438%u043D%u043D%u044B%u0439%20%u043B%u0435%u0432%u044B%u0439%20%u043A%u043B%u0438%u043A%0A%20%20%20%20%20%20%20%20self.taimer%20%3D%20setTimeout%28%28%29%3D%3E%20%7B%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20delete%20self.taimer%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20goDoCommand%28%27cmd_scrollTop%27%29%3B%0A%20%20%20%20%20%20%20%20%7D%2C%20500%29%3B%0A%20%20%20%20%20%20%20%20%0A%20%20%20if%20%28%20e.type%20%3D%3D%20%27mousedown%27%20%26%26%20e.button%20%3D%3D%202%20%29%20%20//%20%u0434%u043B%u0438%u043D%u043D%u044B%u0439%20%u043F%u0440%u0430%u0432%u044B%u0439%20%u043A%u043B%u0438%u043A%0A%20%20%20%20%20%20%20%20self.taimer%20%3D%20setTimeout%28%28%29%3D%3E%20%7B%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20delete%20self.taimer%3B%0A%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20goDoCommand%28%27cmd_scrollBottom%27%29%3B%0A%20%20%20%20%20%20%20%20%7D%2C%20500%29%3B%0A%20%20%20%20%20%20%20%20%0A%20%20%20if%20%28%20e.button%20%3D%3D%201%20%29%20gShowPopup%28this%29%3B%20%20%20%20%20%20%20%20%20//%20%u0441%u0440%u0435%u0434%u043D%u0438%u0439%20%u043A%u043B%u0438%u043A%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%0A%20%20%20if%20%28%20e.type%20%3D%3D%20%27click%27%20%26%26%20self.taimer%20%29%20%7B%20%20%20%20%20%20//%20%u043B%u0435%u0432%u044B%u0439%20%u043A%u043B%u0438%u043A%0A%20%20%20%20%20%20%20%20clearTimeout%28self.taimer%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20content.scrollTo%280%2C%20content.scrollY%29%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%0A%20%20%20if%20%28%20e.type%20%3D%3D%20%27click%27%20%26%26%20e.button%20%3D%3D%202%20%29%20%7B%20%20%20%20//%20%u043F%u0440%u0430%u0432%u044B%u0439%20%u043A%u043B%u0438%u043A%0A%20%20%20%20%20%20%20%20e.preventDefault%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20content.scrollTo%28content.scrollMaxX%2C%20content.scrollY%29%3B%0A%20%20%20%20%20%20%20%20%7D%0A%7D%3B%0A%0A%0A//%20%u041A%u043E%u043B%u0451%u0441%u0438%u043A%u043E%u043C%20%u043C%u044B%u0448%u0438%20%u043D%u0430%20%u043A%u043D%u043E%u043F%u043A%u0435%20%u043F%u0440%u043E%u043A%u0440%u0443%u0447%u0438%u0432%u0430%u0442%u044C%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u0443%20%u0432%u0435%u0440%u0445%20-%20%u0432%u043D%u0438%u0437%20........%0Avar%20speed%20%3D%2014%3B%20//%20%u0441%u043A%u043E%u0440%u043E%u0441%u0442%u044C%20%u043F%u0440%u043E%u043A%u0440%u0443%u0442%u043A%u0438%0Athis.onwheel%20%3De%3D%3E%20e.deltaY%20%3C%200%20%3F%20content.scrollBy%280%2C%20-speed%29%20%3A%20content.scrollBy%280%2C%20speed%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........%0Athis.tooltipText%20%3D%20%22%u041B%3A%20%u041F%u0440%u043E%u043A%u0440%u0443%u0442%u0438%u0442%u044C%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u0443%20%u043D%u0430%u043B%u0435%u0432%u043E%20%5Cn%u0414%u041B%3A%20%u041F%u0440%u043E%u043A%u0440%u0443%u0442%u0438%u0442%u044C%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u0443%20%u0432%u0432%u0435%u0440%u0445%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5Cn%u041F%3A%20%u041F%u0440%u043E%u043A%u0440%u0443%u0442%u0438%u0442%u044C%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u0443%20%u043D%u0430%u043F%u0440%u0430%u0432%u043E%20%5Cn%u0414%u041F%3A%20%u041F%u0440%u043E%u043A%u0440%u0443%u0442%u0438%u0442%u044C%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u0443%20%u0432%u043D%u0438%u0437%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5Cn%u041A%u043E%u043B%u0451%u0441%u0438%u043A%u043E%u043C%20%u043C%u044B%u0448%u0438%20%u043D%u0430%20%u043A%u043D%u043E%u043F%u043A%u0435%20%u043C%u043E%u0436%u043D%u043E%20%u043F%u0440%u043E%u043A%u0440%u0443%u0447%u0438%u0432%u0430%u0442%u044C%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u0443%20%u0432%u0435%u0440%u0445%20-%20%u0432%u043D%u0438%u0437%22%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

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

Выделить код

Код:

// Настройка функций кликов мыши для кнопки ........
self.onclick = this.onmousedown =e=> {

   if ( e.type == 'mousedown' && !e.button )      // длинный левый клик
        self.taimer = setTimeout(()=> {         
           delete self.taimer;

           goDoCommand('cmd_scrollTop');
        }, 500);
        
   if ( e.type == 'mousedown' && e.button == 2 )  // длинный правый клик
        self.taimer = setTimeout(()=> {         
           delete self.taimer;
           
           goDoCommand('cmd_scrollBottom');
        }, 500);
        
   if ( e.button == 1 ) gShowPopup(this);         // средний клик           
        
   if ( e.type == 'click' && self.taimer ) {      // левый клик
        clearTimeout(self.taimer);
                  
        content.scrollTo(0, content.scrollY);
        }
 
   if ( e.type == 'click' && e.button == 2 ) {    // правый клик
        e.preventDefault();
          
        content.scrollTo(content.scrollMaxX, content.scrollY);
        }
};


// Колёсиком мыши на кнопке прокручивать страницу верх - вниз ........
var speed = 14; // скорость прокрутки
this.onwheel =e=> e.deltaY < 0 ? content.scrollBy(0, -speed) : content.scrollBy(0, speed);


// Подсказка для кнопки ........
this.tooltipText = "Л: Прокрутить страницу налево \nДЛ: Прокрутить страницу вверх\
                    \nП: Прокрутить страницу направо \nДП: Прокрутить страницу вниз\
                    \nКолёсиком мыши на кнопке можно прокручивать страницу верх - вниз";

BB: Color Menu ( Firefox24 + ) от 13.01.2015.
Кнопка открывает меню с подборкой BB цветов(кодов) для форумов. Выделите текст в поле текстового ввода и нажмите в меню нужный цвет.

Пример как добавлять новые цвета в кнопку:
Добавляем в кнопку новый пункт Neon Green за White
В коде инициализации добавляем за:

Выделить код

Код:

"#ffffff,White",

новую строку:

Выделить код

Код:

"#affe31,Neon Green",

Нажать Ok или Сохранить


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

Выделить код

Код:

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%3EBB%3A%20Color%20Menu%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAADU0lEQVR4Xk3OW0ybBRyH4fc7lLZQyqGwclqLG5hFbvCAxpvFEBPkwkkWFo3ZlW43CxckapZ44Y0XvXAbFwaSiWJGoiFzHjKzicJ0w4XJQZfpaORQDqVdO6At9GP03L9NRtQ3efK7/SmXLD+RR4jqxUS1A+xZnaURq/2VrFM5ul1Mc4kbKppYdDQyUV7PqLUSw1wFajmIAir/pgB5t0mX86XFuYsq9CQTdERidGzE6InscTEP53UVt/BfqoJGARnZa6su08cP1xafdtVqFTXVUFsDNjukNVgyqJiMcjquMm7TacsLiICakgjxXMhVby8eaXM1NjXWFeGqU3C7wH0QGhvhiUPQ4IJMKfycpilaxEi5CZfFBHjUD2wD1o8Hg8/GJdQlcv+UyO2zIlc9Ip+cEzn3qYjnmsjZKZFT8yIdD0W6EjkZkezgFUna1KSEO5+sqDxR5zBRZc/Q4ICDNeCqL3CD2wX1BTUN4KgTDlQniFk28RI5AXudXLC83b/81GWR1+ZFzgREPHFJDWclOiYyPyNyd1XkRlxkOJMRj0TljCxLh8zKyYIhWenns7KTo8ZzQyLdP4r0Tor0eUW+CYn8kZCIb1du/HZXJhOb8p2EpE/+lF6ZkC75Vjrlsnwk06NqTrbIyDoQ2OeH/CqoAfL4mZu+hX/8FsbGPVSCwDoKQdKFfcQGaiQZ8AV3vZBdg/QKJHyPN71KlTNFy9NOaq1OlOkt4lteUvhIFpQQQ8PwqUbm4c2F2P0dHi3AoyXIBkAJgVZQeNL6vMIDZZbm8iPUzdhRtsNk8WMhthPFf1PVxPhhLrr8VXD7b9A3920AQcitYikKc+SlPX5Pf02r4xkq+ysoGjMoIzMcz65f13U9tZsR+fD7sK/9zRbrIbtZAS0N7IKYyAMmNY27Pcn1oS/4/MIVLC0KL4Rf9B22NSVVNEE34V9PGG986Z1bCkaXQQ2DHgQtgMpjOg/Qjk7R8lZZ3vfrGtf6Ro/fGZuqUdnPrDMTNOIvX7rjHbx6+15sYWme7cgKqZSfaGyNgH8pZpj/Gmg/3tr5bs/7A73v9Xq6X+8O6fwvk8ZaMpt9Z3ZxY2wxuXPUETQ3mxt0wuQW4yW5iV1natShmIxjrx77xVZdlEmn0/wDi3q+iH+UAK0AAAAASUVORK5CYII%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........................%0Athis._handleClick%20%3D%28%29%3D%3E%20menuPopup.showPopup%28this%2C%20-1%2C%20-1%2C%20%22popup%22%2C%20%22bottomleft%22%2C%20%22topleft%22%29%3B%20%0A%0A%0A//%20%u0421%u043E%u0437%u0434%u0430%u0442%u044C%20%u043C%u0435%u043D%u044E%20........................%0Avar%20colors%20%3D%20%5B%0A%09%22%23000000%2CBlack%22%2C%0A%09%22%23808080%2CGray%22%2C%0A%09%22%23000066%2CD-Blue%22%2C%0A%09%22%233366ff%2CM-Blue%22%2C%0A%09%22%2333ccff%2CL-Blue%22%2C%0A%09%22%23ff0000%2CRed%22%2C%0A%09%22%23006600%2CD-Green%22%2C%0A%09%22%2333cc00%2CM-Green%22%2C%0A%09%22%2399FF99%2CL-Green%22%2C%0A%09%22%23ffff00%2CYellow%22%2C%0A%09%22%23964B00%2CBrown%22%2C%0A%09%22%23FF4F00%2COrange%22%2C%0A%09%22%23FFC0CB%2CPink%22%2C%0A%09%22%23ffffff%2CWhite%22%2C%0A%09%0A%20%20%20%09%22separator%22%2C%0A%0A%09%22%23006600%2Csome%201%22%2C%0A%09%22%23ff0000%2Csome%202%22%2C%0A%09%22%23e30077%2Csome%203%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%5D%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%0Avar%20menuPopup%20%3D%20self.appendChild%28document.createElement%28%22menupopup%22%29%29%3B%0Acolors.forEach%28%28str%29%3D%3E%20%7B%20%0A%20%20%20if%20%28%20str%20%3D%3D%20%22separator%22%20%29%20%7B%20menuPopup.appendChild%28document.createElement%28%22menuseparator%22%29%29%3B%20return%20%7D%3B%0A%20%20%20var%20color%20%3D%20str.split%28%22%2C%22%29%5B0%5D%2C%20label%20%3D%20str.split%28%22%2C%22%29%5B1%5D%2C%0A%20%20%20mItem%20%3D%20document.createElement%28%22menuitem%22%29%3B%0A%20%20%20mItem.setAttribute%28%22label%22%2C%20label%29%3B%0A%20%20%20mItem.setAttribute%28%22class%22%2C%20%22menuitem-iconic%22%29%3B%0A%20%20%20mItem.onclick%20%3D%28%29%3D%3E%20insertBBcode%28color%29%3B%20%0A%20%20%20menuPopup.appendChild%28mItem%29%3B%0A%20%20%20%0A%20%20%20//%20%u0434%u043B%u044F%20%u0441%u043E%u0437%u0434%u0430%u043D%u0438%u044F%20%u0446%u0432%u0435%u0442%u043D%u044B%u0445%20%u0438%u043A%u043E%u043D%u043E%u043A%20%u0432%20%u043C%u0435%u043D%u044E%20%u0434%u043E%u0431%u0430%u0432%u043B%u044F%u0435%u043C%20CSS%20%u043A%u043E%u0434%20%u043A%20%u0432%u0441%u0435%u043C%20%u043F%u0443%u043D%u043A%u0442%u0430%u043C%20%u043C%u0435%u043D%u044E%20....%0A%20%20%20%28function%28css%29%20%7B%0A%20%20%20%20%20%20var%20pi%20%3D%20document.createProcessingInstruction%28%27xml-stylesheet%27%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%27type%3D%22text/css%22%20href%3D%22data%3Atext/css%3Butf-8%2C%27%20+%20encodeURIComponent%28css%29%20+%20%27%22%27%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%20document.insertBefore%28pi%2C%20document.documentElement%29%3B%20%20%20%0A%20%20%20%20%7D%29%28%27menuitem%5Blabel%3D%22%27%20+%20label%20+%20%27%22%5D%3E%20.menu-iconic-left%20%3E%20.menu-iconic-icon%20%7B%20background-color%3A%27%20+%20color%20+%20%27%21important%3B%7D%27%29%3B%0A%20%20%20%0A%7D%29%3B%0AmenuPopup.setAttribute%28%22onclick%22%2C%20%22event.stopPropagation%28%29%22%29%3B%0A%0A%0A//%20%u0414%u043E%u0431%u0430%u0432%u0438%u0442%u044C%20bb%20%u043A%u043E%u0434%20%u0432%20%u0442%u0435%u043A%u0441%u0442%u043E%u0432%u043E%u0435%20%u043F%u043E%u043B%u0435%20........................%0Afunction%20insertBBcode%28color%29%20%7B%0A%20%20%20var%20textBox%20%3D%20document.commandDispatcher.focusedElement%3B%0A%20%20%20var%20text%20%3D%20textBox.value.substring%28textBox.selectionStart%2C%20textBox.selectionEnd%29%3B%0A%20%20%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%20var%20controller%20%3D%20controller.QueryInterface%28Ci.nsICommandController%29%3B%0A%20%20%20var%20params%20%3D%20Cc%5B%22@mozilla.org/embedcomp/command-params%3B1%22%5D.createInstance%28Ci.nsICommandParams%29%3B%0A%20%20%20params.setStringValue%28%22state_data%22%2C%20%22%5Bcolor%3D%22%20+%20color%20+%20%22%5D%22%20+%20text%20+%20%22%5B/color%5D%22%29%3B%0A%20%20%20controller.doCommandWithParams%28cmd%2C%20params%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

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

Выделить код

Код:

// Настройка функций кликов мыши ........................
this._handleClick =()=> menuPopup.showPopup(this, -1, -1, "popup", "bottomleft", "topleft"); 


// Создать меню ........................
var colors = [
    "#000000,Black",
    "#808080,Gray",
    "#000066,D-Blue",
    "#3366ff,M-Blue",
    "#33ccff,L-Blue",
    "#ff0000,Red",
    "#006600,D-Green",
    "#33cc00,M-Green",
    "#99FF99,L-Green",
    "#ffff00,Yellow",
    "#964B00,Brown",
    "#FF4F00,Orange",
    "#FFC0CB,Pink",
    "#ffffff,White",
    
       "separator",

    "#006600,some 1",
    "#ff0000,some 2",
    "#e30077,some 3"
            ];
                        
var menuPopup = self.appendChild(document.createElement("menupopup"));
colors.forEach((str)=> { 
   if ( str == "separator" ) { menuPopup.appendChild(document.createElement("menuseparator")); return };
   var color = str.split(",")[0], label = str.split(",")[1],
   mItem = document.createElement("menuitem");
   mItem.setAttribute("label", label);
   mItem.setAttribute("class", "menuitem-iconic");
   mItem.onclick =()=> insertBBcode(color); 
   menuPopup.appendChild(mItem);
   
   // для создания цветных иконок в меню добавляем CSS код к всем пунктам меню ....
   (function(css) {
      var pi = document.createProcessingInstruction('xml-stylesheet',
              'type="text/css" href="data:text/css;utf-8,' + encodeURIComponent(css) + '"');
               return document.insertBefore(pi, document.documentElement);   
    })('menuitem[label="' + label + '"]> .menu-iconic-left > .menu-iconic-icon { background-color:' + color + '!important;}');
   
});
menuPopup.setAttribute("onclick", "event.stopPropagation()");


// Добавить bb код в текстовое поле ........................
function insertBBcode(color) {
   var textBox = document.commandDispatcher.focusedElement;
   var text = textBox.value.substring(textBox.selectionStart, textBox.selectionEnd);
  
   var cmd = "cmd_insertText";
   var controller = document.commandDispatcher.getControllerForCommand(cmd);
   var controller = controller.QueryInterface(Ci.nsICommandController);
   var params = Cc["@mozilla.org/embedcomp/command-params;1"].createInstance(Ci.nsICommandParams);
   params.setStringValue("state_data", "[color=" + color + "]" + text + "[/color]");
   controller.doCommandWithParams(cmd, params);
};


Спасибо Dumby за помощь с кнопкой.

userChrome.css ( Firefox 3.6+ )
открывает файл userChrome.css в внешнем текстовом редакторе по умолчанию.

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

Выделить код

Код:

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%3EuserChrome.css%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%0A%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5Bvar%20file%20%3D%20Components.classes%5B%22@mozilla.org/file/directory_service%3B1%22%5D.getService%28Components.interfaces.nsIProperties%29.get%28%22UChrm%22%2C%20Components.interfaces.nsIFile%29%3B%20%0Afile.append%28%22userChrome.css%22%29%3B%20%20%20%20%20%0Afile.launch%28%29%3B%0A%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

Код:

Выделить код

Код:

var file = Components.classes["@mozilla.org/file/directory_service;1"].getService(Components.interfaces.nsIProperties).get("UChrm", Components.interfaces.nsIFile); 
file.append("userChrome.css");     
file.launch();


userContent.css ( Firefox 3.6+ )
открывает файл userContent.css в внешнем текстовом редакторе по умолчанию.
скрытый текст
Код кнопки:

Выделить код

Код:

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%3EuserContent.css%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAM08tJDdQK3IgOROtHzcSuyY9Gb00Sii3PlMyrUVZOZ1HWjuDQ1c3ZjdNKj5FWjomTWZAEICAgAIAAAAAAAAAAHqoeoHo7OH/9fTr/+jq4P/Eybv7q7Oj95Sfi/NufWPrUWRH3yQ7F8soPxuxTV9BdktjRiJmZmYIAAAAAAAAAAChx6DP8PfK////1f///9n////d////4v///+b////r////7/////P/jZqH6UZZPZlIXEQyUV5RDkBAgAIAAAAAocegz/D3zf/w+sX/7fnE//z+3f///+X////q////7v////L////2/5ehkfNAUjmrO0k+SDc9QyIwMEAMAAAAAKHHoM/w99D/8PrH/+35x//y+tP/8/vZ//3+6v////D////1////+f+Tno73KjcswSo2NIErMTxeKzE9IgAAAAChx6DP8PfS//L6z//w+s//7PjN/9jytf/n983/v9Cx/+353f9NFZX/OidU+ygxNu0rLkLdKDMsqSgyMkIAAAAAocegz/D31P/h9bn/2/Oz/930uf/n98z/0NXG/18Oof9sP6f/tjnp/20gpv9XGJr/bSma/SUzIs8nMDKDAAAAAKHHoM/w99j/yO2Y/73piv/Z8rb/1fGy/72h1/++T/L/sD3k/7U36P+nJ9v/pRzZ/5wty/8vKkzrKjIspQAAAAChx6DP8Pfa/+H1vf/b87f/3vS///D63f9sFKr/vk7y/7tE7v+rU8//gS+q/4sNxv+OCMT/dSWf+zAyMZsAAAAAocegz/D33f///+z////v////9P/9+vj/0HT7/8JR9f/HZPH/qqqq/1dEYf+RDcr/ngnR/6k30/U0NDRGAAAAAKHHoM/w99//8PrY/+351v/t+dr/7fne//z++f+oQOH/xWLw/6qqqv9dRmb/phrZ/4gqrd1BN0ZoPTdDJAAAAAChx6DP8Pfi////8v////b/9fvr//P76v/9/vv/47D5/82g4f+EiX//Zl9o/5wyyul6M5mBQTxBKEc5VQ4AAAAAosihzfD35P/w+t7/7fnd/+354P/t+eH//P76////////////7O/q/3B5a/NBVTihQVM5OFFRRhIzZmYEAAAAAKTKo8vW7M//s2rM/9Dqz//Jrdj/tM64/+zb8v/Qut3/+vf8/+jg7v+cppjrPVM0iUJXOChGXUYIAAAAAAAAAAC30bebeGmL/4kzqP+Fh5T/lym1/2yjc/+Vaq7/lqWh/6Z9uP+cS7j/bodw3TFBLE44UDAaK1UrBAAAAAAAAAAAAAAAAJEbn3CFFpMwjRqej5UcplCZHqy/mR6sgZ0pr7+bHq2vmjKnzwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%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%0A%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5Bvar%20file%20%3D%20Components.classes%5B%22@mozilla.org/file/directory_service%3B1%22%5D.getService%28Components.interfaces.nsIProperties%29.get%28%22UChrm%22%2C%20Components.interfaces.nsIFile%29%3B%20%0Afile.append%28%22userContent.css%22%29%3B%20%20%20%20%20%0Afile.launch%28%29%3B%0A%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

Код:

Выделить код

Код:

var file = Components.classes["@mozilla.org/file/directory_service;1"].getService(Components.interfaces.nsIProperties).get("UChrm", Components.interfaces.nsIFile); 
file.append("userContent.css");     
file.launch();


Предварительно эти файлы должны быть созданы пользователем.

Просмотр и сохранение иконок сайтов(Firefox3.6-5.0)
При нажатии на кнопку любой клавишей мыши открывается меню: Показать иконку сайта - иконка кнопки заменяется на иконку текущего сайта
Сохранить иконку сайта - Появляется диалог сохранения, в котором следует указать место сохранения и название иконки. После этого происходит сохранение. Восстановить иконку кнопки - первоначальный вид иконки кнопки. Меню - контекстное меню кнопки. Важно: Если уже установлена любая другая кнопка, сохраняющая иконку сайта, то работать не будет до удаления этой(другой) кнопки и перезапуска браузера.

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

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3E%u041F%u0440%u043E%u0441%u043C%u043E%u0442%u0440%20%u0438%20%u0441%u043E%u0445%u0440%u0430%u043D%u0435%u043D%u0438%u0435%20%u0438%u043A%u043E%u043D%u043E%u043A%20%u0441%u0430%u0439%u0442%u043E%u0432%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QAAAAAAAD5Q7t/AAAACXBIWXMAAABIAAAASABGyWs+AAAACXZwQWcAAAAQAAAAEABcxq3DAAADMklEQVQ4y22SS2hcZRzFz/e4r5k7rySTJs3EajVtbDomtBpKRKiFYretz4VuFDfFpYhuxI3rplRBSqGGVgtuAtXaLFUEkSJiM0mjNIZhJqnDzZ2Z3Ll37vO7n4umItrf6n/gnD9ncQgewqVLC2CMEdve5o1mE6urK4mu6/Lr64v/8/IHx+cLi5iZnoRI04yuKids2zplGNq4lKn0/f7GnbU7S8XS4A+5fN5v1Df+ecAA4P0Pz6N6+AlYdmcsn8ueU1X+kdsP5sJEHsyY+cm9o6PHSsX8aSHEeN8Lb41Vxt227SBNYxAAuHxlEX4QFQ/sr1yMkuTl23cttH0NoaDwgwhpKlEpRBg2PNzb2rpqtZyzuqH25s9/DHLukwXMHjmEHcd9q+cFnzW6hD82MQmmGrC6PbRsFy1XwUbThuI1cObpTKQS8qamq1/Ulv8AnXumiuGhkiGEeLETKvzkiWPYVylB0SmoAjAVUHMcSSaDn9pDWFoJ1HzRPDPz1JPqyReeA02SGG3bPmQ7wezs0SkMFAyAElCFgmkMTGdgBodDAFow8Eu3gPW/3LlOx54QiQB1XQ/tjjPJNGOgMlKCJBKEE1CVgWkM3OBwOYWjUOglDYFhotlD2dlxDnqeB+77AWSaZplaJJwzkDgF4RRUlSCpD8eqo9ZK4Xf6kDEFaAahECwIomwoJLgQCZCm21EiEj8WnFAKxgi4SuFlsrhtlOEOE2TNGIknIH2JgplESRxtx4KAx1EMBrEsUm/zT8vZ9+hIEV2R4lY3wI9dwMoNQctKcF8g2Ikw1PewN4t6GISrMShoFMXobDbvqpF7bWW9jgvLFuZ/7+D6lgsrTEClBCUAUykyGsGzJV+asn/l9Ksv1aNwd0ifXrgImYQjQje/7DxSfb63ZwyaxkHSFAAgCIXnRxiyNjHYqC3JoP8GU7Tts++8fX/KN5e+wY2bN9zXX3uFlRP36JFy3pweMMlUjmO/kmIwcKCv18Tat181rl29PD/x+MTP733wLgDcb/AvCrqmHz88VT1enZ45UN4zWgIkWve22su//bpWW619F0XR9wB6DwIED0cDYAIwdrW/G4r+a/wbqOd9YAmWl1IAAAAldEVYdGNyZWF0ZS1kYXRlADIwMDktMDktMjhUMTE6Mjc6NTUtMDQ6MDDs/LGJAAAAJXRFWHRtb2RpZnktZGF0ZQAyMDA5LTA3LTAzVDEwOjAwOjI0LTA0OjAwYkMTwQAAAABJRU5ErkJggg%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%20Cb%20%3D%20custombuttons%3B%0Avar%20orgImg%3Dthis.image%3B%0A//%20Three%20functions%20for%20testing%2C%20this.one%28%29%20and%20this.two%28%29%20and%20this.three%28%29%0Athis.one%20%3D%20function%28%29%0A%7B%0A%09this.image%3Ddocument.getElementById%28%22page-proxy-favicon%22%29.src%3B%0A%7D%3B%0A%0Athis.two%20%3Dfunction%28%29%0A%7B%0A%09this.image%3Ddocument.getElementById%28%22page-proxy-favicon%22%29.src%3B%0A%09openUILinkIn%28this.image%2C%22save%22%29%3B%0A%7D%3B%0A%0Athis.three%20%3Dfunction%28%29%0A%7B%0A%09this.image%3DorgImg%3B%0A%7D%3B%0A//%20Our%20menu%20items%0Athis.ss%20%3D%20%5B%0A%20%20%7B%20label%3A%20%27%u041F%u043E%u043A%u0430%u0437%u0430%u0442%u044C%20%u0438%u043A%u043E%u043D%u043A%u0443%20%u0441%u0430%u0439%u0442%u0430%27%2C%20cmd%3A%20%27document.popupNode.one%28%29%27%2C%20sItemId%3A%20%27%27%20%7D%2C%0A%20%20%7B%20label%3A%20%27%u0421%u043E%u0445%u0440%u0430%u043D%u0438%u0442%u044C%20%u0438%u043A%u043E%u043D%u043A%u0443%20%u0441%u0430%u0439%u0442%u0430%27%20%20%2C%20cmd%3A%20%27document.popupNode.two%28%29%27%2C%20sItemId%3A%20%27%27%20%7D%2C%0A%20%20%7B%20label%3A%20%27%u0412%u043E%u0441%u0441%u0442%u0430%u043D%u043E%u0432%u0438%u0442%u044C%20%u0438%u043A%u043E%u043D%u043A%u0443%20%u043A%u043D%u043E%u043F%u043A%u0438%27%20%20%2C%20cmd%3A%20%27document.popupNode.three%28%29%27%2C%20sItemId%3A%20%27%27%20%7D%5D%3B%0A%0A//%20Our%20Initialization%20function%20for%20creating%20the%20context%20menu%2C%20setting%20up%20menuitems%20and%20telling%0A//%20custombuttons2%20extension%20to%20put%20cb%20context%20in%20a%20submenu%0Athis.mObj%20%3D%20Cb.getCbContextObj%28this%29%3B%0Athis.init%20%3D%20function%28x%29%20%7B%0A%20%20x.mObj.setSub%28%29%3B%0A%20%20var%20nItem%20%3D%20%7B%7D%2C%20mItem%20%3D%20%7B%7D%3B%0A%20%20document.getElementById%28CB2const.sCBCtxtMenu%29.setAttribute%28%22oncommand%22%2C%20%22event.stopPropagation%28%29%22%29%3B%0A%20%20for%28var%20i%20in%20x.ss%29%20%7B%0A%20%20%20%20nItem%20%3D%20new%20x.mObj.getItem%28%29%3B%0A%20%20%20%20nItem.id%20%3D%20%27Note%27%3B%0A%20%20%20%20nItem.label%20%3D%20x.ss%5Bi%5D.label%3B%0A%20%20%20%20nItem.value%20%3D%20String%28i%29%3B%0A%20%20%20%20mItem%20%3D%20x.mObj.insertBefore%28nItem%20%2C%20x.mObj.oMenu.lastChild%29%3B%0A%20%20%20%20this.ss%5Bi%5D.sItemId%20%3D%20mItem.id%3B%0A%20%20%20%20mItem.setAttribute%28%27oncommand%27%2Cx.ss%5Bi%5D.cmd%29%0A%20%20%7D%0A%20%20x.mObj.getItem%28%29%3B%0A%20%20nItem%20%3D%20x.mObj.getItem%28%29%3B%0A%20%20nItem.id%20%3D%20%27Note%27%3B%0A%20%20this.separator%20%3D%20x.mObj.insertBefore%28%20nItem%20%2C%20x.mObj.oMenu.lastChild%29%3B%0A%7D%0Athis.init%28this%29%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.gShowPopup%28this%29%3B%27%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%u041B%u041A%u041C%3D%u041F%u041A%u041C%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

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

Выделить код

Код:

var Cb = custombuttons;
var orgImg=this.image;
// Three functions for testing, this.one() and this.two() and this.three()
this.one = function()
{
    this.image=document.getElementById("page-proxy-favicon").src;
};

this.two =function()
{
    this.image=document.getElementById("page-proxy-favicon").src;
    openUILinkIn(this.image,"save");
};

this.three =function()
{
    this.image=orgImg;
};
// Our menu items
this.ss = [
  { label: 'Показать иконку сайта', cmd: 'document.popupNode.one()', sItemId: '' },
  { label: 'Сохранить иконку сайта'  , cmd: 'document.popupNode.two()', sItemId: '' },
  { label: 'Восстановить иконку кнопки'  , cmd: 'document.popupNode.three()', sItemId: '' }];

// Our Initialization function for creating the context menu, setting up menuitems and telling
// custombuttons2 extension to put cb context in a submenu
this.mObj = Cb.getCbContextObj(this);
this.init = function(x) {
  x.mObj.setSub();
  var nItem = {}, mItem = {};
  document.getElementById(CB2const.sCBCtxtMenu).setAttribute("oncommand", "event.stopPropagation()");
  for(var i in x.ss) {
    nItem = new x.mObj.getItem();
    nItem.id = 'Note';
    nItem.label = x.ss[i].label;
    nItem.value = String(i);
    mItem = x.mObj.insertBefore(nItem , x.mObj.oMenu.lastChild);
    this.ss[i].sItemId = mItem.id;
    mItem.setAttribute('oncommand',x.ss[i].cmd)
  }
  x.mObj.getItem();
  nItem = x.mObj.getItem();
  nItem.id = 'Note';
  this.separator = x.mObj.insertBefore( nItem , x.mObj.oMenu.lastChild);
}
this.init(this);

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

17-06-2011 16:21:42
Ffolders+(Ubuntu) (Firefox5.0)
При нажатии на кнопку появляется меню из которого можно открыть: папку установки Firefox, папку текущего профиля, папку chrome текущего профиля, папку custombuttons текущего профиля, папку extensions текущего профиля.

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

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3EFfolders+%20%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAA7DAAAOwwHHb6hkAAADIklEQVQ4jXWSy2tcVRzHP79zzn3MI5km5tXG8TE10EiCaEWtTQuCaAW7cFFBqgi6EQRFBP8DsTsXLnRTUVxUECniC6Mo2CAuaqWtqEk176bNw0kyyczcufeec1wEl372X/h84SPzn51hcqap01azVK2YxvBQL6FtEfgMj+A9GAU/L7Rlrml6EdFGcH3lsH5itOzkwQOGI0P2bFa58/C5+eCN16rTD03uHFyeyXtWIskDEYWDfLPR6T0zvvxW7RZVVJ74/OXmh1dW7cvSW9S1z18YvjhVe6nneHjJZwsL8vrYJ0RDA8QuI3WQO4spVDjx/as8L+c93X2ysr67+eg7c/cba23sYsPp5H10ve7e7n7Fi/ZS3lqShIAst5QNbCUps6WD0mx4r10ubecAFysP6ACVhjE75UH1bPSF+bR+Uj9ZP6uuN5WSrKPqzVRJe1v9MfiI/G3ukFKUo0KlPGA8oEIlYQQZmr64wexyi6kkpms8odNuAwpcQNLYpBSlSKTRoRXvQQGoUOOjgP1Dngvrt/Lixpv8Vj2J7K6TJR0kS0gaW2RSYLE0QhxbfGgAMCBIKMRdmqszGRc7o8joISJbx9oQbzMyPLsu5nH5gVplhSwuYKIOexc8EBrKhZRfOMxHa0cJzTalqINK6ySqgvIdENgJAg7tW8XG3egw/c8ATCS0dYHT916jp/ot13e6ONb3F+P9dd6dfoD3Fo8jqkWtcgNdCnFaI6HaMwCPCgQdK5LEc+q2y0RFT952fDmZ8OvcKnIgYbcjHBmbw8QapxQqUODBIIIKxKOFoKj5c97x1Y+aSzf38Z2boN1fZbDZ4rmRWY7uX6KZR8SB39sIGJt5XKB83BPS3M189a6IiShkbXqYh51ipHKFU7UZxvo3cCZEW3zUFYi70fIuB2MdfvrCstw+0AeqIGGsZOIeOHbfTVDrYBw+EzqtAbLU4TNLsmm59tOKWIc3mZLFDyb/+SZpXX0qrJRaYVErUzAEBUMQKxyC7VhskpO1LGkrd+l2q/jx1MZkpmRJnnligHNfr/Uqxd3O74WF5/8RUIJzjt+ffqy//i8xcmhqNgdQTAAAAABJRU5ErkJggg%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*/%0A%0A%0Avar%20menu%20%3D%20%3Cmenupopup%0A%20%20xmlns%3D%22http%3A//www.mozilla.org/keymaster/gatekeeper/there.is.only.xul%22%0A%20%20onclick%3D%22this.parentNode.menuClick%28event%29%22%3E%0A%20%20%20%20%20%3Cmenuitem%0A%20%20%20%20%20%20%20class%3D%22menuitem-iconic%22%0A%20%20%20%20%20%20%20image%3D%22chrome%3A//global/skin/dirListing/folder.png%22%0A%20%20%20%20%20%20%20label%3D%22installation%20folder%22%20%20%20%20%20%20%0A%20%20%20%20%20%20%20onclick%3D%7B%22document.getElementById%28%27%22%20+%20this.id%20+%20%22%27%29.FinstallFolder%28event%29%22%7D/%3E%0A%20%20%20%20%20%3Cmenuitem%0A%20%20%20%20%20%20%20class%3D%22menuitem-iconic%22%0A%20%20%20%20%20%20%20image%3D%22chrome%3A//global/skin/dirListing/folder.png%22%0A%20%20%20%20%20%20%20label%3D%22profile%22%20%20%20%20%20%20%0A%20%20%20%20%20%20%20onclick%3D%7B%22document.getElementById%28%27%22%20+%20this.id%20+%20%22%27%29.Fprofile%28event%29%22%7D/%3E%0A%20%20%20%20%20%3Cmenuitem%0A%20%20%20%20%20%20%20class%3D%22menuitem-iconic%22%0A%20%20%20%20%20%20%20image%3D%22chrome%3A//global/skin/dirListing/folder.png%22%0A%20%20%20%20%20%20%20label%3D%22chrome%22%0A%20%20%20%20%20%20%20onclick%3D%7B%22document.getElementById%28%27%22%20+%20this.id%20+%20%22%27%29.Fchrome%28event%29%22%7D/%3E%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%3Cmenuitem%0A%20%20%20%20%20%20class%3D%22menuitem-iconic%22%0A%20%20%20%20%20%20image%3D%22chrome%3A//global/skin/dirListing/folder.png%22%0A%20%20%20%20%20%20label%3D%22custombuttons%22%0A%20%20%20%20%20%20onclick%3D%7B%22document.getElementById%28%27%22%20+%20this.id%20+%20%22%27%29.Fcustombuttons%28event%29%22%7D/%3E%0A%20%20%20%20%3Cmenuitem%0A%20%20%20%20%20%20class%3D%22menuitem-iconic%22%0A%20%20%20%20%20%20image%3D%22chrome%3A//global/skin/dirListing/folder.png%22%0A%20%20%20%20%20%20label%3D%22extensions%22%0A%20%20%20%20%20%20onclick%3D%7B%22document.getElementById%28%27%22%20+%20this.id%20+%20%22%27%29.Fextensions%28event%29%22%7D/%3E%0A%0A%3C/menupopup%3E%3B%0Avar%20bool%20%3D%20XML.prettyPrinting%3B%0AXML.prettyPrinting%20%3D%20false%3B%0Avar%20el%20%3D%20new%20DOMParser%28%29.parseFromString%28menu.toXMLString%28%29%2C%20%22application/xml%22%29.documentElement%3B%0AXML.prettyPrinting%20%3D%20bool%3B%0Athis.appendChild%28el%29%3B%0Athis.type%20%3D%20%22menu%22%3B%0Athis.orient%20%3D%20%22horizontal%22%3B%0Athis.menuClick%20%3D%20function%28event%29%20%7B%0A%20%20event.preventDefault%28%29%3B%0A%20%20event.stopPropagation%28%29%3B%0A%20%20this.open%20%3D%20false%3B%0A%7D%0A%0Athis.FinstallFolder%20%3D%20function%28event%29%20%7B%0AstartProcess%28%22/usr/bin/nautilus%22%2C%5B%22/usr/lib/firefox-5.0%22%5D%29%3B%0Afunction%20startProcess%28path%2C%20args%29%20%0A%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%20file.initWithPath%28path%29%3B%0A%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.createInstance%28Components.interfaces.nsIProcess%29%3B%0A%20%20%20%20process.init%28file%29%3B%0A%20%20%20%20process.run%28false%2C%20args%2C%20args.length%29%3B%0A%7D%3B%0A%7D%0A%0Athis.Fprofile%20%3D%20function%28event%29%20%7B%0A%20%20let%20propertiesService%20%3D%20Cc%5B%22@mozilla.org/file/directory_service%3B1%22%5D.getService%28Ci.nsIProperties%29%3B%0A%20%20let%20currProfD%20%3D%20propertiesService.get%28%22ProfD%22%2C%20Ci.nsIFile%29%3B%0A%20%20let%20profileDir%20%3D%20currProfD.path%3B%0A%20%20let%20nsLocalFile%20%3D%20Components.Constructor%28%22@mozilla.org/file/local%3B1%22%2C%20%22nsILocalFile%22%2C%20%22initWithPath%22%29%3B%0A%20%20new%20nsLocalFile%28profileDir%29.reveal%28%29%3B%0A%7D%0A%0Athis.Fchrome%20%3D%20function%28event%29%20%7B%0A%20%20var%20file%20%3D%20Components.classes%5B%22@mozilla.org/file/directory_service%3B1%22%5D.%0A%20%20getService%28Components.interfaces.nsIProperties%29.%0A%20%20get%28%22ProfD%22%2C%20Components.interfaces.nsIFile%29%3B%0A%20%20file.append%28%22chrome%22%29%3B%0A%20%20var%20local%20%3D%20Components.classes%5B%22@mozilla.org/file/local%3B1%22%5D.%0A%20%20createInstance%28Components.interfaces.nsILocalFile%29%3B%0A%20%20var%20process%20%3D%20Components.classes%5B%22@mozilla.org/process/util%3B1%22%5D.%0A%20%20createInstance%28Components.interfaces.nsIProcess%29%3B%0A%20%20var%20args%20%3D%20%5B%20file.path%5D%3B%0A%20%20local.initWithPath%28%22/usr/bin/nautilus%22%29%3B%0A%20%20process.init%28local%29%3B%0A%20%20process.run%28false%2C%20args%2C%20args.length%29%3B%0A%7D%0A%0Athis.Fcustombuttons%20%3D%20function%28event%29%20%7B%0A%20%20var%20file%20%3D%20Components.classes%5B%22@mozilla.org/file/directory_service%3B1%22%5D.%0A%20%20getService%28Components.interfaces.nsIProperties%29.%0A%20%20get%28%22ProfD%22%2C%20Components.interfaces.nsIFile%29%3B%0A%20%20file.append%28%22custombuttons%22%29%3B%0A%20%20var%20local%20%3D%20Components.classes%5B%22@mozilla.org/file/local%3B1%22%5D.%0A%20%20createInstance%28Components.interfaces.nsILocalFile%29%3B%0A%20%20var%20process%20%3D%20Components.classes%5B%22@mozilla.org/process/util%3B1%22%5D.%0A%20%20createInstance%28Components.interfaces.nsIProcess%29%3B%0A%20%20var%20args%20%3D%20%5B%20file.path%5D%3B%0A%20%20local.initWithPath%28%22/usr/bin/nautilus%22%29%3B%0A%20%20process.init%28local%29%3B%0A%20%20process.run%28false%2C%20args%2C%20args.length%29%3B%0A%7D%0A%0Athis.Fextensions%20%3D%20function%28event%29%20%7B%0A%20%20var%20file%20%3D%20Components.classes%5B%22@mozilla.org/file/directory_service%3B1%22%5D.%0A%20%20getService%28Components.interfaces.nsIProperties%29.%0A%20%20get%28%22ProfD%22%2C%20Components.interfaces.nsIFile%29%3B%0A%20%20file.append%28%22extensions%22%29%3B%0A%20%20var%20local%20%3D%20Components.classes%5B%22@mozilla.org/file/local%3B1%22%5D.%0A%20%20createInstance%28Components.interfaces.nsILocalFile%29%3B%0A%20%20var%20process%20%3D%20Components.classes%5B%22@mozilla.org/process/util%3B1%22%5D.%0A%20%20createInstance%28Components.interfaces.nsIProcess%29%3B%0A%20%20var%20args%20%3D%20%5B%20file.path%5D%3B%0A%20%20local.initWithPath%28%22/usr/bin/nautilus%22%29%3B%0A%20%20process.init%28local%29%3B%0A%20%20process.run%28false%2C%20args%2C%20args.length%29%3B%0A%7D%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%5BID%3D%3Cid%3E%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

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

Выделить код

Код:

/*Initialization Code*/


/*Initialization Code*/


var menu = <menupopup
  xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
  onclick="this.parentNode.menuClick(event)">
     <menuitem
       class="menuitem-iconic"
       image="chrome://global/skin/dirListing/folder.png"
       label="installation folder"      
       onclick={"document.getElementById('" + this.id + "').FinstallFolder(event)"}/>
     <menuitem
       class="menuitem-iconic"
       image="chrome://global/skin/dirListing/folder.png"
       label="profile"      
       onclick={"document.getElementById('" + this.id + "').Fprofile(event)"}/>
     <menuitem
       class="menuitem-iconic"
       image="chrome://global/skin/dirListing/folder.png"
       label="chrome"
       onclick={"document.getElementById('" + this.id + "').Fchrome(event)"}/>            
    <menuitem
      class="menuitem-iconic"
      image="chrome://global/skin/dirListing/folder.png"
      label="custombuttons"
      onclick={"document.getElementById('" + this.id + "').Fcustombuttons(event)"}/>
    <menuitem
      class="menuitem-iconic"
      image="chrome://global/skin/dirListing/folder.png"
      label="extensions"
      onclick={"document.getElementById('" + this.id + "').Fextensions(event)"}/>

</menupopup>;
var bool = XML.prettyPrinting;
XML.prettyPrinting = false;
var el = new DOMParser().parseFromString(menu.toXMLString(), "application/xml").documentElement;
XML.prettyPrinting = bool;
this.appendChild(el);
this.type = "menu";
this.orient = "horizontal";
this.menuClick = function(event) {
  event.preventDefault();
  event.stopPropagation();
  this.open = false;
}

this.FinstallFolder = function(event) {
startProcess("/usr/bin/nautilus",["/usr/lib/firefox-5.0"]);
function startProcess(path, args) 
{
    var file = Components.classes["@mozilla.org/file/local;1"]
        .createInstance(Components.interfaces.nsILocalFile);
    file.initWithPath(path);
    var process = Components.classes["@mozilla.org/process/util;1"]
        .createInstance(Components.interfaces.nsIProcess);
    process.init(file);
    process.run(false, args, args.length);
};
}

this.Fprofile = function(event) {
  let propertiesService = Cc["@mozilla.org/file/directory_service;1"].getService(Ci.nsIProperties);
  let currProfD = propertiesService.get("ProfD", Ci.nsIFile);
  let profileDir = currProfD.path;
  let nsLocalFile = Components.Constructor("@mozilla.org/file/local;1", "nsILocalFile", "initWithPath");
  new nsLocalFile(profileDir).reveal();
}

this.Fchrome = function(event) {
  var file = Components.classes["@mozilla.org/file/directory_service;1"].
  getService(Components.interfaces.nsIProperties).
  get("ProfD", Components.interfaces.nsIFile);
  file.append("chrome");
  var local = Components.classes["@mozilla.org/file/local;1"].
  createInstance(Components.interfaces.nsILocalFile);
  var process = Components.classes["@mozilla.org/process/util;1"].
  createInstance(Components.interfaces.nsIProcess);
  var args = [ file.path];
  local.initWithPath("/usr/bin/nautilus");
  process.init(local);
  process.run(false, args, args.length);
}

this.Fcustombuttons = function(event) {
  var file = Components.classes["@mozilla.org/file/directory_service;1"].
  getService(Components.interfaces.nsIProperties).
  get("ProfD", Components.interfaces.nsIFile);
  file.append("custombuttons");
  var local = Components.classes["@mozilla.org/file/local;1"].
  createInstance(Components.interfaces.nsILocalFile);
  var process = Components.classes["@mozilla.org/process/util;1"].
  createInstance(Components.interfaces.nsIProcess);
  var args = [ file.path];
  local.initWithPath("/usr/bin/nautilus");
  process.init(local);
  process.run(false, args, args.length);
}

this.Fextensions = function(event) {
  var file = Components.classes["@mozilla.org/file/directory_service;1"].
  getService(Components.interfaces.nsIProperties).
  get("ProfD", Components.interfaces.nsIFile);
  file.append("extensions");
  var local = Components.classes["@mozilla.org/file/local;1"].
  createInstance(Components.interfaces.nsILocalFile);
  var process = Components.classes["@mozilla.org/process/util;1"].
  createInstance(Components.interfaces.nsIProcess);
  var args = [ file.path];
  local.initWithPath("/usr/bin/nautilus");
  process.init(local);
  process.run(false, args, args.length);
}

Open userCSS+JS(Ubuntu)(Firefox4.0-5.0)
При нажатии кнопки появляется меню из которого можно открыть для просмотра и редактирования userChrome.css, userContent.css, pref.js, user.js. Предварительно эти файлы(кроме pref.js) должны быть созданы пользователем.

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

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3EOpen%20userCSS+JS%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAsSAAALEgHS3X78AAACsElEQVQ4jWWSTWhdVRDHf3POufc177WJsU9NoljyStoqLpqi0YAilO50UbdFuxB10WWh1IUbxY1k70roRgRXQpGuFI2r8mj8oFBptVTaxEcDaZ/v4+bm3ntmXPiatHFgmMXMf5iPn7DLRMR776OZHVt4+ZULExMTaqY45xAE552WRTG+vPzDR3lefL2tAxzgRCQFJtM0/eTylZ+tl+VVtz+0vChNVc3MyuEws+npmSWAIOC8R0FcFS02m80P333v/Y9brVZ8otnUqqykXgvqTOkNS+pjewgpHGxxotOhJSJgxpRz7llVvTd3aG7pyi+/nqyKoqoqDfv31bje6bK8Htk7uY9453dOtjqa6Fn35qnbK8F7OX3+NJ/Pz9Uaa8k5m5o9Qb/vTaQW6nsD2r1F9sU7vNB4nMsvnuO3+w2yPy+6M6+t6usLzIdTr7L06RvWWK8qi4tNIb1lml0TzUAab7N19ypTG206+QI31yOXLrbxs89w5jl1dLEwM25N5t+yiSePS/D3EPlHZDyFXoes/w3dv+tsrMENy5nSb5Efb3Jk/13Y8LAZJdSOHBZmz0rIx/Bu9BOv8NQYezoXqI+1mflgmgPJHf7qf8XiS3WOHjCGtwOb3UgQ8UL1Ewxz8LIDxFDw9ceYPLYIyXFAOBoMJBI3a/j5VZJLXxLYug/DqzBU8A8jZaPgMTPAYQhmisVNGB+QNlMCZQa9P6Bvuxo84MsQFDRHdACxRywHsKVYBoEih/4aDOw/FrcHULAKrADNweJOToHEQTSCFYXR2xAGI5ixUbFtb8FDp9lu4BUrsSAAW6Y6APEPFP5Roe3SR/ApCFHc921ZGayKS0SQyjkXnXNRnIs4V4087rhUuERgsIr7ri0rAhw8PM1nzz/NoVIp5f8DP2IGljiSa2vcuN7h/L/gDz/PEZXJ2QAAAABJRU5ErkJggg%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*/%0Avar%20menu%20%3D%20%3Cmenupopup%0A%20%20xmlns%3D%22http%3A//www.mozilla.org/keymaster/gatekeeper/there.is.only.xul%22%0A%20%20onclick%3D%22this.parentNode.menuClick%28event%29%22%3E%0A%20%20%20%20%20%3Cmenuitem%0A%20%20%20%20%20%20%20class%3D%22menuitem-iconic%22%0A%20%20%20%20%20%20%20image%3D%22data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAFo9M/3AAAABGdBTUEAALGOfPtRkwAACk9pQ0NQUGhvdG9zaG9wIElDQyBwcm9maWxlAAB42p1TZ1RT6RY99970QkuIgJRLb1IVCCBSQouAFJEmKiEJEEqIIaHZFVHBEUVFBBvIoIgDjo6AjBVRLAyKCtgH5CGijoOjiIrK++F7o2vWvPfmzf611z7nrPOds88HwAgMlkgzUTWADKlCHhHgg8fExuHkLkCBCiRwABAIs2Qhc/0jAQD4fjw8KyLAB74AAXjTCwgAwE2bwDAch/8P6kKZXAGAhAHAdJE4SwiAFABAeo5CpgBARgGAnZgmUwCgBABgy2Ni4wBQLQBgJ3/m0wCAnfiZewEAW5QhFQGgkQAgE2WIRABoOwCsz1aKRQBYMAAUZkvEOQDYLQAwSVdmSACwtwDAzhALsgAIDAAwUYiFKQAEewBgyCMjeACEmQAURvJXPPErrhDnKgAAeJmyPLkkOUWBWwgtcQdXVy4eKM5JFysUNmECYZpALsJ5mRkygTQP4PPMAACgkRUR4IPz/XjODq7OzjaOtg5fLeq/Bv8iYmLj/uXPq3BAAADhdH7R/iwvsxqAOwaAbf6iJe4EaF4LoHX3i2ayD0C1AKDp2lfzcPh+PDxFoZC52dnl5OTYSsRCW2HKV33+Z8JfwFf9bPl+PPz39eC+4iSBMl2BRwT44MLM9EylHM+SCYRi3OaPR/y3C//8HdMixEliuVgqFONREnGORJqM8zKlIolCkinFJdL/ZOLfLPsDPt81ALBqPgF7kS2oXWMD9ksnEFh0wOL3AADyu2/B1CgIA4Bog+HPd//vP/1HoCUAgGZJknEAAF5EJC5UyrM/xwgAAESggSqwQRv0wRgswAYcwQXcwQv8YDaEQiTEwkIQQgpkgBxyYCmsgkIohs2wHSpgL9RAHTTAUWiGk3AOLsJVuA49cA/6YQiewSi8gQkEQcgIE2Eh2ogBYopYI44IF5mF+CHBSAQSiyQgyYgUUSJLkTVIMVKKVCBVSB3yPXICOYdcRrqRO8gAMoL8hrxHMZSBslE91Ay1Q7moNxqERqIL0GR0MZqPFqCb0HK0Gj2MNqHn0KtoD9qPPkPHMMDoGAczxGwwLsbDQrE4LAmTY8uxIqwMq8YasFasA7uJ9WPPsXcEEoFFwAk2BHdCIGEeQUhYTFhO2EioIBwkNBHaCTcJA4RRwicik6hLtCa6EfnEGGIyMYdYSCwj1hKPEy8Qe4hDxDckEolDMie5kAJJsaRU0hLSRtJuUiPpLKmbNEgaI5PJ2mRrsgc5lCwgK8iF5J3kw+Qz5BvkIfJbCp1iQHGk+FPiKFLKakoZ5RDlNOUGZZgyQVWjmlLdqKFUETWPWkKtobZSr1GHqBM0dZo5zYMWSUulraKV0xpoF2j3aa/odLoR3ZUeTpfQV9LL6Ufol+gD9HcMDYYVg8eIZygZmxgHGGcZdxivmEymGdOLGcdUMDcx65jnmQ+Zb1VYKrYqfBWRygqVSpUmlRsqL1Spqqaq3qoLVfNVy1SPqV5Tfa5GVTNT46kJ1JarVaqdUOtTG1NnqTuoh6pnqG9UP6R+Wf2JBlnDTMNPQ6RRoLFf47zGIAtjGbN4LCFrDauGdYE1xCaxzdl8diq7mP0du4s9qqmhOUMzSjNXs1LzlGY/B+OYcficdE4J5yinl/N+it4U7yniKRumNEy5MWVca6qWl5ZYq0irUatH6702ru2nnaa9RbtZ+4EOQcdKJ1wnR2ePzgWd51PZU92nCqcWTT069a4uqmulG6G7RHe/bqfumJ6+XoCeTG+n3nm95/ocfS/9VP1t+qf1RwxYBrMMJAbbDM4YPMU1cW88HS/H2/FRQ13DQEOlYZVhl+GEkbnRPKPVRo1GD4xpxlzjJONtxm3GoyYGJiEmS03qTe6aUk25pimmO0w7TMfNzM2izdaZNZs9Mdcy55vnm9eb37dgWnhaLLaotrhlSbLkWqZZ7ra8boVaOVmlWFVaXbNGrZ2tJda7rbunEae5TpNOq57WZ8Ow8bbJtqm3GbDl2AbbrrZttn1hZ2IXZ7fFrsPuk72Tfbp9jf09Bw2H2Q6rHVodfnO0chQ6Vjrems6c7j99xfSW6S9nWM8Qz9gz47YTyynEaZ1Tm9NHZxdnuXOD84iLiUuCyy6XPi6bG8bdyL3kSnT1cV3hetL1nZuzm8LtqNuv7jbuae6H3J/MNJ8pnlkzc9DDyEPgUeXRPwuflTBr36x+T0NPgWe15yMvYy+RV63XsLeld6r3Ye8XPvY+cp/jPuM8N94y3llfzDfAt8i3y0/Db55fhd9DfyP/ZP96/9EAp4AlAWcDiYFBgVsC+/h6fCG/jj8622X2stntQYyguUEVQY+CrYLlwa0haMjskK0h9+eYzpHOaQ6FUH7o1tAHYeZhi8N+DCeFh4VXhj+OcIhYGtExlzV30dxDc99E+kSWRN6bZzFPOa8tSjUqPqouajzaN7o0uj/GLmZZzNVYnVhJbEscOS4qrjZubL7f/O3zh+Kd4gvjexeYL8hdcHmhzsL0hacWqS4SLDqWQEyITjiU8EEQKqgWjCXyE3cljgp5wh3CZyIv0TbRiNhDXCoeTvJIKk16kuyRvDV5JMUzpSzluYQnqZC8TA1M3Zs6nhaadiBtMj06vTGDkpGQcUKqIU2TtmfqZ+ZmdsusZYWy/sVui7cvHpUHyWuzkKwFWS0KtkKm6FRaKNcqB7JnZVdmv82JyjmWq54rze3Ms8rbkDec75//7RLCEuGStqWGS1ctHVjmvaxqObI8cXnbCuMVBSuGVgasPLiKtipt1U+r7VeXrn69JnpNa4FewcqCwbUBa+sLVQrlhX3r3NftXU9YL1nftWH6hp0bPhWJiq4U2xeXFX/YKNx45RuHb8q/mdyUtKmrxLlkz2bSZunm3i2eWw6Wqpfmlw5uDdnatA3fVrTt9fZF2y+XzSjbu4O2Q7mjvzy4vGWnyc7NOz9UpFT0VPpUNu7S3bVh1/hu0e4be7z2NOzV21u89/0+yb7bVQFVTdVm1WX7Sfuz9z+uiarp+Jb7bV2tTm1x7ccD0gP9ByMOtte51NUd0j1UUo/WK+tHDscfvv6d73ctDTYNVY2cxuIjcER55On3Cd/3Hg062naMe6zhB9Mfdh1nHS9qQprymkabU5r7W2Jbuk/MPtHW6t56/EfbHw+cNDxZeUrzVMlp2umC05Nn8s+MnZWdfX4u+dxg26K2e+djzt9qD2/vuhB04dJF/4vnO7w7zlzyuHTystvlE1e4V5qvOl9t6nTqPP6T00/Hu5y7mq65XGu57nq9tXtm9+kbnjfO3fS9efEW/9bVnjk93b3zem/3xff13xbdfnIn/c7Lu9l3J+6tvE+8X/RA7UHZQ92H1T9b/tzY79x/asB3oPPR3Ef3BoWDz/6R9Y8PQwWPmY/Lhg2G6544Pjk54j9y/en8p0PPZM8mnhf+ov7LrhcWL3741evXztGY0aGX8peTv218pf3qwOsZr9vGwsYevsl4MzFe9Fb77cF33Hcd76PfD0/kfCB/KP9o+bH1U9Cn+5MZk5P/BAOY8/xjMy3bAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH2wUHDTYqu2U6dQAAA5ZJREFUOMsFwXlMW3UAwPHve69QaAstd7dBKYdQCIgMBrgTTGbULYG4gEbUGaNE8Q+XbJEFZsxmMk1mZpxukcxIjLpliUcTdQNJnJE5wIXGmaEC45AyjpbSQmkL9PX9/HwUIQRf/FPsxPrmjPPfaa+Q8p/rd9YWGZD6b/4q0vIqkPLeGHFGhu82pulCmHMzkR352cpitJTR6Q3UnhakQ6cGLrj+XrJlpxs415Z3RjLs7xbqWIStLRkcGtJX3/eJUDSF7t4Is5klSBzUBBOXsZ+uwDuWitR05vdLzp7vXmdFgU0XxJYh3gGmfEiVUeZs7a9e7ShwDHoEfV+2MzRbRnlNCR1d9dxwJ0JZ139O2oSgXhPsmhQHPp4SXb6ooEaI8yIqpP6BocqDxx9ysXAdPP2wOQXGGti5h+JUoUmn3vuk1DlZdta/GgRtjWSDgZx0CweqMuc7W0vbJSrPChbXYc0N0XsgmUFfBSkK5z9qu6LDaKJ2fwHDfVZqandz588w9pJ0/PFRbk1EUuWWJ4sZ9uux7rHx9JFHsFfa+foDB6o1A3/UhNwXqOL62zas1mT27rPR3GRnTZW5/U45ckIyEsdjgvsyeLywvEz3eAknn4/haFR4NM3fK9GqCSYXYWUIwlOgxqieeYtYIILjSvBnadcrU5E7t5YS8PTCym+gWCBzL5gPM+KMb5BOn/u05NK1wcGlJYuZoAqRCMTmIPYAxDwQA7aBvB2UbIg3IqUkcrj1qY3OVlu94il7t2fG7X8YTKCZQE4DXQbIKaBtByUfEgshoQj0O8CYDElGxmfcOjWl0KZbDsZiGfl2Lr5oJxjwk5NloePDBY4dLcJoEChs8tm1BQJhiWMvWUjPysEX8PHChXssrOs0Ra4+8Wx9hdmxO1fimW/1LK/JqEYDS2GVVJNGXVUO23JNfONaJagGSYpTeKwyk35/EVtS8n2p4MS0c1LKbZQ3fJTIHtzeVNa8VlB97MzxYjDDoZZcLl+NxzfhpqAiyl+rZo40p1McC/TqsixxTLo1NG86o75kiCzA5h8QDeCaCyOLdSIN61RfrGZlcQcPBgRNzXEENoLM/7iObl/Opuf2L1ugKhCagNAMhGdhYx62fGgixsjLdxlpu4Gl8wn0DWX8cHSczfFC3j9pXJU0IRgcnan7yaV/zTW2kRUMhQhHQkS3wmhqBFnS0MfrMRgMmBKMGOMMlJcmLT9eHvy8rrzo5v9yKowoD10L9wAAAABJRU5ErkJggg%3D%3D%22%0A%20%20%20%20%20%20%20label%3D%22userChrome.css%22%0A%20%20%20%20%20%20%20onclick%3D%7B%22document.getElementById%28%27%22%20+%20this.id%20+%20%22%27%29.userChrome%28event%29%22%7D/%3E%0A%20%20%20%20%20%3Cmenuitem%0A%20%20%20%20%20%20%20class%3D%22menuitem-iconic%22%0A%20%20%20%20%20%20%20image%3D%22data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAsTAAALEwEAmpwYAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89+bN/rXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz/SMBAPh+PDwrIsAHvgABeNMLCADATZvAMByH/w/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf+bTAICd+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA/g88wAAKCRFRHgg/P9eM4Ors7ONo62Dl8t6r8G/yJiYuP+5c+rcEAAAOF0ftH+LC+zGoA7BoBt/qIl7gRoXgugdfeLZrIPQLUAoOnaV/Nw+H48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl/AV/1s+X48/Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H/LcL//wd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+AXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93/+8//UegJQCAZkmScQAAXkQkLlTKsz/HCAAARKCBKrBBG/TBGCzABhzBBdzBC/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD/phCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+Q8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI+ksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG+Qh8lsKnWJAcaT4U+IoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr+h0uhHdlR5Ol9BX0svpR+iX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q/pH5Z/YkGWcNMw09DpFGgsV/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY/R27iz2qqaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4/OBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up+6Ynr5egJ5Mb6feeb3n+hx9L/1U/W36p/VHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw+6TvZN9un2N/T0HDYfZDqsdWh1+c7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc+Lpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26/uNu5p7ofcn8w0nymeWTNz0MPIQ+BR5dE/C5+VMGvfrH5PQ0+BZ7XnIy9jL5FXrdewt6V3qvdh7xc+9j5yn+M+4zw33jLeWV/MN8C3yLfLT8Nvnl+F30N/I/9k/3r/0QCngCUBZwOJgUGBWwL7+Hp8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo+qi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt/87fOH4p3iC+N7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi/RNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a/zYnKOZarnivN7cyzytuQN5zvn//tEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1+1dT1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTPZtJm6ebeLZ5bDpaql+aXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO/PLi8ZafJzs07P1SkVPRU+lQ27tLdtWHX+G7R7ht7vPY07NXbW7z3/T7JvttVAVVN1WbVZftJ+7P3P66Jqun4lvttXa1ObXHtxwPSA/0HIw6217nU1R3SPVRSj9Yr60cOxx++/p3vdy0NNg1VjZzG4iNwRHnk6fcJ3/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w+0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb++6EHTh0kX/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8/pPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb/1tWeOT3dvfN6b/fF9/XfFt1+cif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR/cGhYPP/pH1jw9DBY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF/6i/suuFxYvfvjV69fO0ZjRoZfyl5O/bXyl/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98PT+R8IH8o/2j5sfVT0Kf7kxmTk/8EA5jz/GMzLdsAAAAEZ0FNQQAAsY58+1GTAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAANQSURBVHjaJMxPbFN1AMDx7+/96WvfH9b1rXRrHZtWi1SCcWKEZKjRRCIcTLwQD8pFIxEzXUJIPOjBGKJBDSdPaFBD/EOMxiAxEgIHDG7CYH8Y7l/m6MbY1m1tt/b1ve6952HHz+UjwjDk4/ffyT9hDB7paJW36bqKpkaRZI0g1Gj4IY7rsO64rFYdlsseI5Ole3/9G5y+cv3OgPjw2Fs73j6091oqVWrCUiAWA/kBkDMg0oAMzENwD/xZ8KqEqw7nz16onzh79zn5vRe0j3bnzW4iUaAKog6hgAAIPAhKsFEEbwG8+1BbRzRg+0PtyujATV3JNdfa2QDqy6BJ4AdAA4QLamkz26iAvwhBZdP1EDyJxzv0FiUWkXzcdWqOy/BQiY6sQevDJt7aErf+djF0hXwughANpkfLzM/WyW+1iEdNrEgYKIYmWJorcvTb/7DizRQWZvm0t41T34xTrQl8NN441EZcDzl1pkRxoYAdt/muZydmxEfRVbgwtIwfKHx1WKXg5lFZYnzK5dk9CV47kEKPykzfhbmiyy7b5LPXM0TcEmroIIVuBbW+SM1xCOcXGBkYZnqiSO+BBNUVn1eO9nH8xG2yhkPP/jRYMR49fouhG/2YrCFVHY/nWwvYzQkOnnb54kqUmBXh0pjPzdtzCLHBU3mD5fUqZy7N0t8/QcKQad+yQaUeIiZPdv6aDWdeDqI2d4KttCdX2JK8D4rNQCFJrQy//zTDm6962I+0MzWosqupzM/niozJ8T8kxw1AEkhakcc6R9mSXgAzCWYTXXsF/rjLylWH7z8QBIsFup6Z4J+Li/RdlDC9EKXi+NAioAWIRyDWBloK1Digs+9dE3POZuqX69w4ppLZJzN3rsH+qE4hYaGUnYaMGYAlQLNBa4VYGiJJUCwkVfDkl2lsS6b4Yx9r5yGbipHrSfFbsSwpQ0Vz/qW2NVB8UBOgtUC0FaJpiNggZAgrdH7+InE7wL08Qrw3i5abZPATY1XGys3u6BCHM5lQwUqDkQFzG1idYGY3M1UDUSe6uxnz6SRKbp6xme7g5A/LPSIIQ7p3PrjnYJd7pGt7NGUZBnrMQI3oSEqMIJRwPZdarcZ6vUq1UWN4dK3457D19bWhscv/DwDynl5oNXchJAAAAABJRU5ErkJggg%3D%3D%22%0A%20%20%20%20%20%20%20label%3D%22userContent.css%22%0A%20%20%20%20%20%20%20onclick%3D%7B%22document.getElementById%28%27%22%20+%20this.id%20+%20%22%27%29.userContent%28event%29%22%7D/%3E%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%3Cmenuitem%0A%20%20%20%20%20%20class%3D%22menuitem-iconic%22%0A%20%20%20%20%20%20image%3D%22data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAABZ0RVh0Q3JlYXRpb24gVGltZQAwNC8xMS8wOGGVBZQAAAAcdEVYdFNvZnR3YXJlAEFkb2JlIEZpcmV3b3JrcyBDUzQGstOgAAABx0lEQVQ4ja2UMUgbURjHf3ckJzjcWSyRRgOhoe2SaOCc29JRHIt0DEVXlzp07yKULo5FmqlQwUWQzBYyemTIVrsUqiURkbTqae7O18V75j1y12r7hw++//e+97//e+/eg/8MQ+MOUATGEvot4BD4DhwD0Z8+MNPpdERSNBoNIYQQtVptBbg7xBCmxscMwyApYtTr9bflcvnZ1YqMNEFM00yMMAxlX7vd3qhWq4+B0VTBNIeO4yi9rVZrC7g3WMsMc5iEYrFIs9mk1+thWVZcngK+JgoO7pUOx3GoVCp6WaQ6TBP8G1zPfrUrDC5vJSIw4d2sAZrD9y8eKY2Ls7bM13d/KrWYAyx92pO5IugHEXtHfcmXt33W5idY3u4AKHmMB+OWwpUj9fsRJ+ehEoDMX27uszY/oYz7/ShFMIg4uQiVABS+8PEbH55PSu4HqqC65H7E/TtZyVfn8rxuHMja6lweQKnpDpVT5l9wdcr6T/ckDMOdm+hkMpmnwGfJAVzXfQjku93udNrVG4ZCoTCTy+UM4MDzvC/xHv4CsG37tFQqvQmCYDRZ4hrZbPbMtu3TQY2h98x13fgFGQHGteEj4ALA87wf+tzfFUXLs9H3dmQAAAAASUVORK5CYII%3D%22%0A%20%20%20%20%20%20label%3D%22prefs.js%22%0A%20%20%20%20%20%20onclick%3D%7B%22document.getElementById%28%27%22%20+%20this.id%20+%20%22%27%29.prefs%28event%29%22%7D/%3E%0A%20%20%20%20%3Cmenuitem%0A%20%20%20%20%20%20class%3D%22menuitem-iconic%22%0A%20%20%20%20%20%20image%3D%22data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAACXBIWXMAAAsSAAALEgHS3X78AAABzUlEQVQ4ja2Uv2sUQRTHP+v+iBuCF4isGAVtYneGY1MeBuxOUloIVidimUaL9DaC2KRVvFbFRgj5K7JwcNckenJwepKTEHYlgne4zyY72ZncLkr8whfe982bL2/m7awlIvxPOIauANeB+YJ6D/gOfAEOgd+nKkQkz+UgCKSIjUZDAGm1Wk9E5KKIWMZ+zhn+82ZBnhmazebzbrd7+/hEVt7ANCRN00I6zskNVavVt+12+xYwW2pY1mEcx1ptrVb7AFzO58yhkKapmVLo9/vU63UqlQrj8ThLXwU+FRqWfUZxHNPpdE5tKe3wrN+lpQxerEwZ+l+akMLjHQuMDh+92dUKX+0kKn64ckHLZRrg5b0lFWuGvmuztOApvbnms761z+baJQAtzvDxYKxp7Yy+ZzN33tEIqPj13Susb+1r675nlxi6NnMzjkZA0+/uX+PB+69K+65uqB/Zs/l8OFF6Y3vIszuLKrexPQTQcmaH2pQ5C46nbD6vVdu25V8oIqt5DwcgiqIbwGIQBDfLnt40DAaD5dFoZAHDMAz3sjv8AZAkyVGv13vquu5sscUJJpPJzyRJjvIe1rSnFkVR9geZARaM5QPgF0AYht/MvX8AHIQZO771bscAAAAASUVORK5CYII%3D%22%0A%20%20%20%20%20%20label%3D%22user.js%22%0A%20%20%20%20%20%20onclick%3D%7B%22document.getElementById%28%27%22%20+%20this.id%20+%20%22%27%29.userJS%28event%29%22%7D/%3E%0A%0A%3C/menupopup%3E%3B%0Avar%20bool%20%3D%20XML.prettyPrinting%3B%0AXML.prettyPrinting%20%3D%20false%3B%0Avar%20el%20%3D%20new%20DOMParser%28%29.parseFromString%28menu.toXMLString%28%29%2C%20%22application/xml%22%29.documentElement%3B%0AXML.prettyPrinting%20%3D%20bool%3B%0Athis.appendChild%28el%29%3B%0Athis.type%20%3D%20%22menu%22%3B%0Athis.orient%20%3D%20%22horizontal%22%3B%0Athis.menuClick%20%3D%20function%28event%29%20%7B%0A%20%20event.preventDefault%28%29%3B%0A%20%20event.stopPropagation%28%29%3B%0A%20%20this.open%20%3D%20false%3B%0A%7D%0A%0Athis.userChrome%20%3D%20function%28event%29%20%7B%0Avar%20file%20%3D%20Components.classes%5B%22@mozilla.org/file/directory_service%3B1%22%5D.%0A%20%20getService%28Components.interfaces.nsIProperties%29.%0A%20%20get%28%22ProfD%22%2C%20Components.interfaces.nsIFile%29%3B%0Afile.append%28%22chrome%22%29%3B%0Afile.append%28%22userChrome.css%22%29%3B%0Avar%20localFile%20%3D%20Components.classes%5B%22@mozilla.org/file/local%3B1%22%5D.%0A%20%20createInstance%28Components.interfaces.nsILocalFile%29%3B%0Avar%20process%20%3D%20Components.classes%5B%22@mozilla.org/process/util%3B1%22%5D.%0A%20%20createInstance%28Components.interfaces.nsIProcess%29%3B%0Avar%20args%20%3D%20%5Bfile.path%5D%3B%0AlocalFile.initWithPath%28%22/usr/bin/gedit%22%29%3B%0Aprocess.init%28localFile%29%3B%0Aprocess.run%28false%2C%20args%2C%20args.length%29%3B%0A%7D%0A%0Athis.userContent%20%3D%20function%28event%29%20%7B%0Avar%20file%20%3D%20Components.classes%5B%22@mozilla.org/file/directory_service%3B1%22%5D.%0A%20%20getService%28Components.interfaces.nsIProperties%29.%0A%20%20get%28%22ProfD%22%2C%20Components.interfaces.nsIFile%29%3B%0Afile.append%28%22chrome%22%29%3B%0Afile.append%28%22userContent.css%22%29%3B%0Avar%20localFile%20%3D%20Components.classes%5B%22@mozilla.org/file/local%3B1%22%5D.%0A%20%20createInstance%28Components.interfaces.nsILocalFile%29%3B%0Avar%20process%20%3D%20Components.classes%5B%22@mozilla.org/process/util%3B1%22%5D.%0A%20%20createInstance%28Components.interfaces.nsIProcess%29%3B%0Avar%20args%20%3D%20%5Bfile.path%5D%3B%0AlocalFile.initWithPath%28%22/usr/bin/gedit%22%29%3B%0Aprocess.init%28localFile%29%3B%0Aprocess.run%28false%2C%20args%2C%20args.length%29%3B%0A%7D%0A%0Athis.prefs%20%3D%20function%28event%29%20%7B%0Avar%20file%20%3D%20Components.classes%5B%22@mozilla.org/file/directory_service%3B1%22%5D.%0A%20%20getService%28Components.interfaces.nsIProperties%29.%0A%20%20get%28%22ProfD%22%2C%20Components.interfaces.nsIFile%29%3B%0Afile.append%28%22prefs.js%22%29%3B%0Avar%20localFile%20%3D%20Components.classes%5B%22@mozilla.org/file/local%3B1%22%5D.%0A%20%20createInstance%28Components.interfaces.nsILocalFile%29%3B%0Avar%20process%20%3D%20Components.classes%5B%22@mozilla.org/process/util%3B1%22%5D.%0A%20%20createInstance%28Components.interfaces.nsIProcess%29%3B%0Avar%20args%20%3D%20%5Bfile.path%5D%3B%0AlocalFile.initWithPath%28%22/usr/bin/gedit%22%29%3B%0Aprocess.init%28localFile%29%3B%0Aprocess.run%28false%2C%20args%2C%20args.length%29%3B%0A%7D%0A%0Athis.userJS%20%3D%20function%28event%29%20%7B%0Avar%20file%20%3D%20Components.classes%5B%22@mozilla.org/file/directory_service%3B1%22%5D.%0A%20%20getService%28Components.interfaces.nsIProperties%29.%0A%20%20get%28%22ProfD%22%2C%20Components.interfaces.nsIFile%29%3B%0Afile.append%28%22user.js%22%29%3B%0Avar%20localFile%20%3D%20Components.classes%5B%22@mozilla.org/file/local%3B1%22%5D.%0A%20%20createInstance%28Components.interfaces.nsILocalFile%29%3B%0Avar%20process%20%3D%20Components.classes%5B%22@mozilla.org/process/util%3B1%22%5D.%0A%20%20createInstance%28Components.interfaces.nsIProcess%29%3B%0Avar%20args%20%3D%20%5Bfile.path%5D%3B%0AlocalFile.initWithPath%28%22/usr/bin/gedit%22%29%3B%0Aprocess.init%28localFile%29%3B%0Aprocess.run%28false%2C%20args%2C%20args.length%29%3B%0A%7D%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%5BID%3D%3Cid%3E%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

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

Выделить код

Код:

/*Initialization Code*/
var menu = <menupopup
  xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
  onclick="this.parentNode.menuClick(event)">
     <menuitem
       class="menuitem-iconic"
       image="data:image/png;base64,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"
       label="userChrome.css"
       onclick={"document.getElementById('" + this.id + "').userChrome(event)"}/>
     <menuitem
       class="menuitem-iconic"
       image="data:image/png;base64,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"
       label="userContent.css"
       onclick={"document.getElementById('" + this.id + "').userContent(event)"}/>            
    <menuitem
      class="menuitem-iconic"
      image="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAABZ0RVh0Q3JlYXRpb24gVGltZQAwNC8xMS8wOGGVBZQAAAAcdEVYdFNvZnR3YXJlAEFkb2JlIEZpcmV3b3JrcyBDUzQGstOgAAABx0lEQVQ4ja2UMUgbURjHf3ckJzjcWSyRRgOhoe2SaOCc29JRHIt0DEVXlzp07yKULo5FmqlQwUWQzBYyemTIVrsUqiURkbTqae7O18V75j1y12r7hw++//e+97//e+/eg/8MQ+MOUATGEvot4BD4DhwD0Z8+MNPpdERSNBoNIYQQtVptBbg7xBCmxscMwyApYtTr9bflcvnZ1YqMNEFM00yMMAxlX7vd3qhWq4+B0VTBNIeO4yi9rVZrC7g3WMsMc5iEYrFIs9mk1+thWVZcngK+JgoO7pUOx3GoVCp6WaQ6TBP8G1zPfrUrDC5vJSIw4d2sAZrD9y8eKY2Ls7bM13d/KrWYAyx92pO5IugHEXtHfcmXt33W5idY3u4AKHmMB+OWwpUj9fsRJ+ehEoDMX27uszY/oYz7/ShFMIg4uQiVABS+8PEbH55PSu4HqqC65H7E/TtZyVfn8rxuHMja6lweQKnpDpVT5l9wdcr6T/ckDMOdm+hkMpmnwGfJAVzXfQjku93udNrVG4ZCoTCTy+UM4MDzvC/xHv4CsG37tFQqvQmCYDRZ4hrZbPbMtu3TQY2h98x13fgFGQHGteEj4ALA87wf+tzfFUXLs9H3dmQAAAAASUVORK5CYII="
      label="prefs.js"
      onclick={"document.getElementById('" + this.id + "').prefs(event)"}/>
    <menuitem
      class="menuitem-iconic"
      image="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAACXBIWXMAAAsSAAALEgHS3X78AAABzUlEQVQ4ja2Uv2sUQRTHP+v+iBuCF4isGAVtYneGY1MeBuxOUloIVidimUaL9DaC2KRVvFbFRgj5K7JwcNckenJwepKTEHYlgne4zyY72ZncLkr8whfe982bL2/m7awlIvxPOIauANeB+YJ6D/gOfAEOgd+nKkQkz+UgCKSIjUZDAGm1Wk9E5KKIWMZ+zhn+82ZBnhmazebzbrd7+/hEVt7ANCRN00I6zskNVavVt+12+xYwW2pY1mEcx1ptrVb7AFzO58yhkKapmVLo9/vU63UqlQrj8ThLXwU+FRqWfUZxHNPpdE5tKe3wrN+lpQxerEwZ+l+akMLjHQuMDh+92dUKX+0kKn64ckHLZRrg5b0lFWuGvmuztOApvbnms761z+baJQAtzvDxYKxp7Yy+ZzN33tEIqPj13Susb+1r675nlxi6NnMzjkZA0+/uX+PB+69K+65uqB/Zs/l8OFF6Y3vIszuLKrexPQTQcmaH2pQ5C46nbD6vVdu25V8oIqt5DwcgiqIbwGIQBDfLnt40DAaD5dFoZAHDMAz3sjv8AZAkyVGv13vquu5sscUJJpPJzyRJjvIe1rSnFkVR9geZARaM5QPgF0AYht/MvX8AHIQZO771bscAAAAASUVORK5CYII="
      label="user.js"
      onclick={"document.getElementById('" + this.id + "').userJS(event)"}/>

</menupopup>;
var bool = XML.prettyPrinting;
XML.prettyPrinting = false;
var el = new DOMParser().parseFromString(menu.toXMLString(), "application/xml").documentElement;
XML.prettyPrinting = bool;
this.appendChild(el);
this.type = "menu";
this.orient = "horizontal";
this.menuClick = function(event) {
  event.preventDefault();
  event.stopPropagation();
  this.open = false;
}

this.userChrome = function(event) {
var file = Components.classes["@mozilla.org/file/directory_service;1"].
  getService(Components.interfaces.nsIProperties).
  get("ProfD", Components.interfaces.nsIFile);
file.append("chrome");
file.append("userChrome.css");
var localFile = Components.classes["@mozilla.org/file/local;1"].
  createInstance(Components.interfaces.nsILocalFile);
var process = Components.classes["@mozilla.org/process/util;1"].
  createInstance(Components.interfaces.nsIProcess);
var args = [file.path];
localFile.initWithPath("/usr/bin/gedit");
process.init(localFile);
process.run(false, args, args.length);
}

this.userContent = function(event) {
var file = Components.classes["@mozilla.org/file/directory_service;1"].
  getService(Components.interfaces.nsIProperties).
  get("ProfD", Components.interfaces.nsIFile);
file.append("chrome");
file.append("userContent.css");
var localFile = Components.classes["@mozilla.org/file/local;1"].
  createInstance(Components.interfaces.nsILocalFile);
var process = Components.classes["@mozilla.org/process/util;1"].
  createInstance(Components.interfaces.nsIProcess);
var args = [file.path];
localFile.initWithPath("/usr/bin/gedit");
process.init(localFile);
process.run(false, args, args.length);
}

this.prefs = function(event) {
var file = Components.classes["@mozilla.org/file/directory_service;1"].
  getService(Components.interfaces.nsIProperties).
  get("ProfD", Components.interfaces.nsIFile);
file.append("prefs.js");
var localFile = Components.classes["@mozilla.org/file/local;1"].
  createInstance(Components.interfaces.nsILocalFile);
var process = Components.classes["@mozilla.org/process/util;1"].
  createInstance(Components.interfaces.nsIProcess);
var args = [file.path];
localFile.initWithPath("/usr/bin/gedit");
process.init(localFile);
process.run(false, args, args.length);
}

this.userJS = function(event) {
var file = Components.classes["@mozilla.org/file/directory_service;1"].
  getService(Components.interfaces.nsIProperties).
  get("ProfD", Components.interfaces.nsIFile);
file.append("user.js");
var localFile = Components.classes["@mozilla.org/file/local;1"].
  createInstance(Components.interfaces.nsILocalFile);
var process = Components.classes["@mozilla.org/process/util;1"].
  createInstance(Components.interfaces.nsIProcess);
var args = [file.path];
localFile.initWithPath("/usr/bin/gedit");
process.init(localFile);
process.run(false, args, args.length);
}

   *Исправлена грамматическая ошибка в описании кнопки

Fit to Page Width(Firefox)Подогнать страницу по ширине с возможностью отключения без обновления страницы. Это улучшенная и дополненная Fit to Width от Dark-Demon
Автор:Killy(http://forum.mozilla-russia.org/viewtop … 20#p194020)

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

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3EFit%20to%20Page%20Width%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAA3NCSVQICAjb4U/gAAAAFVBMVEX///8AzP8AAAAAzP8Amf8AAMwAAACWs84cAAAAB3RSTlMAd3f/////1grLHQAAAAlwSFlzAAALEgAACxIB0t1+/AAAACB0RVh0U29mdHdhcmUATWFjcm9tZWRpYSBGaXJld29ya3MgTVi7kSokAAAAFnRFWHRDcmVhdGlvbiBUaW1lADA1LzI4LzA2GvIWfQAAAEpJREFUeJxjYMAErKGhgRCGi0uIAJjhbBxiCGO4AIUUgIzQ0AAmhiQgw9gkQI0hTRXECEpDiChAGExgXUAGxEAXlwCIFUDtWOwGAHj3ENTzyS3QAAAAAElFTkSuQmCC%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bvar%20is_active%3D0%3B%0Avar%20rule1%3D0%3B%0Avar%20rule2%3D0%3B%0Athis.checked%3Dfalse%3B%0Athis.tooltipText%3D%22Fit%20to%20Page%20Width%3A%20Off%22%0A%0Athis.onclick%20%3D%20function%28event%29%20%7B%0A%0A%20if%20%28event.button%20%3D%3D%200%29%20%7B%0A%0A%20%20if%20%28is_active%20%3D%3D%200%29%20%7B%0A%20%20%20%20var%20s%3Dcontent.document.styleSheets%5B0%5D%3B%0A%20%20%20%20rule1%3Ds.insertRule%28%27div%2Ctable%2Ctbody%2Ctr%2Ctd%2Cp%2Col%2Cul%2Cdl%2Ch1%2Ch2%2Ch3%2Chr%20%7Bmax-width%3A99%25%21important%3B%7D%27%2C1%29%3B%0A%20%20%20%20rule2%3Ds.insertRule%28%27pre%20%7Bmax-width%3A99%25%21important%3B%20white-space%3Anormal%21important%3B%7D%27%2C1%29%3B%0A%0A%20%20%20%20var%20i%3Dcontent.document.images%3B%0A%20%20%20%20for%20%28var%20j%3D0%3B%20j%3Ci.length%3B%20j++%29%20%7B%0A%20%20%20%20%20%20var%20k%3Dcontent.window.innerWidth/i%5Bj%5D.width*.99%3B%0A%20%20%20%20%20%20if%20%28k%3C1%29%20%7Bi%5Bj%5D.width*%3Dk%3B%20i%5Bj%5D.height*%3Dk%3B%7D%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20is_active%3D1%3B%0A%0A%20%20%20%20this.checked%3Dtrue%3B%0A%20%20%20%20this.tooltipText%3D%22Fit%20to%20Page%20Width%3A%20On%22%0A%20%20%7D%20else%20%7B%0A%20%20%20%20var%20s%3Dcontent.document.styleSheets%5B0%5D%3B%0A%20%20%20%20if%20%28rule2%20%21%3D%200%20%29%20%7Bs.deleteRule%28rule2%29%3B%20rule2%3D0%3B%7D%0A%20%20%20%20if%20%28rule1%20%21%3D%200%20%29%20%7Bs.deleteRule%28rule1%29%3B%20rule1%3D0%3B%7D%0A%0A%20%20%20%20var%20i%3Dcontent.document.images%3B%0A%20%20%20%20for%20%28var%20j%3D0%3B%20j%3Ci.length%3B%20j++%29%20%7B%0A%20%20%20%20%20%20var%20k%3D%20content.window.innerWidth/i%5Bj%5D.width/.99%3B%0A%20%20%20%20%20%20if%20%28k%3C1%29%20%7Bi%5Bj%5D.width*%3Dk%3B%20i%5Bj%5D.height*%3Dk%3B%7D%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20is_active%3D0%3B%0A%0A%20%20%20%20this.checked%3Dfalse%3B%0A%20%20%20%20this.tooltipText%3D%22Fit%20to%20Page%20Width%3A%20Off%22%0A%20%20%7D%0A%0A%20%7D%0A%7D%0A%0Athis.setAttribute%28%22onleftclick%22%2C%20%22this.onclick%28%29%22%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%5Bhttp%3A//forum.mozilla-russia.org/viewtopic.php%3Fpid%3D194020%23p194020%0Aautor%20Killy%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

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

Выделить код

Код:

var is_active=0;
var rule1=0;
var rule2=0;
this.checked=false;
this.tooltipText="Fit to Page Width: Off"

this.onclick = function(event) {

 if (event.button == 0) {

  if (is_active == 0) {
    var s=content.document.styleSheets[0];
    rule1=s.insertRule('div,table,tbody,tr,td,p,ol,ul,dl,h1,h2,h3,hr {max-width:99%!important;}',1);
    rule2=s.insertRule('pre {max-width:99%!important; white-space:normal!important;}',1);

    var i=content.document.images;
    for (var j=0; j<i.length; j++) {
      var k=content.window.innerWidth/i[j].width*.99;
      if (k<1) {i[j].width*=k; i[j].height*=k;};
    }

    is_active=1;

    this.checked=true;
    this.tooltipText="Fit to Page Width: On"
  } else {
    var s=content.document.styleSheets[0];
    if (rule2 != 0 ) {s.deleteRule(rule2); rule2=0;}
    if (rule1 != 0 ) {s.deleteRule(rule1); rule1=0;}

    var i=content.document.images;
    for (var j=0; j<i.length; j++) {
      var k= content.window.innerWidth/i[j].width/.99;
      if (k<1) {i[j].width*=k; i[j].height*=k;};
    }

    is_active=0;

    this.checked=false;
    this.tooltipText="Fit to Page Width: Off"
  }

 }
}

this.setAttribute("onleftclick", "this.onclick()");

Make bookmark button(Firefox)
кнопка, которая  из текущей страницы  создаёт рядом с собой новую кнопку(с названием и иконкой данной страницы),открывающую эту страницу.
Автор:Anton  http://forum.mozilla-russia.org/viewtop … 38#p349838

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

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3EMake%20bookmark%20button%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAACXBIWXMAAAsSAAALEgHS3X78AAADrElEQVQ4jZXUS2/UVRzG8e/vnNPpbTrToVRwmhIJViiJ9IIrF8aIb8B3IIkudOXSsHLDS2BlggtfhELYYAxhg4jQRqlogV6m08695387/3OOKxINK5/t8yTP7gMgWmvF/4hSanJx8czKhx9duTI1XdUA8qqsVCr1hYWFs0tLS+eXl5eX19bWLtdqteLatWtfD0ej8fX19dWVldWVtdXVS8sX3llabDYXZ6rTrK5ffvfRk42/BKhcv37926tXr34yNzdXrVQq8u93a20+ZsxYZXxcETzDwYC97oCX/YSd49Lfb5cPnneTDanX629vbm7+2mw2p2OMUSC4Io9pmoq1lsyVqp/mcmALf+h07MqEHOtpSdSUZEHHw/GpzrM7t24aIIYYPcDBQYs0dzopPRmaTMZIzVS0tUns7IS2QUhzSHIIWYFYG8tiKuttPnxsACpjY/qg3WY3jVTnmohSGKUYU5AVSHbs6Xb7DA6PcO19TrR36S9cYvjmBXHHuN7Wxp8GIPiSUeHRjdN4ZXA+YJOc1ovnDPZ2MK0dmq0dltv7VHsdJl9u86I03P7yhiS1i6PjnT92jYiiLApsqbBOkbkSVTHs7OxTfPUZ7zdPIaVDuZLSB1yek3nFQms7vvfdN/Lw05uDorPfUaKEosgZlpqR0wyzyDCDfh6QrS06t26TJhnqjdNMzs9TbTSoTkwQJquxsb2Jf/pbv3A2NSKi8qKgHw02DWgfUB6GaWBcFO3EcrbXw9TrxCQhpilhOCBL0jjZOWTm8d2CGDEiIkXh6AaDDRHtQRz0k8hJV2JLz9HeHtVqlZjnhDwn7/fJkhTvCuYf/aCIAaMgFGXgKFOkEtAxICYysOBiBOAoz5lvtQgx4rOMxFqSLJPMw6nte2cAjAi4EOlZTRJBxwg6MEoENzWN6R3SFUWn0wGgLApS5xjluYzKklmlLjZCOG+A6AP0jyNp8KgQQYc4Oi5DopSaBPqliy3vlc5zyhhJvY+2LMMQfIxx6i2Rj42IjIdITKwnKctSYtBqzKgsregEifMgKi9kT4kfz7LoQZWgvNba1GroRoPa0dE5k+f5CS1S0bqGy4xxx12x3Y3+/saPv1+ww9Uu+C1X7J6p1c6JcyaZmWFUr496s7NP9kXuPet0fnqWZXcFqH3+xVffb+aXTv79+Oc7o90H92376S+hTA8aSq0UMR7YGIsPZmdvuFpt74W1tztp+jDLsjYhvGaVBv6Dm4iSV1zJa3MQECVilIgB5B8VOzFqiSqfKQAAAABJRU5ErkJggg%3D%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B/*Initialization%20Code*/%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*CODE*/%0Avar%20doc%20%3D%20getBrowser%20%28%29.%20contentDocument%3B%0Avar%20title%20%3D%20doc.%20title%3B%0Avar%20pageURI%20%3D%20makeURI%20%28doc.%20location.%20href%2C%20null%2C%20null%29%3B%0Avar%20iconData%20%3D%20getFaviconData%20%28pageURI%29%3B%0Acustombuttons.%20cloneButton%20%28this%29%3B%0Avar%20newButtonLink%20%3D%20custombuttons.%20makeButtonLink%20%28%22update%22%2C%20this.%20nextSibling.%20id%29%3B%0Avar%20params%20%3D%20custombuttons.%20cbService.%20getButtonParameters%20%28newButtonLink%29.%20wrappedJSObject%3B%0Aparams.%20image%20%3D%20iconData%3B%0Aparams.%20name%20%3D%20title%3B%0Aparams.%20code%20%3D%20%22getBrowser%20%28%29.%20selectedTab%20%3D%20getBrowser%20%28%29.%20addTab%20%28%5C%22%22%20+%20doc.%20location.%20href%20+%20%22%5C%22%29%3B%22%3B%0Aparams.%20wrappedJSObject%20%3D%20params%3B%0Acustombuttons.%20cbService.%20installButton%20%28params%29%3B%0Afunction%20makeURI%20%28aURL%2C%20aOriginCharset%2C%20aBaseURI%29%0A%7B%0A%20%20%20%20var%20ioService%20%3D%20Components.%20classes%5B%22@mozilla.org/network/io-service%3B1%22%5D.%0A%20%20%20%20%20%20%20%20%20%20%20%20getService%20%28Components.%20interfaces.%20nsIIOService%29%3B%0A%20%20%20%20return%20ioService.%20newURI%20%28aURL%2C%20aOriginCharset%2C%20aBaseURI%29%3B%0A%7D%0Afunction%20getFaviconData%20%28pageURI%29%0A%7B%0A%20%20%20%20var%20fis%20%3D%20Components.%20classes%20%5B%22@mozilla.org/browser/favicon-service%3B1%22%5D.%0A%20%20%20%20%20%20%20%20%20%20getService%28Components.interfaces.nsIFaviconService%29%3B%0A%20%20%20%20var%20iconURL%20/*%3D%20fis.%20getFaviconForPage%20%28pageURI%29*/%3B%0A%20%20%20%20%0A%20%20%20%20try%0A%20%20%20%20%7B%0A%09%20%20%20%20iconURL%20%3D%20fis.%20getFaviconForPage%20%28pageURI%29%3B%0A%20%20%20%20%7D%20catch%20%28e%29%20%7B%7D%0A%20%20%20%20if%20%28iconURL%29%0A%20%20%20%20%0A%20%20%20%20return%20fis.%20getFaviconDataAsDataURL%20%28iconURL%29%3B%0A%20%20%20%20return%20%22%22%3B%0A%7D%0A%0Avar%20elt%20%3D%20document.%20getAnonymousElementByAttribute%20%28this%2C%20%22class%22%2C%20%22toolbarbutton-icon%22%29%3B%0Aelt.%20style.%20height%20%3D%20%2216px%22%3B%0Aelt.%20style.%20width%20%3D%20%2216px%22%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%5Bhttp%3A//forum.mozilla-russia.org/viewtopic.php%3Fpid%3D349838%23p349838%0Aautor%3A%20Anton%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

Код:

Выделить код

Код:

/*CODE*/
var doc = getBrowser (). contentDocument;
var title = doc. title;
var pageURI = makeURI (doc. location. href, null, null);
var iconData = getFaviconData (pageURI);
custombuttons. cloneButton (this);
var newButtonLink = custombuttons. makeButtonLink ("update", this. nextSibling. id);
var params = custombuttons. cbService. getButtonParameters (newButtonLink). wrappedJSObject;
params. image = iconData;
params. name = title;
params. code = "getBrowser (). selectedTab = getBrowser (). addTab (\"" + doc. location. href + "\");";
params. wrappedJSObject = params;
custombuttons. cbService. installButton (params);
function makeURI (aURL, aOriginCharset, aBaseURI)
{
    var ioService = Components. classes["@mozilla.org/network/io-service;1"].
            getService (Components. interfaces. nsIIOService);
    return ioService. newURI (aURL, aOriginCharset, aBaseURI);
}
function getFaviconData (pageURI)
{
    var fis = Components. classes ["@mozilla.org/browser/favicon-service;1"].
          getService(Components.interfaces.nsIFaviconService);
    var iconURL ;
    
    try
    {
        iconURL = fis. getFaviconForPage (pageURI);
    } catch (e) {}
    if (iconURL)
    
    return fis. getFaviconDataAsDataURL (iconURL);
    return "";
}

Fit to width 2 ( Firefox 3.6 и выше, SeaMonkey )
Выравнивает страницу по ширине окна.
Автор:Squeaky

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

Выделить код

Код:

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%3EFit%20to%20width%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/gif%3Bbase64%2CR0lGODlhDQAQAPcAAAAAAAAAzgAI1gAY1gAx3gBC3gBK5wBS5wBj5wBr7wBr9wCM7wCc/wCl/wCt/wC1/wDO/wgh1hgp1hgxxhiE3hit5yFSziGU1iGt/yG11ikpISkpKSm1/zExKTExMTExlDF7rTGlxjGlzjk5MTk5OUJre0JrhEJ7hEqcrUrW91JSSlJSUlJSlGuEhGuEjHt7c3t7e3ucnHve75zn75zn99b399739+/39/f39///9////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////ywAAAAADQAQAAAIlwADCBwYQIKMGzgSBjCAIEECBAQicJhRA2GABA0cZDwQgUEKijguOoBAEkFHCB9DJhhZcgCDlxhksKDAEgICAQRyWoixAkQFkhAWFBg64YMKACtQAF2K4igAAB5aLIXQosNTACROZJia4cQIABtMhJhKMkSJDTAu1Fzq4MILkWQhOEggEKNGB3jxMqC7sOFDh34NEBw8OCAAOw%3D%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B/*Initialization%20Code*/%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B%0A%0A//%20%3D%3DUserScript%3D%3D%0A//%20@name%20Custom%20Buttons%0A//%20@namespace%20http%3A//www.greasespot.net/%0A//%20@include%20http%3A//custombuttons.mozdev.org/drupal/content/*%0A//%20@exclude%20http%3A//custombuttons.mozdev.org/drupal/content/main-page%0A//%20@exclude%20http%3A//custombuttons.mozdev.org/drupal/content/custom-buttons-documentation%0A//%20%3D%3D/UserScript%3D%3D%0A%20%0A%20if%28content.document.getElementById%28%22sidebar-left%22%29%29%0A%20%7B%0A%20%20%20%20content.document.getElementById%28%22sidebar-left%22%29.style.display%20%3D%20%22none%22%3B%0A%20%7D%0A%20%0A%0A%20%0Avar%20d%20%3D%20content.document%3B%0Avar%20s%20%3D%20d.createElement%28%22style%22%29%3B%0As.type%20%3D%20%22text/css%22%3B%0As.innerHTML%20%3D%20%22%23sidebar-left%20+%20td%20%7B%20padding-left%3A%200%20%7D%22%3B%0Avar%20h%20%3D%20d.getElementsByTagName%28%22head%22%29%5B0%5D%3B%0Ah.appendChild%28s%29%3B%0A%20%0Avar%20p%20%3D%20content.document.getElementsByTagName%28%22pre%22%29%3B%0Afor%20%28var%20i%20%3D%200%3B%20i%20%3C%20p.length%3B%20i++%29%20%7B%0A%20%20p%5Bi%5D.style.overflow%20%3D%20%22auto%22%3B%0A%20%20if%20%28p%5Bi%5D.textContent.indexOf%28%22data%3Aimage%22%29%20%3D%3D%20-1%29%20%7B%0A%20%20%20%20p%5Bi%5D.style.whiteSpace%20%3D%20%22pre-wrap%22%3B%0A%20%20%20%20p%5Bi%5D.style.wordWrap%20%3D%20%22break-word%22%3B%0A%20%20%7D%0A%7D%0A%20%0A/*%20double%20click%20to%20select%20all%20*/%0A%20%0A//var%20d%20%3D%20document%3B%0A//var%20p%20%3D%20d.getElementsByTagName%28%22pre%22%29%3B%0Afor%20%28var%20i%20%3D%200%3B%20i%20%3C%20p.length%3B%20i++%29%20%7B%0A%20%20p%5Bi%5D.addEventListener%28%22dblclick%22%2C%20function%20%28%29%20%7B%0A%20%20%20%20var%20s%20%3D%20getSelection%28%29%3B%0A%20%20%20%20var%20r%20%3D%20d.createRange%28%29%3B%0A%20%20%20%20r.selectNodeContents%28this%29%3B%0A%20%20%20%20s.removeAllRanges%28%29%3B%0A%20%20%20%20s.addRange%28r%29%3B%0A%20%20%7D%2C%20false%29%3B%0A%7D%0A%20%0A/*%20fit%20to%20width%20*/%0A%20%0Afunction%20t%28f%29%20%7B%0A%20%20var%20a%20%3D%20d.createNodeIterator%28d%2C%201%2C%20f%2C%20false%29%3B%0A%20%20while%20%28a.nextNode%28%29%29%20%7B%7D%0A%7D%0A//var%20d%20%3D%20document%3B%0At%28function%20%28e%29%20%7B%0A%20%20var%20x%20%3D%20e.offsetLeft%3B%0A%20%20var%20l%20%3D%20e.offsetParent%3B%0A%20%20while%20%28l%20%21%3D%20null%29%20%7B%0A%20%20%20%20x%20+%3D%20l.offsetLeft%3B%0A%20%20%20%20l%20%3D%20l.offsetParent%3B%0A%20%20%7D%0A%20%20var%20w%20%3D%20d.documentElement.clientWidth%20-%20x%3B%0A%20%20var%20s%20%3D%20e.style%3B%0A%20%20if%20%28s.marginLeft%29%20w%20-%3D%20s.marginLeft%3B%0A%20%20if%20%28s.marginRight%29%20w%20-%3D%20s.marginRight%3B%0A%20%20if%20%28s.paddingLeft%29%20w%20-%3D%20s.paddingLeft%3B%0A%20%20if%20%28s.paddingRight%29%20w%20-%3D%20s.paddingRight%3B%0A%20%20if%20%28s.borderWidth%29%20w%20-%3D%20s.borderWidth%3B%0A%20%20w%20-%3D%20d.defaultView.innerWidth%20-%20d.documentElement.offsetWidth%3B%0A%20%20if%20%28e.tagName%20%3D%3D%20%22IMG%22%29%20%7B%0A%20%20%20%20var%20h%20%3D%20e.clientHeight%20*%20w%20/%20e.clientWidth%3B%0A%20%20%20%20s.maxHeight%20%3D%20h%3B%0A%20%20%7D%0A%20%20s.maxWidth%20%3D%20w%20+%20%22px%22%3B%0A%7D%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

Код:

Выделить код

Код:

// ==UserScript==
// @name Custom Buttons
// @namespace http://www.greasespot.net/
// @include http://custombuttons.mozdev.org/drupal/content/*
// @exclude http://custombuttons.mozdev.org/drupal/content/main-page
// @exclude http://custombuttons.mozdev.org/drupal/content/custom-buttons-documentation
// ==/UserScript==
 
 if(content.document.getElementById("sidebar-left"))
 {
    content.document.getElementById("sidebar-left").style.display = "none";
 }
 

 
var d = content.document;
var s = d.createElement("style");
s.type = "text/css";
s.innerHTML = "#sidebar-left + td { padding-left: 0 }";
var h = d.getElementsByTagName("head")[0];
h.appendChild(s);
 
var p = content.document.getElementsByTagName("pre");
for (var i = 0; i < p.length; i++) {
  p[i].style.overflow = "auto";
  if (p[i].textContent.indexOf("data:image") == -1) {
    p[i].style.whiteSpace = "pre-wrap";
    p[i].style.wordWrap = "break-word";
  }
}
 
/* double click to select all */
 
//var d = document;
//var p = d.getElementsByTagName("pre");
for (var i = 0; i < p.length; i++) {
  p[i].addEventListener("dblclick", function () {
    var s = getSelection();
    var r = d.createRange();
    r.selectNodeContents(this);
    s.removeAllRanges();
    s.addRange(r);
  }, false);
}
 
/* fit to width */
 
function t(f) {
  var a = d.createNodeIterator(d, 1, f, false);
  while (a.nextNode()) {}
}
//var d = document;
t(function (e) {
  var x = e.offsetLeft;
  var l = e.offsetParent;
  while (l != null) {
    x += l.offsetLeft;
    l = l.offsetParent;
  }
  var w = d.documentElement.clientWidth - x;
  var s = e.style;
  if (s.marginLeft) w -= s.marginLeft;
  if (s.marginRight) w -= s.marginRight;
  if (s.paddingLeft) w -= s.paddingLeft;
  if (s.paddingRight) w -= s.paddingRight;
  if (s.borderWidth) w -= s.borderWidth;
  w -= d.defaultView.innerWidth - d.documentElement.offsetWidth;
  if (e.tagName == "IMG") {
    var h = e.clientHeight * w / e.clientWidth;
    s.maxHeight = h;
  }
  s.maxWidth = w + "px";
});


Fit to width 3 ( Firefox 3.6 и выше, SeaMonkey )
Выравнивает страницу по ширине окна.
Автор:Anton 
скрытый текст
Код кнопки:

Выделить код

Код:

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%3EFit%20to%20width%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/gif%3Bbase64%2CR0lGODlhDQAQAPcAAAAAAAAAzgAI1gAY1gAx3gBC3gBK5wBS5wBj5wBr7wBr9wCM7wCc/wCl/wCt/wC1/wDO/wgh1hgp1hgxxhiE3hit5yFSziGU1iGt/yG11ikpISkpKSm1/zExKTExMTExlDF7rTGlxjGlzjk5MTk5OUJre0JrhEJ7hEqcrUrW91JSSlJSUlJSlGuEhGuEjHt7c3t7e3ucnHve75zn75zn99b399739+/39/f39///9////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////ywAAAAADQAQAAAIlwADCBwYQIKMGzgSBjCAIEECBAQicJhRA2GABA0cZDwQgUEKijguOoBAEkFHCB9DJhhZcgCDlxhksKDAEgICAQRyWoixAkQFkhAWFBg64YMKACtQAF2K4igAAB5aLIXQosNTACROZJia4cQIABtMhJhKMkSJDTAu1Fzq4MILkWQhOEggEKNGB3jxMqC7sOFDh34NEBw8OCAAOw%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%5Btry%0A%7B%0A%20%20%20%20var%20doc%20%3D%20getBrowser%20%28%29.%20contentDocument%3B%0A%20%20%20%20doc.%20body.%20style.%20backgroundColor%20%3D%20%22rgb%28236%2C233%2C216%29%22%3B%0A%20%20%20%20doc.%20body.%20style.%20lineHeight%20%3D%20%222%22%3B%0A%20%20%20%20doc.%20body.%20style.%20textIndent%20%3D%20%223em%22%3B%0A%20%20%20%20doc.%20body.%20style.%20textHeight%20%3D%20%223%25%22%3B%0A%20%20%20%20doc.%20body.%20style.%20textAlign%20%3D%20%22justify%22%3B%0A%20%20%20%20%0A%7D%0Acatch%20%28e%29%20%7B%7D%20%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

Код:

Выделить код

Код:

try
{
    var doc = getBrowser (). contentDocument;
    doc. body. style. backgroundColor = "rgb(236,233,216)";
    doc. body. style. lineHeight = "2";
    doc. body. style. textIndent = "3em";
    doc. body. style. textHeight = "3%";
    doc. body. style. textAlign = "justify";
    
}
catch (e) {}

Permanent Bookmark(Firefox4.0-5.0)
Нажатие на иконку - заносит текущую страницу в список кнопки.
Нажатие на стрелку- открывает список кнопки.
Нажатие на пункт "Save" в списке сохраняет список.
Удаление из списка - правой клавишей мыши по выбранной странице и нажать появившийся пункт "Remove Item ?".
Появится запрос на подтверждение удаления - нажать "Ок".
Открыть список, произвести сохранение нажатием на пункт "Save".
Список сохранённых страниц находится в папке custombuttons текущего профиля в файле "Bookmarks300.txt"
Авторы: deepakjoshi04, SCClockDr 
Адаптация под firefox 4.0.* : morat
Коррекция  сохранения кириллицы: Anton поправка от Infocatcher внесена.

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

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3EPermanent%20Bookmark%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAADMElEQVR4Xk3RT2tcVQBA8XPve5OZ95zJTOZPk0nHTtLGJIU0WrRGLVJpUWoEwSK6sEJ3rgRBxKW46dIv4EJRF61uVGyFUhTdSCUbDRYTkzYNGSeTZCbOTF7e33uvRSjmB+cTHFH9oOmeslr7M7JDhOQgY7iQSlkXtFIXfSW5uqho7wQIDA9IrbmsNI8ADgeEscrNTA1/+OzckReSRNeFAAwYg+AAmXfl9GheXk+0+RiwAbQ25HOZt+bPjc88ceJQJZ9Lz4dBct4I8ZW0xUUjACH+yxp6/v3MZEFfyob7s0LKXqL0L4kyx8+ern8yO110Mmmb3l5yenp86PV0Wp7c6FHsNjpXtFaJjhNktxveaJJdHirnGKvl31XGPD06knvnzFytCGBJKBedwrFaIffUuMPokH0GwSRKg9ZIafT60rb++W/PUCk61blHa1888/jhS5m0BCCOoX64wO5eSPkhyeyYS8oZeAM/gDBGmiCi1fSuddJ5f3N7j+NT5aP5wfQAgNYQhpqca7HnRQwfyjFRFJRLmVcI4xJhhFRBhIria79v6fVG20fFETs7HlpDHBuSROH7CcWCix8phl2Yna4cI4rP4QdIoxUoFTda0Zeek2dldZdSMcvKWh8hBHGsSRJN1rXo/BMw8XCBsbKQdiH7ErGSMt4PUIGPtxdd+XNHx/eafQZShs2tPrHSKJVgjGG7E+BkbKoVh1pOMDE1chY/rNs6jACIonD5XmfwZq+UenF9o8/9EzQaPbJOiijWtHd9TkyWSNuSyapLverVllznOcs6+iYmUaCUvv/bGS47L7uhh+va2JagMOiwcm+XkZJLacihueNxd62NUxrk9mq/JAEApBTEXvD5D4u9r9f6gpXVbXpeSKu9jzYGISXf/3SH7368w1/bEV1fQGbgiI1l8YCdJmytd9+7kbNPVk8N1JeWN6nXy7S2+iwsNmhHKVY2YXltf/n2r4vXzW7vMyFPf8v/DDqKITGvzp+vX3ntSccScUAnSnNzoctvC83FjS3vU1rtb7CtVSyJ4LGrHIQQoBR22vpo4njl7UrR5Y9bdxc6G7uX6Xm3KOa2CCJINAj4F0IRi07s8/Z5AAAAAElFTkSuQmCC%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*/%0Alet%20mWid%20%3D%2055%3B%0Afunction%20fileName%28%29%7B%0A%09let%20dir%20%3D%20Components.classes%5B%22@mozilla.org/file/directory_service%3B1%22%5D.getService%28Components.interfaces.nsIProperties%29.get%28%22ProfD%22%2C%20Components.interfaces.nsIFile%29%3B%0A%09dir.append%28%22custombuttons%22%29%3B%0A%09if%20%28%21dir.exists%28%29%29%20%7B%0A%09%09try%7B%0A%09%09%09dir.create%280x01%2C%200755%29%3B%0A%09%09%7D%20catch%28e%29%7B%0A%09%09%09let%20msg%3D%27Custom%20Buttons%20error.%5D%27+%27%5B%20Event%3A%20Creating%20custombuttons%20directory%5D%27+%27%5B%20%27+e%3BComponents.utils.reportError%28msg%29%3B%0A%09%09%7D%0A%09%7D%0A%09return%20dir.path%3B%0A%7D%0A%0Afunction%20writeFile%20%28sFilePath%2C%20sFileContent%29%0A%7B%0A%20%20%20%20var%20suc%20%3D%20Cc%20%5B%22@mozilla.org/intl/scriptableunicodeconverter%22%5D.%20createInstance%20%28Ci.%20nsIScriptableUnicodeConverter%29%3B%0A%20%20%20%20suc.%20charset%20%3D%20%22UTF-8%22%3B%0A%20%20%20%20cbu.%20writeFile%20%28sFilePath%2C%20suc.%20ConvertFromUnicode%20%28sFileContent%29%29%3B%0A%7D%0A%0Afunction%20readFile%20%28sFilePath%29%0A%7B%0A%20%20%20%20var%20suc%20%3D%20Cc%20%5B%22@mozilla.org/intl/scriptableunicodeconverter%22%5D.%20createInstance%20%28Ci.%20nsIScriptableUnicodeConverter%29%3B%0A%20%20%20%20suc.%20charset%20%3D%20%22UTF-8%22%3B%0A%20%20%20%20%20%20%20%20try%20%7B%0A%20%20%20%20%20%20%20%20return%20suc.%20ConvertToUnicode%20%28cbu.%20readFile%20%28sFilePath%29%29%3B%0A%20%20%20%20%7D%0A%20%20%20%20catch%28e%29%20%7B%0A%20%20%20%20%7D%0A%20%20%20%20return%20%22%22%3B%0A%7D%0A//********%20%20Read%20write%20******%0Alet%20mp%3B%0Athis.removeNode%20%3D%20function%28%20aNode%20%29%7B%0A%09closeMenus%28%20aNode%20%29%3B%0A%09mp.removeChild%28%20aNode%20%29%3B%0A%09//reAssignId%28%29%3B%0A%7D%3B%0A%0Afunction%20reAssignId%28%29%7B%0A%09let%20NL%3Dmp.childNodes%3B%0A%09for%28let%20i%3D0%3Bi%3CNL.length%3Bi++%29%0A%09%7B%0A%09%09mp.removeChild%28NL%5Bi%5D.id%3Di+1%29%3B%0A%09%7D%0A%7D%0A%0Afunction%20addMenuItem%28aNode%2C%20aLabel%2CaURL%2CaImg%2C%20aContextId%2C%20aCommand%29%20%7B%0A%09let%20mi%20%3D%20aNode.appendChild%28document.createElement%28%22menuitem%22%29%29%3B%0A%09mi.setAttribute%28%22label%22%2C%20aLabel.substr%280%2CmWid%29%29%3B%0A%09mi.setAttribute%28%22value%22%2C%20aURL%29%3B%0A%09mi.setAttribute%28%22class%22%2C%22menuitem-iconic%22%29%0A%09mi.setAttribute%28%22image%22%2C%20aImg%29%3B%0A%09mi.setAttribute%28%22name%22%2C%20aImg%29%3B%0A%09mi.setAttribute%28%22id%22%2CaNode.childNodes.length%29%3B%0A%09if%28aContextId%29%20mi.setAttribute%28%22context%22%2C%20aContextId%29%3B%0A%09if%28aCommand%29%20mi.setAttribute%28%22oncommand%22%2C%20aCommand%29%3B%0A%7D%0Afunction%20donoth%28%29%7B%7D%0A%0A/*%20%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%20%20Execute%20Init%20Code%20%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%20*/%0Alet%20contextId%20%3D%20%22popup-item-bookmark%22%3B%0Alet%20test%20%3D%20document.getElementById%28contextId%29%3B%0Aif%28test%29%20test.parentNode.removeChild%28test%29%3B%0Alet%20mainPopup%20%3D%20document.getElementById%28%22mainPopupSet%22%29%3B%0Alet%20context%20%3D%20mainPopup.appendChild%28document.createElement%28%22popup%22%29%29%3B%0Acontext.id%20%3D%20contextId%3B%0AaddMenuItem%28context%2C%20%22Remove%20Item%3F%22%2Cnull%2Cthis.image%2C%20null%2C%20%22alert%28document.popupNode.label%29%3B%20document.popupNode.parentNode.parentNode.removeNode%28document.popupNode%29%3B%22%29%3B%0Alet%20filePath%3DfileName%28%29+%22/Bookmarks300.txt%22%3B%0Alet%20data%3DreadFile%28filePath%29%3B%0Alet%20popupItems%3Ddata.split%28%27%5Cn%27%29%3B%0Amp%20%3D%20document.createElement%28%22menupopup%22%29%3B%0AaddMenuItem%28mp%2C%20%22Save%22%2C%22Save%22%2Cthis.image%2Cnull%2C%22this.parentNode.parentNode.save%28%29%22%29%3B%0Amp.setAttribute%28%22oncommand%22%2C%20%22this.parentNode.openPage%28event%29%22%29%3B%0Afor%20%28let%20i%20in%20popupItems%29%20%7B%0A%09popupItems%5Bi%5D.replace%28/%5C%5Cs/g%2C%27%27%29%3B%0A%09if%28popupItems%5Bi%5D.length%3E1%29%7B%0A%09%20%20%20let%20pItem%3DpopupItems%5Bi%5D.split%28%22%5D%7E%5B%22%29%3B%0A%09%09if%28pItem.length%3D%3D3%29%0A%09%09%7B%0A%09%09%20%20addMenuItem%28mp%2C%20pItem%5B0%5D%2CpItem%5B1%5D%2CpItem%5B2%5D%2C%20contextId%29%3B%0A%09%09%7D%0A%09%7D%0A%7D%20/*%20End%20for*/%0Afunction%20getData%28%29%7B%0A%09let%20NL%3Dmp.childNodes%3B%0A%09let%20data%3D%22%22%3B%0Afor%28let%20i%3D1%3Bi%3CNL.length%3Bi++%29%7B%0A%09%09let%20img%3DNL%5Bi%5D.getAttribute%28%22image%22%29%3B%0A%09%09data%3Ddata+NL%5Bi%5D.label+%22%5D%7E%5B%22+NL%5Bi%5D.value+%22%5D%7E%5B%22+img+%22%5Cn%22%3B%0A%09%7D%0A%09return%20data%3B%0A%7D%0Athis.execute%3Dfunction%28evt%29%7B%0A%09if%28evt.target.value%3D%3D-1%29%20AddMenuItem%28%29%3B%0A%7D%0Afunction%20AddMenuItem%28%29%7B%0A%09let%20img%3Ddocument.getElementById%28%22page-proxy-favicon%22%29.src%3B%0A%09let%20name%3Dcontent.document.title%3B%0A%09let%20url%3Ddocument.getElementById%28%22urlbar%22%29.value%3B%0A%09addMenuItem%28mp%2Cname%2Curl%2Cimg%2CcontextId%29%3B%0A%09%0Afunction%20getChildFolder%28aFolderId%2C%20aSubFolder%29%20%7B%0A%20%20var%20htService%20%3D%20Components.classes%5B%22@mozilla.org/browser/nav-history-service%3B1%22%5D.%0A%20%20%20%20getService%28Components.interfaces.nsINavHistoryService%29%3B%0A%20%20var%20query%20%3D%20htService.getNewQuery%28%29%3B%0A%20%20var%20options%20%3D%20htService.getNewQueryOptions%28%29%3B%0A%20%20query.setFolders%28%5BaFolderId%5D%2C%201%29%3B%0A%20%20var%20result%20%3D%20htService.executeQuery%28query%2C%20options%29%3B%0A%20%20var%20rootNode%20%3D%20result.root%3B%0A%20%20var%20childFolder%20%3D%200%3B%0A%20%20rootNode.containerOpen%20%3D%20true%3B%0A%20%20for%20%28var%20i%20%3D%200%3B%20i%20%3C%20rootNode.childCount%3B%20i++%29%20%7B%0A%20%20%20%20var%20node%20%3D%20rootNode.getChild%28i%29%3B%0A%20%20%20%20if%20%28node.type%20%3D%3D%20node.RESULT_TYPE_FOLDER%20%26%26%20node.title%20%3D%3D%20aSubFolder%29%20%7B%0A%20%20%20%20%20%20childFolder%20%3D%20node.itemId%3B%0A%20%20%20%20%20%20break%3B%0A%20%20%20%20%7D%0A%20%20%7D%0A%20%20rootNode.containerOpen%20%3D%20false%3B%0A%20%20return%20childFolder%3B%0A%7D%09%0A%09%0Avar%20bmService%20%3D%20Components.classes%5B%22@mozilla.org/browser/nav-bookmarks-service%3B1%22%5D.%0A%20%20getService%28Components.interfaces.nsINavBookmarksService%29%3B%0Avar%20ioService%20%3D%20Components.classes%5B%22@mozilla.org/network/io-service%3B1%22%5D.%0A%20%20getService%28Components.interfaces.nsIIOService%29%3B%0Avar%20folder%3B%0Afolder%20%3D%20bmService.bookmarksMenuFolder%3B%20//%20Bookmarks%20Menu%0Afolder%20%3D%20bmService.getChildFolder%28folder%2C%20%22Permanent%20Bookmarks%22%29%3B%0Avar%20uri%20%3D%20ioService.newURI%28content.document.location.href%2C%20null%2C%20null%29%3B%0Avar%20title%20%3D%20content.document.title%3B%0AbmService.insertBookmark%28folder%2C%20uri%2C%20bmService.DEFAULT_INDEX%2C%20title%29%3B%09%0A%09%0A%7D%0Athis.save%20%3D%20function%28%29%0A%7B%0A%09writeFile%28filePath%2CgetData%28%29%29%0A%7D%3B%0Athis.openPage%20%3D%20function%28%20e%20%29%0A%7B%0A%09let%20link%20%3D%20e.target.value%0A%09if%20%28link%20%21%3D%20%22Save%22%29%7B%0A%09%09let%20newTab%20%3D%20gBrowser.addTab%28link%29%3B%0A%09%09gBrowser.selectedTab%20%3D%20newTab%3B%0A%09%7D%0A%7D%3B%0A%0A%0A%0Athis.setAttribute%28%22onclick%22%2C%20%22this.buttonClick%28evt%29%22%29%3B%0A%0Athis.%20handleClick%20%3D%20function%20%28evt%29%0A%7B%0Avar%20menuitem%20%3D%20evt.%20target%3B%0Avar%20url%20%3D%20menuitem.%20getAttributeNS%20%28%22http%3A//xsms.nm.ru/custombuttons/%22%2C%20%22url%22%29%3B%0Aif%20%28event.%20button%20%3D%3D%200%29%0AgBrowser.%20addTab%20%28url%29%3B%0Aelse%20if%20%28event.%20button%20%3D%3D%201%29%0A%20%20gClipboard.write%28url%29%3B%0A%20%20if%20%28evt.button%20%3D%3D%201%29%20alert%28%22Copied%20to%20Clipboard%22%29%3B%0A%20%20custombuttons.alertSlide%28%22Copied%20to%20Clipboard%21%21%22%2C%20%22AWESOME%21%21%22%29%3B%28menuitem.value%29%3B%0Athis.%20open%20%3D%20false%3B%0A%7D%3B%0A%0A%0Athis.type%20%3D%20%22menu-button%22%3B%0Athis.setAttribute%28%22class%22%2C%20%22menu-iconic%22%29%3B%0Athis.setAttribute%28%22oncommand%22%2C%20%22this.execute%28event%29%3B%22%29%3B%0Athis.appendChild%28mp%29%3B%0Athis.value%3D-1%3B%0A%0Athis.setAttribute%28%22author%22%2C%20%22deepakjoshi04%2CSCClockDr%22%20%29%3B%0Athis.setAttribute%28%22status%22%2C%22Complete%22%29%3B%0Athis.setAttribute%28%22public%22%2Ctrue%29%3B%0Athis.setAttribute%28%22dependency%22%2C%22FF%202.0%2CCB%202.0.*%22%29%3B%0Athis.setAttribute%28%22version%22%2C%2220080124.01%22%29%3B%0Athis.setAttribute%28%27homepage%27%2C%20%27http%3A//custombuttons2.com/forum/buttons/buttons-database/permanent-bookmark.html%27%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%5BHelp%20has%20not%20been%20defined%20for%20this%20button.%0A%u041D%u0430%u0436%u0430%u0442%u0438%u0435%20%u043D%u0430%20%u0438%u043A%u043E%u043D%u043A%u0443%20-%20%u0437%u0430%u043D%u043E%u0441%u0438%u0442%20%u0442%u0435%u043A%u0443%u0449%u0443%u044E%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u0443%20%u0432%20%u0441%u043F%u0438%u0441%u043E%u043A%20%u043A%u043D%u043E%u043F%u043A%u0438.%0A%u041D%u0430%u0436%u0430%u0442%u0438%u0435%20%u043D%u0430%20%u0441%u0442%u0440%u0435%u043B%u043A%u0443-%20%u043E%u0442%u043A%u0440%u044B%u0432%u0430%u0435%u0442%20%u0441%u043F%u0438%u0441%u043E%u043A%20%u043A%u043D%u043E%u043F%u043A%u0438.%20%0A%u041D%u0430%u0436%u0430%u0442%u0438%u0435%20%u043D%u0430%20%u043F%u0443%u043D%u043A%u0442%20%22Save%22%20%u0432%20%u0441%u043F%u0438%u0441%u043A%u0435%20%u0441%u043E%u0445%u0440%u0430%u043D%u044F%u0435%u0442%20%u0441%u043F%u0438%u0441%u043E%u043A.%20%0A%u0423%u0434%u0430%u043B%u0435%u043D%u0438%u0435%20%u0438%u0437%20%u0441%u043F%u0438%u0441%u043A%u0430%20-%20%u043F%u0440%u0430%u0432%u043E%u0439%20%u043A%u043B%u0430%u0432%u0438%u0448%u0435%u0439%20%u043C%u044B%u0448%u0438%20%u043F%u043E%20%u0432%u044B%u0431%u0440%u0430%u043D%u043D%u043E%u0439%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u0435%20%u0438%20%u043D%u0430%u0436%u0430%u0442%u044C%20%u043F%u043E%u044F%u0432%u0438%u0432%u0448%u0438%u0439%u0441%u044F%20%u043F%u0443%u043D%u043A%u0442%20%22Remove%20Item%20%3F%22.%0A%u041F%u043E%u044F%u0432%u0438%u0442%u0441%u044F%20%u0437%u0430%u043F%u0440%u043E%u0441%20%u043D%u0430%20%u043F%u043E%u0434%u0442%u0432%u0435%u0440%u0436%u0434%u0435%u043D%u0438%u0435%20%u0443%u0434%u0430%u043B%u0435%u043D%u0438%u044F%20-%20%u043D%u0430%u0436%u0430%u0442%u044C%20%22%u041E%u043A%22.%20%0A%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20%u0441%u043F%u0438%u0441%u043E%u043A%2C%20%u043F%u0440%u043E%u0438%u0437%u0432%u0435%u0441%u0442%u0438%20%u0441%u043E%u0445%u0440%u0430%u043D%u0435%u043D%u0438%u0435%20%u043D%u0430%u0436%u0430%u0442%u0438%u0435%u043C%20%u043D%u0430%20%u043F%u0443%u043D%u043A%u0442%20%22Save%22.%20%0A%u0421%u043F%u0438%u0441%u043E%u043A%20%u0441%u043E%u0445%u0440%u0430%u043D%u0451%u043D%u043D%u044B%u0445%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%20%u043D%u0430%u0445%u043E%u0434%u0438%u0442%u0441%u044F%20%u0432%20%u043F%u0430%u043F%u043A%u0435%20custombuttons%20%u0442%u0435%u043A%u0443%u0449%u0435%u0433%u043E%20%u043F%u0440%u043E%u0444%u0438%u043B%u044F%20%u0432%20%u0444%u0430%u0439%u043B%u0435%20%22Bookmarks300.txt%22%0A%u0410%u0432%u0442%u043E%u0440%u044B%3A%20deepakjoshi04%2C%20SCClockDr%20%20%0A%u0410%u0434%u0430%u043F%u0442%u0430%u0446%u0438%u044F%20%u043F%u043E%u0434%20firefox%204.0.*%20%3A%20morat%20%0A%u041A%u043E%u0440%u0440%u0435%u043A%u0446%u0438%u044F%20%20%u0441%u043E%u0445%u0440%u0430%u043D%u0435%u043D%u0438%u044F%20%u043A%u0438%u0440%u0438%u043B%u043B%u0438%u0446%u044B%3A%20Anton%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

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

Выделить код

Код:

/*Initialization code*/
let mWid = 55;
function fileName(){
    let dir = Components.classes["@mozilla.org/file/directory_service;1"].getService(Components.interfaces.nsIProperties).get("ProfD", Components.interfaces.nsIFile);
    dir.append("custombuttons");
    if (!dir.exists()) {
        try{
            dir.create(0x01, 0755);
        } catch(e){
            let msg='Custom Buttons error.]'+'[ Event: Creating custombuttons directory]'+'[ '+e;Components.utils.reportError(msg);
        }
    }
    return dir.path;
}

function writeFile (sFilePath, sFileContent)
{
    var suc = Cc ["@mozilla.org/intl/scriptableunicodeconverter"]. createInstance (Ci. nsIScriptableUnicodeConverter);
    suc. charset = "UTF-8";
    cbu. writeFile (sFilePath, suc. ConvertFromUnicode (sFileContent));
}

function readFile (sFilePath)
{
    var suc = Cc ["@mozilla.org/intl/scriptableunicodeconverter"]. createInstance (Ci. nsIScriptableUnicodeConverter);
    suc. charset = "UTF-8";
        try {
        return suc. ConvertToUnicode (cbu. readFile (sFilePath));
    }
    catch(e) {
    }
    return "";
}
//********  Read write ******
let mp;
this.removeNode = function( aNode ){
    closeMenus( aNode );
    mp.removeChild( aNode );
    //reAssignId();
};

function reAssignId(){
    let NL=mp.childNodes;
    for(let i=0;i<NL.length;i++)
    {
        mp.removeChild(NL[i].id=i+1);
    }
}

function addMenuItem(aNode, aLabel,aURL,aImg, aContextId, aCommand) {
    let mi = aNode.appendChild(document.createElement("menuitem"));
    mi.setAttribute("label", aLabel.substr(0,mWid));
    mi.setAttribute("value", aURL);
    mi.setAttribute("class","menuitem-iconic")
    mi.setAttribute("image", aImg);
    mi.setAttribute("name", aImg);
    mi.setAttribute("id",aNode.childNodes.length);
    if(aContextId) mi.setAttribute("context", aContextId);
    if(aCommand) mi.setAttribute("oncommand", aCommand);
}
function donoth(){}

/* ============  Execute Init Code ============ */
let contextId = "popup-item-bookmark";
let test = document.getElementById(contextId);
if(test) test.parentNode.removeChild(test);
let mainPopup = document.getElementById("mainPopupSet");
let context = mainPopup.appendChild(document.createElement("popup"));
context.id = contextId;
addMenuItem(context, "Remove Item?",null,this.image, null, "alert(document.popupNode.label); document.popupNode.parentNode.parentNode.removeNode(document.popupNode);");
let filePath=fileName()+"/Bookmarks300.txt";
let data=readFile(filePath);
let popupItems=data.split('\n');
mp = document.createElement("menupopup");
addMenuItem(mp, "Save","Save",this.image,null,"this.parentNode.parentNode.save()");
mp.setAttribute("oncommand", "this.parentNode.openPage(event)");
for (let i in popupItems) {
    popupItems[i].replace(/\\s/g,'');
    if(popupItems[i].length>1){
       let pItem=popupItems[i].split("]~[");
        if(pItem.length==3)
        {
          addMenuItem(mp, pItem[0],pItem[1],pItem[2], contextId);
        }
    }
} /* End for*/
function getData(){
    let NL=mp.childNodes;
    let data="";
for(let i=1;i<NL.length;i++){
        let img=NL[i].getAttribute("image");
        data=data+NL[i].label+"]~["+NL[i].value+"]~["+img+"\n";
    }
    return data;
}
this.execute=function(evt){
    if(evt.target.value==-1) AddMenuItem();
}
function AddMenuItem(){
    let img=document.getElementById("page-proxy-favicon").src;
    let name=content.document.title;
    let url=document.getElementById("urlbar").value;
    addMenuItem(mp,name,url,img,contextId);
    
function getChildFolder(aFolderId, aSubFolder) {
  var htService = Components.classes["@mozilla.org/browser/nav-history-service;1"].
    getService(Components.interfaces.nsINavHistoryService);
  var query = htService.getNewQuery();
  var options = htService.getNewQueryOptions();
  query.setFolders([aFolderId], 1);
  var result = htService.executeQuery(query, options);
  var rootNode = result.root;
  var childFolder = 0;
  rootNode.containerOpen = true;
  for (var i = 0; i < rootNode.childCount; i++) {
    var node = rootNode.getChild(i);
    if (node.type == node.RESULT_TYPE_FOLDER && node.title == aSubFolder) {
      childFolder = node.itemId;
      break;
    }
  }
  rootNode.containerOpen = false;
  return childFolder;
}    
    
var bmService = Components.classes["@mozilla.org/browser/nav-bookmarks-service;1"].
  getService(Components.interfaces.nsINavBookmarksService);
var ioService = Components.classes["@mozilla.org/network/io-service;1"].
  getService(Components.interfaces.nsIIOService);
var folder;
folder = bmService.bookmarksMenuFolder; // Bookmarks Menu
folder = bmService.getChildFolder(folder, "Permanent Bookmarks");
var uri = ioService.newURI(content.document.location.href, null, null);
var title = content.document.title;
bmService.insertBookmark(folder, uri, bmService.DEFAULT_INDEX, title);    
    
}
this.save = function()
{
    writeFile(filePath,getData())
};
this.openPage = function( e )
{
    let link = e.target.value
    if (link != "Save"){
        let newTab = gBrowser.addTab(link);
        gBrowser.selectedTab = newTab;
    }
};



this.setAttribute("onclick", "this.buttonClick(evt)");

this. handleClick = function (evt)
{
var menuitem = evt. target;
var url = menuitem. getAttributeNS ("http://xsms.nm.ru/custombuttons/", "url");
if (event. button == 0)
gBrowser. addTab (url);
else if (event. button == 1)
  gClipboard.write(url);
  if (evt.button == 1) alert("Copied to Clipboard");
  custombuttons.alertSlide("Copied to Clipboard!!", "AWESOME!!");(menuitem.value);
this. open = false;
};


this.type = "menu-button";
this.setAttribute("class", "menu-iconic");
this.setAttribute("oncommand", "this.execute(event);");
this.appendChild(mp);
this.value=-1;

this.setAttribute("author", "deepakjoshi04,SCClockDr" );
this.setAttribute("status","Complete");
this.setAttribute("public",true);
this.setAttribute("dependency","FF 2.0,CB 2.0.*");
this.setAttribute("version","20080124.01");
this.setAttribute('homepage', 'http://custombuttons2.com/forum/buttons/buttons-database/permanent-bookmark.html');

P.S.Кнопка размещена повторно. Первоначальное сообщение от 20-06-2011  почему-то отсутствует.

По просьбе из вот этой темы:
History Export(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%3EHistory%20Export%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%5B/*Initialization%20Code*/%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5Bvar%20mDBConn%20%3D%20Cc%5B%22@mozilla.org/browser/nav-history-service%3B1%22%5D.getService%28Ci.nsPIPlacesDatabase%29.DBConnection%3B%0Avar%20stmt%3DmDBConn.createStatement%28%22SELECT%20strftime%28%27%25d-%25m-%25Y%20%25H%3A%25M%3A%25S%27%2Cmax%28coalesce%28last_visit_date%2C0%29%29/1000000%2C%27unixepoch%27%2C%27localtime%27%29%20fd%2C%20url%2Cmax%28coalesce%28last_visit_date%2C0%29%29%20from%20moz_places%20group%20by%20url%20order%20by%203%20desc%22%29%3B%0Avar%20log%3D%5B%5D%3B%0Awhile%28stmt.step%28%29%29%20log.push%28stmt.row.fd+%22%5Ct%22+stmt.row.url%29%3B%0Astmt.finalize%28%29%3B%0Avar%20fp%3DCc%5B%22@mozilla.org/filepicker%3B1%22%5D.createInstance%28Ci.nsIFilePicker%29%3B%0Afp.init%28window%2C%20%22%u0423%u043A%u0430%u0436%u0438%u0442%u0435%20%u0444%u0430%u0439%u043B%20%u0434%u043B%u044F%20%u044D%u043A%u0441%u043F%u043E%u0440%u0442%u0430%20%u0436%u0443%u0440%u043D%u0430%u043B%u0430%22%2C%20Ci.nsIFilePicker.modeSave%29%3B%0Afp.appendFilter%28%22Text%20files%22%2C%22*.txt%22%29%3B%0Avar%20res%20%3D%20fp.show%28%29%3B%0Aif%20%28res%20%3D%3D%20Ci.nsIFilePicker.returnCancel%29%0A%09return%20false%3B%0Avar%20file%20%3D%20fp.file%3B%0Aif%20%28%21%28/%5C.txt%24/i.test%28file.path%29%29%29%20file.initWithPath%28file.path+%22.txt%22%29%3B%0Avar%20foStream%20%3D%20Cc%5B%22@mozilla.org/network/file-output-stream%3B1%22%5D.createInstance%28Ci.nsIFileOutputStream%29%3B%0AfoStream.init%28file%2C%200x02%20%7C%200x08%20%7C%200x20%2C%200664%2C%200%29%3B%0Avar%20converter%20%3D%20Cc%5B%22@mozilla.org/intl/converter-output-stream%3B1%22%5D.createInstance%28Ci.nsIConverterOutputStream%29%3B%0Aconverter.init%28foStream%2C%20%22UTF-8%22%2C%200%2C%200%29%3B%0Aconverter.writeString%28log.join%28%22%5Cn%22%29%29%3B%0Aconverter.close%28%29%3B%0Aalert%28%22%u0416%u0443%u0440%u043D%u0430%u043B%20%u0443%u0441%u043F%u0435%u0448%u043D%u043E%20%u044D%u043A%u0441%u043F%u043E%u0440%u0442%u0438%u0440%u043E%u0432%u0430%u043D%22%29%3B%0A%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

Код:

Выделить код

Код:

var mDBConn = Cc["@mozilla.org/browser/nav-history-service;1"].getService(Ci.nsPIPlacesDatabase).DBConnection;
var stmt=mDBConn.createStatement("SELECT strftime('%d-%m-%Y %H:%M:%S',max(coalesce(last_visit_date,0))/1000000,'unixepoch','localtime') fd, url,max(coalesce(last_visit_date,0)) from moz_places group by url order by 3 desc");
var log=[];
while(stmt.step()) log.push(stmt.row.fd+"\t"+stmt.row.url);
stmt.finalize();
var fp=Cc["@mozilla.org/filepicker;1"].createInstance(Ci.nsIFilePicker);
fp.init(window, "Укажите файл для экспорта журнала", Ci.nsIFilePicker.modeSave);
fp.appendFilter("Text files","*.txt");
var res = fp.show();
if (res == Ci.nsIFilePicker.returnCancel)
    return false;
var file = fp.file;
if (!(/\.txt$/i.test(file.path))) file.initWithPath(file.path+".txt");
var foStream = Cc["@mozilla.org/network/file-output-stream;1"].createInstance(Ci.nsIFileOutputStream);
foStream.init(file, 0x02 | 0x08 | 0x20, 0664, 0);
var converter = Cc["@mozilla.org/intl/converter-output-stream;1"].createInstance(Ci.nsIConverterOutputStream);
converter.init(foStream, "UTF-8", 0, 0);
converter.writeString(log.join("\n"));
converter.close();
alert("Журнал успешно экспортирован");

Right click = Button Help(Firefox)

Кнопка заменяет на всех установленных кнопках стандартный вызов CB-меню по Правому Kлику мыши на вызов окошка Помощи (Button Help). Или добавляет вызов Button Help к другой функции, уже назначенной на Правый Клик некоторых кнопок.

Если такое всеобщее изменение поведения нежелательно для определенной кнопки,
то его можно отключить на ней путем полной очистки поля Help этой кнопки.

Код: Infocatcher
Оформление: моё
http://forum.mozilla-russia.org/viewtop … 01#p504101

:)

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

Выделить код

Код:

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%u0440%u0430%u0432%u0438%u0439%20K%u043Ba%u0446%20%3D%20%u0414%u043E%u043F%u043E%u043C%u043E%u0433%u0430%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/bmp%3Bbase64%2CQk02AwAABQFyYTYAAAAoAAAAEAAAABAAAAABABgAAAAAAAADAAAnAAAAJwAAAAAAAAAAAAAAzNHUzNHUzNHUzNHUxszQr6upqJCGooV4ooR3pZKJtLCvyM3QzNHUzNHUzNHUzNHUzNHUzNHUy9DTuK2smlUxwF0pzWYvzWcvzWcvzGYus1QilWNKtra3y8/TzNHUzNHUzNHUy9DTpZKIulwq0mou1Gov1Gov2IBJ03M81Gsv1Gsv0GktrFoupKGgy8/TzNHUzNLVtKKbw2Aq1Gsv020v020u25Ni/vTp+ebV1G0v1G0v020u1G0urVont7a3zNHUxcbJrVkk024u028v024v024u04tY8ufd6tK/1nAv1nAv1nAv1nAu1W4tmWFAxszQtp6O1W8u3HMv3HMv3HMv3HMv3HMv135B3HQy3HMv3HMv3HMv3HMv3HMuyWYit6yotX9b23Mu3HMu3HMu3HMv3HIn1oJG9uHQ89Cx3HYo3HYo3HYo3HYo3HYn23YnrpGAwHZD23cm3Hcm3Hcm3HYm3HYm23ku8+rh/PLo4IY+23Ym23Yn23kn23kn23knrYFhxXxC33gn33gn33on33sn33sn5Hsn3ruf/PTs/Ozi6ZJN5Xom5Xon5Xon5XonsYRiwIJN5Xsn5Xsn5Xsn5Xsn5Xsn5Xsn5X4n38a2+/f0/fPp5YQv5YAn5YAn5YAns4lrw5185IYt5YAn5YAn5YAn5YAn5YAn5H8m5IEq6uXg/fn17Z5c5YAn5YAn5HwmtqWTwbSq5JQ+5YMn5IIn5p9i/f39+u/m651S7qZm+vf3/fn265lP64Mn7IQnxGsiw8TFzNTYuoRU7JIy7YQm64gt5dfI/Pv9/v7+/f7+/Pz96s6564gm7Ycm5YUpuJyGzNLVzNHUyMrLzI5O7JYy7Ikn7Ikr37SN49TI49bJ366B7Ior7Ygm540rtoJRy8/QzNHUzNHUzNHUycrLv4VO8KJC8pEt7Ysm7Ysm7Ysm7osm844n4JI0u5Jxyc3PzNHUzNHUzNHUzNHUzNHUytHVwa2cypxt1Y4924sw2Yguz4pAw5xxwbiwzNPXzNHUzNHUzNHU%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5BaddEventListener%28%22contextmenu%22%2C%20function%28e%29%20%7B%0A%20%20%20%20var%20btn%20%3D%20e.target%3B%0A%20%20%20%20if%28%0A%20%20%20%20%20%20%20%20e.ctrlKey%20%7C%7C%20e.shiftKey%20%7C%7C%20e.altKey%20%7C%7C%20e.metaKey%0A%20%20%20%20%20%20%20%20%7C%7C%20btn.id.substr%280%2C%2020%29%20%21%3D%20%22custombuttons-button%22%0A%20%20%20%20%20%20%20%20%7C%7C%20%21btn.hasAttribute%28%22Help%22%29%0A%20%20%20%20%29%0A%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20e.preventDefault%28%29%3B%0A%20%20%20%20e.stopPropagation%28%29%3B%0A%20%20%20%20custombuttons.uChelpButton%28btn%29%3B%0A%7D%2C%20true%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%5BRight%20click%20%3D%20Button%20Help%0A%0A%u041A%u043D%u043E%u043F%u043A%u0430%20%u0437%u043C%u0456%u043D%u044E%u0454%20%u0443%20%u0432%u0441%u0456%u0445%20%u0456%u043D%u0441%u0442%u0430%u043B%u044C%u043E%u0432%u0430%u043D%u0438%u0445%20%u043A%u043D%u043E%u043F%u043A%u0430%u0445%20Custom%20Buttons%20%u0441%u0442%u0430%u043D%u0434%u0430%u0440%u0442%u043D%u0438%u0439%20%u0432%u0438%u043A%u043B%u0438%u043A%20CB-%u043C%u0435%u043D%u044E%20%u041F%u0440%u0430%u0432%u0438%u043C%20%u041A%u043B%u0430%u0446%u043E%u043C%20%u043C%u0438%u0448%u0456%20%u043D%u0430%20%u0432%u0438%u043A%u043B%u0438%u043A%20Button%20Help.%20%u0410%u0431%u043E%20%u0434%u043E%u0434%u0430%u0454%20%u0432%u0438%u043A%u043B%u0438%u043A%20Button%20Help%20%u0434%u043E%20%u0456%u043D%u0448%u043E%u0457%20%u0444%u0443%u043D%u043A%u0446%u0456%u0457%2C%20%u0432%u0436%u0435%20%u043F%u0440%u0438%u0437%u043D%u0430%u0447%u0435%u043D%u043E%u0457%20%u043D%u0430%20%u043F%u0440%u0430%u0432%u0438%u0439%20%u043A%u043B%u0430%u0446%20%u0434%u0435%u044F%u043A%u0438%u0445%20%u043A%u043D%u043E%u043F%u043E%u043A..%0A%0A%u042F%u043A%u0449%u043E%20%u0442%u0430%u043A%u0430%20%u0437%u0430%u043C%u0456%u043D%u0430%20%u0454%20%u043D%u0435%u0431%u0430%u0436%u0430%u043D%u043E%u044E%20%u0434%u043B%u044F%20%u043F%u0435%u0432%u043D%u043E%u0457%20%u043A%u043D%u043E%u043F%u043A%u0438%2C%20%u0442%u043E%20%u0457%u0457%20%u043C%u043E%u0436%u043D%u0430%20%u0432%u0438%u043C%u043A%u043D%u0443%u0442%u0438%20%u043D%u0430%20%u0442%u0456%u0439%20%u043A%u043D%u043E%u043F%u0446%u0456%20%u0448%u043B%u044F%u0445%u043E%u043C%20%u043F%u043E%u0432%u043D%u043E%u0433%u043E%20%u043E%u0447%u0438%u0449%u0435%u043D%u043D%u044F%20%u0457%u0457%20%u043F%u043E%u043B%u044F%20Help.%0A%0A%u0410%u0432%u0442%u043E%u0440%20%u043A%u043E%u0434%u0443%3A%20Infocatcher%0A%u041E%u0444%u043E%u0440%u043C%u043B%u0435%u043D%u043D%u044F%3A%20slbgz%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

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

Выделить код

Код:

addEventListener("contextmenu", function(e) {
    var btn = e.target;
    if(
        e.ctrlKey || e.shiftKey || e.altKey || e.metaKey
        || btn.id.substr(0, 20) != "custombuttons-button"
        || !btn.hasAttribute("Help")
    )
        return;
    e.preventDefault();
    e.stopPropagation();
    custombuttons.uChelpButton(btn);
}, true);

History Export (Firefox) - вариант №2
Экспорт журнала в html-файл

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

Выделить код

Код:

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%3EHistory%20Export%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%5BComponents.utils.import%28%22resource%3A//gre/modules/Services.jsm%22%29%3B%0Athis.applyTransform%3Dfunction%28xsltName%2CsrcDoc%29%0A%7B%0A%20%20let%20xsltFile%3DServices.dirsvc.get%28%22ProfD%22%2C%20Ci.nsILocalFile%29%3B%0A%20%20xsltFile.append%28xsltName%29%3B%0A%20%20let%20xsltUri%3DServices.io.newFileURI%28xsltFile%29%3B%0A%20%20let%20xhr%20%3D%20Cc%5B%22@mozilla.org/xmlextras/xmlhttprequest%3B1%22%5D.createInstance%28Ci.nsIXMLHttpRequest%29%3B%0A%20%20xhr.open%28%22GET%22%2C%20xsltUri.spec%2C%20false%29%3B%0A%20%20xhr.send%28null%29%3B%0A%20%20let%20xslt%20%3D%20xhr.responseXML%3B%0A%20%20let%20xsltproc%3DCc%5B%22@mozilla.org/document-transformer%3B1%3Ftype%3Dxslt%22%5D.createInstance%28Ci.nsIXSLTProcessor%29%3B%0A%20%20xsltproc.importStylesheet%28xslt%29%3B%0A%20%20return%20xsltproc.transformToDocument%28srcDoc%29%3B%0A%7D%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5Bvar%20mDBConn%20%3D%20Cc%5B%22@mozilla.org/browser/nav-history-service%3B1%22%5D.getService%28Ci.nsPIPlacesDatabase%29.DBConnection%3B%0Avar%20stmt%3DmDBConn.createStatement%28%22SELECT%20strftime%28%27%25d-%25m-%25Y%20%25H%3A%25M%3A%25S%27%2Cmax%28coalesce%28last_visit_date%2C0%29%29/1000000%2C%27unixepoch%27%2C%27localtime%27%29%20fd%2C%20url%2Cmax%28coalesce%28last_visit_date%2C0%29%29%20from%20moz_places%20p%20where%20not%20exists%28select%20b.id%20from%20moz_bookmarks%20b%20where%20b.fk%3Dp.id%29%20group%20by%20url%20order%20by%203%20desc%22%29%3B%0Avar%20log%3D%5B%5D%3B%0Awhile%28stmt.step%28%29%29%20log.push%28%7Bfd%3Astmt.row.fd%2Curl%3Astmt.row.url%7D%29%3B%0Astmt.finalize%28%29%3B%0Avar%20xmlDoc%3Ddocument.implementation.createDocument%20%28null%2C%22%22%2Cnull%29%3B%0Avar%20pi%3DxmlDoc.createProcessingInstruction%28%27xml%27%2C%27version%3D%221.0%22%20encoding%3D%22UTF-8%22%27%29%3B%0AxmlDoc.appendChild%28pi%29%3B%0Avar%20root%3DxmlDoc.createElement%28%22root%22%29%3B%0AxmlDoc.appendChild%28root%29%3B%0Alog.forEach%28function%28elem%29%0A%7B%0A%20%20var%20item%3DxmlDoc.createElement%28%22item%22%29%3B%0A%20%20item.setAttribute%28%22last_visit%22%2Celem.fd%29%3B%0A%20%20item.setAttribute%28%22url%22%2C%20elem.url%29%3B%0A%20%20root.appendChild%28item%29%3B%0A%7D%29%3B%0Avar%20htmlDoc%3Dthis.applyTransform%28%22history.xsl%22%2C%20xmlDoc%29%3B%0AhtmlDoc%3Dthis.applyTransform%28%22decorator.xsl%22%2C%20htmlDoc%29%0Avar%20fp%3DCc%5B%22@mozilla.org/filepicker%3B1%22%5D.createInstance%28Ci.nsIFilePicker%29%3B%0Afp.init%28window%2C%20%22%u0423%u043A%u0430%u0436%u0438%u0442%u0435%20%u0444%u0430%u0439%u043B%20%u0434%u043B%u044F%20%u044D%u043A%u0441%u043F%u043E%u0440%u0442%u0430%20%u0436%u0443%u0440%u043D%u0430%u043B%u0430%22%2C%20Ci.nsIFilePicker.modeSave%29%3B%0Afp.appendFilter%28%22HTML%20files%22%2C%22*.html%22%29%3B%0Avar%20res%20%3D%20fp.show%28%29%3B%0Aif%20%28res%20%3D%3D%20Ci.nsIFilePicker.returnCancel%29%0A%20%20%20%20return%20false%3B%0Avar%20file%20%3D%20fp.file%3B%0Aif%20%28%21%28/%5C.html%24/i.test%28file.path%29%29%29%20file.initWithPath%28file.path+%22.html%22%29%3B%0Avar%20foStream%20%3D%20Cc%5B%22@mozilla.org/network/file-output-stream%3B1%22%5D.createInstance%28Ci.nsIFileOutputStream%29%3B%0AfoStream.init%28file%2C%200x02%20%7C%200x08%20%7C%200x20%2C%200664%2C%200%29%3B%0Avar%20converter%20%3D%20Cc%5B%22@mozilla.org/intl/converter-output-stream%3B1%22%5D.createInstance%28Ci.nsIConverterOutputStream%29%3B%0Aconverter.init%28foStream%2C%20%22UTF-8%22%2C%200%2C%200%29%3B%0Avar%20serializer%3DCc%5B%22@mozilla.org/xmlextras/xmlserializer%3B1%22%5D.createInstance%28Ci.nsIDOMSerializer%29%3B%0Aserializer.serializeToStream%28htmlDoc%2C%20foStream%2C%20%22%22%29%3B%0Aconverter.close%28%29%3B%0Aif%20%28Services.prompt.confirmEx%28null%2C%22%u0412%u044B%u0433%u0440%u0443%u0437%u043A%u0430%20%u0436%u0443%u0440%u043D%u0430%u043B%u0430%22%2C%20%22%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20%u0441%u043E%u0437%u0434%u0430%u043D%u043D%u044B%u0439%20%u0444%u0430%u0439%u043B%3F%22%2C%0A%20%20%20%20Services.prompt.STD_YES_NO_BUTTONS%2Cnull%2Cnull%2Cnull%2Cnull%2C%7B%7D%29%21%3D%3D0%29%20return%3B%0Avar%20tab%3DgBrowser.addTab%28Services.io.newFileURI%28file%29.spec%29%3B%0AgBrowser.selectedTab%3Dtab%3B%0A%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

Код

Выделить код

Код:

var mDBConn = Cc["@mozilla.org/browser/nav-history-service;1"].getService(Ci.nsPIPlacesDatabase).DBConnection;
var stmt=mDBConn.createStatement("SELECT strftime('%d-%m-%Y %H:%M:%S',max(coalesce(last_visit_date,0))/1000000,'unixepoch','localtime') fd, url,max(coalesce(last_visit_date,0)) from moz_places p where not exists(select b.id from moz_bookmarks b where b.fk=p.id) group by url order by 3 desc");
var log=[];
while(stmt.step()) log.push({fd:stmt.row.fd,url:stmt.row.url});
stmt.finalize();
var xmlDoc=document.implementation.createDocument (null,"",null);
var pi=xmlDoc.createProcessingInstruction('xml','version="1.0" encoding="UTF-8"');
xmlDoc.appendChild(pi);
var root=xmlDoc.createElement("root");
xmlDoc.appendChild(root);
log.forEach(function(elem)
{
  var item=xmlDoc.createElement("item");
  item.setAttribute("last_visit",elem.fd);
  item.setAttribute("url", elem.url);
  root.appendChild(item);
});
var htmlDoc=this.applyTransform("history.xsl", xmlDoc);
htmlDoc=this.applyTransform("decorator.xsl", htmlDoc);
var fp=Cc["@mozilla.org/filepicker;1"].createInstance(Ci.nsIFilePicker);
fp.init(window, "Укажите файл для экспорта журнала", Ci.nsIFilePicker.modeSave);
fp.appendFilter("HTML files","*.html");
var res = fp.show();
if (res == Ci.nsIFilePicker.returnCancel)
    return false;
var file = fp.file;
if (!(/\.html$/i.test(file.path))) file.initWithPath(file.path+".html");
var foStream = Cc["@mozilla.org/network/file-output-stream;1"].createInstance(Ci.nsIFileOutputStream);
foStream.init(file, 0x02 | 0x08 | 0x20, 0664, 0);
var converter = Cc["@mozilla.org/intl/converter-output-stream;1"].createInstance(Ci.nsIConverterOutputStream);
converter.init(foStream, "UTF-8", 0, 0);
var serializer=Cc["@mozilla.org/xmlextras/xmlserializer;1"].createInstance(Ci.nsIDOMSerializer);
serializer.serializeToStream(htmlDoc, foStream, "");
converter.close();
if (Services.prompt.confirmEx(null,"Выгрузка журнала", "Открыть созданный файл?",
    Services.prompt.STD_YES_NO_BUTTONS,null,null,null,null,{})!==0) return;
var tab=gBrowser.addTab(Services.io.newFileURI(file).spec);
gBrowser.selectedTab=tab;

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

Выделить код

Код:

Components.utils.import("resource://gre/modules/Services.jsm");
this.applyTransform=function(xsltName,srcDoc)
{
  let xsltFile=Services.dirsvc.get("ProfD", Ci.nsILocalFile);
  xsltFile.append(xsltName);
  let xsltUri=Services.io.newFileURI(xsltFile);
  let xhr = Cc["@mozilla.org/xmlextras/xmlhttprequest;1"].createInstance(Ci.nsIXMLHttpRequest);
  xhr.open("GET", xsltUri.spec, false);
  xhr.send(null);
  let xslt = xhr.responseXML;
  let xsltproc=Cc["@mozilla.org/document-transformer;1?type=xslt"].createInstance(Ci.nsIXSLTProcessor);
  xsltproc.importStylesheet(xslt);
  return xsltproc.transformToDocument(srcDoc);
}

Кнопка для преобразования в html использует XSL-преобразования, поэтому необходимо в папке профиля создать 2 xsl-шаблона:
history.xsl

Выделить код

Код:

<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html"/>
<xsl:template match="/">
  <hr/>
  <table>
  <xsl:for-each select="root/item">
    <tr>
      <td style="white-space: nowrap; vertical-align: top">
        <xsl:value-of select="@last_visit"/>
      </td>
      <td style="padding-left: 1em">
        <a href="{@url}"><xsl:value-of select="@url"/></a>
      </td>
    </tr>
    <tr><td colspan="2"><hr/></td></tr>
  </xsl:for-each>
  </table>
</xsl:template>
</xsl:stylesheet>

decorator.xsl

Выделить код

Код:

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="html"/>
  <xsl:param name="indent-increment" select="'&#x9;'"/>
  <xsl:template match="node()">
    <xsl:param name="indent" select="'&#xD;&#xA;'"/>
    <xsl:value-of select="$indent"/>
    <xsl:copy>
      <xsl:copy-of select="@*"/>
      <xsl:apply-templates>
        <xsl:with-param name="indent" select="concat($indent,$indent-increment)"/>
      </xsl:apply-templates>
      <xsl:if test="*">
        <xsl:value-of select="$indent"/>
      </xsl:if>
    </xsl:copy>
  </xsl:template>
</xsl:stylesheet>

XSL-файлы с вышеприведенным кодом нужно сохранить в UTF-8 без BOM. Второй файл необязателен - с его помощью сгенеренный html просто делается читабельным. Если планируется не использовать второй файл (decorator.xsl), то в коде кнопки нужно закомментировать строку с htmlDoc=this.applyTransform("decorator.xsl", htmlDoc)


В будущем я, наверное, на основе этого кода сделаю отдельное расширение с выбором вариантов экспорта (txt/xml/html/json). И без описанной под спойлером возни с xslt.

Переключить язык интерфейса( Firefox24+ ) от 09.06.2016.
Kнопкa для переключение языка интерфейса русифицированного Firefox на русский или английский язык. Открывает страницу где можно найти все русификации Firefox и сама находит нужную русификацию.
Иконка кнопки и текст всплывающей подсказки меняются в зависимости от языка интерфейса.

ЛКМ => переключить язык интерфейса с окном подтвеждения,
СКМ => стандартное меню кнопки,
ПКМ => открыть страницу с всеми русификации 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%u041F%u0435%u0440%u0435%u043A%u043B%u044E%u0447%u0438%u0442%u044C%20%u044F%u0437%u044B%u043A%20%u0438%u043D%u0442%u0435%u0440%u0444%u0435%u0439%u0441%u0430%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEhEAAAEAIAA0BQAAFgAAACgAAAASAAAAIgAAAAEAIAAAAAAADAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQIAAAAAAAAAABITFiBERmaTeH26/mpwtf11er79XGCUzCMlOFgDAwADAAAAAAAAAgIAAAAAAAAAAAAAAAAAAAAAAgIDAwAAAAAWFhkgODxhjlBYre5qc9n/dn7d/4CI4/97g9/+b3je/1dhyv82PYfGHyA2WQAAAAABAQIDAAAAAAAAAAABAQECAAAAABISFiNIUJnfSlbb/2t17f+QmPj8o6r8/6eu/f+mrfz/mqL6/n2H9P5TX+j/PkjK/x8iS3wAAAAAAAABAgAAAAACAgIDHR0gJ0pPmuMuOsr/U1/j+XZ/7P5/huv/f4fp/4CH6v+Ah+n/f4fq/3uE7P9ocun9PEjc+S45wf8nKlCCAwMAAAAAAQIBAAAAZWul2hkqyf8jN+f7O0zt/0JS7P9CU+3/QlTu/0NU7/9CU+z/QlTt/0JT7P8/UO//MEPr/hEl3/kxP8P/Jyo/VgEBAQGEgX6balt6/U85gPxeSpL/YkqQ/2JLkP9jTJH/Y0yR/2NNkf9jTJH/Y0yR/2JLkP9iS5D/YEqP/1pDjv1ROnr9X1Rm0gECAgBwY1OeqGsj/8JuEvzDbxb/wm4U/8JuE//CbxL/w3AT/8FuFf/FcRX/xHAT/8FtE//BbRP/wm8V/8RwFv6+bBL+kmMt8CAeGymbgWHasGYH/9R2AP7OcwD/z3YH/9WDHf/Yhh//14Yg/9eGIf/XhR7/14Uf/9mHH//UgBf/z3UC/9F1AP/KbwD7s3Mj/2VYR4a8oHv/qWEF/890A//IdhT/3JdC/9ycTP/bnE3/3Z1P/9qaSv/cnE//25tN/9ybS//cnEz/2ZE3/8pyBv/FbQT7rW4h/ldJN3vEqov/p14B/8txAf/gnUv/569p/+KqY//jq2T/46tk/+KrZf/iq2X/46tk/+KrZP/iq2T/7LNr/9iMLf+/ZQD7rnEl/2RXSIN4a16iomsr/799LPzmvYn/5L6Q/+S9jv/kvY//5L2P/+S9j//kvY//5L2P/+S9j//lvY3/5sCS/+Gyd/+vahf7p31M/llUT2dqaWd/z8Kz/u/i0/r++PH//vfu//748P/+9+///vfv//737//+9+///vfw//737//++PD//vfv//737/3u4Mz/lY2E0gABAgAzMjIzw8XJ+8vO0vz////+/v/////////////////////////////////////////+//////////f3+PrExsn2Oz09VgEAAAEAAAAAeXh4isjHxv/Z2dj6/////v7+/v/+/f3//v7+//7+/v///v7//v79//39/P///////f38+83Lyv+xsK7wAQAAAAAAAAADAwMDAAAAAHV1dInJycr/19fW//v7+/z///////////////////////////////7x8fD6z9DR/7m5uPZUVFVdAQEBAQAAAAABAQEAAwMDBAAAAAB0dHaAwcHB8szLy//V1NP/6+rq//Dw8f/x8PD/5eXl/9TT1P/R0M//q6qr1lZVVFkAAAAAAQEBAQAAAAAAAAAAAAAAAAMDAwMAAAAAKSkpJoaFhZnMzMr+wL+//rq6u/+7urv9yMjI/6KiotJ6enyDIiIiIQAAAAAFBQUGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%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.onclick%20%3De%3D%3E%20%7B%0A%20%20%20%0A%20%20%20//%20%u0434%u0435%u0439%u0441%u0442%u0432%u0438%u0435%20%u043F%u0440%u0438%20%u043A%u043B%u0438%u043A%u0435%20%u041B%u041A%u041C%20....%0A%20%20%20if%20%28%20e.button%20%3D%3D%200%20%29%20%7B%0A%20%20%20%20%20%20%20%20var%20ru%20%3D%20getLocale%28%29%3B%0A%20%20%20%20%20%20%20%20if%20%28%20custombuttons.confirmBox%28null%2C%20%28ru%20%3F%20%27%u041F%u0435%u0440%u0435%u043A%u043B%u044E%u0447%u0438%u0442%u044C%20%u043D%u0430%20en-US%27%20%3A%20%27Switch%20to%20ru%27%29%2C%20%28ru%20%3F%20%27%u0420%u0435%u0441%u0442%u0430%u0440%u0442%27%20%3A%20%27Restart%27%29%2C%20%28ru%20%3F%20%27%u041E%u0442%u043C%u0435%u043D%u0430%27%20%3A%20%27Cancel%27%29%29%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20cbu.setPrefs%28s%2C%20%28ru%20%3F%20%22en-US%22%20%3A%20%22ru%22%29%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20setTimeout%28%28%29%3D%3E%20Services.startup.quit%28Services.startup.eAttemptQuit%20%7C%20Services.startup.eRestart%29%2C%200%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%20%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20//%20%u0434%u0435%u0439%u0441%u0442%u0432%u0438%u0435%20%u043F%u0440%u0438%20%u043A%u043B%u0438%u043A%u0435%20%u0421%u041A%u041C%20....%20%20%20%20%0A%20%20%20%20if%20%28%20e.button%20%3D%3D%201%20%29%20gShowPopup%28this%29%3B%0A%20%20%20%20%20%0A%20%20%20%20//%20%u0434%u0435%u0439%u0441%u0442%u0432%u0438%u0435%20%u043F%u0440%u0438%20%u043A%u043B%u0438%u043A%u0435%20%u041F%u041A%u041C%20....%20%20%20%20%0A%20%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%20%20e.preventDefault%28%29%3B%20%20%0A%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20var%20tab%20%3D%20gBrowser.getBrowserForTab%28gBrowser.selectedTab%20%3D%20gBrowser.addTab%28%22http%3A//mozilla-russia.org/products/firefox/history.html%23nightly-ru%22%29%29%3B%20%0A%20%20%20%20%20%20%20%20%20tab.addEventListener%28%22pageshow%22%2C%20function%20c%28e%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20this.removeEventListener%28e.type%2C%20c%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20setTimeout%28%28%29%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20version%20%3D%20parseInt%28Services.appinfo.version%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20gFindBar._find%28version%29%3B%20//%20%u043D%u0430%u0439%u0442%u0438%20%u0432%u0435%u0440%u0441%u0438%u044E%20%u043D%u0430%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u0435%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20//%20%u0437%u0430%u043F%u0443%u0441%u0442%u0438%u0442%u044C%20%u043F%u043E%u0434%u0441%u0432%u0435%u0442%u043A%u0443%20%u0432%u0435%u0440%u0441%u0438%u0438%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20goDoCommand%28%22cmd_selectNone%22%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20finder%20%3D%20gBrowser.finder%20%7C%7C%20gFindBar%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20lighted%20%3D%20%28finder._highlightDoc%20%7C%7C%20finder._highlight%29.bind%28finder%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20lighted%28true%2C%20version%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%200%29%20%20%0A%20%20%20%20%20%20%20%20%20%7D%29%3B%0A%20%20%20%20%20%20%20%20%20%7D%0A%7D%3B%0A%0A%0Avar%20s%20%3D%20%22general.useragent.locale%22%3B%0Afunction%20getLocale%28%29%20%7B%20return%20%28cbu.getPrefs%28s%29%20%3D%3D%20%22ru%22%29%20%7D%3B%0A%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%u0432%20about%3Aconfig%20......................%0Afunction%20toggleImage%28%29%20%7B%0A%20%20%20self.ownerDocument.getAnonymousElementByAttribute%28self%2C%20%22class%22%2C%20%22toolbarbutton-icon%22%29.src%20%3D%20getLocale%28%29%0A%20%20%20%3F%20self.image%0A%20%20%20%3A%20%22data%3Aimage/x-icon%3Bbase64%2CAAABAAEAEREAAAEAIADwBAAAFgAAACgAAAARAAAAIgAAAAEAIAAAAAAAyAQAAAAAAAAAAAAAAAAAAAAAAADBwcIALzAyADk6OwAlJSYCCQkNAAAAAAAAAAIcAAATTQAAG2UAABFYAAABKgAAAAMBAQEABQUFAgQEBgEAAAAAT09RAMLCwgAyNDEAPkBAAxoaGQAZGB0tLSVcpTkmi+s+KJ/+Pimk/z4on/83JonxLSVXuRAREUgAAAAABQUIAQAAAAFPT1EAvb3CACYjNgMnJy0AU1RUY83N0ffo5vT/6+v0/vDw9f/x8ff+8PD2/+vr9f/o5/X/yMnN/zw8O4oAAAABAAAAAU9PUAC5tsUDDAQxAAQAQl4xGqT/OyCy/jcbsvs8H77+PiDE/z8gxf8+IMT/PB++/jcbsvw8IbP8MBij/wMBJoUAAAAAUVBUAszMzwBlZmEhtrLK7sG64v/Fv+b9ycHr/8nC7f/Kwu7/ysLv/8rC7v/Jwu3/ycLr/8W+5f7DvOT+sq/E/w4QBj9OTlAAt7PDAD8yeomLfcz/j3/S+5eF4f+Zhun/nIfx/52H9/+eiPn/nYf3/5uG8f+Yher/loTh/45+0fyNftX/HxdEqEdIRADHxdQKSjqg1lVBwP9ZQsr9XEPW/2BF5P9nSu//bE30/21O+P9sTfX/akzs/2VI3/9gRtP/XUXF/l5HxP8/MX/lUlNPG+nn5i/Y0cf39u/i///26f7/+u3///3r//z58//z7///9PD///Tw///z8P//8u////Hu/f/s6fn+6+n3/6+uvfpfX2I739DKO5ZcSf2oa1b/wIRx/8+QgP/pon3/uX6z/1gz//9lPP7/Yjr//145+/9ZN+r/VzfY/0otxf8wFLP/GgKJ/VZUZkLbycMsklZB9bF5Z//Lmoj+1p+N/+Oji//uv7T/8/T///Pv/v/z7///8u////Hv///x7/z/8O36/uzr+P+ysL71ZWRmLeLU0AaVXUnRuIl5/9Cnmf3WqJr/57KZ/9Cnvv+gj/7/p5P6/6WS+f+jkvP/opHs/56O4/+hk9z9hnXU/z0vftJcXFwI3szGAJBVQX+4joD/1bWp+tizp//juab/2LbE/7+0/v/Dtfr/wrX5/8G09v+/s/H/vbHs/7205Pusn+D/GhBKgFNQXwDfzsgAjlI9Fql6auTawbj/2r20+969sf/lz83/6+v8/+zp9//r6fj/6+n3/+rn9//p5/T76+n7/66sv+BHSj4Ug4ODAODPygOXX0wAmmVSSL6bj/rk0s3/59HF+9C8zfyvo+n+s6fo/rKl5/6ypuX8s6ji+76z6P9xX7v2BgBIQicgRQB2cYsD4M/KAJhfTQOfblwAmGFORbeRg+bgzcb/9Ovn/v////////7///////7+/v709Pj/29vc31dTaT0SA0wABwBOA1pPiADfzccAkldDAJpmVAKWXkoAkllGFKFsUneXd5LKf3DK75aHzPaFdcbuWESxxj0pmHGAfo0QRkRPAAcARgIAAEMAVk+DAPXw7gDfzcYA4dHMAN/PyQLh0c0B49LIAMm4yQSrodogsKXaLa2j2R6vpdkCuLDYANjY3gHJyMwDtLDHALKtxwDMydoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%3D%22%3B%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%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%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.onmouseover%20%3D%28%29%3D%3E%20%7B%0A%20%20%20var%20ru%20%3D%20getLocale%28%29%3B%20%20%20%20%20%0A%20%20%20this.tooltipText%20%3D%20%28ru%20%3F%20%27%u041F%u0435%u0440%u0435%u043A%u043B%u044E%u0447%u0438%u0442%u044C%20%u044F%u0437%u044B%u043A%20%u0438%u043D%u0442%u0435%u0440%u0444%u0435%u0439%u0441%u0430%27%20%3A%20%27Changing%20the%20interface%20language%27%29%20+%20%27%5Cn%27+%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%28ru%20%3F%20%27%u041B%3A%20%u043F%u0435%u0440%u0435%u043A%u043B%u044E%u0447%u0438%u0442%u044C%20%u043D%u0430%20%22en-US%27%20%3A%20%27L%3A%20switch%20to%20%22ru%22%27%29%20+%20%27%5Cn%27+%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%28ru%20%3F%20%27%u0421%3A%20%u043C%u0435%u043D%u044E%27%20%3A%20%27M%3A%20menu%27%29%20+%20%27%5Cn%27%20+%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%28ru%20%3F%20%27%u041F%3A%20%u0432%u0441%u0435%20%u0440%u0443%u0441%u0438%u0444%u0438%u043A%u0430%u0446%u0438%u0438%20Firefox%27%20%3A%20%27R%3A%20all%20russification%20firefox%27%29%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%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%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

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

Выделить код

Код:

// Настройка функций кликов мыши для кнопки ......................
this.onclick =e=> {
   
   // действие при клике ЛКМ ....
   if ( e.button == 0 ) {
        var ru = getLocale();
        if ( custombuttons.confirmBox(null, (ru ? 'Переключить на en-US' : 'Switch to ru'), (ru ? 'Рестарт' : 'Restart'), (ru ? 'Отмена' : 'Cancel')) ) {
             cbu.setPrefs(s, (ru ? "en-US" : "ru"));
             setTimeout(()=> Services.startup.quit(Services.startup.eAttemptQuit | Services.startup.eRestart), 0);
             } 
        }
          
    // действие при клике СКМ ....    
    if ( e.button == 1 ) gShowPopup(this);
     
    // действие при клике ПКМ ....    
    if ( e.button == 2 && !e.ctrlKey && !e.shiftKey && !e.altKey && !e.metaKey ) { 
         e.preventDefault();  
          
         var tab = gBrowser.getBrowserForTab(gBrowser.selectedTab = gBrowser.addTab("http://mozilla-russia.org/products/firefox/history.html#nightly-ru")); 
         tab.addEventListener("pageshow", function c(e) {
            this.removeEventListener(e.type, c);
              
            setTimeout(()=> {
               var version = parseInt(Services.appinfo.version);
               gFindBar._find(version); // найти версию на странице  
               
               // запустить подсветку версии
               goDoCommand("cmd_selectNone");
               var finder = gBrowser.finder || gFindBar;
               var lighted = (finder._highlightDoc || finder._highlight).bind(finder);
               lighted(true, version);
            }, 0)  
         });
         }
};


var s = "general.useragent.locale";
function getLocale() { return (cbu.getPrefs(s) == "ru") };


// Установить нужную иконку кнопки при старте браузера или при изменениях настроек в about:config ......................
function toggleImage() {
   self.ownerDocument.getAnonymousElementByAttribute(self, "class", "toolbarbutton-icon").src = getLocale()
   ? self.image
   : "data:image/x-icon;base64,AAABAAEAEREAAAEAIADwBAAAFgAAACgAAAARAAAAIgAAAAEAIAAAAAAAyAQAAAAAAAAAAAAAAAAAAAAAAADBwcIALzAyADk6OwAlJSYCCQkNAAAAAAAAAAIcAAATTQAAG2UAABFYAAABKgAAAAMBAQEABQUFAgQEBgEAAAAAT09RAMLCwgAyNDEAPkBAAxoaGQAZGB0tLSVcpTkmi+s+KJ/+Pimk/z4on/83JonxLSVXuRAREUgAAAAABQUIAQAAAAFPT1EAvb3CACYjNgMnJy0AU1RUY83N0ffo5vT/6+v0/vDw9f/x8ff+8PD2/+vr9f/o5/X/yMnN/zw8O4oAAAABAAAAAU9PUAC5tsUDDAQxAAQAQl4xGqT/OyCy/jcbsvs8H77+PiDE/z8gxf8+IMT/PB++/jcbsvw8IbP8MBij/wMBJoUAAAAAUVBUAszMzwBlZmEhtrLK7sG64v/Fv+b9ycHr/8nC7f/Kwu7/ysLv/8rC7v/Jwu3/ycLr/8W+5f7DvOT+sq/E/w4QBj9OTlAAt7PDAD8yeomLfcz/j3/S+5eF4f+Zhun/nIfx/52H9/+eiPn/nYf3/5uG8f+Yher/loTh/45+0fyNftX/HxdEqEdIRADHxdQKSjqg1lVBwP9ZQsr9XEPW/2BF5P9nSu//bE30/21O+P9sTfX/akzs/2VI3/9gRtP/XUXF/l5HxP8/MX/lUlNPG+nn5i/Y0cf39u/i///26f7/+u3///3r//z58//z7///9PD///Tw///z8P//8u////Hu/f/s6fn+6+n3/6+uvfpfX2I739DKO5ZcSf2oa1b/wIRx/8+QgP/pon3/uX6z/1gz//9lPP7/Yjr//145+/9ZN+r/VzfY/0otxf8wFLP/GgKJ/VZUZkLbycMsklZB9bF5Z//Lmoj+1p+N/+Oji//uv7T/8/T///Pv/v/z7///8u////Hv///x7/z/8O36/uzr+P+ysL71ZWRmLeLU0AaVXUnRuIl5/9Cnmf3WqJr/57KZ/9Cnvv+gj/7/p5P6/6WS+f+jkvP/opHs/56O4/+hk9z9hnXU/z0vftJcXFwI3szGAJBVQX+4joD/1bWp+tizp//juab/2LbE/7+0/v/Dtfr/wrX5/8G09v+/s/H/vbHs/7205Pusn+D/GhBKgFNQXwDfzsgAjlI9Fql6auTawbj/2r20+969sf/lz83/6+v8/+zp9//r6fj/6+n3/+rn9//p5/T76+n7/66sv+BHSj4Ug4ODAODPygOXX0wAmmVSSL6bj/rk0s3/59HF+9C8zfyvo+n+s6fo/rKl5/6ypuX8s6ji+76z6P9xX7v2BgBIQicgRQB2cYsD4M/KAJhfTQOfblwAmGFORbeRg+bgzcb/9Ovn/v////////7///////7+/v709Pj/29vc31dTaT0SA0wABwBOA1pPiADfzccAkldDAJpmVAKWXkoAkllGFKFsUneXd5LKf3DK75aHzPaFdcbuWESxxj0pmHGAfo0QRkRPAAcARgIAAEMAVk+DAPXw7gDfzcYA4dHMAN/PyQLh0c0B49LIAMm4yQSrodogsKXaLa2j2R6vpdkCuLDYANjY3gHJyMwDtLDHALKtxwDMydoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=";
};
toggleImage();
gPrefService.addObserver(s, toggleImage, false);
addDestructor(()=> gPrefService.removeObserver(s, toggleImage) );
                      

// Подсказка для кнопки ......................
this.onmouseover =()=> {
   var ru = getLocale();     
   this.tooltipText = (ru ? 'Переключить язык интерфейса' : 'Changing the interface language') + '\n'+
                      (ru ? 'Л: переключить на "en-US' : 'L: switch to "ru"') + '\n'+
                      (ru ? 'С: меню' : 'M: menu') + '\n' +
                      (ru ? 'П: все русификации Firefox' : 'R: all russification firefox');                                                    
};

Button Stacker 3(Firefox)

Кнопка создает кнопку-сборку кнопок. В кнопках, объединенных в сборку, работает только левый клик,  также нельзя добавлять в сборку кнопки-меню.

Автор: squeaky
Английская версия: http://custombuttons.mozdev.org/drupal/ … -stacker-3
Версия с полным украинским переводом меню, подсказок и коротким help: slbgz

Код кнопки (Сохранить файл как... , убрать расширение .txt, оставить .7z, распаковать архив и установить согласно инструкции)

Код

Выделить код

Код:

//
// See the help tag for how to use this button
//

this.siteGo(event);


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

ТoggleToolbars (Firefox) - Переключатель группы панелей.

Кнопка предназначена для быстрого скрытия/показа группы панелей, как стандартных, так и созданных пользователем, одним кликом левой кнопки мыши. Выбор группы панелей, которые будут скрываться/показываться кнопкой, осуществляется закомментированием соотв. строчек в «шапке» кода. Полезна, кроме прочего, для  Button Stacker 3 для скрытия кнопок, объединенных в сборки, для этого соотв. кнопки нужно перетянуть на нужные панели, а названия этих панелей добавить в «шапку» секции «код» ТoggleToolbars.
Для запоминания состояния отображения кастомных панелей после окончания сессии необходима работа «в связке» с кнопками СкрытьПоказать панель.


Автор кода: Infocatcher
http://forum.mozilla-russia.org/viewtop … 68#p505168
Оформление и украинский Help: slbgz

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

Выделить код

Код:

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%u2022%205%20%u0434%u043E%u0434%u0430%u0442%u043A%u043E%u0432%u0438%u0445%20%u043F%u0430%u043D%u0435%u043B%u0456%u0432%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/bmp%3Bbase64%2CQk02AwAABQFyYTYAAAAoAAAAEAAAABAAAAABABgAAAAAAAADAAAnAAAAJwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4eHh7+/v7+/v7e3t7e3t7+/v8PDw8PDw8PDw8PDw8PDw8PDw8PDw4eHhAAAAAAAA4eHh7+/v7+/v7+/v8PDw8fHx8vLy8vLy8fHx8fHx8PDw7+/v8PDw4+PjAAAAAAAA5ubm8fHx8PDw7+/v8vLy8/Pz9PT08/Pz8/Pz8/Pz8vLy8fHx8PDw5eXlAAAAAAAAmbe+1tjY1NrbpsPK7e7uw8vMrsLH8PDwu8bJusjM9PT0tsrOv83RxcXFAAAAAAAAPZarO0BBhay1Zcbfub/EMD5BZJur3t/idoiSMUlPzM3Qf8PXTpmrPDs/AAAAAAAA1NXXXkhyPUJGxcfLUURhXVte1tTaq27lv7TKTk5OVThvtrPCMDQ5ZzqPAAAAAAAAiK7JubXVSEVKLi4vOTk7nrHBmrbQxL3SqLrSeZ+1Li83Lys0QklWt67CAAAAAAAAacP62dnhkIqMAAABdW5uqrzKe67O2NbWmLXJjbPNbGprAAEDeoqX0MvLAAAAAAAA8PD0s2ZmMxQVOjs9KxUVq5iY2dbVq0lIwKiqr6qrLx8fODc5OB8hoUFBAAAAAAAAvtKaYVZOLTIdpbmEYGJcQ0U8rKyT4sfGzc61RUo/ZGNirr6SJC4PZU9MAAAAAAAAfZxJOT1JkJ2GpMZsvcDNSEtOgZFq3+L0kZuISk1KwMDXsc2GhJpnOz1SAAAAAAAA6+zuYGDwlZX36uzxWlr6pqbw2druT0/6u7vvysvuTU371NXzvb70SEjyAAAAAAAAtaCLwsDqwLnQtaCOwcHyv7XAt6WYwML4vK+wuqqlwML5uamhvLCzwsP4AAAALw4LhkEoxZGLs3twiEQsy5mVqW5gjks20KGdoWZVl1ZDz56clVRAoWNT0qSgAAAAAAAAGQYGGgUFGAUFFwUGFwUGGAUFGAUGFwUFFwYGFwUFFwUFFgUFFgUFGAUGAAAA%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bthis.tooltipText%20%3D%20%22%20%20%20%20%20%20%20%20%20%20%20%20%20%u041F%u0435%u0440%u0435%u043C%u0438%u043A%u0430%u0447%20%u0433%u0440%u0443%u043F%u0438%20%u043F%u0430%u043D%u0435%u043B%u0456%u0432%3A%22+%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22%5Cn%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%22+%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22%5Cn%20%20%20%20%20%20%20%20%u041B%u0456%u0432%u0438%u0439%20%u043A%u043B%u0430%u0446%20%20-%3E%20%u0423%u0432%u0456%u043C%u043A%u043D%u0443%u0442%u0438/%u0432%u0438%u043C%u043A%u043D%u0443%u0442%u0438%22+%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22%5Cn%20%20%20%20%20%20%20%20%u041F%u0440%u0430%u0432%u0438%u0439%20%20%20%20-%u201C-%20-%3E%20CB%20%u043C%u0435%u043D%u044E/%u0414%u043E%u043F%u043E%u043C%u043E%u0433%u0430%22+%0A%09%09%20%22%5CnShift+%u041F%u0440%u0430%u0432%u0438%u0439%20%20%20%20-%u201C-%20-%3E%20CB%20%u043C%u0435%u043D%u044E%22%3B%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5BtoggleToolbars%28%5B%0A//%20%20%20%20%22toolbar-menubar%22%2C%20%20%20%20%20%20//%20%u043F%u0430%u043D%u0435%u043B%u044C%20%u043C%u0435%u043D%u044E%0A//%20%20%20%20%22aios-toolbar%22%2C%20%20%20%20%20%20%20%20%20%20//%20All-in-One%20Sidebar%20%28AiOS%29%0A//%20%20%20%20%22PersonalToolbar%22%2C%20%20%20%20%20%20//%20%u043F%u0430%u043D%u0435%u043B%u044C%20%u0437%u0430%u043A%u043B%u0430%u0434%u043E%u043A%0A//%20%20%20%20%22TabsToolbar%22%2C%20%20%20%20%20%20%20%20%20%20//%20%u043F%u0430%u043D%u0435%u043B%u044C%20%u0432%u043A%u043B%u0430%u0434%u043E%u043A%0A%20%20%20%20%22nav-bar%22%2C%20%20%20%20%20%20%20%20%20%20%20%20%20%20//%20%u043F%u0430%u043D%u0435%u043B%u044C%20%u043D%u0430%u0432%u0456%u0433%u0430%u0446%u0456%u0457%0A//%20%20%20%20%22FindToolbar%22%2C%20%20%20%20%20%20%20%20%20%20//%20%u0441%u0442%u0440%u0456%u0447%u043A%u0430%20%u043F%u043E%u0448%u0443%u043A%u0443%0A%20%20%20%20%22addon-bar%22%2C%20%20%20%20%20%20%20%20%20%20%20//%20%u043F%u0430%u043D%u0435%u043B%u044C%20%u0434%u043E%u0434%u0430%u0442%u043A%u0456%u0432%20%28%u0441%u0442%u0440%u0456%u0447%u043A%u0430%20%u0441%u0442%u0430%u043D%u0443%29%0A%20%20%20%20%22%u041C%u043E%u044F%20%u043F%u0430%u043D%u0435%u043B%u044C%20%u0437%u0430%u043A%u043B%u0430%u0434%u043E%u043A%22%2C%0A%20%20%20%20%22%u041F%u0430%u043D%u0435%u043B%u044C%20%u043A%u043D%u043E%u043F%u043E%u043A%201%22%2C%0A%20%20%20%20%22%u041F%u0430%u043D%u0435%u043B%u044C%20%u043A%u043D%u043E%u043F%u043E%u043A%202%22%2C%0A%20%20%20%20%22%u041F%u0430%u043D%u0435%u043B%u044C%20%u043A%u043D%u043E%u043F%u043E%u043A%203%22%0A//%20%20%20%20%2C%22%u041F%u0430%u043D%u0435%u043B%u044C%20%u043A%u043D%u043E%u043F%u043E%u043A%204%22%0A%5D/*%2C%20show*/%29%3B%0Afunction%20toggleToolbar%28tbId%2C%20show%2C%20multiple%29%20%7B%0A%20%20%20%20var%20tb%20%3D%20tbId%20%3D%3D%20%22FindToolbar%22%20%26%26%20window.gFindBar%0A%20%20%20%20%20%20%20%20%7C%7C%20document.getElementById%28%22__customToolbar_%22%20+%20tbId.replace%28/%20/%2C%20%22_%22%29%29%0A%20%20%20%20%20%20%20%20%7C%7C%20document.getElementById%28tbId%29%3B%0A%20%20%20%20if%28%21tb%29%20%7B%0A%20%20%20%20%20%20%20%20Components.utils.reportError%28%3C%3E%5BCustom%20Buttons%5D%20Toolbar%20%22%7BtbId%7D%22%20not%20found%21%3C/%3E%29%3B%0A%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20%7D%0A%20%20%20%20var%20hideAttr%20%3D%20tb.getAttribute%28%22type%22%29%20%3D%3D%20%22menubar%22%0A%20%20%20%20%20%20%20%20%3F%20%22autohide%22%0A%20%20%20%20%20%20%20%20%3A%20tb.localName%20%3D%3D%20%22findbar%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%3F%20%22hidden%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%3A%20%22collapsed%22%3B%0A%20%20%20%20var%20hide%20%3D%20show%20%3D%3D%20undefined%0A%20%20%20%20%20%20%20%20%3F%20tb.getAttribute%28hideAttr%29%20%21%3D%20%22true%22%0A%20%20%20%20%20%20%20%20%3A%20%21show%3B%0A%20%20%20%20tb.setAttribute%28hideAttr%2C%20hide%29%3B%0A%20%20%20%20document.persist%28tbId%2C%20hideAttr%29%3B%0A%20%20%20%20%21multiple%20%26%26%20toggleToolbarsDone%28%29%3B%0A%7D%0Afunction%20toggleToolbarsDone%28%29%20%7B%0A%20%20%20%20if%28%22PlacesToolbarHelper%22%20in%20window%29%20%7B%20//%20Firefox%204%0A%20%20%20%20%20%20%20%20PlacesToolbarHelper.init%28%29%3B%0A%20%20%20%20%20%20%20%20BookmarksMenuButton.updatePosition%28%29%3B%0A%20%20%20%20%20%20%20%20updateAppButtonDisplay%28%29%3B%0A%20%20%20%20%7D%0A%7D%0Afunction%20toggleToolbars%28toolbars%2C%20show%29%20%7B%0A%20%20%20%20toolbars.forEach%28function%28tbId%29%20%7B%0A%20%20%20%20%20%20%20%20toggleToolbar%28tbId%2C%20show%2C%20true%29%3B%0A%20%20%20%20%7D%29%3B%0A%20%20%20%20toggleToolbarsDone%28%29%3B%0A%7D%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%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%u2022%0A%20%20%20%u0422oggleToolbars%20-%20%u041F%u0435%u0440%u0435%u043C%u0438%u043A%u0430%u0447%20%u0433%u0440%u0443%u043F%u0438%20%u043F%u0430%u043D%u0435%u043B%u0456%u0432%0A%0A%u041F%u0440%u0438%u0437%u043D%u0430%u0447%u0435%u043D%u043D%u044F%20%u043A%u043D%u043E%u043F%u043A%u0438%20-%20%u0448%u0432%u0438%u0434%u043A%u0435%20%u043F%u0440%u0438%u0445%u043E%u0432%u0443%u0432%u0430%u043D%u043D%u044F%20%u0433%u0440%u0443%u043F%u0438%20%u043F%u0430%u043D%u0435%u043B%u0456%u0432%2C%20%u044F%u043A%20%u0441%u0442%u0430%u043D%u0434%u0430%u0440%u0442%u043D%u0438%u0445%2C%20%u0442%u0430%u043A%20%u0456%20%u0441%u0442%u0432%u043E%u0440%u0435%u043D%u0438%u0445%20%u043A%u043E%u0440%u0438%u0441%u0442%u0443%u0432%u0430%u0447%u0435%u043C%2C%20%u043E%u0434%u043D%u0438%u043C%20%u043A%u043B%u0430%u0446%u043E%u043C%20%u043B%u0456%u0432%u043E%u0457%20%u043A%u043D%u043E%u043F%u043A%u0438%20%u043C%u0438%u0448%u0456.%20%u041F%u0440%u0430%u0446%u044E%u0454%20%AB%u0443%20%u0437%u0432%u2019%u044F%u0437%u0446%u0456%BB%20%u0437%20%u043A%u043D%u043E%u043F%u043A%u0430%u043C%u0438%20%AB%u0421%u0445%u043E%u0432%u0430%u0442%u0438/%u043F%u043E%u043A%u0430%u0437%u0430%u0442%u0438%20%u043F%u0430%u043D%u0435%u043B%u044C%BB%20%28%A9%20okkamas_knife%29.%20%u0417%u0430%u043F%u0430%u043C%u2019%u044F%u0442%u043E%u0432%u0443%u0454%20%u0432%u043B%u0430%u0441%u043D%u0438%u0439%20%u0441%u0442%u0430%u043D.%0A%u0412%u0438%u0431%u0456%u0440%20%u043F%u0430%u043D%u0435%u043B%u0456%u0432%2C%20%u0432%u0456%u0434%u043E%u0431%u0440%u0430%u0436%u0435%u043D%u043D%u044F%20%u043A%u043E%u0442%u0440%u0438%u0445%20%u0432%u043C%u0438%u043A%u0430%u0454/%u0432%u0438%u043C%u0438%u043A%u0430%u0454%20%u043A%u043D%u043E%u043F%u043A%u0430%2C%20%u0437%u0434%u0456%u0439%u0441%u043D%u044E%u0454%u0442%u044C%u0441%u044F%20%u0434%u043E%u0434%u0430%u0432%u0430%u043D%u043D%u044F%u043C%20%u043F%u043E%u0442%u0440%u0456%u0431%u043D%u0438%u0445%20%u0456%20%u0437%u0430%u043A%u043E%u043C%u0435%u043D%u0442%u043E%u0432%u0443%u0432%u0430%u043D%u043D%u044F%u043C%20%u043D%u0435%u043F%u043E%u0442%u0440%u0456%u0431%u043D%u0438%u0445%20%u0441%u0442%u0440%u0456%u0447%u043E%u043A%20%u0443%20%AB%u0448%u0430%u043F%u0446%u0456%BB%20%u043A%u043E%u0434%u0443%20%28%u0432%u043A%u043B%u0430%u0434%u043A%u0430%20Code%29%3A%0A%0A%0A%0A//%20%20%20%20%22toolbar-menubar%22%2C%20%20%20%20%20%20%20//%20%u043F%u0430%u043D%u0435%u043B%u044C%20%u043C%u0435%u043D%u044E%0A//%20%20%20%20%22aios-toolbar%22%2C%20%20%20%20%20%20%20%20%20%20%20%20%20%20//%20%u043F%u0430%u043D%u0435%u043B%u044C%20%u0456%u043D%u0441%u0442%u0440%u0443%u043C%u0435%u043D%u0442%u0456%u0432%20%u0431%u0456%u0447%u043D%u043E%u0457%20%u043F%u0430%u043D%u0435%u043B%u0456%20%28%u0434%u043E%u0434%u0430%u0442%u043E%u043A%20All-in-One%20Sidebar%29%0A//%20%20%20%20%22PersonalToolbar%22%2C%20%20%20%20%20%20%20%20%20//%20%u043F%u0430%u043D%u0435%u043B%u044C%20%u0437%u0430%u043A%u043B%u0430%u0434%u043E%u043A%0A//%20%20%20%20%22TabsToolbar%22%2C%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20//%20%u043F%u0430%u043D%u0435%u043B%u044C%20%u0432%u043A%u043B%u0430%u0434%u043E%u043A%0A%20%20%20%20%22nav-bar%22%2C%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20//%20%u043F%u0430%u043D%u0435%u043B%u044C%20%u043D%u0430%u0432%u0456%u0433%u0430%u0446%u0456%u0457%0A//%20%20%20%20%22FindToolbar%22%2C%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20//%20%u0441%u0442%u0440%u0456%u0447%u043A%u0430%20%u043F%u043E%u0448%u0443%u043A%u0443%20%28Ctrl+f%29%0A%20%20%20%20%22addon-bar%22%2C%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20//%20%u043F%u0430%u043D%u0435%u043B%u044C%20%u0434%u043E%u0434%u0430%u0442%u043A%u0456%u0432%20%28%u0441%u0442%u0440%u0456%u0447%u043A%u0430%20%u0441%u0442%u0430%u043D%u0443%29%0A//%20%20%20%20%22%u041C%u043E%u044F%20%u043F%u0430%u043D%u0435%u043B%u044C%20%u0437%u0430%u043A%u043B%u0430%u0434%u043E%u043A%22%2C%0A%20%20%20%20%22%u041F%u0430%u043D%u0435%u043B%u044C%20%u043A%u043D%u043E%u043F%u043E%u043A%201%22%2C%0A%20%20%20%20%22%u041F%u0430%u043D%u0435%u043B%u044C%20%u043A%u043D%u043E%u043F%u043E%u043A%202%22%2C%0A%20%20%20%20%22%u041F%u0430%u043D%u0435%u043B%u044C%20%u043A%u043D%u043E%u043F%u043E%u043A%203%22%2C%0A//%20%20%20%20%22%u041F%u0430%u043D%u0435%u043B%u044C%20%u043A%u043D%u043E%u043F%u043E%u043A%204%22%0A%0A%0A%u0410%u0432%u0442%u043E%u0440%20%u043A%u043E%u0434%u0443%3A%20Infocatcher%0A%u041E%u0444%u043E%u0440%u043C%u043B%u0435%u043D%u043D%u044F%20%u0456%20Help%3A%20slbgz%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

Код:

Выделить код

Код:

toggleToolbars([
//    "toolbar-menubar",      // панель меню
//    "aios-toolbar",          // All-in-One Sidebar (AiOS)
//    "PersonalToolbar",      // панель закладок
//    "TabsToolbar",          // панель вкладок
    "nav-bar",              // панель навігації
//    "FindToolbar",          // стрічка пошуку
//    "addon-bar",           // панель додатків (стрічка стану)
//    "Моя панель закладок",
    "Панель кнопок 1",
//    "Панель кнопок 2",
    "Панель кнопок 3"
//    ,"Панель кнопок 4"
]/*, show*/);
function toggleToolbar(tbId, show, multiple) {
    var tb = tbId == "FindToolbar" && window.gFindBar
        || document.getElementById("__customToolbar_" + tbId.replace(/ /, "_"))
        || document.getElementById(tbId);
    if(!tb) {
        Components.utils.reportError(<>[Custom Buttons] Toolbar "{tbId}" not found!</>);
        return;
    }
    var hideAttr = tb.getAttribute("type") == "menubar"
        ? "autohide"
        : tb.localName == "findbar"
            ? "hidden"
            : "collapsed";
    var hide = show == undefined
        ? tb.getAttribute(hideAttr) != "true"
        : !show;
    tb.setAttribute(hideAttr, hide);
    document.persist(tbId, hideAttr);
    !multiple && toggleToolbarsDone();
}
function toggleToolbarsDone() {
    if("PlacesToolbarHelper" in window) { // Firefox 4
        PlacesToolbarHelper.init();
        BookmarksMenuButton.updatePosition();
        updateAppButtonDisplay();
    }
}
function toggleToolbars(toolbars, show) {
    toolbars.forEach(function(tbId) {
        toggleToolbar(tbId, show, true);
    });
    toggleToolbarsDone();
}

ProfileManager (для расширения ProfileSwitcher( Firefox 2.0-5.* - Thunderbird 2.0-5.*)/ссылка на дом. страницу автора).

Быстрый вызов менеджера профилей, создание, переименование, удаление, добавление профилей, запуск и работа с несколькими профилями одновременно.
Оригинальное расширение не содержит кнопки, а только иконку в строке состояния и подменю в меню «Файл».
Иконка кнопки - «родная» из расширения.

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

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%3F%3E%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3EProfileManager%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE6IQ0oiVUrc6uCXaS7mXq/waGFxsOhgsW7l3SyqH5ei1pBMEkAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAACjbDiE4biI+fnkv//+8M3///TW///23v//9df//vDO//vnwv/20KT+vY1jyCcbEhoAAAAAAAAAAAAAAAAAAAAC3ahv+/XPnP/316T/++Ky//3qvv/+7cL//eu+//vjtP/42KX/9dCc//DCjP+ncUlQAAAAAAAAAAAAAAAAAAAAANaaW9Xxw4n/9c6X//fXo//53az/+uCv//nerP/42KT/9c+Y//LEiv/qsXX+gVY2JgAAAAAAAAAAAAAAAAAAAADGgD6M77t9//HDiP/0y5L/9dCZ//bSnP/10Jr/9MuT//HEif/vu33/2Jpf1gAAAAMAAAAAAAAAAAAAAAAAAAAAqlYOLOCiYf7vvYL/8cSN//LHkP/yx5D/8seQ//HEjf/vv4b/67Bv/8F/R3YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADGezas7r2H//PNov/zz6X/9NCn//PPpv/zzaP/8ceZ/9mUU+d+TicPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqVUMHNSOTOzz0rH/8cyo//HIo//xyqb/9Ne6/+SpcP61bjFQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACdVBVs4653//vpyP//+OX//vHT//TKnP+tbzm9AAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByOQkV1J1i6Pjbrf/85rj//uu///znuv/53K3/7L2H/W5DIGEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsWYkd+66ff/zyZD/9tSf//jYpf/31aD/9MuT/++9gf+6f0fOAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMZ7NqfrrWv/77t+//HDiP/yxo3/8cOK/++8gP/rr27/zopK8AAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADEdCyf6att/+69if/wwo//8MOS//DCkP/uvor/67J4/8mAPOgAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsV0UV+ewfP/xyqX/8syn//LNqf/yzaj/8cul/+/CmP+3aSWiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKFPCgLJhUq79dzG//fizv/34s//9+LO//fhzf/VnW3nkUkNHgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqVQMCsSAR5Les4716cit/+G6mP3MkV61oVAMIwAAAAAAAAAAAAAAAAAAAAAAAAAAwAesQcADrEGAA6xBwAOsQcADrEHAB6xB4AesQeAPrEHwD6xB4A+sQeAHrEHgB6xB4AesQeAPrEHgD6xB8B+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%5BprofileLauncher.runScript%28this%29%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%0A%u041A%u043D%u043E%u043F%u043A%u0430%20%u0432%u0438%u043A%u043B%u0438%u043A%u0443%20%u041C%u0435%u043D%u0435%u0434%u0436%u0435%u0440%u0430%20%u043F%u0440%u043E%u0444%u0456%u043B%u0456%u0432%20%u0434%u043B%u044F%20%u0434%u043E%u0434%u0430%u0442%u043A%u0443%20ProfileSwitcher%0Ahttps%3A//nic-nac-project.org/%7Ekaosmos/profileswitcher-en.html%0A%0A%u0410%u0432%u0442%u043E%u0440%20%u0434%u043E%u0434%u0430%u0442%u043A%u0443%3A%20Paolo%20Kaosmos%0Ahttps%3A//addons.mozilla.org/en-US/firefox/user/235043/%0A%0A%u041A%u043D%u043E%u043F%u043A%u0430%3A%20slbgz%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

Код:

Выделить код

Код:

profileLauncher.runScript(this)

Find( Firefox )
Поиск на странице без панели поиска.

ЛКМ => Если есть выделенный текст на текущей странице, то искать выделенный текст, если нет выделенного, искать на странице текст из буфера обмена. Искать дальше.
СКМ => Стандартное меню кнопки,
ПКМ => Искать назад выделенный текст.

Код кнопки и инициализаци и для Firefox 3.6 - 26
Код кнопки:

Выделить код

Код:

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%3EFind%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/x-icon%3Bbase64%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%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.onclick%20%3D%20function%28e%29%20%7B%0A%0A%20%20%20%20%20//%20%u0434%u0435%u0439%u0441%u0442%u0432%u0438%u0435%20%u043F%u0440%u0438%20%u043A%u043B%u0438%u043A%u0435%20%u041B%u041A%u041C%20....%0A%20%20%20%20%20if%20%28%20e.button%20%3D%3D%200%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20var%20str%20%3D%20getSelect%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20if%20%28%20str%20%29%20gFindBar._find%28%20str%20%29%3D%3D%200%20%3F%20gFindBar.%20_findAgain%28%20false%20%29%20%3A%20disableIcon%28%29%3B%20%0A%20%20%20%20%20%20%20%20%20%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%20%20%20%20//%20%u0434%u0435%u0439%u0441%u0442%u0432%u0438%u0435%20%u043F%u0440%u0438%20%u043A%u043B%u0438%u043A%u0435%20%u0421%u041A%u041C%20....%20%20%0A%20%20%20%20%20if%20%28%20e.button%20%3D%3D%201%20%29%20gShowPopup%28this%29%3B%0A%20%20%20%20%20%0A%20%20%20%20%20//%20%u0434%u0435%u0439%u0441%u0442%u0432%u0438%u0435%20%u043F%u0440%u0438%20%u043A%u043B%u0438%u043A%u0435%20%u041F%u041A%u041C%20....%20%20%20%20%0A%20%20%20%20%20if%20%28%20e.button%20%3D%3D%202%20%29%20%7B%20%0A%20%20%20%20%20%20%20%20%20%20var%20str%20%3D%20getSelect%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20if%20%28%20str%20%29%20gFindBar._find%28%20str%20%29%3D%3D%200%20%3F%20gFindBar.%20_findAgain%28%20true%20%29%20%3A%20disableIcon%28%29%3B%20%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%7D%3B%0A%0A//%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%20....................%20%0Athis.oncontextmenu%20%3D%20function%28e%29%20%7B%0A%20%20%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%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20e.preventDefault%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20e.stopPropagation%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%7D%3B%0A%0A%0A%0A//%20%u041E%u0431%u044A%u044F%u0432%u043B%u044F%u0435%u043C%20%u043F%u0435%u0440%u0435%u043C%u0435%u043D%u043D%u044B%u0435%20%u0434%u043B%u044F%20%u044D%u0442%u043E%u0439%20%u0432%u043A%u043B%u0430%u0434%u043A%u0438%20%20....................%20%20%0Avar%20button%20%3D%20this%3B%20%0A%0A%0A%0A//%20%u0412%u0440%u0435%u043C%u0435%u043D%u043D%u043E%20%u043E%u0442%u043A%u043B%u044E%u0447%u0438%u0442%u044C%20%u0438%u043A%u043E%u043D%u043A%u0443%20%u043A%u043D%u043E%u043F%u043A%u0438%20....................%20%20%0Afunction%20disableIcon%28%29%20%7B%0A%20%20%20button.style.filter%20%3D%20%27url%28%22chrome%3A//mozapps/skin/extensions/extensions.svg%23greyscale%22%29%27%3B%0A%20%20%20setTimeout%28function%28%29%20%7B%20button.style.filter%20%3D%20%27%27%20%7D%2C%20600%29%0A%7D%3B%0A%0A%0A%0A/*%20%u0424%u0443%u043D%u043A%u0446%u0438%u044F%20%u043E%u0442%u0434%u0430%u0441%u0442%20%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u043D%u044B%u0439%20%u0442%u0435%u043A%u0441%u0442%20%u0438%u0437%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u044B%20%u0438%u043B%u0438%20%u0442%u0435%u043A%u0441%u0442%u043E%u0432%u043E%u0433%u043E%20%u043F%u043E%u043B%u044F%2C%20%0A%20%20%20%u0435%u0441%u043B%u0438%20%u0442%u0435%u043A%u0441%u0442%20%u043D%u0435%20%u0432%u044B%u0434%u0435%u043B%u0435%u043D%20%u0438%u0437%20%u0431%u0443%u0444%u0435%u0440%u0430%20%u043E%u0431%u043C%u0435%u043D%u0430%2C%20%u0435%u0441%u043B%u0438%20%u043D%u0435%u0442%20%u0442%u0435%u043A%u0441%u0442%u0430%20%u043E%u0442%u0434%u0430%u0441%u0442%20%27false%27%20...................................%20*/%0Afunction%20getSelect%28%29%20%7B%0A%20%20//%20%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u043D%u044B%u0439%20%u0442%u0435%u043A%u0441%u0442%20%u0438%u0437%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u044B%20....%0A%20%20var%20selection%20%3D%20document.commandDispatcher.focusedWindow.getSelection%28%29.toString%28%29%3B%0A%0A%20%20//%20%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u043D%u044B%u0439%20%u0442%u0435%u043A%u0441%u0442%20%u0438%u0437%20%u0442%u0435%u043A%u0441%u0442%u043E%u0432%u043E%u0433%u043E%20%u043F%u043E%u043B%u044F%20....%0A%20%20if%20%28%20selection%20%3D%3D%20%27%27%20%29%20%7B%0A%20%20%20%20%20%20%20var%20theBox%20%3D%20document.commandDispatcher.focusedElement%3B%0A%20%20%20%20%20%20%20if%20%28%20theBox%20%26%26%20%28theBox.type%20%3D%3D%20%22text%22%20%7C%7C%20theBox.type%20%3D%3D%20%22textarea%22%29%20%29%20%7B%20%0A%20%20%20%20%20%20%20%20%20%20%20%20var%20startPos%20%3D%20theBox.selectionStart%3B%0A%09%20%20%20%20var%20endPos%20%3D%20theBox.selectionEnd%3B%0A%09%20%20%20%20var%20selection%20%3D%20theBox.value.substring%28startPos%2C%20endPos%29%3B%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%20%20%20%0A%20%20//%20%u0442%u0435%u043A%u0441%u0442%20%u0438%u0437%20%u0431%u0443%u0444%u0435%u0440%u0430%20%u043E%u0431%u043C%u0435%u043D%u0430%20....%0A%20%20if%20%28%20selection%20%3D%3D%20%27%27%20%29%20var%20selection%20%3D%20gClipboard.read%28%29%3B%0A%20%20%20%20%20%20%20%20%20%0A%20%20//%20%u0443%u0431%u0438%u0440%u0430%u0435%u043C%20%u043F%u0440%u043E%u0431%u0435%u043B%u044B%20%u0441%20%u043E%u0431%u043E%u0438%u0445%20%u043A%u043E%u043D%u0446%u043E%u0432%20%u0442%u0435%u043A%u0441%u0442%u0430%20....%0A%20%20if%20%28%20selection%20%21%3D%3D%20%27%27%20%29%20var%20selection%20%3D%20selection.toString%28%29.replace%28/%5E%5Cs+%7C%5Cs+%24/g%2C%22%22%29%3B%0A%20%20%0A%20%20if%20%28%20selection%20%3D%3D%20%27%27%29%20%7B%20%0A%20%20%20%20%20%20%20var%20notification%20%3D%20%22%u0412%u044B%u0434%u0435%u043B%u0438%u0442%u0435%20%u0438%u043B%u0438%20%u0441%u043A%u043E%u043F%u0438%u0440%u0443%u0439%u0442%u0435%20%u0442%u0435%u043A%u0441%u0442%21%22%0A%20%20%20%20%20%20%20Components.classes%5B%22@mozilla.org/alerts-service%3B1%22%5D.getService%28Components.interfaces.nsIAlertsService%29%0A%20%20%20%20%20%20%20.showAlertNotification%28%20button.image%2C%20button.label%2C%20notification%2C%20false%2C%20%22%22%2C%20null%2C%20%22%22%29%3B%0A%20%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%0A%20%20return%20%28%20selection%20%3D%3D%20%27%27%29%3F%20false%3A%20selection%3B%0A%7D%3B%0A%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%u0418%u0441%u043A%u0430%u0442%u044C%20%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u043D%u044B%u0439%20%u0442%u0435%u043A%u0441%u0442%u0430/%u0438%u0437%20%u0431%u0443%u0444%u0435%u0440%u0430%20%u0434%u0430%u043B%u0435%u0435%20%5Cn%u0421%3A%20CB%20%u041C%u0435%u043D%u044E%20%5Cn%u041F%3A%20%u0418%u0441%u043A%u0430%u0442%u044C%20%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u043D%u044B%u0439%20%u0442%u0435%u043A%u0441%u0442%u0430/%u0438%u0437%20%u0431%u0443%u0444%u0435%u0440%u0430%20%u043D%u0430%u0437%u0430%u0434%22%3B%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B%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

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

Выделить код

Код:

// Настройка функций кликов мыши для кнопки ....................
this.onclick = function(e) {

     // действие при клике ЛКМ ....
     if ( e.button == 0 ) {
          var str = getSelect();
          if ( str ) gFindBar._find( str )== 0 ? gFindBar. _findAgain( false ) : disableIcon(); 
          }
                    
     // действие при клике СКМ ....  
     if ( e.button == 1 ) gShowPopup(this);
     
     // действие при клике ПКМ ....    
     if ( e.button == 2 ) { 
          var str = getSelect();
          if ( str ) gFindBar._find( str )== 0 ? gFindBar. _findAgain( true ) : disableIcon(); 
          }
};

// Блокируем контекстное меню при клике ПКМ без модификаторов .................... 
this.oncontextmenu = function(e) {
     if ( e.button == 2 && !e.ctrlKey && !e.shiftKey && !e.altKey && !e.metaKey ) {        
          e.preventDefault();
          e.stopPropagation();
          }
};



// Объявляем переменные для этой вкладки  ....................  
var button = this; 



// Временно отключить иконку кнопки ....................  
function disableIcon() {
   button.style.filter = 'url("chrome://mozapps/skin/extensions/extensions.svg#greyscale")';
   setTimeout(function() { button.style.filter = '' }, 500)
};



/* Функция отдаст выделенный текст из страницы или текстового поля, 
   если текст не выделен из буфера обмена, если нет текста отдаст 'false' ................................... */
function getSelect() {
  // выделенный текст из страницы ....
  var selection = document.commandDispatcher.focusedWindow.getSelection().toString();

  // выделенный текст из текстового поля ....
  if ( selection == '' ) {
       var theBox = document.commandDispatcher.focusedElement;
       if ( theBox && (theBox.type == "text" || theBox.type == "textarea") ) { 
            var startPos = theBox.selectionStart;
        var endPos = theBox.selectionEnd;
        var selection = theBox.value.substring(startPos, endPos);  
            }
       };
       
  // текст из буфера обмена ....
  if ( selection == '' ) var selection = gClipboard.read();
         
  // убираем пробелы с обоих концов текста ....
  if ( selection !== '' ) var selection = selection.toString().replace(/^\s+|\s+$/g,"");
  
  if ( selection == '') { 
       var notification = "Выделите или скопируйте текст!"
       Components.classes["@mozilla.org/alerts-service;1"].getService(Components.interfaces.nsIAlertsService)
       .showAlertNotification( button.image, button.label, notification, false, "", null, "");
       };
    
  return ( selection == '')? false: selection;
};



// Подсказка для кнопки ....................
this.tooltipText = "Л: Искать выделенный текста/из буфера далее \nС: CB Меню \nП: Искать выделенный текста/из буфера назад";


Код кнопки для Firefox 27+
Код кнопки:

Выделить код

Код:

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%3EFind%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/x-icon%3Bbase64%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%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.onclick%20%3D%20function%28e%29%20%7B%0A%0A%20%20%20%20//%20%u0434%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%20if%20%28e.button%20%3D%3D%201%29%20%7B%20gShowPopup%28this%29%3B%20return%3B%20%7D%0A%0A%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%20....................%0A%20%20%20%20if%20%28e.button%20%3D%3D%202%29%20%7B%0A%20%20%20%20%20%20%20%20if%20%28e.ctrlKey%20%7C%7C%20e.shiftKey%20%7C%7C%20e.altKey%20%7C%7C%20e.metaKey%29%20return%3B%0A%20%20%20%20%20%20%20%20e.preventDefault%28%29%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20//%20%u0434%u0435%u0439%u0441%u0442%u0432%u0438%u0435%20%u043F%u0440%u0438%20%u043A%u043B%u0438%u043A%u0435%20%u041B%u041A%u041C%20%u0438%u043B%u0438%20%u041F%u041A%u041C%20....%0A%20%20%20%20var%20str%20%3D%20getSelect%28%29%3B%0A%20%20%20%20if%20%28%21str%29%20return%3B%0A%20%20%20%20var%20fastFind%20%3D%20gBrowser.finder._fastFind%3B%0A%0A%20%20%20%20fastFind.find%28str%2C%20false%29%20%3D%3D%20fastFind.FIND_FOUND%0A%20%20%20%20%3F%20fastFind.findAgain%28e.button%2C%20false%29%0A%20%20%20%20%3A%20disableIcon%28%29%3B%0A%7D%3B%0Athis.ondblclick%20%3D%20function%28e%29%20e.button%20%21%3D%202%3B%0A%0A%0A//%20%u0412%u0440%u0435%u043C%u0435%u043D%u043D%u043E%20%u043E%u0442%u043A%u043B%u044E%u0447%u0438%u0442%u044C%20%u0438%u043A%u043E%u043D%u043A%u0443%20%u043A%u043D%u043E%u043F%u043A%u0438%20....................%20%20%0Afunction%20disableIcon%28%29%20%7B%0A%20%20%20self.style.filter%20%3D%20%27url%28%22chrome%3A//mozapps/skin/extensions/extensions.svg%23greyscale%22%29%27%3B%0A%20%20%20setTimeout%28function%28%29%20%7B%20self.style.filter%20%3D%20%27%27%20%7D%2C%20600%29%0A%7D%3B%0A%0A%0A//%20%u041F%u043E%u043B%u0443%u0447%u0438%u0442%u044C%20%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u043D%u044B%u0439%20%u0442%u0435%u043A%u0441%u0442%20%u0438%u0437%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u044B%20%u0438%u043B%u0438%20%u0438%u0437%20%u0431%u0443%u0444%u0435%u0440%u0430%20%u043E%u0431%u043C%u0435%u043D%u0430%2C%20%u0435%u0441%u043B%u0438%20%u043D%u0435%u0442%20%u0442%u0435%u043A%u0441%u0442%u0430%20%u043F%u043E%u043B%u0443%u0447%u0438%u0442%u044C%20%27false%27%20................................%0Afunction%20getSelect%28%29%20%7B%0A%20%20%20var%20sel%20%3D%20document.commandDispatcher.focusedWindow.getSelection%28%29.toString%28%29%3B%20//%20%u0438%u0437%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u044B%0A%20%20%20if%20%28%20sel%20%3D%3D%20%27%27%20%29%20%7B%20%20%20%20%0A%20%20%20%20%20%20%20%20var%20theBox%20%3D%20document.commandDispatcher.focusedElement%3B%0A%20%20%20%20%20%20%20%20if%20%28%20theBox%20%26%26%20%28theBox.type%20%3D%3D%20%22text%22%20%7C%7C%20theBox.type%20%3D%3D%20%22textarea%22%29%20%29%20%7B%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20var%20startPos%20%3D%20theBox.selectionStart%3B%0A%09%20%20%20%20%20var%20endPos%20%3D%20theBox.selectionEnd%3B%0A%09%20%20%20%20%20var%20sel%20%3D%20theBox.value.substring%28startPos%2C%20endPos%29%3B%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%20%0A%20%20if%20%28%20sel%20%3D%3D%20%27%27%20%29%20var%20sel%20%3D%20gClipboard.read%28%29%3B%20//%20%u0438%u0437%20%u0431%u0443%u0444%u0435%u0440%u0430%20%u043E%u0431%u043C%u0435%u043D%u0430%0A%20%20if%20%28%20sel%20%3D%3D%20%27%27%20%29%20Cc%5B%22@mozilla.org/alerts-service%3B1%22%5D.getService%28Ci.nsIAlertsService%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.showAlertNotification%28%20self.image%2C%20self.label%2C%20%22%u0412%u044B%u0434%u0435%u043B%u0438%u0442%u0435%20%u0438%u043B%u0438%20%u0441%u043A%u043E%u043F%u0438%u0440%u0443%u0439%u0442%u0435%20%u0442%u0435%u043A%u0441%u0442%21%22%2C%20false%2C%20%22%22%2C%20null%2C%20%22%22%20%29%3B%0A%20%20%0A%20%20return%20%28%20sel%20%3D%3D%20%27%27%20%29%20%3F%20false%20%3A%20sel.toString%28%29.replace%28/%5E%5Cs+%7C%5Cs+%24/g%2C%22%22%29%3B%20//%20%u0443%u0431%u0438%u0440%u0430%u0435%u043C%20%u043F%u0440%u043E%u0431%u0435%u043B%u044B%20%u0441%20%u043A%u043E%u043D%u0446%u043E%u0432%20%u0442%u0435%u043A%u0441%u0442%u0430%0A%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%u0418%u0441%u043A%u0430%u0442%u044C%20%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u043D%u044B%u0439%20%u0442%u0435%u043A%u0441%u0442%u0430/%u0438%u0437%20%u0431%u0443%u0444%u0435%u0440%u0430%20%u0434%u0430%u043B%u0435%u0435%20%5Cn%u0421%3A%20CB%20%u041C%u0435%u043D%u044E%20%5Cn%u041F%3A%20%u0418%u0441%u043A%u0430%u0442%u044C%20%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u043D%u044B%u0439%20%u0442%u0435%u043A%u0441%u0442%u0430/%u0438%u0437%20%u0431%u0443%u0444%u0435%u0440%u0430%20%u043D%u0430%u0437%u0430%u0434%22%3B%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B%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

Поиск по сайту в Google( Firefox24+ ) от 07.03.2017.
Даёт возможность искать текст( выделенный, введённый или из буфера обмена ) по текущему сайту в Google.

ЛКМ => Поиск по сайту(выделенного или введённого текста),
СКМ => Поиск по сайту текста из буфера обмена,
ПКМ => 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%3E%u041F%u043E%u0438%u0441%u043A%20%u043F%u043E%20%u0441%u0430%u0439%u0442%u0443%20%u0432%20Google%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/x-icon%3Bbase64%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%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.onclick%20%3De%3D%3E%20%7B%0A%20%20%20if%20%28%20e.button%20%3D%3D%200%20%29%20%7B%0A%20%20%20%20%20%20%20%20var%20text%20%3D%20getSelect%28%29%20%7C%7C%20custombuttons.promptBox%28%27%u041F%u043E%u0438%u0441%u043A%20%u043F%u043E%20%u0441%u0430%u0439%u0442%u0443%20%u0432%20Google%27%2C%20%27B%u0432%u0435%u0434%u0438%u0442%u0435%20%u0442%u0435%u043A%u0441%u0442%20....%27%29%5B1%5D%3B%0A%20%20%20%20%20%20%20%20text%20%21%3D%3D%20%27%27%20%26%26%20searchInWebsite%28text%29%3B%0A%20%20%20%20%20%20%20%20%7D%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20e.button%20%3D%3D%201%20%26%26%20searchInWebsite%28gClipboard.read%28%29%29%3B%0A%7D%3B%0A%0A%0A//%20%u041F%u043E%u0438%u0441%u043A%20%u043F%u043E%20%u0441%u0430%u0439%u0442%u0443%20%u0432%20Google%20..................%0Afunction%20searchInWebsite%28text%29%20%7B%20%0A%20%20%20var%20text%20%3D%20escape%28%20convertFromUnicode%28%22UTF-8%22%2C%20text%29%20%29%3B%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20//var%20domain%20%3D%20Services.eTLD.getBaseDomain%28%20gBrowser.currentURI%20%29%3B%0A%20%20%20var%20domain%20%3D%20encodeURIComponent%28content.document.domain%29%3B%0A%20%20%20var%20url%20%3D%20%22http%3A//www.google.com/search%3Fas_q%3D%22%20+%20text%20+%20%22%26as_sitesearch%3D%22%20+%20domain%3B%0A%20%20%20gBrowser.selectedTab%20%3D%20gBrowser.addTab%28url%29%3B%20%0A%7D%3B%0A%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%0A%0A%0A//%20%u041F%u043E%u043B%u0443%u0447%u0438%u0442%u044C%20%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u043D%u044B%u0439%20%u0442%u0435%u043A%u0441%u0442%20%u0438%u0437%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u044B%20%u0438%u043B%u0438%20false%20..................%0Afunction%20getSelect%28%29%20%7B%0A%20%20%20var%20sel%20%3D%20gBrowser.contentDocument.defaultView.getSelection%28%29.toString%28%29%0A%20%20%20return%20%28sel%20%3D%3D%20%27%27%29%20%3F%20false%20%3A%20sel.toString%28%29.replace%28/%5E%5Cs+%7C%5Cs+%24/g%2C%22%22%29%3B%0A%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%u041F%u043E%u0438%u0441%u043A%20%u043F%u043E%20%u0441%u0430%u0439%u0442%u0443%20%5Cn%u041B%3A%20%u041F%u043E%u0438%u0441%u043A%20%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u043D%u043E%u0433%u043E%20%u0438%u043B%u0438%20%u0432%u0432%u0435%u0434%u0451%u043D%u043D%u043E%u0433%u043E%20%u0442%u0435%u043A%u0441%u0442%u0430%20%5Cn%u0421%3A%20%u041F%u043E%u0438%u0441%u043A%20%u0442%u0435%u043A%u0441%u0442%u0430%20%u0438%u0437%20%u0431%u0443%u0444%u0435%u0440%u0430%20%u043E%u0431%u043C%u0435%u043D%u0430%20%5Cn%u041F%3A%20CB%20%u043C%u0435%u043D%u044E%22%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

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

Выделить код

Код:

// Настройка функций кликов мыши для кнопки ..................
this.onclick =e=> {
   if ( e.button == 0 ) {
        var text = getSelect() || custombuttons.promptBox('Поиск по сайту в Google', 'Bведите текст ....')[1];
        text !== '' && searchInWebsite(text);
        } 
               
   e.button == 1 && searchInWebsite(gClipboard.read());
};


// Поиск по сайту в Google ..................
function searchInWebsite(text) { 
   var text = escape( convertFromUnicode("UTF-8", text) );           
   //var domain = Services.eTLD.getBaseDomain( gBrowser.currentURI );
   var domain = encodeURIComponent(content.document.domain);
   var url = "http://www.google.com/search?as_q=" + text + "&as_sitesearch=" + domain;
   gBrowser.selectedTab = gBrowser.addTab(url); 
};


// Конвертировать текст в юникод ..................
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();
};


// Получить выделенный текст из страницы или false ..................
function getSelect() {
   var sel = gBrowser.contentDocument.defaultView.getSelection().toString()
   return (sel == '') ? false : sel.toString().replace(/^\s+|\s+$/g,"");
};


// Подсказка для кнопки ..................
this.tooltipText = "Поиск по сайту \nЛ: Поиск выделенного или введённого текста \nС: Поиск текста из буфера обмена \nП: CB меню";

Select Search Engine (Firefox)
Кнопка предназначена для управления поисковыми плагинами скрытой панели(строки) поиска.  Иконка кнопки изменяется автоматически на иконку "текущего" поисковика после каждого его переключения.

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

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%3F%3E%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3ESelect%20Search%20Engine%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABEElEQVQ4jaWSPU7DQBCF3wGo7DZp4qtEQqJJlSu4jLgBNS0dRDR0QARSumyPRJogkIJiWiToYhrSEPJR7Hptx/kDRhrNm93nb3ZXFsD4psPRwR4AzbjHxd0ru4a8kEgvbf1NePfzbQdJfro52UcS8fHQDyjWCuDz7QpJTOYLZk5nH0zmi/8Dzg/DEqgCmL1fW/PXNwADf4V7AMbuis24txrw1xBJAlHgMizoLdkI4CVBREEZWTKGK9bKqa3G3QDO2G7Z2ljqAYyxPmPgI4XHpw2A7ES+d/unZzlwM2BNnwEKb1QFGJNPabdg9GB1v2993W71BNOamNZEWpfXy5nW8/3U9UQBkqTyy677F6rrkvQDptjzJ/PSbekAAAAASUVORK5CYII%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bfunction%20searchService%28%29%20%7B%0Areturn%20Components.classes%5B%22@mozilla.org/browser/search-service%3B1%22%5D%0A.getService%28Components.interfaces.nsIBrowserSearchService%29%3B%0A%7D%0A%0A%20this.selectEngine%20%3D%20function%28aNode%2C%20aEvent%29%20%7B%0A%20%20var%20engine%20%3D%20aEvent.target.engine%3B%0A%20%20var%20ss%20%3D%20searchService%28%29%3B%0A%20%20ss.currentEngine%20%3D%20ss.getEngineByName%28engine.name%29%3B%0A%20%20aNode.engine%20%3D%20engine%3B%0A%20%20aNode.image%20%3D%20aEvent.target.getAttribute%28%22src%22%29%3B%0A%7D%0A%0Athis.populateMenu%20%3D%20function%28aNode%29%20%7B%0A%20%20var%20ss%20%3D%20searchService%28%29%3B%0A%20%20var%20engines%20%3D%20ss.getVisibleEngines%28%7B%20%7D%29%3B%0A%20%20const%20kXULNS%20%3D%20%22http%3A//www.mozilla.org/keymaster/gatekeeper/there.is.only.xul%22%3B%0A%0A%20%20while%28aNode.firstChild%20%26%26%20aNode.firstChild.localName%20%21%3D%20%22menuseparator%22%29%20%7B%0A%20%20%20%20aNode.removeChild%28aNode.firstChild%29%3B%0A%20%20%7D%0A%0A%20%20for%28var%20i%20%3D%20engines.length%20-%201%3B%20i%20%3E%3D%200%3B%20i--%29%20%7B%0A%20%20%20%20var%20mi%20%3D%20document.createElementNS%28kXULNS%2C%20%22menuitem%22%29%3B%0A%20%20%20%20mi.id%20%3D%20%22cb-search-%22%20+%20engines%5Bi%5D.name%3B%0A%20%20%20%20mi.className%20%3D%20%22menuitem-iconic%20searchbar-engine-menuitem%22%3B%0A%20%20%20%20mi.setAttribute%28%22label%22%2C%20engines%5Bi%5D.name%29%3B%0A%20%20%20%20if%28engines%5Bi%5D.iconURI%29%0A%20%20%20%20%20%20mi.setAttribute%28%22src%22%2C%20engines%5Bi%5D.iconURI.spec%29%3B%0A%20%20%20%20mi.engine%20%3D%20engines%5Bi%5D%3B%0A%20%20%20%20if%28mi.engine%20%3D%3D%20ss.currentEngine%29%0A%20%20%20%20%20%20mi.style.fontWeight%20%3D%20%22bold%22%3B%0A%20%20%20%20mi.setAttribute%28%22onclick%22%2C%0A%20%20%20%20%20%20%22event.preventDefault%28%29%3Bevent.stopPropagation%28%29%3BparentNode.parentNode.selectEngine%28parentNode.parentNode%2C%20event%29%3B%22%29%3B%0A%20%20%20%20aNode.insertBefore%28mi%2C%20aNode.firstChild%29%3B%0A%20%20%7D%0A%7D%0A%0Athis.currentEngine%20%3D%20searchService%28%29.currentEngine%3B%0A%0Avar%20ss%20%3D%20searchService%28%29%3B%0Athis.engine%20%3D%20ss.currentEngine%3B%0Athis.image%20%3D%20this.engine.iconURI.spec%3B%0A%0Avar%20mp%20%3D%20this.appendChild%28document.createElement%28%22menupopup%22%29%29%3B%0Amp.setAttribute%28%22onpopupshowing%22%2C%20%22parentNode.populateMenu%28this%29%22%29%3B%0Amp.setAttribute%28%22oncommand%22%2C%20%22event.stopPropagation%28%29%22%29%3B%0A%0Avar%20managerSeparator%20%3D%20mp.appendChild%28document.createElement%28%22menuseparator%22%29%29%3B%0AmanagerSeparator.id%20%3D%20%22cb-searchbutton-separator%22%0Avar%20managerItem%20%3D%20mp.appendChild%28document.createElement%28%22menuitem%22%29%29%3B%0AmanagerItem.setAttribute%28%22label%22%2C%20%22Manage%20Search%20Engines%22%29%3B%0AmanagerItem.setAttribute%28%22oncommand%22%2C%0A%20%20%22openDialog%28%27chrome%3A//browser/content/search/engineManager.xul%27%2C%20%22%20+%0A%20%20%22%27engineManager%27%2C%20%27chrome%2C%20dialog%3Dno%27%29%22%29%3B%0A%20%20%0Athis.type%20%3D%20%22menu%22%3B%0A%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

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

Выделить код

Код:

function searchService() {
return Components.classes["@mozilla.org/browser/search-service;1"]
.getService(Components.interfaces.nsIBrowserSearchService);
}

 this.selectEngine = function(aNode, aEvent) {
  var engine = aEvent.target.engine;
  var ss = searchService();
  ss.currentEngine = ss.getEngineByName(engine.name);
  aNode.engine = engine;
  aNode.image = aEvent.target.getAttribute("src");
}

this.populateMenu = function(aNode) {
  var ss = searchService();
  var engines = ss.getVisibleEngines({ });
  const kXULNS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";

  while(aNode.firstChild && aNode.firstChild.localName != "menuseparator") {
    aNode.removeChild(aNode.firstChild);
  }

  for(var i = engines.length - 1; i >= 0; i--) {
    var mi = document.createElementNS(kXULNS, "menuitem");
    mi.id = "cb-search-" + engines[i].name;
    mi.className = "menuitem-iconic searchbar-engine-menuitem";
    mi.setAttribute("label", engines[i].name);
    if(engines[i].iconURI)
      mi.setAttribute("src", engines[i].iconURI.spec);
    mi.engine = engines[i];
    if(mi.engine == ss.currentEngine)
      mi.style.fontWeight = "bold";
    mi.setAttribute("onclick",
      "event.preventDefault();event.stopPropagation();parentNode.parentNode.selectEngine(parentNode.parentNode, event);");
    aNode.insertBefore(mi, aNode.firstChild);
  }
}

this.currentEngine = searchService().currentEngine;

var ss = searchService();
this.engine = ss.currentEngine;
this.image = this.engine.iconURI.spec;

var mp = this.appendChild(document.createElement("menupopup"));
mp.setAttribute("onpopupshowing", "parentNode.populateMenu(this)");
mp.setAttribute("oncommand", "event.stopPropagation()");

var managerSeparator = mp.appendChild(document.createElement("menuseparator"));
managerSeparator.id = "cb-searchbutton-separator"
var managerItem = mp.appendChild(document.createElement("menuitem"));
managerItem.setAttribute("label", "Manage Search Engines");
managerItem.setAttribute("oncommand",
  "openDialog('chrome://browser/content/search/engineManager.xul', " +
  "'engineManager', 'chrome, dialog=no')");
  
this.type = "menu";

Кнопка является оформленной в отдельную кнопку частью кода из кнопки Search and open +  .
Изменен тип кнопки на кнопку без бокового дропмейкера как более удобный в пользовании и более компактный, за помощь и код спасибо bunda1.

Go plus! (Firefox)
Кнопка вместе с кнопкой Select Search Engine(постом выше) и адресной строкой полностью заменяют собой 3 элемента Панели навигации: кнопку Go("Перейти"), плюс кнопку Reload("Обновить страницу"), плюс стандартную панель(строку) поиска со всеми их стандартными функциями, плюс добавляет дополнительные функции:
- переход по "текстовой", выделенной на странице, ссылке (линкификация), переход по ссылке из буфера обмена(Paste and Go),
- поиск текста, выделенного на странице, или текста из буфера обмена "текущим" поисковиком.

ЛКМ => функция Go(Перейти) - открыть URL из строки адреса или Reload(Обновить страницу).
СКМ => открыть "текстовую" ссылку, выделенную на странице или, при отсутствии выделенного, - ссылку из буфера.
ПКМ  => искать текущим поисковиком текст, набранный в строке адреса, или - выделенный на странице или - из буфера.
Shift+ЛКМ => Hard Reload ("Обновить из сети", "Ctrl+F5").
Shift/Ctrl/Alt + ПКМ  => CB меню.

Примечания

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

            1. Логика поиска текста "текущим" поисковиком по ПКМ.
                Поиск текста, набранного в адресной строке, имеет приоритет перед другими поисками (выделенного текста,
                текста из буфера обмена). Для того, чтобы осуществялся поиск выделенного на странице или из буфера обмена, - не
                изменять содержимое адресной строки (в строке должен оставаться URL).
                Поиск текста из буфера обмена происходит при отсутствии выделенного на странице текста, иначе производится поиск
                выделенного. От местоположения курсора (фокуса) поиск независим.

           2.  Если включен и установлен через about:config (параметром keyword.URL) дефолтный поисковый запрос
                для адресной строки, то для поиска текста, набранного в адресной строке, имеем одновременно две возможности:
                  а) нажимаем правой кнопкой мыши Go plus! = ищем поисковиком, выбранным кнопкой Select Search Engine,
                  б) нажимаем кнопку ENTER = ищем дефолтным для адресной строки, например, Google.
               
               При поиске набранного в адресной строке и выделенного на странице текста используется буфер обмена.
               Если потеря содержимого буфера обмена нежелательна, сохраняйте его перед поиском.

               После установки Select Search Engine и Go plus! панель(строку) поиска и кнопку "Обновить" можно  "удалить"
               (скрыть путем перемещения их в окно настоек панелей инструментов), так как кнопка Go plus! полностью
               заменяет их функции. Стандартную кнопку Go скрыть можно путем редактирования файла userChrome.css.
               Для более компактного и аккуратного стиля кнопки Go plus! раскомментируйте 2-ю или 3-ю строку кода.

          3. Настройки в "шапке" кода:
              IN_NEW_TAB = true / false - открывать в новой / в текущей вкладке,
              IN_BACKGROUND = false / true - открывать в активной вкладке / в фоне.

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

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%3F%3E%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3EGo%20plus%21%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWJFY/97e3v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAA/wAAAAAAAAAAAAAAAABsAP8AHQD/oK2g/97e3v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAP8AAAAAAAAAAAAAAABZtFn/AHgA/wBBAP8ANwD/3t7e/wAAAAAAAAAAAAAAAAAAAAAAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAAAbrhu/xKaEv8AkwD/AHsA/wBXAP8PXA//3t7e/wAAAAAAAAAAAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAAHLGcv8TohP/BaQF/xixGP8RqxH/AIQA/wBeAP8+hT7/3t7e/wAAAAAAAAAAAAAA/wAAAP8AAAAAAAAAAAAAAAB5xnn/GKIY/wqeCv8ZpRn/GK8Y/xq+Gv8SthL/AJIA/wBzAP+AuoD/3t7e/wAAAP8AAAD/AAAAAAAAAAAAAAAAbrRu/xCIEP8Lhgv/FosW/xaKFv8Wjxb/GJwY/xurG/8OpA7/AIoA/wCIAP/K/cr/3t7e/wAAAAAAAAAAAAAAAIDGgP8ZnRn/EJgQ/xycHP8bmxv/Gpga/xuUG/8ckhz/HJgc/w2YCv8AhgD/AHQA/wByAP/e3t7/AAAAAAAAAACBzIH/HaUd/xWjFP8ipyH/Iacg/yKnIf8ipyL/FKQU/wWcB/8apBr/Q7ZC/064UP/F7MX/3t7e/wAAAAAAAAAAjdaN/yKvIv8YrBr/JrAo/yivKf8drB//CqgL/xSrFv82tjb/UsRU/8Hsw//e3t7/AAAAAAAAAAAAAAAAAAAAAI7cjv8mtyb/IrUh/yi5J/8SshL/FrMW/zK8NP9XzVf/k+GT/97e3v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACY4Zj/Kr8q/xK6Ev8Xuhf/LMEs/0jJSP9o1mf/3t7e/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkeOR/xnEGf8dwx3/QdBB/17aXv/T9tP/3t7e/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIjliP850Tn/W9tb/6nuqf/e3t7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABl4WX/RNtE/97e3v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3t7e/+z/7P8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAn/OsQYfzrEGDwKxBgMCsQYAzrEGAA6xBgAOsQYABrEGAAaxBgAesQYAfrEGAf6xBgP+sQYP/rEGP/6xBn/+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%5Bthis.tooltipText%20%3D%20%22L%3DGO/RELOAD%20%7C%20M%3DOPEN%20select./clipb.%7C%20R%3DSEARCH%20typed/sel/clipb.%7C%20Sh+L%3DH.RELOAD%22%3B%0A//this.setAttribute%28%22style%22%2C%20%22padding-left%3A%200px%20%21important%3B%22%29%3B%0A//this.setAttribute%28%22style%22%2C%20%22padding-left%3A%200px%20%21important%3B%20padding-right%3A%202px%20%21important%3B%22%29%3B%0Aconst%20IN_NEW_TAB%20%3D%20true%3B%0Aconst%20IN_BACKGROUND%20%3D%20false%3B%0A%0Athis.onclick%20%3D%20function%28event%29%0A%7B%20%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%29%0A%20%20%20%7B%20%20event.preventDefault%28%29%3B%20event.stopPropagation%28%29%3B%0A%20%20%20%20%20%20goDoCommand%28%22cmd_copy%22%29%3B%0A%20%20%20%20%20%20var%20strokaadresa%20%3D%20gURLBar.value%3B%0A%20%20%20%20%20%20var%20nsa%3Dstrokaadresa.substring%280%2C4%29%3B%0A%20%20%20%20%20%20if%20%28nsa%3D%3D%22http%22%29%20%7Bvar%20str%3DreadFromClipboard%28%29%3B%7D%0A%20%20%20%20%20%20%20%20else%20%7B%20if%20%28nsa%3D%3D%22ftp%3A%22%29%20%7Bvar%20str%3DreadFromClipboard%28%29%3B%7D%20else%20%7Bvar%20str%3DgURLBar.value%3B%7D%20%7D%3B%0A%20%20%20%20%20%20var%20ss%20%3D%20Cc%5B%22@mozilla.org/browser/search-service%3B1%22%5D.getService%28Ci.nsIBrowserSearchService%29%3B%0A%20%20%20%20%20%20var%20submission%20%3D%20ss.currentEngine.getSubmission%28str%2C%20null%29%3B%0A%20%20%20%20%20%20getBrowser%28%29.selectedTab%3DgetBrowser%28%29.addTab%28submission.uri.spec%2C%20null%2C%20null%2C%20submission.postData%2C%20IN_BACKGROUND%2C%20false%29%3B%0A%20%20%20%7D%3B%20%20%0A%20%20%20if%28event.button%20%3D%3D%201%29%0A%20%20%20%7B%20%20goDoCommand%28%22cmd_copy%22%29%3B%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20var%20str%20%3D%20readFromClipboard%28%29%3B%0A%20%20%20%20%20%20if%20%28%21str%29%20return%3B%0A%20%20%20%20%20%20if%20%28IN_NEW_TAB%29%20getBrowser%28%29.selectedTab%3DgetBrowser%28%29.addTab%28str%2C%20null%2C%20null%2C%20null%2C%20IN_BACKGROUND%2C%20false%29%3B%20else%20gBrowser.loadURI%28str%29%3B%0A%20%20%20%7D%3B%20%20%0A%20%20%20if%28event.button%20%3D%3D%200%29%0A%20%20%20%7B%20%20if%28%21event.shiftKey%29%0A%20%20%20%20%20%20%7B%20%20var%20str%20%3D%20gURLBar.value%3B%0A%20%20%20%20%20%20%20%20%20var%20tab%20%3D%20gBrowser.mCurrentTab%3B%0A%20%20%20%20%20%20%20%20%20gBrowser.duplicateTab%28tab%29%3B%0A%20%20%20%20%20%20%20%20%20gBrowser.mTabContainer.selectedIndex++%3B%0A%20%20%20%20%20%20%20%20%20gBrowser.removeTab%28tab%29%3B%0A%20%20%20%20%20%20%20%20%20gBrowser.loadURI%28str%29%3B%0A%20%20%20%20%20%20%7D%20%20else%20BrowserReloadSkipCache%28%29%3B%0A%20%20%20%7D%3B%20%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

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

Выделить код

Код:

this.tooltipText = "L=GO/RELOAD | M=OPEN select./clipb.| R=SEARCH typed/sel/clipb.| Sh+L=H.RELOAD";
//this.setAttribute("style", "padding-left: 0px !important;");
//this.setAttribute("style", "padding-left: 0px !important; padding-right: 2px !important;");
const IN_NEW_TAB = true;
const IN_BACKGROUND = false;

this.onclick = function(event)
{  if(event.button == 2 && !event.ctrlKey && !event.shiftKey && !event.altKey && !event.metaKey)
   {  event.preventDefault(); event.stopPropagation();
      goDoCommand("cmd_copy");
      var strokaadresa = gURLBar.value;
      var nsa=strokaadresa.substring(0,4);
      if (nsa=="http") {var str=readFromClipboard();}
        else { if (nsa=="ftp:") {var str=readFromClipboard();} else {var str=gURLBar.value;} };
      var ss = Cc["@mozilla.org/browser/search-service;1"].getService(Ci.nsIBrowserSearchService);
      var submission = ss.currentEngine.getSubmission(str, null);
      getBrowser().selectedTab=getBrowser().addTab(submission.uri.spec, null, null, submission.postData, IN_BACKGROUND, false);
   };  
   if(event.button == 1)
   {  goDoCommand("cmd_copy");        
      var str = readFromClipboard();
      if (!str) return;
      if (IN_NEW_TAB) getBrowser().selectedTab=getBrowser().addTab(str, null, null, null, IN_BACKGROUND, false); else gBrowser.loadURI(str);
   };  
   if(event.button == 0)
   {  if(!event.shiftKey)
      {  var str = gURLBar.value;
         var tab = gBrowser.mCurrentTab;
         gBrowser.duplicateTab(tab);
         gBrowser.mTabContainer.selectedIndex++;
         gBrowser.removeTab(tab);
         gBrowser.loadURI(str);
      }  else BrowserReloadSkipCache();
   }; 
};

Использована большая часть кода кнопки Search and open. За помощь большое спасибо okkamas_knife и bunda1.

9282e771e719.jpg
На скрине: слева от адресной строки - кнопка Select Search Engine, справа - кнопка Go plus!

Update.
Исправил и дополнил описание и примечания. Заменил tooltipText. 30.09.2011

Заменил код (ЛКМ) на более корректный. Заменил варианты стилей. 01.10.2011

Go plus focus (Firefox)
Вариант кнопки Go plus!, имеет полностью идентичные функции и интерфейс.
Отличие - в ее поведении при поиске(ПКМ), - зависимости источника текста для поиска от текущего фокуса.
Кнопка:
- ищет текст из адресной строки если адресная строка - в фокусе,
- если в фокусе страница, то ищет выделенный текст, а при отсутствии выделенного, - текст из буфера.

Примечание

скрытый текст
Кнопка требует большей внимательности для того, чтобы получить в результате поиска именно то, чего хотелось, зато не зависит от состояния адресной строки - можно, например, начать набирать в адресной строке текст для поиска, затем передумать )) и выделить другой текст на странице или скопировать в буфер и осуществить его поиск. (Кнопка Go plus! в такой ситуации требует сначала восстановить адрес, например, по контекстному меню ПКМ в поле адреса, а затем уже искать выделенное/из буфера, иначе будет флегматично искать то, что было набрано в адресной строке, не обращая внимание на фокус (движения мыши, жесты, клики по странице и т.п. суету )) )).

Остальные подробности см. в Примечаниях к кнопке Go plus!, пп. 2, 3.

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

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%3F%3E%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3EGo%20plus%20focus%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALlC//8zT6P8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAA/wAAAAAAAAAAAAAAAAAx1P8ALcL/VG2//561//8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAP8AAAAAAAAAAAAAAAAANN7/ADPb/wAwz/8ALL3/gpTR/wAAAAAAAAAAAAAAAAAAAAAAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAAAADXj/////////////////wAy1v8ALsT/qLbj/wAAAAAAAAAAAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAAAA37f//////////////////////ADfr/wAz2/8AMMz/zNTt/wAAAAAAAAAAAAAA/wAAAP8AAAAAAAAAAAAAAAAANuj/ADny/wA69////////////wA8//8AO/z/ADny/wA14/8nUNn/5Oj3/wAAAP8AAAD/AAAAAAAAAAAAAAAAADXj/wA25v8ANuj///////////8AN+3/ADn1/wA6+v8AOvf/ADny/wA26P9Wd+P/nrX//wAAAAAAAAAAAAAAAAU66/8AOPD///////////8AOPD/ADjw/wA36/8AN+v/ADjw/wA58v8AN+3/ADft/wA58v+1xPX/AAAAAAAAAAAFPPD///////////8AOvf/ADr3/wA69/8AOvf/ADr6/wA6+v8AOvf/ADn1/wA08v9ykff/nrX//wAAAAAAAAAAD0X3//////////////////////8APP//ADz//wA8//8AOvr/ADb6/2SE+v+etf//AAAAAAAAAAAAAAAAAAAAAApD//8APP//////////////////ADz//wA8//8APP//M2P//9Td/P8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUS///ADz//wA8//8APP//ADz//wA8//8KQ///rcD//wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFEv//wA8//8APP//ADz//wA8//91lf//nrX//wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABRL//8APP//ADz//0dy///m6///AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPR///ADz//73M//8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAuMj//561//8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAn/OsQYfzrEGDwKxBgMCsQYAzrEGAA6xBgAOsQYABrEGAAaxBgAesQYAfrEGAf6xBgP+sQYP/rEGP/6xBn/+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%5Bthis.tooltipText%20%3D%20%22L%3DGO/RELOAD%20%7C%20M%3DOPEN%20select./clipb.%7C%20R%3DSEARCH%20typed/sel/clipb.%7C%20Sh+L%3DH.RELOAD%22%3B%0A//this.setAttribute%28%22style%22%2C%20%22padding-left%3A%200px%20%21important%3B%22%29%3B%0A//this.setAttribute%28%22style%22%2C%20%22padding-left%3A%200px%20%21important%3B%20padding-right%3A%202px%20%21important%3B%22%29%3B%0Aconst%20IN_NEW_TAB%20%3D%20true%3B%0Aconst%20IN_BACKGROUND%20%3D%20false%3B%0A%0Athis.onclick%20%3D%20function%28event%29%0A%7B%20%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%29%0A%20%20%20%7B%20%20event.preventDefault%28%29%3B%20event.stopPropagation%28%29%3B%0A%20%20%20%20%20%20goDoCommand%28%22cmd_copy%22%29%3B%0A%20%20%20%20%20%20if%28gURLBar.focused%29%20%7Bvar%20str%20%3D%20gURLBar.value%3B%7D%20%20else%20%7Bvar%20str%20%3D%20readFromClipboard%28%29%3B%7D%0A%20%20%20%20%20%20var%20ss%20%3D%20Cc%5B%22@mozilla.org/browser/search-service%3B1%22%5D.getService%28Ci.nsIBrowserSearchService%29%3B%0A%20%20%20%20%20%20var%20submission%20%3D%20ss.currentEngine.getSubmission%28str%2C%20null%29%3B%0A%20%20%20%20%20%20getBrowser%28%29.selectedTab%3DgetBrowser%28%29.addTab%28submission.uri.spec%2C%20null%2C%20null%2C%20submission.postData%2C%20IN_BACKGROUND%2C%20false%29%3B%0A%20%20%20%7D%3B%0A%20%20%20%0A%20%20%20if%28event.button%20%3D%3D%201%29%0A%20%20%20%7B%20%20goDoCommand%28%22cmd_copy%22%29%3B%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20var%20str%20%3D%20readFromClipboard%28%29%3B%0A%20%20%20%20%20%20if%20%28%21str%29%20return%3B%0A%20%20%20%20%20%20if%20%28IN_NEW_TAB%29%20getBrowser%28%29.selectedTab%3DgetBrowser%28%29.addTab%28str%2C%20null%2C%20null%2C%20null%2C%20IN_BACKGROUND%2C%20false%29%3B%20else%20gBrowser.loadURI%28str%29%3B%0A%20%20%20%7D%3B%0A%20%20%20%0A%20%20%20if%28event.button%20%3D%3D%200%29%0A%20%20%20%7B%20%20if%28%21event.shiftKey%29%0A%20%20%20%20%20%20%7B%20%20var%20str%20%3D%20gURLBar.value%3B%0A%20%20%20%20%20%20%20%20%20var%20tab%20%3D%20gBrowser.mCurrentTab%3B%0A%20%20%20%20%20%20%20%20%20gBrowser.duplicateTab%28tab%29%3B%0A%20%20%20%20%20%20%20%20%20gBrowser.mTabContainer.selectedIndex++%3B%0A%20%20%20%20%20%20%20%20%20gBrowser.removeTab%28tab%29%3B%0A%20%20%20%20%20%20%20%20%20gBrowser.loadURI%28str%29%3B%0A%20%20%20%20%20%20%7D%20%20else%20BrowserReloadSkipCache%28%29%3B%0A%20%20%20%7D%3B%20%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

Код инициализации

Выделить код

Код:

this.tooltipText = "L=GO/RELOAD | M=OPEN select./clipb.| R=SEARCH typed/sel/clipb.| Sh+L=H.RELOAD";
//this.setAttribute("style", "padding-left: 0px !important;");
//this.setAttribute("style", "padding-left: 0px !important; padding-right: 2px !important;");
const IN_NEW_TAB = true;
const IN_BACKGROUND = false;

this.onclick = function(event)
{  if(event.button == 2 && !event.ctrlKey && !event.shiftKey && !event.altKey && !event.metaKey)
   {  event.preventDefault(); event.stopPropagation();
      goDoCommand("cmd_copy");
      if(gURLBar.focused) {var str = gURLBar.value;}  else {var str = readFromClipboard();}
      var ss = Cc["@mozilla.org/browser/search-service;1"].getService(Ci.nsIBrowserSearchService);
      var submission = ss.currentEngine.getSubmission(str, null);
      getBrowser().selectedTab=getBrowser().addTab(submission.uri.spec, null, null, submission.postData, IN_BACKGROUND, false);
   };
   
   if(event.button == 1)
   {  goDoCommand("cmd_copy");        
      var str = readFromClipboard();
      if (!str) return;
      if (IN_NEW_TAB) getBrowser().selectedTab=getBrowser().addTab(str, null, null, null, IN_BACKGROUND, false); else gBrowser.loadURI(str);
   };
   
   if(event.button == 0)
   {  if(!event.shiftKey)
      {  var str = gURLBar.value;
         var tab = gBrowser.mCurrentTab;
         gBrowser.duplicateTab(tab);
         gBrowser.mTabContainer.selectedIndex++;
         gBrowser.removeTab(tab);
         gBrowser.loadURI(str);
      }  else BrowserReloadSkipCache();
   }; 
};

За вариант поведения (кода блока ПКМ) спасибо bunda1.

Update. Заменил код (ЛКМ) на более корректный. Заменил иконку. 01.10.2011

Bookmarks | Manager | Add (Firefox)

ЛКМ=> открыть закладки в боковой панели
СКМ=> Менеджер закладок
ПКМ=> добавить текущую страницу в закладки (диалоговое окно)
Shift + ЛКМ=> добавить все вкладки в закладки

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

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%3F%3E%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3EBookmarks%20%7C%20Bookmarks%20Manager%20%7C%20Add%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEL62XsAAP8AQvrZAEL62QBC+tkAQvrZAEL62QBC+tkAQvrZAEL62QBC+tkAQvrZAEL62QBC+tkAAAAAAEz72XsAAP97AAD/MbP9/zGz/f8xs/3/MbP9/zGz/f8xs/3/MbP9/zGz/f8xs/3/MbP9/zGz/f8xtP3/AEz72XsAAP97AAD/ewAA/3sAAP97AAD/ewAA/3sAAP97AAD/ewAA/3sAAP97AAD/ewAA/3sAAP97AAD/Lbj9/wBW+9kAYPvZewAA/3sAAP8qfvv/UZb8/1GW/P8qfvv/Kn77/yp++/8qfvv/UZb8/1GW/P8qfvv/Kn77/yq7/f8AYPvZAGv82Sa//v97AAD/JoX8/0GU/P/x9///d7L9/yaF/P8mhfz/d7L9//H3//9BlPz/JoX8/yaF/P8mv/7/AGv82QB1/Nkjw/7/I438/yON/P8jjfz/1ur+//////+62/7/utv+///////W6v7/I438/yON/P8jjfz/I8P+/wB1/NkAf/zZH8j+/x+V/P8flfz/H5X8/4HD/f//////////////////////gcP9/x+V/P8flfz/H5X8/x/I/v8Af/zZAIn92RzL/v8cnP3/HJz9/xyc/f+b1P7//////////////////////5vU/v8cnP3/HJz9/xyc/f8cy/7/AIn92QCT/dkY0P7/GKT9/yap/f/F6P7/////////////////////////////////xej+/yap/f8YpP3/GND+/wCT/dkAnf3ZFdP+/zK2/f+35f7/xer//8Xq///T7//////////////T7///xer//8Xq//+35f7/Mrb9/xXT/v8Anf3ZAKf92RHX/v8Rs/3/EbP9/xGz/f8Rs/3/L739////////////L739/xGz/f8Rs/3/EbP9/xGz/f8R1/7/AKf92QCx/tkO2///Drv+/w67/v8Ou/7/Drv+/w67/v/S8v//0vL//w67/v8Ou/7/Drv+/w67/v8Ou/7/Dtv//wCx/tkAu/7ZCuD//wrD/v8Kw/7/CsP+/wrD/v8Kw/7/dd3+/3Xd/v8Kw/7/CsP+/wrD/v8Kw/7/CsP+/wrg//8Au/7ZAMX+2Qfj//8Hyv7/B8r+/wfK/v8Hyv7/B8r+/ybR/v8l0P7/B8r+/wfK/v8Hyv7/B8r+/wfK/v8H4///AMX+2QDQ/9kD6P//A+f//wPn//8D5///A+f//wPn//8D5///A+f//wPn//8D5///A+f//wPn//8D5///A+j//wDQ/9kAAAAAANn/2QDZ/9kA2f/ZANn/2QDZ/9kA2f/ZANn/2QDZ/9kA2f/ZANn/2QDZ/9kA2f/ZANn/2QDZ/9kAAAAAgAGsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBgAGsQQ%3D%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bthis.setAttribute%28%22style%22%2C%20%22padding-left%3A%202px%20%21important%3B%20padding-right%3A%202px%20%21important%3B%20padding-top%3A%200px%20%21important%3B%20padding-bottom%3A%200px%20%21important%3B%20%20margin-top%3A%204px%20%21important%3B%20margin-bottom%3A%204px%20%21important%3B%22%29%3B%0Athis.tooltipText%20%3D%20%22L%3DBookmarks%20%7C%20M%3DB.Manager%20%7C%20R%3DAdd%20Bookmark%20As%20%7C%20Sh+L%3DAll%20Tabs%20to%20Bookmarks%22%3B%0A%0A%0Athis.%20onclick%20%3D%20function%20%28event%29%0A%7B%20%20%20if%20%28event.%20button%20%3D%3D%200%20%26%26%20%21event.shiftKey%29%20toggleSidebar%28%27viewBookmarksSidebar%27%29%3B%0A%20%20%20%20if%20%28event.%20button%20%3D%3D%201%29%20toOpenWindowByType%28%27bookmarks%3Amanager%27%2C%20%27chrome%3A//browser/content/bookmarks/bookmarksManager.xul%27%29%3B%0A%20%20%20%20if%20%28event.%20button%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%29%0A%20%20%20%20%7B%20%20event.preventDefault%28%29%3B%20event.stopPropagation%28%29%3B%0A%20%20%20%20%20%20addBookmarkAs%28document.getElementById%28%27content%27%29%2C%20false%29%3B%0A%20%20%20%20%7D%3B%0A%20%20%20%20if%20%28event.%20button%20%3D%3D%200%20%26%26%20event.shiftKey%29%20addBookmarkAs%28document.getElementById%28%27content%27%29%2C%20true%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

Код Инициализации

Выделить код

Код:

this.setAttribute("style", "padding-left: 2px !important; padding-right: 2px !important; padding-top: 0px !important; padding-bottom: 0px !important;  margin-top: 4px !important; margin-bottom: 4px !important;");
this.tooltipText = "L=Bookmarks | M=B.Manager | R=Add Bookmark As | Sh+L=All Tabs to Bookmarks";


this. onclick = function (event)
{   if (event. button == 0 && !event.shiftKey) toggleSidebar('viewBookmarksSidebar');
    if (event. button == 1) toOpenWindowByType('bookmarks:manager', 'chrome://browser/content/bookmarks/bookmarksManager.xul');
    if (event. button == 2 && !event.ctrlKey && !event.shiftKey && !event.altKey && !event.metaKey)
    {  event.preventDefault(); event.stopPropagation();
      addBookmarkAs(document.getElementById('content'), false);
    };
    if (event. button == 0 && event.shiftKey) addBookmarkAs(document.getElementById('content'), true);
};

Кнопка "по заказу" отсюда.
Работает в Firefox 2.0.0.20, должна работать и в других версиях, не проверял...

Новые версии  Go plus! и Go plus focus.
Отличия - добавлены функции поиска текста по текущему сайту и поиска страниц в кеше Google и в  Archive.org, "причесан" код.

Go plus!²
(Firefox)
Добавленные сочетания клавиш:
Alt+ЛКМ = искать URL из адресной строки в Google CACHE и Archive.org (результаты -  в 2 новых вкладках)
Alt+СКМ = искать URL ("текстовый" выделенный на странице / из буфера обмена) в Google CACHE и Archive.org (результаты -  в 2 новых вкладках)
Shift+ПКМ = искать текст (набранный в адресной строке / выделенный на странице / из буфера обмена) на текущем сайте с помощью Google
Ctrl + ПКМ  = CB меню.

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

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%3F%3E%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3EGo%20plus%21%B2%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnAD/AJwA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAA/wAAAAAAAAAAAJwA/wCcAP8AnAD/AJwA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAP8AAAAAAAAAAACcAP8AnAD/AJwA/wCcAP8AnAD/AJwA/wAAAAAAAAAAAAAAAAAAAAAAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AnAD/AJwA/wCcAP8AnAD/AJwA/wCcAP8AnAD/AJwA/wAAAAAAAAAAAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AJwA/wCcAP8AnAD/AJwA/wCcAP8AnAD/AJwA/wCcAP8AnAD/AJwA/wAAAAAAAAAAAAAA/wAAAP8AAAAAAAAAAACcAP8AnAD/AJwA/wCcAP8AnAD/AJwA/wCcAP8AnAD/AJwA/wCcAP8AnAD/ANdx/wAAAP8AAAD/AAAAAAAAAAAAnAD/AJwA/wCcAP8AnAD/AJwA/wCcAP8AnAD/AJwA/wCcAP8AnAD/AJwA/wCcAP8A13H/ANdx/wAAAAAAAAAAAJwA/wCcAP8AnAD/AJwA/wCcAP8AnAD/AJwA/wCcAP8AnAD/AJwA/wCcAP8AnAD/AJwA/wCcAP8AnAD/AP+A/wCcAP8AnAD/AJwA/wCcAP8AnAD/AJwA/wCcAP8AnAD/AJwA/wCcAP8AnAD/AJwA/wCcAP8AnAD/AJwA/wD/gP8AnAD/AJwA/wCcAP8AnAD/AJwA/wCcAP8AnAD/AJwA/wCcAP8AnAD/AJwA/wCcAP8AnAD/AJwA/wAAAAAAAAAAAJwA/wCcAP8AnAD/AJwA/wCcAP8AnAD/AJwA/wCcAP8AnAD/AJwA/wCcAP8AnAD/AAAAAAAAAAAAAAAAAAAAAACcAP8AnAD/AJwA/wCcAP8AnAD/AJwA/wCcAP8AnAD/AJwA/wCcAP8AAAAAAAAAAAAAAAAAAAD/AAAA/wAAAP8AnAD/AJwA/wCcAP8AnAD/AJwA/wCcAP8AnAD/AJwA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAAAAAAAAAJwA/wCcAP8AnAD/AJwA/wCcAP8AnAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAAAACcAP8AnAD/AJwA/wCcAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAAAAAAAP8AnAD/AJwA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAD/P/OsQQ/zrEEDwKxBAMCsQQAzrEEAA6xBAAOsQQAArEEAAKxBAAOsQQAPrEEAOKxBAPusQQP9rEEP+qxBP/ysQQ%3D%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bthis.tooltipText%20%3D%20%22GO/RELOAD/OPEN/SEARCH%20%7C%20Ctrl+MouseRightClick%20for%20Button%20HELP%22%3B%0Athis.setAttribute%28%22style%22%2C%20%22padding-left%3A%200px%20%21important%3B%22%29%3B%0Aconst%20IN_NEW_TAB%20%3D%20true%3B%20%20const%20IN_BACKGROUND%20%3D%20false%3B%20%20var%20br%20%3D%20getBrowser%28%29%3B%20%0A%0Athis.onclick%20%3D%20function%28event%29%20%7B%20%20var%20str%20%3D%20gURLBar.value%3B%20var%20loc%20%3D%20%28str%20%3D%3D%20content.location%29%3B%0A%20%20%20this.prDef%20%3D%20function%28%29%20%7B%20event.preventDefault%28%29%3B%20event.stopPropagation%28%29%3B%20%7D%3B%0A%20%20%20this.nonfocus%20%3D%20function%28%29%20%7BgoDoCommand%28%22cmd_copy%22%29%3B%20str%3DreadFromClipboard%28%29%3B%20%7D%3B%0A%20%20%20%0A%20%20%20if%28event.button%20%3D%3D%200%20%26%26%20loc%20%26%26%20%21event.altKey%29%20%7B%20if%20%28event.shiftKey%29%20%7B%20BrowserReloadSkipCache%28%29%3B%7D%20else%20BrowserReload%28%29%3B%20%20%7D%3B%0A%20%20%20if%28event.button%20%3D%3D%200%20%26%26%20%21loc%20%26%26%20%21event.altKey%29%20br.loadURI%28str%29%3B%20%20%20//%20for%20edited%20url%20%26%20for%20mouse%20without%20middle%20button...%0A%20%20%20if%28event.button%20%3D%3D%200%20%26%26%20event.altKey%29%20this.AltWeb%28str%29%3B%20%20%20%20%20%20//%20for%20current/edited%20url%20%26%20for%20mouse%20without%20middle%20button...%0A%0A%20%20%20if%28event.button%20%3D%3D%201%20%26%26%20%21event.altKey%29%20%7B%20this.nonfocus%28%29%3B%20if%20%28%21str%29%20return%3B%0A%20%20%20%20%20if%20%28IN_NEW_TAB%29%20br.selectedTab%3Dbr.addTab%28str%2C%20null%2C%20null%2C%20null%2C%20IN_BACKGROUND%2C%20false%29%3B%20%20else%20br.loadURI%28str%29%3B%20%7D%3B%0A%20%20%20if%28event.button%20%3D%3D%201%20%26%26%20event.altKey%29%20%7B%20this.nonfocus%28%29%3B%20if%20%28%21str%29%20return%3B%20this.AltWeb%28str%29%3B%20%7D%3B%20%0A%0A%20%20%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%29%20%7B%20this.prDef%28%29%3B%20if%28loc%29%20this.nonfocus%28%29%3B%20%0A%20%20%20%20%20var%20ss%20%3D%20Cc%5B%22@mozilla.org/browser/search-service%3B1%22%5D.getService%28Ci.nsIBrowserSearchService%29%3B%0A%20%20%20%20%20var%20submission%20%3D%20ss.currentEngine.getSubmission%28str%2C%20null%29%3B%0A%20%20%20%20%20br.selectedTab%3Dbr.addTab%28submission.uri.spec%2C%20null%2C%20null%2C%20submission.postData%2C%20IN_BACKGROUND%2C%20false%29%3B%20%7D%3B%0A%20%20%20if%28event.button%20%3D%3D%202%20%26%26%20event.shiftKey%29%20%7B%20this.prDef%28%29%3B%20if%28loc%29%20this.nonfocus%28%29%3B%20this.SearchInWebsite%28str%29%3B%20%7D%3B%0A%7D%3B%0A%0Athis.AltWeb%20%3D%20function%28addr%29%20%7B%20br.selectedTab%20%3D%20br.addTab%28%22http%3A//www.google.com/search%3Fq%3Dcache%3A%22%20+%20addr%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%20br.selectedTab%20%3D%20br.addTab%28%22http%3A//liveweb.archive.org/%22%20+%20addr%29%3B%20%7D%3B%0Athis.SearchInWebsite%20%3D%20function%28text%29%0A%7B%20%20%20%20%20%20%20var%20doc%20%3D%20br.contentDocument%3B%0A%20%20%20%20%20%20%20%20try%20%7B%20var%20url%20%3D%20doc.%20location.%20hostname%3B%20%7D%20%20catch%28e%29%20%7B%20var%20url%20%3D%20%22%22%3B%20%7D%20%20%0A%20%20%20%20%20%20%20%20text%20%3D%20escape%20%28convertFromUnicode%20%28%22UTF-8%22%2C%20text%29%29%3B%0A%20%20%20%20%20%20%20%20url%20%3D%20encodeURIComponent%20%28url%29%3B%0A%20%20%20%20%20%20%20%20var%20searchUrl%20%3D%20%22http%3A//www.google.com/search%3Fas_q%3D%22%20+%20text%20+%20%22%26as_sitesearch%3D%22%20+%20url%3B%20%20%0A//%20%20%20%20%20%20%20%20var%20searchUrl%20%3D%20%22http%3A//www.google.com.ua/search%3Fnum%3D100%26hl%3Duk%26safe%3Doff%26q%3D%22%20+%20text%20+%20%22%26as_sitesearch%3D%22%20+%20url%3B%0A//%20%20%20%20%20%20%20%20var%20searchUrl%20%3D%20%22http%3A//www.google.ru/search%3Fq%3D%22%20+%20text%20+%20%22%20site%3A%22%20+%20url%20+%20%22%26tbo%3D1%26prmdo%3D1%26sa%3DX%22%3B%0A%20%20%20%20%20%20%20%20br.selectedTab%20%3D%20br.addTab%28searchUrl%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______________________________________________________________________________________________________%0A%0A%20%20%20%20%20%20%20%20%20%20Left%20%20%3D%20GO/RELOAD%0A%20Shift+Left%20%20%3D%20Hard%20RELOAD%0A%20%20%20Alt+Left%20%20%3D%20SEARCH%20location%20bar%20URL%20in%20Google%20CACHE%20%26%20Archive.org%20%28in%202%20NEW%20Tabs%29%0A%0A%20%20%20%20%20Medium%20%3D%20OPEN%20URL%20%28selected%20on%20page%20%22text%22%20url%20OR%20from%20clipboard%29%20%28in%20NEW%20Tab%29%0AAlt+Medium%3D%20SEARCH%20URL%20%28selected%20/%20from%20clipboard%29%20in%20Google%20CACHE%20%26%20Archive.org%20%28in%202%20NEW%20Tabs%29%0A%20%20%0A%20%20%20%20%20%20%20%20%20Right%20%3D%20SEARCH%20the%20text%20%28typed%20in%20location%20bar%20OR%20selected/from%20clipboard%29%20by%20selected%20Search%20Engine%20%28in%20NEW%20Tab%29%0AShift+Right%20%3D%20SEARCH%20the%20text%20%28typed%20in%20location%20bar%20OR%20selected/from%20clipboard%29%20in%20current%20Website%20by%20Google%20%28in%20NEW%20Tab%29%0A%0A%20Ctrl+Right%20%3D%20CB%20menu%0A______________________________________________________________________________________________________%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

Код Инициализации

Выделить код

Код:

this.tooltipText = "GO/RELOAD/OPEN/SEARCH | Ctrl+MouseRightClick for Button HELP";
this.setAttribute("style", "padding-left: 0px !important;");
const IN_NEW_TAB = true;  const IN_BACKGROUND = false;  var br = getBrowser(); 

this.onclick = function(event) {  var str = gURLBar.value; var loc = (str == content.location);
   this.prDef = function() { event.preventDefault(); event.stopPropagation(); };
   this.nonfocus = function() {goDoCommand("cmd_copy"); str=readFromClipboard(); };
   
   if(event.button == 0 && loc && !event.altKey) { if (event.shiftKey) { BrowserReloadSkipCache();} else BrowserReload();  };
   if(event.button == 0 && !loc && !event.altKey) br.loadURI(str);   // for edited url & for mouse without middle button...
   if(event.button == 0 && event.altKey) this.AltWeb(str);      // for current/edited url & for mouse without middle button...

   if(event.button == 1 && !event.altKey) { this.nonfocus(); if (!str) return;
     if (IN_NEW_TAB) br.selectedTab=br.addTab(str, null, null, null, IN_BACKGROUND, false);  else br.loadURI(str); };
   if(event.button == 1 && event.altKey) { this.nonfocus(); if (!str) return; this.AltWeb(str); }; 

   if(event.button == 2 && !event.ctrlKey && !event.shiftKey && !event.altKey && !event.metaKey) { this.prDef(); if(loc) this.nonfocus(); 
     var ss = Cc["@mozilla.org/browser/search-service;1"].getService(Ci.nsIBrowserSearchService);
     var submission = ss.currentEngine.getSubmission(str, null);
     br.selectedTab=br.addTab(submission.uri.spec, null, null, submission.postData, IN_BACKGROUND, false); };
   if(event.button == 2 && event.shiftKey) { this.prDef(); if(loc) this.nonfocus(); this.SearchInWebsite(str); };
};

this.AltWeb = function(addr) { br.selectedTab = br.addTab("http://www.google.com/search?q=cache:" + addr);
                               br.selectedTab = br.addTab("http://liveweb.archive.org/" + addr); };
this.SearchInWebsite = function(text)
{       var doc = br.contentDocument;
        try { var url = doc. location. hostname; }  catch(e) { var url = ""; }  
        text = escape (convertFromUnicode ("UTF-8", text));
        url = encodeURIComponent (url);
        var searchUrl = "http://www.google.com/search?as_q=" + text + "&as_sitesearch=" + url;  
//        var searchUrl = "http://www.google.com.ua/search?num=100&hl=uk&safe=off&q=" + text + "&as_sitesearch=" + url;
//        var searchUrl = "http://www.google.ru/search?q=" + text + " site:" + url + "&tbo=1&prmdo=1&sa=X";
        br.selectedTab = br.addTab(searchUrl);
};

Go plus² focus(Firefox)
Добавленные сочетания клавиш:
Alt+СКМ = искать URL (из адресной строки / "текстовый" выделенный на странице / из буфера обмена) в Google CACHE и Archive.org (если в фокусе - адресная строка, ищет URL из адресной строки, если в фокусе - страница - остальные варианты)
Shift+ПКМ = искать текст (набранный в адресной строке / выделенный на странице / из буфера обмена) на текущем сайте с помощью Google (то же самое - в зависимости от того, что находится в фокусе).
Ctrl+ ПКМ  = CB меню

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

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%3F%3E%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3EGo%20plus%B2%20focus%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnAD/AJwA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAA/wAAAAAAAAAAAJwA/wCcAP8AnAD/AJwA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAP8AAAAAAAAAAACcAP8AnAD/AJwA/wCbAP8AmgD/AJgA/wAAAAAAAAAAAAAAAAAAAAAAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AnAD/AJwA/wCQAP8AkAD/AJAA/wCZAP8AmAD/AJUA/wAAAAAAAAAAAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AJwA/wCcAP8AgwD//////wBqAP8AdwD/AIMA/wCNAP8AnAD/ALcA/wAAAAAAAAAAAAAA/wAAAP8AAAAAAAAAAACcAP8AkAD/AHcA//////////////////////8AdwD/AIMA/wCPAP8AmwD/AP/Q/wAAAP8AAAD/AAAAAAAAAAAAnAD/AIMA//////8AXgD/AF4A/wBeAP8AXgD///////////8AkAD/AJUA/wChAP8A/8b/AP/M/wAAAAAAAAAAAJwA/wB3AP//////AF4A////////////AF4A//////8AagD/AJAA/wCcAP8AlQD/AI0A/wCNAP8AfAD/AP+3/wCQAP8AagD//////wBeAP///////////wBeAP//////AHcA/wCcAP8AnAD/AJwA/wCcAP8AmgD/AH4A/wD/tf8AkAD///////////8AXgD/AF4A/wBeAP8AXgD//////wCDAP8AnAD/AJwA/wCdAP8AoAD/AKQA/wAAAAAAAAAAAJAA/wCDAP8AdwD//////////////////////wB3AP8AkAD/AJsA/wCcAP8ApgD/AAAAAAAAAAAAAAAAAAAAAACcAP8AnAD/AJAA/wCDAP8AdwD/AGoA//////8AgQD/AJgA/wCYAP8AAAAAAAAAAAAAAAAAAAD/AAAA/wAAAP8AnAD/AJwA/wCcAP8AnAD/AJwA/wCMAP8AigD/AIUA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAAAAAAAAAJwA/wCcAP8AnAD/AJwA/wCaAP8AmAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAAAACcAP8AnAD/AJwA/wCcAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAAAAAAAP8AnAD/AJwA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAD/P/OsQQ/zrEEDwKxBAMCsQQAzrEEAA6xBAAOsQQAArEEAAKxBAAOsQQAPrEEAOKxBAPusQQP9rEEP+qxBP/ysQQ%3D%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bthis.tooltipText%20%3D%20%22GO/RELOAD/OPEN/SEARCH%20%7C%20Ctrl+MouseRightClick%20for%20Button%20HELP%22%3B%0Athis.setAttribute%28%22style%22%2C%20%22padding-left%3A%200px%20%21important%3B%22%29%3B%0Aconst%20IN_NEW_TAB%20%3D%20true%3B%20%20const%20IN_BACKGROUND%20%3D%20false%3B%20%20var%20br%20%3D%20getBrowser%28%29%3B%20%0A%0Athis.onclick%20%3D%20function%28event%29%20%7B%20%20var%20str%20%3D%20gURLBar.value%3B%20var%20loc%20%3D%20%28str%20%3D%3D%20content.location%29%3B%0A%20%20%20this.prDef%20%3D%20function%28%29%20%7B%20event.preventDefault%28%29%3B%20event.stopPropagation%28%29%3B%20%7D%3B%0A%20%20%20this.nonfocus%20%3D%20function%28%29%20%7BgoDoCommand%28%22cmd_copy%22%29%3B%20str%3DreadFromClipboard%28%29%3B%20%7D%3B%0A%20%20%20%0A%20%20%20if%28event.button%20%3D%3D%200%20%26%26%20loc%29%20%7B%20%20if%20%28event.shiftKey%29%20%7B%20BrowserReloadSkipCache%28%29%3B%7D%20else%20BrowserReload%28%29%3B%20%20%7D%3B%0A%20%20%20if%28event.button%20%3D%3D%200%20%26%26%20%21loc%29%20br.loadURI%28str%29%3B%20%20%20//%20for%20edited%20url%20%26%20for%20mouse%20without%20middle%20button...%0A%0A%20%20%20if%28event.button%20%3D%3D%201%20%26%26%20%21event.altKey%29%20%7B%20this.nonfocus%28%29%3B%20if%20%28%21str%29%20return%3B%0A%20%20%20%20%20if%20%28IN_NEW_TAB%29%20br.selectedTab%3Dbr.addTab%28str%2C%20null%2C%20null%2C%20null%2C%20IN_BACKGROUND%2C%20false%29%3B%20%20else%20br.loadURI%28str%29%3B%20%7D%3B%0A%20%20%20if%28event.button%20%3D%3D%201%20%26%26%20event.altKey%29%20%0A%20%20%20%7B%20if%28%21gURLBar.focused%29%20%7B%20this.nonfocus%28%29%3B%20if%20%28%21str%29%20return%3B%20this.AltWeb%28str%29%3B%20%7D%20%20else%20this.AltWeb%28str%29%3B%20%7D%3B%20%0A%0A%20%20%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%29%20%7B%20this.prDef%28%29%3B%0A%20%20%20%20%20if%28%21gURLBar.focused%29%20this.nonfocus%28%29%3B%20%0A%20%20%20%20%20var%20ss%20%3D%20Cc%5B%22@mozilla.org/browser/search-service%3B1%22%5D.getService%28Ci.nsIBrowserSearchService%29%3B%0A%20%20%20%20%20var%20submission%20%3D%20ss.currentEngine.getSubmission%28str%2C%20null%29%3B%0A%20%20%20%20%20br.selectedTab%3Dbr.addTab%28submission.uri.spec%2C%20null%2C%20null%2C%20submission.postData%2C%20IN_BACKGROUND%2C%20false%29%3B%20%7D%3B%0A%20%20%20if%28event.button%20%3D%3D%202%20%26%26%20event.shiftKey%29%20%7B%20this.prDef%28%29%3B%20if%28%21gURLBar.focused%29%20this.nonfocus%28%29%3B%20this.SearchInWebsite%28str%29%3B%20%7D%3B%0A%7D%3B%0A%0Athis.AltWeb%20%3D%20function%28addr%29%20%7B%20br.selectedTab%20%3D%20br.addTab%28%22http%3A//www.google.com/search%3Fq%3Dcache%3A%22%20+%20addr%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%20br.selectedTab%20%3D%20br.addTab%28%22http%3A//liveweb.archive.org/%22%20+%20addr%29%3B%20%7D%3B%0Athis.SearchInWebsite%20%3D%20function%28text%29%0A%7B%20%20%20%20%20%20%20var%20doc%20%3D%20br.contentDocument%3B%0A%20%20%20%20%20%20%20%20try%20%7B%20var%20url%20%3D%20doc.%20location.%20hostname%3B%20%7D%20%20catch%28e%29%20%7B%20var%20url%20%3D%20%22%22%3B%20%7D%20%20%0A%20%20%20%20%20%20%20%20text%20%3D%20escape%20%28convertFromUnicode%20%28%22UTF-8%22%2C%20text%29%29%3B%0A%20%20%20%20%20%20%20%20url%20%3D%20encodeURIComponent%20%28url%29%3B%0A%20%20%20%20%20%20%20%20var%20searchUrl%20%3D%20%22http%3A//www.google.com/search%3Fas_q%3D%22%20+%20text%20+%20%22%26as_sitesearch%3D%22%20+%20url%3B%20%20%0A//%20%20%20%20%20%20%20%20var%20searchUrl%20%3D%20%22http%3A//www.google.com.ua/search%3Fnum%3D100%26hl%3Duk%26safe%3Doff%26q%3D%22%20+%20text%20+%20%22%26as_sitesearch%3D%22%20+%20url%3B%0A//%20%20%20%20%20%20%20%20var%20searchUrl%20%3D%20%22http%3A//www.google.ru/search%3Fq%3D%22%20+%20text%20+%20%22%20site%3A%22%20+%20url%20+%20%22%26tbo%3D1%26prmdo%3D1%26sa%3DX%22%3B%0A%20%20%20%20%20%20%20%20br.selectedTab%20%3D%20br.addTab%28searchUrl%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_________________________________________________________________________________________________________%0A%0A%20%20%20%20%20%20%20%20%20%20Left%20%20%3D%20GO/RELOAD%0A%20Shift+Left%20%20%3D%20Hard%20RELOAD%0A%0A%20%20%20%20%20Medium%20%3D%20OPEN%20URL%20%28selected%20on%20page%20%22text%22%20url%20OR%20from%20clipboard%29%20%28NEW%20Tab%29%0AAlt+Medium%3DSEARCH%20URL%28from%20location%20bar%28if%20focused%29%20OR%20selected/from%20clipboard%29%20in%20Google%20CACHE%20%26%20Archive.org%20%282%20NEW%20Tabs%29%0A%0A%20%20%20%20%20%20%20%20%20Right%20%3D%20SEARCH%20the%20text%20%28typed%20in%20location%20bar%28if%20focused%29%20OR%20selected/from%20clipboard%29%20by%20selected%20Search%20Engine%0AShift+Right%20%3D%20SEARCH%20the%20text%20%28typed%20in%20location%20bar%28if%20focused%29%20OR%20selected/from%20clipboard%29%20in%20current%20Website%20by%20Google%0A%0A%20Ctrl+Right%20%3D%20CB%20menu%0A_________________________________________________________________________________________________________%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

Код Инициализации

Выделить код

Код:

this.tooltipText = "GO/RELOAD/OPEN/SEARCH | Ctrl+MouseRightClick for Button HELP";
this.setAttribute("style", "padding-left: 0px !important;");
const IN_NEW_TAB = true;  const IN_BACKGROUND = false;  var br = getBrowser(); 

this.onclick = function(event) {  var str = gURLBar.value; var loc = (str == content.location);
   this.prDef = function() { event.preventDefault(); event.stopPropagation(); };
   this.nonfocus = function() {goDoCommand("cmd_copy"); str=readFromClipboard(); };
   
   if(event.button == 0 && loc) {  if (event.shiftKey) { BrowserReloadSkipCache();} else BrowserReload();  };
   if(event.button == 0 && !loc) br.loadURI(str);   // for edited url & for mouse without middle button...

   if(event.button == 1 && !event.altKey) { this.nonfocus(); if (!str) return;
     if (IN_NEW_TAB) br.selectedTab=br.addTab(str, null, null, null, IN_BACKGROUND, false);  else br.loadURI(str); };
   if(event.button == 1 && event.altKey) 
   { if(!gURLBar.focused) { this.nonfocus(); if (!str) return; this.AltWeb(str); }  else this.AltWeb(str); }; 

   if(event.button == 2 && !event.ctrlKey && !event.shiftKey && !event.altKey && !event.metaKey) { this.prDef();
     if(!gURLBar.focused) this.nonfocus(); 
     var ss = Cc["@mozilla.org/browser/search-service;1"].getService(Ci.nsIBrowserSearchService);
     var submission = ss.currentEngine.getSubmission(str, null);
     br.selectedTab=br.addTab(submission.uri.spec, null, null, submission.postData, IN_BACKGROUND, false); };
   if(event.button == 2 && event.shiftKey) { this.prDef(); if(!gURLBar.focused) this.nonfocus(); this.SearchInWebsite(str); };
};

this.AltWeb = function(addr) { br.selectedTab = br.addTab("http://www.google.com/search?q=cache:" + addr);
                               br.selectedTab = br.addTab("http://liveweb.archive.org/" + addr); };
this.SearchInWebsite = function(text)
{       var doc = br.contentDocument;
        try { var url = doc. location. hostname; }  catch(e) { var url = ""; }  
        text = escape (convertFromUnicode ("UTF-8", text));
        url = encodeURIComponent (url);
        var searchUrl = "http://www.google.com/search?as_q=" + text + "&as_sitesearch=" + url;  
//        var searchUrl = "http://www.google.com.ua/search?num=100&hl=uk&safe=off&q=" + text + "&as_sitesearch=" + url;
//        var searchUrl = "http://www.google.ru/search?q=" + text + " site:" + url + "&tbo=1&prmdo=1&sa=X";
        br.selectedTab = br.addTab(searchUrl);
};

Все остальные функции и управление обеими кнопок - полностью совпадают с кнопками  Go plus! и Go plus focus. Описание, примечания, интерфейс - см. эти кнопки.

Примечание

скрытый текст
Есть возможность в коде кнопки выбрать поисковую строку Google для поиска по сайту, путем раскомментирования нужной строки - 1 из 3 вариантов по порядку:
        var searchUrl = ... - стандартный поиск google.com
//        var searchUrl = ... - поиск google.com.ua с выключенными фильтрами, без "живого поиска" и с сотней результатов на страницу
//        var searchUrl = ... - поиск google.ru с выключенными фильтрами, без "живого поиска"  и с сотней результатов на страницу
Использован код из кнопки Search in Website+, за который большое спасибо bunda1.

Update. Добавил поиск в кеше Google и в Archive.org, "причесал" код и описание. Новые иконки. ) 04.10.2011

togglelogin (Firefox)

Выйти с сайта и снова вернуться на ту же страницу сайта с другим логином.
Кнопка будет особенно полезна при медленном интернет-соединении для некоторых "тормознутых" сайтов, на которых имеется несколько аккаунтов, например, почтовых ящиков, экономит время и нервы.
Настройка кнопки - в секции Код :
- logout - вставить нужное значение, скопировав URL кнопки "Выйти" соотв. сайта, вместо "https://mail.google.com/mail/?logout" (строка для Gmail)
- t - время задержки на выполнение "выхода" в миллисекундах (подобрать, в зависимости от скорости интернет-соединения и "тормознутости сайта", по умолчанию - 2 сек.)

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

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%3F%3E%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3Etogglelogin%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIQx/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIQx/wCEMf8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIQx/wCEMf8AhDH/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAhDH/AIQx/wCEMf8AhDH/AIQx/wCEMf8AhDH/AIQx/wCEMf8AhDH/AIQx/wCEMf8AhDH/AIQx/wCEMf8AhDH/AIQx/wCEMf8AhDH/AIQx/wCEMf8AhDH/AIQx/wCEMf8AhDH/AIQx/wCEMf8AhDH/AIQx/wCEMf8AhDH/AIQx/wAAAAAAAAAAAIQx/wCEMf8AhDH/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAhDH/AIQx/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACEMf8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITH//wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACEx//8hMf//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAhMf//ITH//yEx//8AAAAAAAAAACEx//8hMf//ITH//yEx//8hMf//ITH//yEx//8hMf//ITH//yEx//8hMf//ITH//yEx//8hMf//ITH//yEx//8hMf//ITH//yEx//8hMf//ITH//yEx//8hMf//ITH//yEx//8hMf//ITH//yEx//8hMf//ITH//yEx//8hMf//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAhMf//ITH//yEx//8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITH//yEx//8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACEx//8AAAAAAAAAAAAAAAAAAAAA9/+sQef/rEHH/6xBAACsQQAArEHH/6xB5/+sQff/rEH/76xB/+esQf/jrEEAAKxBAACsQf/jrEH/56xB/++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%20logout%20%3D%20%22https%3A//mail.google.com/mail/%3Flogout%22%3B%20%0Avar%20t%20%3D%202000%3B%0A%0Avar%20str%20%3D%20gURLBar.value%3B%20getBrowser%28%29.loadURI%28logout%29%3B%0Awindow.setTimeout%28function%28%29%20%7B%20getBrowser%28%29.loadURI%28str%29%3B%20%7D%2C%20t%29%3B%0A%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

Код:

Выделить код

Код:

var logout = "https://mail.google.com/mail/?logout"; 
var t = 2000;

var str = gURLBar.value; getBrowser().loadURI(logout);
window.setTimeout(function() { getBrowser().loadURI(str); }, t);

Go plus!³ [Selected] (Firefox)
Объединенная и оптимизированная версия двух кнопок Go plus!² и Go plus² focus, без ихних не всегда и не всем удобных особенностей («жесткости» первой и «невидимости» второй (невидимости фокуса)). Теперь переход по адресу и поиск осуществляется гибко и с хорошо видимым «аргументом» - выделенной частью  содержимого адресной строки или выделенным фрагментом текста на странице (при отсутствии выделенного - с содержимым буфера обмена). Более логичные сочетания клавиш и иконка с анимированной «подсказкой». Добавлены несколько поисков и Переводчик Google с  автоматическим определением языка локали и возможностью открытия сразу перевода страницы без предварительной загрузки страницы-оригинала. Одновременная индикация подсказки кнопки и содержимого буфера обмена при наведении указателя мыши на кнопку.

ЛКМ = Перейти по адресу {...} [«Paste and Go»] (.+.)
СКМ = Перевод страницы {...} с помощью Google (автовыбор языка исх. текста, перевод на язык локали) (.+.)
ПКМ = Искать текст {...}  с помощью выбранного «текущего» поисковика (.+.)

Дополнительные функции, сочетания модификаторов и клавиш мыши
____________________________________________________________________

   Shift+ЛКМ  = Обновить страницу из сети (Hard RELOAD)
      Ctrl+ЛКМ = Обновить страницу (RELOAD)
       Alt+ЛКМ  = Искать URL {...} в кеше Google (.+.)
Ctrl+Alt+ЛКМ = Искать КОД [текст {...}] в Google code search (.+.)
____________________________________________________________________

    Shift+СКМ = Искать Карту Google для текста {...} (.+.)
      Ctrl+СКМ = Перевод текста {...} с помощью Google (автовыбор языка исх. текста, перевод на язык локали) (.+.)
        Alt+СКМ = Искать длинное Видео к тексту {...} в Google (.+.)
Ctrl+Alt+СКМ = Искать длинное Видео к тексту {...} в Youtube (.+.)
____________________________________________________________________

    Shift+ПКМ = Искать текст {...} с помощью Google [.-.] (.+.)
      Ctrl+ПКМ = Искать текст {...} на текущем сайте с помощью Google [.-.] (.+.)
        Alt+ПКМ = Искать [что-либо] {...} в Archive.org (.+.)
Ctrl+Alt+ПКМ = Помощь кнопки (этот текст)
____________________________________________________________________

     {...} = {ВЫДЕЛЕННОЕ в адресной строке ИЛИ выделенное на странице ИЛИ из буфера обмена при отсутствии выделенного}
      [.-.] = [с выключенными фильтрами, без «живого поиска», 100 результатов на страницу (кроме некириллических локалей)  ]
     (.+.) = (в новой вкладке)
____________________________________________________________________

Примечания

1. При оперировании «аргументом» из адресной строки (url или текст) выделение является также обязательным.
    Для быстрого выделения всего содержимого адресной строки одним кликом параметр browser.urlbar.clickSelectsAll
    в about:config должен быть установлен в значение true

2. Если включен и установлен через about:config (параметром keyword.URL) дефолтный поисковый запрос
   для адресной строки, то для поиска текста, набранного и/или выделенного в адресной строке, имеем одновременно 3 возможности:
     а) нажимаем правой кнопкой мыши кнопку Go plus!³ = ищем поисковиком, выбранным кнопкой Select Search Engine,
     б) нажимаем Shift + правой кнопкой мыши кнопку Go plus!³ = ищем сразу поисковиком Google с предустановленными параметрами поиска,
     в) нажимаем кнопку ENTER = ищем дефолтным для адресной строки, например, для кнопки ENTER можно установить
         дефолтный переводчик или словарь или поиск по eBay... все, что угодно.

    Для поиска выделенного на странице текста или текста из буфера обмена - 2 возможности одновременно: а) и б).

3. При поиске набранного в адресной строке и выделенного на странице текста используется буфер обмена.
    Если потеря содержимого буфера обмена нежелательна, сохраняйте его перед поиском.

    После установки Select Search Engine и Go plus!³ стандартную
    панель(строку) поиска и кнопку "Обновить" можно  "удалить"
    (скрыть путем перемещения их в окно настроек панелей инструментов), так как кнопка Go plus!³ полностью
    заменяет их функции. Стандартную кнопку Go скрыть можно путем редактирования файла userChrome.css.

4. Настройки в "шапке" кода:
   IN_NEW_TAB = true / false - открывать в новой / в текущей вкладке,
   IN_BACKGROUND = false / true - открывать в активной вкладке / в фоне.

   Закомментировав строчку « || !(this.label == "Go plus!³") » получаем по сочетанию (Ctrl+Alt+Right) вызов Button HELP для всех установленных кнопок.

   Индикация содержимого буфера обмена при наведении указателя мыши на кнопку работает только в Firefox 3.6 ++

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

Выделить код

Код:

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%3EGo%20plus%21%B3%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/gif%3Bbase64%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%3D%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bthis.setAttribute%28%22style%22%2C%20%22padding-left%3A%200px%20%21important%3B%22%29%3B%0Avar%20br%20%3D%20getBrowser%28%29%3B%20var%20lang%20%3D%20custombuttons.getPref%28%22general.useragent.locale%22%29%3B%0Avar%20substr2%20%3D%20lang.substring%282%2C3%29%3B%20var%20substr3%20%3D%20lang.substring%283%2C4%29%3B%0Aif%20%28substr2%20%3D%3D%20%22-%22%29%20lang%3Dlang.substring%280%2C2%29%3B%20if%20%28substr3%20%3D%3D%20%22-%22%29%20lang%3Dlang.substring%280%2C3%29%3B%0Aconst%20IN_NEW_TAB%20%3D%20true%3B%20%20%0Aconst%20IN_BACKGROUND%20%3D%20false%3B%20%20%0A%0Athis.onclick%20%3D%20function%28event%29%20%7B%20var%20sel%3D%22%22%3B%20%0A%20%20this.ret%20%3D%20function%28%29%20%7B%20goDoCommand%28%22cmd_copy%22%29%3B%20sel%3DreadFromClipboard%28%29%3B%20if%20%28%21sel%29%20return%3B%20%7D%3B%0A%20%20this.evprevret%20%3D%20function%28%29%20%7B%20event.preventDefault%28%29%3B%20event.stopPropagation%28%29%3B%20this.ret%28%29%3B%20%7D%3B%0A%20%20%20%20%20%20%0A%20%20if%28event.button%20%3D%3D%200%20%26%26%20event.shiftKey%29%20BrowserReloadSkipCache%28%29%3B%0A%20%20if%28event.button%20%3D%3D%200%20%26%26%20event.ctrlKey%20%26%26%20%21event.altKey%20%26%26%20%21event.shiftKey%29%20BrowserReload%28%29%3B%0A%20%20if%28event.button%20%3D%3D%200%20%26%26%20%21event.ctrlKey%20%26%26%20%21event.altKey%20%26%26%20%21event.shiftKey%20%26%26%20%21event.metaKey%29%20%7B%20this.ret%28%29%3B%20%0A%20%20%20%20%20br.selectedTab%20%3D%20br.addTab%28sel%2C%20null%2C%20null%2C%20null%2C%20IN_BACKGROUND%2C%20false%29%3B%20%7D%3B%0A%20%20if%28event.button%20%3D%3D%200%20%26%26%20event.altKey%20%26%26%20%21event.ctrlKey%29%20%7B%20this.ret%28%29%3B%20%0A%20%20%20%20%20br.selectedTab%20%3D%20br.addTab%28%22http%3A//www.google.com/search%3Fq%3Dcache%3A%22%20+%20sel%29%3B%20%7D%3B%0A%20%20if%28event.button%20%3D%3D%200%20%26%26%20event.altKey%20%26%26%20event.ctrlKey%29%20%7B%20this.ret%28%29%3B%20sel%3DencodeURIComponent%28sel%29%3B%0A%20%20%20%20%20br.selectedTab%20%3D%20br.addTab%28%22http%3A//www.google.com/codesearch%23search/%26q%3D%22+sel+%22%26type%3Dcs%22%29%3B%20%7D%3B%0A%20%0A%20%20if%28event.button%20%3D%3D%201%29%20%7B%20this.ret%28%29%3B%20sel%3DencodeURIComponent%28sel%29%3B%0A%20%20%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%0A%20%20%20%20%20%20%20br.selectedTab%20%3D%20br.addTab%28%22http%3A//translate.google.com/translate%3Fu%3D%22+sel+%22%26hl%3D%22+lang+%22%26ie%3DUTF-8%26sl%3Dauto%26tl%3D%22+lang%29%3B%0A%20%20%20%20if%28event.shiftKey%29%20br.selectedTab%20%3D%20br.addTab%28%22http%3A//maps.google.com/maps%3Fhl%3D%22+lang+%22%26biw%3D1280%26bih%3D555%26q%3D%22+sel%29%3B%0A%20%20%20%20if%28event.ctrlKey%20%26%26%20%21event.altKey%29%20%0A%20%20%20%20%20%20%20br.selectedTab%20%3D%20br.addTab%28%22http%3A//translate.google.com.ua/translate_t%3Fhl%3D%22+lang+%22%23auto%7C%22+lang+%22%7C%22+sel%29%3B%20%20%20%20%20%20%20%20%0A%20%20%20%20if%28event.altKey%20%26%26%20event.ctrlKey%29%20%0A%20%20%20%20%20%20%20br.selectedTab%20%3D%20br.addTab%28%22http%3A//www.youtube.com/results%3Fsearch_type%3Dvideos%26suggested_categories%3D10%26uni%3D3%26search_duration%3Dlong%26search_query%3D%22+sel%29%3B%0A%20%20%7D%3B%20%0A%20%20if%28%28event.button%20%3D%3D%201%29%20%26%26%20event.altKey%20%26%26%20%21event.ctrlKey%29%20%7B%20this.ret%28%29%3B%20%0A%20%20%20%20%20if%28%21%28lang%20%3D%3D%20%22uk%22%29%20%26%26%20%21%28lang%20%3D%3D%20%22ru%22%29%20%26%26%20%21%28lang%20%3D%3D%20%22be%22%29%29%20sel%3DencodeURIComponent%28sel%29%3B%0A%20%20%20%20%20br.selectedTab%20%3D%20br.addTab%28%22http%3A//www.google.com/%22+%22search%3Fq%3D%22+sel+%22%26tbm%3Dvid%26source%3Dlnt%26tbs%3Ddur%3Al%26sa%3DX%26ei%3D%22%29%3B%20%7D%3B%0A%20%20%20%0A%20%20%20%20if%28event.button%20%3D%3D%202%29%20%7B%0A%20%20%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%20%20this.evprevret%28%29%3B%0A%20%20%20%20%20%20%20var%20ss%20%3D%20Cc%5B%22@mozilla.org/browser/search-service%3B1%22%5D.getService%28Ci.nsIBrowserSearchService%29%3B%0A%20%20%20%20%20%20%20var%20submission%20%3D%20ss.currentEngine.getSubmission%28sel%2C%20null%29%3B%0A%20%20%20%20%20%20%20br.selectedTab%20%3D%20br.addTab%28submission.uri.spec%2C%20null%2C%20null%2C%20submission.postData%2C%20IN_BACKGROUND%2C%20false%29%3B%20%0A%20%20%20%20%7D%3B%20%0A%20%20%20%20if%28event.shiftKey%29%20%7B%20%20this.evprevret%28%29%3B%20if%28%21%28lang%20%3D%3D%20%22uk%22%29%20%26%26%20%21%28lang%20%3D%3D%20%22ru%22%29%20%26%26%20%21%28lang%20%3D%3D%20%22be%22%29%29%20%7B%20sel%3DencodeURIComponent%28sel%29%3B%20%0A%20%20%20%20%20%20%20br.selectedTab%20%3D%20br.addTab%28%22http%3A//www.google.com/search%3Fq%3D%22+sel%29%3B%20%7D%20else%20%0A%20%20%20%20%20%20%20%20%20br.selectedTab%20%3D%20br.addTab%28%22http%3A//www.google.com.ua/search%3Fnum%3D100%26hl%3D%22+lang+%22%26safe%3Doff%26q%3D%22+sel+%22%26btnG%3D%u041F%u043E%u0448%u0443%u043A%22%29%3B%20%7D%3B%0A%20%20%20%20if%28event.ctrlKey%20%26%26%20%21event.altKey%29%20%7B%20%20this.evprevret%28%29%3B%20this.SearchInWebsite%28sel%29%3B%20%7D%3B%0A%20%20%20%20if%28event.altKey%20%26%26%20%21event.ctrlKey%29%20%7B%20%20this.evprevret%28%29%3B%20sel%3DencodeURIComponent%28sel%29%3B%20%0A%20%20%20%20%20%20%20br.selectedTab%20%3D%20br.addTab%28%22http%3A//www.archive.org/search.php%3Fquery%3D%22%20+%20sel%29%3B%20%7D%3B%0A%20%20%7D%3B%0A%7D%3B%0A%0Athis.SearchInWebsite%20%3D%20function%28text%29%20%7B%20var%20doc%20%3D%20br.contentDocument%3B%20try%20%7B%20var%20url%3Ddoc.location.hostname%3B%20%7D%20catch%28e%29%20%7B%20var%20url%3D%22%22%3B%20%7D%20%20%0A%20%20%20%20%20text%3Descape%28convertFromUnicode%20%28%22UTF-8%22%2C%20text%29%29%3B%20url%3DencodeURIComponent%28url%29%3B%20%0A%20%20%20%20%20var%20searchUrl%3D%22http%3A//www.google.com.ua/search%3Fnum%3D100%26hl%3D%22+lang+%22%26safe%3Doff%26q%3D%22+text+%22%26as_sitesearch%3D%22+url%3B%0A%20%20%20%20%20br.selectedTab%20%3D%20br.addTab%28searchUrl%29%3B%0A%7D%3B%0A%0AaddEventListener%28%22contextmenu%22%2C%0A%20%20%20function%28event%29%20%7B%20var%20btn%3Devent.target%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%28%21%28event.ctrlKey%20%26%26%20event.altKey%29%20%7C%7C%20btn.id.substr%280%2C%2020%29%20%21%3D%20%22custombuttons-button%22%20%7C%7C%20%21btn.hasAttribute%28%22Help%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%7C%7C%20%21%28this.label%20%3D%3D%20%22Go%20plus%21%B3%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%29%20return%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20event.preventDefault%28%29%3B%20event.stopPropagation%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20custombuttons.uChelpButton%28btn%29%3B%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%20%0A%20%20%20true%29%3B%0A%0Avar%20go3tip%20%3D%20%22GO/RELOAD/SEARCH/TRANSLATE%20%7C%20Ctrl+Alt+Right%3DButton%20HELP%22%3B%0Avar%20ios%20%3D%20Components.classes%5B%22@mozilla.org/network/io-service%3B1%22%5D.%0A%20%20getService%28Components.interfaces.nsIIOService%29%3B%0Avar%20sss%20%3D%20Components.classes%5B%22@mozilla.org/content/style-sheet-service%3B1%22%5D.%0A%20%20getService%28Components.interfaces.nsIStyleSheetService%29%3B%0Avar%20css%20%3D%20%27@namespace%20url%28%22http%3A//www.mozilla.org/keymaster/gatekeeper/there.is.only.xul%22%29%3B%27%3B%0Acss%20+%3D%20%27tooltip%5Blabel%5E%3D%22%27%20+%20go3tip%20+%20%27%5C%5C000a%5C%5C000a%22%5D%20%7B%27%3B%0Acss%20+%3D%20%22max-width%3A%20none%20%21important%3B%22%3B%0Acss%20+%3D%20%22-moz-appearance%3A%20none%20%21important%3B%22%3B%0Acss%20+%3D%20%22color%3A%20%23009%20%21important%3B%22%3B%0Acss%20+%3D%20%22background%3A%20%23eee%20%21important%3B%22%3B%0Acss%20+%3D%20%22font-family%3A%20monospace%20%21important%3B%22%3B%0Acss%20+%3D%20%22border%3A%201px%20solid%20%23777%20%21important%3B%22%3B%0Acss%20+%3D%20%22%7D%22%3B%0Avar%20uss%20%3D%20ios.newURI%28%22data%3Atext/css%2C%22%20+%20encodeURIComponent%28css%29%2C%20null%2C%20null%29%3B%0A//%20comment%20out%20the%20next%20line%20to%20disable%20style%0Aif%20%28%21sss.sheetRegistered%28uss%2C%20sss.AGENT_SHEET%29%29%20sss.loadAndRegisterSheet%28uss%2C%20sss.AGENT_SHEET%29%3B%0Athis.onDestroy%20%3D%20function%28reason%29%20%7B%0A%20%20if%20%28reason%20%3D%3D%20%22update%22%29%20%7B%0A%20%20%20%20var%20uss%20%3D%20ios.newURI%28%22data%3Atext/css%2C%22%20+%20encodeURIComponent%28css%29%2C%20null%2C%20null%29%3B%0A%20%20%20%20if%20%28sss.sheetRegistered%28uss%2C%20sss.AGENT_SHEET%29%29%20sss.unregisterSheet%28uss%2C%20sss.AGENT_SHEET%29%3B%0A%20%20%7D%0A%20%20if%20%28reason%20%3D%3D%20%22delete%22%29%20%7B%0A%20%20%20%20var%20uss%20%3D%20ios.newURI%28%22data%3Atext/css%2C%22%20+%20encodeURIComponent%28css%29%2C%20null%2C%20null%29%3B%0A%20%20%20%20if%20%28sss.sheetRegistered%28uss%2C%20sss.AGENT_SHEET%29%29%20sss.unregisterSheet%28uss%2C%20sss.AGENT_SHEET%29%3B%0A%20%20%20%20alert%28%22style%20sheet%20unregistered%22%29%3B%0A%20%20%7D%0A%7D%0Athis.showClipboard%20%3D%20function%28%29%20%7B%0A%20%20var%20text%20%3D%20custombuttons.cbService.readFromClipboard%28%29%3B%0A%20%20this.tooltipText%20%3D%20text%20%3F%20go3tip%20+%20%22%5Cn%5Cn%22%20+%20text%20%3A%20go3tip%3B%0A%7D%0Athis.setAttribute%28%22onmouseover%22%2C%20%22this.showClipboard%28%29%22%29%3B%0A%0Athis.setAttribute%28%27author%27%2C%27slbgz%27%29%3B%20%20%20//Many%20thanks%20to%20bunda1%2C%20infocatcher%20and%20morat%20for%20some%20strings%20of%20code.%0Athis.setAttribute%28%27version%27%2C%2720111015.3.3%27%29%3B%0Athis.setAttribute%28%27homepage%27%2C%20%27http%3A//custombuttons.mozdev.org/drupal/content/go-plus-3%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%5BThis%20button%20together%20with%20the%20button%20%ABSelect%20Search%20Engine%BB%20and%20with%20the%20Location%20bar%20are%20the%20full%20replacement%20of%20the%20buttons%20Go%2C%20Reload%20and%20Search%20bar%20which%20can%20be%20hidden...%20for%20Firefox%20in%20Your%20subnotebook%20or%20netbook.%0APlease%2C%20place%20this%20button%20next%20to%20Location%20bar...%20or%20wheresoever.%0A___________________________________________________________________________________________%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20Left%20%3D%20GO%20to%20%7B...%7D%20URL%20%5B%ABPaste%20and%20Go%BB%5D%20%28.+.%29%0A%20%20%20%20%20%20%20%20Medium%20%3D%20Google%20TRANSLATE%20the%20%7B...%7D%20page%20%28.+.%29%0A%20%20%20%20%20%20%20%20%20%20%20%20Right%20%3D%20SEARCH%20the%20text%20%7B...%7D%20with%20selected%20Search%20Engine%20%28.+.%29%0Aonmouseover%20%3D%20Button%20tip%20+%20Clipboard%20content%0A___________________________________________________________________________________________%0A%0A%20%20%20%20Shift+Left%20%3D%20Hard%20RELOAD%20page%0A%20%20%20%20%20%20Ctrl+Left%20%3D%20RELOAD%20page%0A%20%20%20%20%20%20%20Alt+Left%20%3D%20SEARCH%20URL%20%7B...%7D%20in%20Google%20CACHE%20%28.+.%29%0ACtrl+Alt+Left%20%3D%20SEARCH%20the%20CODE%20%7B...%7D%20with%20Google%20codesearch%20%28.+.%29%0A___________________________________________________________________________________________%0A%20%20%20%20%20%0A%20%20%20%20Shift+Medium%20%3D%20SEARCH%20the%20Google%20MAPs%20for%20text%20%7B...%7D%20%28.+.%29%0A%20%20%20%20%20%20Ctrl+Medium%20%3D%20Google%20TRANSLATE%20the%20text%20%7B...%7D%20%28.+.%29%0A%20%20%20%20%20%20%20Alt+Medium%20%3D%20SEARCH%20the%20long%20VIDEO%20for%20text%20%7B...%7D%20with%20GOOGLE%20%28.+.%29%0ACtrl+Alt+Medium%20%3D%20SEARCH%20the%20long%20VIDEO%20for%20text%20%7B...%7D%20in%20YOUTUBE%20%28.+.%29%0A___________________________________________________________________________________________%0A%0A%20%20%20%20Shift+Right%20%3D%20SEARCH%20the%20text%20%7B...%7D%20with%20Google%20%5B.-.%5D%20%28.+.%29%0A%20%20%20%20%20%20Ctrl+Right%20%3D%20SEARCH%20the%20text%20%7B...%7D%20in%20current%20Website%20with%20Google%20%5B.-.%5D%20%28.+.%29%0A%20%20%20%20%20%20%20Alt+Right%20%3D%20SEARCH%20%5Bany%5D%20%7B...%7D%20in%20Archive.org%20%28.+.%29%0ACtrl+Alt+Right%20%3D%20Button%20Help%20%28this%20window%29%0A___________________________________________________________________________________________%0A*%29%20%20%20%20%20%7B...%7D%20%3D%20%7B%20%3CSELECTED%20in%20URLbar%3E%20OR%20%3Cselected%20on%20page%20content%3E%20ELSE%20%3Cfrom%20clipboard%3E%20%7D%0A%20%20%20%20%20%20%20%20%5B.-.%5D%20%3D%20%5B%20with%20filters%20off%2C%20no%20livesearch%2C%20100%20results%20per%20page%2C%20except%20non%20Cyrillic%20locales%20%5D%20%0A%20%20%20%20%20%20%20%20%28.+.%29%20%3D%20%28in%20NEW%20Tab%29%0A___________________________________________________________________________________________%0A**%29%20%20Please%2C%20use%20the%20%ABMaster%20edit%20button%BB%20or%20%ABEdit%20a%20button%BB%20buttons%20for%20edit%20this%20button.%0A***%29%20Comments%20the%20string%3A%20%AB%20%7C%7C%20%21%28this.label%20%3D%3D%20%22Go%20plus%21%B3%22%29%20%BB%20will%20made%20%28Ctrl+Alt+Right%3DButton%20HELP%29%20for%20all%20Your%20buttons.%0A****%29%20Button%20was%20tested%20for%20EN%2C%20UA%2C%20RU%20%26%20BY%20locales%2C%20and%20was%20not%20tested%20for%20another%20language.%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

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

Выделить код

Код:

this.setAttribute("style", "padding-left: 0px !important;");
var br = getBrowser(); var lang = custombuttons.getPref("general.useragent.locale");
var substr2 = lang.substring(2,3); var substr3 = lang.substring(3,4);
if (substr2 == "-") lang=lang.substring(0,2); if (substr3 == "-") lang=lang.substring(0,3);
const IN_NEW_TAB = true;  
const IN_BACKGROUND = false;  

this.onclick = function(event) { var sel=""; 
  this.ret = function() { goDoCommand("cmd_copy"); sel=readFromClipboard(); if (!sel) return; };
  this.evprevret = function() { event.preventDefault(); event.stopPropagation(); this.ret(); };
      
  if(event.button == 0 && event.shiftKey) BrowserReloadSkipCache();
  if(event.button == 0 && event.ctrlKey && !event.altKey && !event.shiftKey) BrowserReload();
  if(event.button == 0 && !event.ctrlKey && !event.altKey && !event.shiftKey && !event.metaKey) { this.ret(); 
     br.selectedTab = br.addTab(sel, null, null, null, IN_BACKGROUND, false); };
  if(event.button == 0 && event.altKey && !event.ctrlKey) { this.ret(); 
     br.selectedTab = br.addTab("http://www.google.com/search?q=cache:" + sel); };
  if(event.button == 0 && event.altKey && event.ctrlKey) { this.ret(); sel=encodeURIComponent(sel);
     br.selectedTab = br.addTab("http://www.google.com/codesearch#search/&q="+sel+"&type=cs"); };
 
  if(event.button == 1) { this.ret(); sel=encodeURIComponent(sel);
    if(!event.ctrlKey && !event.shiftKey && !event.altKey && !event.metaKey) 
       br.selectedTab = br.addTab("http://translate.google.com/translate?u="+sel+"&hl="+lang+"&ie=UTF-8&sl=auto&tl="+lang);
    if(event.shiftKey) br.selectedTab = br.addTab("http://maps.google.com/maps?hl="+lang+"&biw=1280&bih=555&q="+sel);
    if(event.ctrlKey && !event.altKey) 
       br.selectedTab = br.addTab("http://translate.google.com.ua/translate_t?hl="+lang+"#auto|"+lang+"|"+sel);        
    if(event.altKey && event.ctrlKey) 
       br.selectedTab = br.addTab("http://www.youtube.com/results?search_type=videos&suggested_categories=10&uni=3&search_duration=long&search_query="+sel);
  }; 
  if((event.button == 1) && event.altKey && !event.ctrlKey) { this.ret(); 
     if(!(lang == "uk") && !(lang == "ru") && !(lang == "be")) sel=encodeURIComponent(sel);
     br.selectedTab = br.addTab("http://www.google.com/"+"search?q="+sel+"&tbm=vid&source=lnt&tbs=dur:l&sa=X&ei="); };
   
    if(event.button == 2) {
    if(!event.ctrlKey && !event.shiftKey && !event.altKey && !event.metaKey) {  this.evprevret();
       var ss = Cc["@mozilla.org/browser/search-service;1"].getService(Ci.nsIBrowserSearchService);
       var submission = ss.currentEngine.getSubmission(sel, null);
       br.selectedTab = br.addTab(submission.uri.spec, null, null, submission.postData, IN_BACKGROUND, false); 
    }; 
    if(event.shiftKey) {  this.evprevret(); if(!(lang == "uk") && !(lang == "ru") && !(lang == "be")) { sel=encodeURIComponent(sel); 
       br.selectedTab = br.addTab("http://www.google.com/search?q="+sel); } else 
         br.selectedTab = br.addTab("http://www.google.com.ua/search?num=100&hl="+lang+"&safe=off&q="+sel+"&btnG=Пошук"); };
    if(event.ctrlKey && !event.altKey) {  this.evprevret(); this.SearchInWebsite(sel); };
    if(event.altKey && !event.ctrlKey) {  this.evprevret(); sel=encodeURIComponent(sel); 
       br.selectedTab = br.addTab("http://www.archive.org/search.php?query=" + sel); };
  };
};

this.SearchInWebsite = function(text) { var doc = br.contentDocument; try { var url=doc.location.hostname; } catch(e) { var url=""; }  
     text=escape(convertFromUnicode ("UTF-8", text)); url=encodeURIComponent(url); 
     var searchUrl="http://www.google.com.ua/search?num=100&hl="+lang+"&safe=off&q="+text+"&as_sitesearch="+url;
     br.selectedTab = br.addTab(searchUrl);
};

addEventListener("contextmenu",
   function(event) { var btn=event.target;
                     if(!(event.ctrlKey && event.altKey) || btn.id.substr(0, 20) != "custombuttons-button" || !btn.hasAttribute("Help")
//                        || !(this.label == "Go plus!³")
                       ) return;
                     event.preventDefault(); event.stopPropagation();
                     custombuttons.uChelpButton(btn);            
                   }, 
   true);

var go3tip = "GO/RELOAD/SEARCH/TRANSLATE | Ctrl+Alt+Right=Button HELP";
var ios = Components.classes["@mozilla.org/network/io-service;1"].
  getService(Components.interfaces.nsIIOService);
var sss = Components.classes["@mozilla.org/content/style-sheet-service;1"].
  getService(Components.interfaces.nsIStyleSheetService);
var css = '@namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul");';
css += 'tooltip[label^="' + go3tip + '\\000a\\000a"] {';
css += "max-width: none !important;";
css += "-moz-appearance: none !important;";
css += "color: #009 !important;";
css += "background: #eee !important;";
css += "font-family: monospace !important;";
css += "border: 1px solid #777 !important;";
css += "}";
var uss = ios.newURI("data:text/css," + encodeURIComponent(css), null, null);
// comment out the next line to disable style
if (!sss.sheetRegistered(uss, sss.AGENT_SHEET)) sss.loadAndRegisterSheet(uss, sss.AGENT_SHEET);
this.onDestroy = function(reason) {
  if (reason == "update") {
    var uss = ios.newURI("data:text/css," + encodeURIComponent(css), null, null);
    if (sss.sheetRegistered(uss, sss.AGENT_SHEET)) sss.unregisterSheet(uss, sss.AGENT_SHEET);
  }
  if (reason == "delete") {
    var uss = ios.newURI("data:text/css," + encodeURIComponent(css), null, null);
    if (sss.sheetRegistered(uss, sss.AGENT_SHEET)) sss.unregisterSheet(uss, sss.AGENT_SHEET);
    alert("style sheet unregistered");
  }
}
this.showClipboard = function() {
  var text = custombuttons.cbService.readFromClipboard();
  this.tooltipText = text ? go3tip + "\n\n" + text : go3tip;
}
this.setAttribute("onmouseover", "this.showClipboard()");

this.setAttribute('author','slbgz');   //Many thanks to bunda1, infocatcher and morat for some strings of code.
this.setAttribute('version','20111015.3.3');
this.setAttribute('homepage', 'http://custombuttons.mozdev.org/drupal/content/go-plus-3');


10.10.2011. Добавлены несколько поисков и Переводчик Google.
15.10.2011. Добавлена возможность открытия сразу перевода страницы без предварительной загрузки страницы-оригинала.
Поменяны местами функции по ЛКМ и Ctrl+ЛКМ. Исправлена работа в английской локали, описание и примечания.
16.10.2011. Добавлена индикация содержимого буфера обмена при наведении на кнопку указателя мыши (FF 3.6 ++)

Find 2(Firefox <3.6)
Аналог кнопки Find для версий ниже 3.6. Поиск по странице без панели поиска.
Ищет текст, выделенный на странице или в адресной строке, при отсуствии выделенного ищет текст из буфера обмена.

ЛКМ = Найти следующее
СКМ = 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%3EFIND%202%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAQAABILAAASCwAAAAAAAAAAAAD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AAAUezAAFHvfABR73wAUezD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AAAUezAAFHvvMj6r/ztItv8AFHvvABR7MP///wD///8A////AP///wD///8A////AP///wD///8A////AAAUezAAFHvvOEOw/2du4/+Ml/H/ZHLC/wAUe7////8A////AP///wD///8A////AP///wD///8A////AAAUeyAAFHvvOEOw/2lw4/+Ml/H/tb/5/09dq/8AFHuv////AP///wD///8A////AP///wD///8A////AP///wAAFHtAESKL/2lw4/+Ml/H/tb/5/09dq/8AFHvvABR7MP///wD///8ATU1NME1NTa9NTU3/TU1N/01NTf9NTU2/VlhgzxgpfP81Raf/tb/5/09dq/8AFHvvABR7MP///wD///8ATU1NYE1NTf+ceXL/5K6g///Qw//01cz/vK2o/1hXVv92eH7/EyN3/wAUe/8AFHvfABR7MP///wD///8ATU1NME1NTf/Agnj/7KeZ//3Cs///2M7//+zn///29P/ezcj/WFZW/1tbW68AFHtA////AP///wD///8A////AE1NTZ+NZF7/2YyA/+ynmf/9wrP//9jN///r5v//9PL//+jh/7yknf9NTU3P////AP///wD///8A////AP///wBNTU3vvXVr/9WGev/noJL/+Lqq///Owf//3NL//+DY///az///y73/TU1N/01NTRD///8A////AP///wD///8ATU1N/9CCd//owLr/4ZuP/+6qm//6vKz//si5///Lvf/+x7j/+Lmp/2FZV/9NTU1A////AP///wD///8A////AE1NTd/ElY7/+e/t/+i8tf/lpJn/6qWW//Cun//ysaH/8K2e/+iilP9NTU3/////AP///wD///8A////AP///wBNTU2fhW5q/9aMgv////////////DQyv/ek4b/35WI/92Shf+ldW3/TU1Nz////wD///8A////AP///wD///8ATU1NIE1NTe+riIH/6sG7////////////2p2U/899cv+2c2r/VVBP/01NTUD///8A////AP///wD///8A////AP///wBNTU1gTU1N74dyb//KoZr/5rWu/8aKgf+OZmH/VVBP/01NTWD///8A////AP///wD///8A////AP///wD///8A////AE1NTSBNTU2fTU1N301NTf9NTU3vTU1Nr01NTUD///8A////AP///wD///8A////AP///wD///8A/+EAAP/AAAD/gAAA/wAAAP8AAADAAQAAgAMAAAAPAAAAHwAAAA8AAAAPAAAAHwAAAB8AAAAfAACAPwAAwH8AAA%3D%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bthis.tooltipText%20%3D%20%22L%3DFIND%20NEXT%20%7C%20M%3DCB%20menu%20%7C%20R%3DFIND%20PREVIOUS%22%3B%0A%0Athis.onclick%20%3D%20function%28event%29%20%7B%20%0A%20%20%20var%20t%3D%22%22%3B%20goDoCommand%28%22cmd_copy%22%29%3B%20t%20%3D%20readFromClipboard%28%29%3B%20if%20%28%21t%29%20return%3B%0A%20%20%20%20%0A%20%20%20gFindBar.find%28t%29%3B%20%0A%20%20%20%0A%20%20%20if%28event.button%20%3D%3D%200%29%20gFindBar.onFindAgainCmd%28%29%3B%20%20%09%0A%0A%20%20%20if%28event.button%20%3D%3D%201%29%20%7B%20this.showPopup%28this%29%3B%20return%3B%20%7D%3B%0A%0A%20%20%20if%28event.button%20%3D%3D%202%29%20%7B%20event.preventDefault%28%29%3B%20event.stopPropagation%28%29%3B%20gFindBar.onFindPreviousCmd%28%29%3B%20%7D%3B%0A%7D%3B%0A%0Athis.showPopup%20%3D%20function%28node%29%20%7B%0A%20%20var%20popup%20%3D%20document.getElementById%28%22custombuttons-contextpopup%22%29%3B%0A%20%20var%20x%20%3D%20node.boxObject.x%3B%0A%20%20var%20y%20%3D%20node.boxObject.y%20+%20node.boxObject.height%3B%0A%20%20document.popupNode%20%3D%20node%3B%0A%20%20popup.showPopup%28node%2C%20x%2C%20y%2C%20%22popup%22%2C%20null%2C%20null%29%3B%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

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

Выделить код

Код:

this.tooltipText = "L=FIND NEXT | M=CB menu | R=FIND PREVIOUS";

this.onclick = function(event) { 
   var t=""; goDoCommand("cmd_copy"); t = readFromClipboard(); if (!t) return;
    
   gFindBar.find(t); 
   
   if(event.button == 0) gFindBar.onFindAgainCmd();      

   if(event.button == 1) { this.showPopup(this); return; };

   if(event.button == 2) { event.preventDefault(); event.stopPropagation(); gFindBar.onFindPreviousCmd(); };
};

this.showPopup = function(node) {
  var popup = document.getElementById("custombuttons-contextpopup");
  var x = node.boxObject.x;
  var y = node.boxObject.y + node.boxObject.height;
  document.popupNode = node;
  popup.showPopup(node, x, y, "popup", null, null);
};

Рано или поздно это случится - вы заблокируете одну из кнопок и потеряете к ней доступ.
Следующие кнопки помогут в такой ситуации без необходимости отключения инициализации и двойного рестарта:

Master Edit Button(Firefox)

Выбрать кнопку из меню и отредактировать ее.
Автор: morat

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

Выделить код

Код:

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%3EMaster%20Edit%20Button%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAv9PT0//JGib/yt1s/86irmtAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAL/XJvU/6XP9f+oz+z/R4rA/yt1s/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADPABH/HWyS/8vj+f9gqez/P5fo/xRmwf8VX6n/K3Wz/88AEf/PABH/zwAR/88AEf/PABH/zwAR/88AEf/PABH/zwAR/x1skv/I4fL/0ef6/zN8tP8wmML/bMPc/0mbz/8zgsf//5Rn//+UZ///lGf//5Rn//+UZ///lGf/zwAR/88AEf//lGf/JYi4/6/L4f9mqMj/X9z1/0PW9P+N7vr/XLPm/zqO2f//lGf//5Rn//+UZ///lGf//5Rn/88AEf/PABH//5Rn//+UZ/8liLj/veby/7L0/P9f3PX/Q9b0/43u+v9cs+b/Oo7Z//+UZ///lGf//5Rn//+UZ//PABH/zwAR//+UZ///lGf//5Rn/yaPvv/C7fj/svT8/1/c9f9D1vT/je76/1yz5v86jtn//5Rn//+UZ///lGf/zwAR/88AEf//lGf//5Rn//+UZ///lGf/Lrnk/8Lt+P+y9Pz/X9z1/0PW9P+N7vr/XLPm/zqO2f//lGf//5Rn/88AEf/PABH//5Rn//+UZ///lGf//5Rn//+UZ/8uueT/wu34/7L0/P9f3PX/Q9b0/43u+v9cs+b/trOz8f+UZ//PABH/zwAR//+UZ///lGf//5Rn//+UZ///lGf//5Rn/y655P/C7fj/svT8/2fZ9f9uz/P/trOz/Kc1/+O2s7PxzwAR/88AEf//lGf//5Rn//+UZ///lGf//5Rn//+UZ///lGf/Lrnk/8Lt+P+n4vj/trOz+Kc1/8SnNf/EpzX/hKc1/+PPABH//5Rn//+UZ///lGf//5Rn//+UZ///lGf//5Rn//+UZ/8uueT/trOz8ac1/4SnNf+EpzX/hKc1/4SnNf/xzwAR/88AEf/PABH/zwAR/88AEf/PABH/zwAR/88AEf/PABH/zwAR/7azs/GnNf/xpzX/hKc1/4SnNf/xpzX/4wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAuueQJtrOzv6c1//GnNf//pzX/4zSj3hkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//+sQYP/rEGB/6xBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEH/wKxB//+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*/%0Avar%20data%20%3D%20%3Cwindow%0A%20%20title%3D%7Bthis.label%7D%0A%20%20onload%3D%7B%22opener.document.getElementById%28%5C%22%22%20+%20this.id%20+%20%22%5C%22%29.load%28%29%22%7D%0A%20%20xmlns%3D%22http%3A//www.mozilla.org/keymaster/gatekeeper/there.is.only.xul%22%3E%0A%20%20%20%20%3Ckeyset%3E%0A%20%20%20%20%20%20%3Ckey%20keycode%3D%22VK_ESCAPE%22%20oncommand%3D%22close%28%29%22/%3E%0A%20%20%20%20%3C/keyset%3E%0A%20%20%20%20%3Cvbox%20flex%3D%221%22%3E%0A%20%20%20%20%20%20%3Clistbox%20id%3D%22listbox%22%20flex%3D%221%22%3E%0A%20%20%20%20%20%20%20%20%3Clisthead%3E%0A%20%20%20%20%20%20%20%20%20%20%3Clistheader%20label%3D%22Id%22%20width%3D%22200%22/%3E%0A%20%20%20%20%20%20%20%20%20%20%3Clistheader%20label%3D%22Label%22/%3E%0A%20%20%20%20%20%20%20%20%3C/listhead%3E%0A%20%20%20%20%20%20%20%20%3Clistcols%3E%0A%20%20%20%20%20%20%20%20%20%20%3Clistcol/%3E%0A%20%20%20%20%20%20%20%20%20%20%3Clistcol%20flex%3D%221%22/%3E%0A%20%20%20%20%20%20%20%20%3C/listcols%3E%0A%20%20%20%20%20%20%3C/listbox%3E%0A%20%20%20%20%20%20%3Chbox%3E%0A%20%20%20%20%20%20%20%20%3Cbutton%20label%3D%22Edit%22%20oncommand%3D%7B%22opener.document.getElementById%28%5C%22%22%20+%20this.id%20+%20%22%5C%22%29.edit%28%29%22%7D/%3E%0A%20%20%20%20%20%20%3C/hbox%3E%0A%20%20%20%20%3C/vbox%3E%0A%3C/window%3E%3B%0Avar%20bool%20%3D%20XML.prettyPrinting%3B%0AXML.prettyPrinting%20%3D%20false%3B%0Adata%20%3D%20%27%3C%3Fxml%20version%3D%221.0%22%3F%3E%3C%3Fxml-stylesheet%20href%3D%22chrome%3A//global/skin/%22%20type%3D%22text/css%22%3F%3E%27%20+%20data.toXMLString%28%29%3B%0AXML.prettyPrinting%20%3D%20bool%3B%0Avar%20dialog%3B%0Athis.leftclick%20%3D%20function%28event%29%20%7B%0A%20%20var%20url%20%3D%20%22data%3Aapplication/vnd.mozilla.xul+xml%3Btext/plain%2C%22%20+%20data%3B%0A%20%20var%20feature%20%3D%20%22chrome%2Ccenterscreen%2Cwidth%3D500%2Cheight%3D600%2Cdialog%3Dno%22%3B%0A%20%20dialog%20%3D%20window.openDialog%28url%2C%20%22%22%2C%20feature%29%3B%0A%7D%0Athis.midclick%20%3D%20function%28event%29%20%7B%0A%20%20var%20os%20%3D%20Components.classes%5B%22@mozilla.org/observer-service%3B1%22%5D.%0A%20%20%20%20getService%28Components.interfaces.nsIObserverService%29%3B%0A%20%20var%20cancelQuit%20%3D%20Components.classes%5B%22@mozilla.org/supports-PRBool%3B1%22%5D.%0A%20%20%20%20createInstance%28Components.interfaces.nsISupportsPRBool%29%3B%0A%20%20os.notifyObservers%28cancelQuit%2C%20%22quit-application-requested%22%2C%20%22restart%22%29%3B%0A%20%20if%20%28cancelQuit.data%29%20%7B%0A%20%20%20%20alert%28%22Abort%20Restart%20Process%22%29%3B%0A%20%20%7D%20else%20%7B%0A%20%20%20%20var%20appStartup%20%3D%20Components.classes%5B%22@mozilla.org/toolkit/app-startup%3B1%22%5D.%0A%20%20%20%20%20%20getService%28Components.interfaces.nsIAppStartup%29%3B%0A%20%20%20%20appStartup.quit%28appStartup.eAttemptQuit%20%7C%20appStartup.eRestart%29%3B%0A%20%20%7D%0A%7D%0Athis.load%20%3D%20function%28%29%20%7B%0A%20%20var%20nodeList%20%3D%20document.getElementsByTagName%28%22toolbarbutton%22%29%3B%0A%20%20for%20%28var%20i%20%3D%200%3B%20i%20%3C%20nodeList.length%3B%20i++%29%20%7B%0A%20%20%20%20if%20%28nodeList%5Bi%5D.id.search%28%22custombuttons-button%22%29%20%3D%3D%200%29%20%7B%0A%20%20%20%20%20%20var%20item%20%3D%20document.createElement%28%22listitem%22%29%3B%0A%20%20%20%20%20%20var%20cell%20%3D%20document.createElement%28%22listcell%22%29%3B%0A%20%20%20%20%20%20cell.setAttribute%28%22label%22%2C%20nodeList%5Bi%5D.id%29%3B%0A%20%20%20%20%20%20item.appendChild%28cell%29%3B%0A%20%20%20%20%20%20var%20cell%20%3D%20document.createElement%28%22listcell%22%29%3B%0A%20%20%20%20%20%20cell.setAttribute%28%22label%22%2C%20nodeList%5Bi%5D.label%29%3B%0A%20%20%20%20%20%20item.appendChild%28cell%29%3B%0A%20%20%20%20%20%20dialog.document.getElementById%28%22listbox%22%29.appendChild%28item%29%3B%0A%20%20%20%20%7D%0A%20%20%7D%0A%20%20dialog.document.getElementById%28%22listbox%22%29.focus%28%29%3B%0A%20%20dialog.document.getElementById%28%22listbox%22%29.selectAll%28%29%3B%0A%7D%0Athis.edit%20%3D%20function%28%29%20%7B%0A%20%20var%20label%20%3D%20dialog.document.getElementById%28%22listbox%22%29.selectedItem.firstChild.getAttribute%28%22label%22%29%3B%0A%20%20dialog.close%28%29%3B%0A%20%20custombuttons.editButton%28document.getElementById%28label%29%29%3B%0A%7D%0Athis.setAttribute%28%22onclick%22%2C%20%22custombuttons.gQuot.mHandler%28event%2C%20this%29%22%29%3B%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

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

Выделить код

Код:

var data = <window
  title={this.label}
  onload={"opener.document.getElementById(\"" + this.id + "\").load()"}
  xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
    <keyset>
      <key keycode="VK_ESCAPE" oncommand="close()"/>
    </keyset>
    <vbox flex="1">
      <listbox id="listbox" flex="1">
        <listhead>
          <listheader label="Id" width="200"/>
          <listheader label="Label"/>
        </listhead>
        <listcols>
          <listcol/>
          <listcol flex="1"/>
        </listcols>
      </listbox>
      <hbox>
        <button label="Edit" oncommand={"opener.document.getElementById(\"" + this.id + "\").edit()"}/>
      </hbox>
    </vbox>
</window>;
var bool = XML.prettyPrinting;
XML.prettyPrinting = false;
data = '<?xml version="1.0"?><?xml-stylesheet href="chrome://global/skin/" type="text/css"?>' + data.toXMLString();
XML.prettyPrinting = bool;
var dialog;
this.leftclick = function(event) {
  var url = "data:application/vnd.mozilla.xul+xml;text/plain," + data;
  var feature = "chrome,centerscreen,width=500,height=600,dialog=no";
  dialog = window.openDialog(url, "", feature);
}
this.midclick = function(event) {
  var os = Components.classes["@mozilla.org/observer-service;1"].
    getService(Components.interfaces.nsIObserverService);
  var cancelQuit = Components.classes["@mozilla.org/supports-PRBool;1"].
    createInstance(Components.interfaces.nsISupportsPRBool);
  os.notifyObservers(cancelQuit, "quit-application-requested", "restart");
  if (cancelQuit.data) {
    alert("Abort Restart Process");
  } else {
    var appStartup = Components.classes["@mozilla.org/toolkit/app-startup;1"].
      getService(Components.interfaces.nsIAppStartup);
    appStartup.quit(appStartup.eAttemptQuit | appStartup.eRestart);
  }
}
this.load = function() {
  var nodeList = document.getElementsByTagName("toolbarbutton");
  for (var i = 0; i < nodeList.length; i++) {
    if (nodeList[i].id.search("custombuttons-button") == 0) {
      var item = document.createElement("listitem");
      var cell = document.createElement("listcell");
      cell.setAttribute("label", nodeList[i].id);
      item.appendChild(cell);
      var cell = document.createElement("listcell");
      cell.setAttribute("label", nodeList[i].label);
      item.appendChild(cell);
      dialog.document.getElementById("listbox").appendChild(item);
    }
  }
  dialog.document.getElementById("listbox").focus();
  dialog.document.getElementById("listbox").selectAll();
}
this.edit = function() {
  var label = dialog.document.getElementById("listbox").selectedItem.firstChild.getAttribute("label");
  dialog.close();
  custombuttons.editButton(document.getElementById(label));
}
this.setAttribute("onclick", "custombuttons.gQuot.mHandler(event, this)");


Edit a button(Firefox)

Ввести id номер кнопки в диалоговом окне и отредактировать кнопку
Автор: mrbunnylamakins

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

Выделить код

Код:

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%3EEdit%20a%20button%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAADG0lEQVR42gEQA+/8AP///////////////////////////////////////////////////////////////wD////q6uqOjougoKC4uLjKysrZ2dnm5ub29vb////////ejYasHxi1S0v16ur///8A////oKC2mpqxenqAZGRmZmZodnZ5dnZ1eXl4s7S179XQ5E8q9GxDuCUWtElJ////AP///5eXyra3woF+gWxlaWFibYCAkHd3iHh3jVxuV8bL1POSefJiOMc2H6MdHf///wD///+YmMjd2+Lj5OLWs6iztLOjoqGkoqatrqxWwCWZv4rS1N/Bd2q0JRfmurn///8A////mZjD3er94vr/7ruw3/j/4PL/3+//cc1LhvNVkP5daaFbZm1tvsLD////////AP///5mZwefq+/T///W6qun4/+70/4bPZHnnSpX7Y2zTSSSOFYrCiP///////////wD///+cnMHd4/nv/f/1t6j1+/+k2Zls3DuW/mR02k0vlh53t3T///////////////8A////n5/Cz9j14Pb/6q6k4PT/crtOlv9ie+FSM5weX6dc/f39////////////////AP///6amxdDS7+n6/+uso930/6ieZkKpJCuaEzJ9Ns7N5P///////////////////wD///+trcrExub0/v/9saDi5/BTS0JqcXiNsrbK2f6/vdn///////////////////8A////tLTNsrre3fb/6KWd0OP4xsnW8/f/3ev/zeD/r6/O////////////////////AP///7y80a2x1+D3/+ijmdjx/87h+d3s//H1/+fm+qCgxP///////////////////wD////FxdinqdD/////qZjU2PCzsdOamb2amsKurszf3+3///////////////////8A////09PhfHysl5i+n6HEwsLX4uLr+/v9////////////////////////////////AP///////////////////////////////////////////////////////////////zU5bGjjW0b7AAAAAElFTkSuQmCC%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%0A%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B%0Avar%20Cb%20%3D%20custombuttons%3B%0Avar%20bnum%20%3D%20prompt%28%27Enter%20Button%20%23%27%29%3B%0Avar%20bid%20%3D%20%27custombuttons-button%27%20+%20String%28bnum%29%3B%0Athis.oBtn%20%3D%20document.getElementById%28bid%29%3B%0A%0ACb.alertSlide%28%22Edit%20%22%20+%20this.oBtn.label%2C%20%22ID%20%22%20+this.oBtn.id%29%3B%0Aif%20%28%20this.oBtn%20%29%20%7B%0A%09Cb.editButton%20%28%20this.oBtn%20%29%3B%0A%7D%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 Cb = custombuttons;
var bnum = prompt('Enter Button #');
var bid = 'custombuttons-button' + String(bnum);
this.oBtn = document.getElementById(bid);

Cb.alertSlide("Edit " + this.oBtn.label, "ID " +this.oBtn.id);
if ( this.oBtn ) {
    Cb.editButton ( this.oBtn );
}


Troubleshoot Custom Buttons [tree](Firefox)
В окне со списком кнопок возможны несколько действий с каждой кнопкой... и сортировка списка кнопок.
Автор: morat
Код
Код кнопки:

Выделить код

Код:

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%3ETroubleshoot%20Custom%20Buttons%20%5Btree%5D%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAhpJREFUOMvN0UtI1FEUx/HvnfufV874n0lHfJQjlWTS6EKIxCFqE0S0yxaBLoooCIxoUbaIQCxykT1oE0Utgh6Q0M4kCiE3qYuIFmG+KPMx5gzTjP7Hmfu/LSIz0B606awu9xw+91x+8I8lVmsMXmfzghF+hMMXZO7tkWgrT/9KfnPb35uc6tbz0090363qT6NX8a0051jpcuQujYHqQztQM+SscTZs31cykqL1j4DhHjwJwh0F4RrG+zsZHrhBQTCBWR45+eoCFb8FrBFOldYdrshOP6D2wBi7jhrEPj5jY7TKm9SOS78EPjyk1C6sO+MJrMUpv5DvC1BU4CftVLi8s4S2rG980U50VeBznIvFkf2+XGYSb5FJTZXENN1URhRKzVC50yFiyMt6WXry++HdTbYZ6/Zcyy8OC61iCKlJZd4TDBWyu8Eia8cx3HG8edmy7pAe7XrJ6+UbiFQu70rJ1r0OlY2DSLOYs2hqLub4MReZxQTSGUfINJX1NqZJe9dZ8paA520cDESa67VKg7AQIoMhU/Q/HmKodwCnN4l0LeJ0f3utoYmyqQlOLwHaX36uaFMUpdJAFhxZvMzRcS/I+Tt1yDUC6f7x4WAZhGs5AWAAGJ6QaRgC2+UCIUEIMp58enomUa4JwEIaP8e3kGR+CZgcGmzpu9/WKQ3h1/Y8WufQ2gIy2HpWaTRag7axlUanZoklpmjhv6ivwhPCjfsi85IAAAAASUVORK5CYII%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bvar%20data%20%3D%20%3Cwindow%20title%3D%7Bthis.label%7D%20onload%3D%7B%27opener.document.getElementById%28%22%27%20+%20this.id%20+%20%27%22%29.load%28%29%27%7D%0A%20%20xmlns%3D%22http%3A//www.mozilla.org/keymaster/gatekeeper/there.is.only.xul%22%3E%0A%20%20%20%20%3Ckeyset%3E%0A%20%20%20%20%20%20%3Ckey%20keycode%3D%22VK_ESCAPE%22%20oncommand%3D%22close%28%29%22/%3E%0A%20%20%20%20%3C/keyset%3E%0A%20%20%20%20%3Cvbox%20flex%3D%221%22%3E%0A%20%20%20%20%20%20%3Ctree%20id%3D%22tree%22%20hidecolumnpicker%3D%22true%22%20seltype%3D%22single%22%20flex%3D%221%22%3E%0A%20%20%20%20%20%20%20%20%3Ctreecols%3E%0A%20%20%20%20%20%20%20%20%20%20%3Ctreecol%20id%3D%22firstColumn%22%20label%3D%22Id%22%20width%3D%22200%22%20sortDirection%3D%22ascending%22%0A%20%20%20%20%20%20%20%20%20%20%20%20onclick%3D%7B%27opener.document.getElementById%28%22%27%20+%20this.id%20+%20%27%22%29.reorder%28this%29%27%7D/%3E%0A%20%20%20%20%20%20%20%20%20%20%3Ctreecol%20id%3D%22secondColumn%22%20label%3D%22Image%20%26amp%3B%20Label%22%20flex%3D%221%22%20sortDirection%3D%22ascending%22%0A%20%20%20%20%20%20%20%20%20%20%20%20onclick%3D%7B%27opener.document.getElementById%28%22%27%20+%20this.id%20+%20%27%22%29.reorder%28this%29%27%7D/%3E%0A%20%20%20%20%20%20%20%20%3C/treecols%3E%0A%20%20%20%20%20%20%20%20%3Ctreechildren%20id%3D%22treechildren%22/%3E%0A%20%20%20%20%20%20%3C/tree%3E%0A%20%20%20%20%20%20%3Cseparator%20class%3D%22thin%22/%3E%0A%20%20%20%20%20%20%3Chbox%3E%0A%20%20%20%20%20%20%20%20%3Cbutton%20label%3D%22Edit%22%20oncommand%3D%7B%27opener.document.getElementById%28%22%27%20+%20this.id%20+%20%27%22%29.edit%28%29%27%7D/%3E%0A%20%20%20%20%20%20%20%20%3Cbutton%20label%3D%22Delete%22%20oncommand%3D%7B%27opener.document.getElementById%28%22%27%20+%20this.id%20+%20%27%22%29.remove%28%29%27%7D/%3E%0A%20%20%20%20%20%20%20%20%3Cbutton%20label%3D%22Attributes%22%20oncommand%3D%7B%27opener.document.getElementById%28%22%27%20+%20this.id%20+%20%27%22%29.attr%28%29%27%7D/%3E%0A%20%20%20%20%20%20%20%20%3Cbutton%20label%3D%22Properties%22%20oncommand%3D%7B%27opener.document.getElementById%28%22%27%20+%20this.id%20+%20%27%22%29.prop%28%29%27%7D/%3E%0A%20%20%20%20%20%20%20%20%3Cbutton%20label%3D%22URI%22%20oncommand%3D%7B%27opener.document.getElementById%28%22%27%20+%20this.id%20+%20%27%22%29.link%28%29%27%7D/%3E%0A%20%20%20%20%20%20%20%20%3Cbutton%20label%3D%22DOMi%22%20oncommand%3D%7B%27opener.document.getElementById%28%22%27%20+%20this.id%20+%20%27%22%29.inspect%28%29%27%7D/%3E%0A%20%20%20%20%20%20%3C/hbox%3E%0A%20%20%20%20%3C/vbox%3E%0A%3C/window%3E%3B%0Avar%20bool%20%3D%20XML.prettyPrinting%3B%0AXML.prettyPrinting%20%3D%20false%3B%0Adata%20%3D%20%27%3C%3Fxml%20version%3D%221.0%22%3F%3E%3C%3Fxml-stylesheet%20href%3D%22chrome%3A//global/skin/%22%20type%3D%22text/css%22%3F%3E%27%20+%20data.toXMLString%28%29%3B%0AXML.prettyPrinting%20%3D%20bool%3B%0Avar%20dialog%3B%0Afunction%20getImage%28s%29%20%7B%0A%20%20if%20%28s%20%3D%3D%20%22custombuttons-stdicon-1%22%29%20return%20%22chrome%3A//custombuttons/skin/button.png%22%3B%0A%20%20if%20%28s%20%3D%3D%20%22custombuttons-stdicon-2%22%29%20return%20%22chrome%3A//custombuttons/skin/stdicons/rbutton.png%22%3B%0A%20%20if%20%28s%20%3D%3D%20%22custombuttons-stdicon-3%22%29%20return%20%22chrome%3A//custombuttons/skin/stdicons/gbutton.png%22%3B%0A%20%20if%20%28s%20%3D%3D%20%22custombuttons-stdicon-4%22%29%20return%20%22chrome%3A//custombuttons/skin/stdicons/bbutton.png%22%3B%0A%20%20return%20%22http%3A//forum.mozilla-russia.org/uploaded/custombuttons_button.png%22%3B%0A%7D%0Afunction%20openTab%28arr%29%20%7B%0A%20%20for%20%28var%20i%20%3D%200%3B%20i%20%3C%20arr.length%3B%20i++%29%20%7B%0A%20%20%20%20var%20converter%20%3D%20Components.classes%5B%22@mozilla.org/intl/scriptableunicodeconverter%22%5D.%0A%20%20%20%20%20%20createInstance%28Components.interfaces.nsIScriptableUnicodeConverter%29%3B%0A%20%20%20%20converter.charset%20%3D%20%22UTF-8%22%3B%0A%20%20%20%20arr%5Bi%5D%20%3D%20converter.ConvertFromUnicode%28arr%5Bi%5D%29%3B%0A%20%20%20%20arr%5Bi%5D%20%3D%20arr%5Bi%5D.replace%28/%26/g%2C%20%22%26amp%3B%22%29%3B%0A%20%20%20%20arr%5Bi%5D%20%3D%20arr%5Bi%5D.replace%28/%3E/g%2C%20%22%26gt%3B%22%29%3B%0A%20%20%20%20arr%5Bi%5D%20%3D%20arr%5Bi%5D.replace%28/%3C/g%2C%20%22%26lt%3B%22%29%3B%0A%20%20%20%20arr%5Bi%5D%20%3D%20arr%5Bi%5D.replace%28/%22/g%2C%20%22%26quot%3B%22%29%3B%0A%20%20%20%20arr%5Bi%5D%20%3D%20arr%5Bi%5D.replace%28/%27/g%2C%20%22%26apos%3B%22%29%3B%0A%20%20%7D%0A%20%20var%20data%20%3D%20%27%3C%21DOCTYPE%20HTML%20PUBLIC%20%22-//W3C//DTD%20HTML%204.01//EN%22%3E%27%3B%0A%20%20data%20+%3D%20%22%3Chtml%3E%3Chead%3E%3Ctitle%3E%22%20+%20arr%5B1%5D%20+%20%22%3C/title%3E%22%3B%0A%20%20data%20+%3D%20%27%3Cmeta%20http-equiv%3D%22Content-Type%22%20content%3D%22text/html%3B%20charset%3DUTF-8%22%3E%27%3B%0A%20%20data%20+%3D%20%22%3C/head%3E%3Cbody%3E%3Cpre%3E%22%20+%20arr.join%28%22%5Cn%5Cn%22%29%20+%20%22%3C/pre%3E%3C/body%3E%3C/html%3E%22%3B%0A%20%20var%20info%20%3D%20Components.classes%5B%22@mozilla.org/xre/app-info%3B1%22%5D.%0A%20%20%20%20getService%28Components.interfaces.nsIXULAppInfo%29%3B%0A%20%20if%20%28info.name%20%3D%3D%20%22Firefox%22%20%7C%7C%20info.name%20%3D%3D%20%22SeaMonkey%22%29%20%7B%0A%20%20%20%20gBrowser.addTab%28%22data%3Atext/html%3Bcharset%3Dutf-8%3Bbase64%2C%22%20+%20btoa%28data%29%29%3B%0A%20%20%7D%0A%20%20if%20%28info.name%20%3D%3D%20%22Thunderbird%22%29%20%7B%0A%20%20%20%20openContentTab%28%22data%3Atext/html%3Bcharset%3Dutf-8%3Bbase64%2C%22%20+%20btoa%28data%29%29%3B%0A%20%20%7D%0A%7D%0Athis.leftclick%20%3D%20function%28event%29%20%7B%0A%20%20var%20url%20%3D%20%22data%3Aapplication/vnd.mozilla.xul+xml%3Btext/plain%2C%22%20+%20data%3B%0A%20%20var%20feature%20%3D%20%22chrome%2Ccenterscreen%2Cwidth%3D600%2Cheight%3D200%2Cdialog%3Dno%22%3B%0A%20%20dialog%20%3D%20window.openDialog%28url%2C%20%22%22%2C%20feature%29%3B%0A%7D%0Athis.load%20%3D%20function%28%29%20%7B%0A%20%20var%20nodeList%20%3D%20document.getElementsByTagName%28%22toolbarbutton%22%29%3B%0A%20%20var%20children%20%3D%20dialog.document.getElementById%28%22treechildren%22%29%3B%0A%20%20for%20%28var%20i%20%3D%200%3B%20i%20%3C%20nodeList.length%3B%20i++%29%20%7B%0A%20%20%20%20if%20%28nodeList%5Bi%5D.id.search%28%22custombuttons-button%22%29%20%3D%3D%200%29%20%7B%0A%20%20%20%20%20%20var%20item%20%3D%20document.createElement%28%22treeitem%22%29%3B%0A%20%20%20%20%20%20var%20row%20%3D%20document.createElement%28%22treerow%22%29%3B%0A%20%20%20%20%20%20var%20cell%20%3D%20document.createElement%28%22treecell%22%29%3B%0A%20%20%20%20%20%20cell.setAttribute%28%22label%22%2C%20nodeList%5Bi%5D.id%29%3B%0A%20%20%20%20%20%20row.appendChild%28cell%29%3B%0A%20%20%20%20%20%20var%20cell%20%3D%20document.createElement%28%22treecell%22%29%3B%0A%20%20%20%20%20%20cell.setAttribute%28%22src%22%2C%20nodeList%5Bi%5D.image%20%7C%7C%20getImage%28nodeList%5Bi%5D.cbStdIcon%29%29%3B%0A%20%20%20%20%20%20cell.setAttribute%28%22label%22%2C%20String.fromCharCode%2832%2C%2032%29%20+%20nodeList%5Bi%5D.label%29%3B%0A%20%20%20%20%20%20row.appendChild%28cell%29%3B%0A%20%20%20%20%20%20item.appendChild%28row%29%3B%0A%20%20%20%20%20%20children.appendChild%28item%29%3B%0A%20%20%20%20%7D%0A%20%20%7D%0A%20%20dialog.document.getElementById%28%22tree%22%29.focus%28%29%3B%0A%20%20dialog.document.getElementById%28%22tree%22%29.view.selection.select%280%29%3B%0A%7D%0Athis.reorder%20%3D%20function%28node%29%20%7B%0A%20%20var%20nodeList%20%3D%20document.getElementsByTagName%28%22toolbarbutton%22%29%3B%0A%20%20var%20orderArr%20%3D%20new%20Array%28%29%3B%0A%20%20for%20%28var%20i%20%3D%200%3B%20i%20%3C%20nodeList.length%3B%20i++%29%20%7B%0A%20%20%20%20if%20%28nodeList%5Bi%5D.id.search%28%22custombuttons-button%22%29%20%3D%3D%200%29%20%7B%0A%20%20%20%20%20%20var%20item%20%3D%20document.createElement%28%22treeitem%22%29%3B%0A%20%20%20%20%20%20var%20row%20%3D%20document.createElement%28%22treerow%22%29%3B%0A%20%20%20%20%20%20var%20cell%20%3D%20document.createElement%28%22treecell%22%29%3B%0A%20%20%20%20%20%20cell.setAttribute%28%22label%22%2C%20nodeList%5Bi%5D.id%29%3B%0A%20%20%20%20%20%20row.appendChild%28cell%29%3B%0A%20%20%20%20%20%20var%20cell%20%3D%20document.createElement%28%22treecell%22%29%3B%0A%20%20%20%20%20%20cell.setAttribute%28%22src%22%2C%20nodeList%5Bi%5D.image%20%7C%7C%20getImage%28nodeList%5Bi%5D.cbStdIcon%29%29%3B%0A%20%20%20%20%20%20cell.setAttribute%28%22label%22%2C%20String.fromCharCode%2832%2C%2032%29%20+%20nodeList%5Bi%5D.label%29%3B%0A%20%20%20%20%20%20row.appendChild%28cell%29%3B%0A%20%20%20%20%20%20item.appendChild%28row%29%3B%0A%20%20%20%20%20%20orderArr.push%28%5BnodeList%5Bi%5D.id.substring%2820%29%2C%20nodeList%5Bi%5D.label%2C%20item%5D%29%3B%0A%20%20%20%20%7D%0A%20%20%7D%0A%20%20var%20id%20%3D%20node.getAttribute%28%22id%22%29%3B%0A%20%20var%20sortDirection%20%3D%20node.getAttribute%28%22sortDirection%22%29%3B%0A%20%20if%20%28id%20%3D%3D%20%22firstColumn%22%20%26%26%20sortDirection%20%3D%3D%20%22ascending%22%29%20orderArr.sort%28function%28a%2C%20b%29%20%7B%20return%20a%5B0%5D%20-%20b%5B0%5D%20%7D%29%3B%0A%20%20if%20%28id%20%3D%3D%20%22firstColumn%22%20%26%26%20sortDirection%20%3D%3D%20%22descending%22%29%20orderArr.sort%28function%28a%2C%20b%29%20%7B%20return%20b%5B0%5D%20-%20a%5B0%5D%20%7D%29%3B%0A%20%20if%20%28id%20%3D%3D%20%22secondColumn%22%20%26%26%20sortDirection%20%3D%3D%20%22ascending%22%29%20orderArr.sort%28function%28a%2C%20b%29%20%7B%20return%20a%5B1%5D%20%3E%20b%5B1%5D%20%7D%29%3B%0A%20%20if%20%28id%20%3D%3D%20%22secondColumn%22%20%26%26%20sortDirection%20%3D%3D%20%22descending%22%29%20orderArr.sort%28function%28a%2C%20b%29%20%7B%20return%20a%5B1%5D%20%3C%20b%5B1%5D%20%7D%29%3B%0A%20%20node.setAttribute%28%22sortDirection%22%2C%20sortDirection%20%3D%3D%20%22descending%22%20%3F%20%22ascending%22%20%3A%20%22descending%22%29%3B%0A%20%20var%20children%20%3D%20dialog.document.getElementById%28%22treechildren%22%29%3B%0A%20%20for%20%28var%20i%20%3D%200%3B%20i%20%3C%20children.childNodes.length%3B%20i++%29%20%7B%0A%20%20%20%20children.appendChild%28orderArr%5Bi%5D%5B2%5D%29%3B%0A%20%20%20%20children.removeChild%28children.firstChild%29%3B%0A%20%20%7D%0A%20%20dialog.document.getElementById%28%22tree%22%29.focus%28%29%3B%0A%20%20dialog.document.getElementById%28%22tree%22%29.view.selection.select%280%29%3B%0A%7D%0Athis.edit%20%3D%20function%28%29%20%7B%0A%20%20var%20id%20%3D%20dialog.document.getElementById%28%22tree%22%29.view.getCellText%28%0A%20%20%20%20dialog.document.getElementById%28%22tree%22%29.view.selection.currentIndex%2C%0A%20%20%20%20dialog.document.getElementById%28%22tree%22%29.columns.getColumnAt%280%29%29%3B%0A%20%20custombuttons.editButton%28document.getElementById%28id%29%29%3B%0A%20%20dialog.close%28%29%3B%0A%7D%0Athis.remove%20%3D%20function%28%29%20%7B%0A%20%20var%20id%20%3D%20dialog.document.getElementById%28%22tree%22%29.view.getCellText%28%0A%20%20%20%20dialog.document.getElementById%28%22tree%22%29.view.selection.currentIndex%2C%0A%20%20%20%20dialog.document.getElementById%28%22tree%22%29.columns.getColumnAt%280%29%29%3B%0A%20%20custombuttons.removeButton%28document.getElementById%28id%29%29%3B%0A%20%20dialog.close%28%29%3B%0A%7D%0Athis.attr%20%3D%20function%28%29%20%7B%0A%20%20var%20id%20%3D%20dialog.document.getElementById%28%22tree%22%29.view.getCellText%28%0A%20%20%20%20dialog.document.getElementById%28%22tree%22%29.view.selection.currentIndex%2C%0A%20%20%20%20dialog.document.getElementById%28%22tree%22%29.columns.getColumnAt%280%29%29%3B%0A%20%20var%20node%20%3D%20document.getElementById%28id%29%3B%0A%20%20var%20out%20%3D%20new%20Array%28%29%3B%0A%20%20out.push%28%27windowtype%3D%22%27%20+%20document.documentElement.getAttribute%28%22windowtype%22%29%20+%20%27%22%20id%3D%22%27%20+%20id%20+%20%27%22%27%29%3B%0A%20%20out.push%28%22Attributes%22%29%3B%0A%20%20for%20%28var%20i%20%3D%200%3B%20i%20%3C%20node.attributes.length%3B%20i++%29%20%7B%0A%20%20%20%20if%20%28node.attributes%5Bi%5D.nodeName%20%3D%3D%20%22cb-oncommand%22%20%7C%7C%0A%20%20%20%20%20%20%20%20node.attributes%5Bi%5D.nodeName%20%3D%3D%20%22cb-init%22%20%20%20%20%20%20%7C%7C%0A%20%20%20%20%20%20%20%20node.attributes%5Bi%5D.nodeName%20%3D%3D%20%22Help%22%29%20%7B%0A%20%20%20%20%20%20out.push%28node.attributes%5Bi%5D.nodeName%20+%20%22%20%22%20+%20typeof%20node.attributes%5Bi%5D.nodeValue%20+%20%22%5Cn%22%20+%20%22%5Bomitted%5D%22%29%3B%0A%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20out.push%28node.attributes%5Bi%5D.nodeName%20+%20%22%20%22%20+%20typeof%20node.attributes%5Bi%5D.nodeValue%20+%20%22%5Cn%22%20+%20node.attributes%5Bi%5D.nodeValue%29%3B%0A%20%20%20%20%7D%0A%20%20%7D%0A%20%20openTab%28out%29%3B%0A%20%20dialog.close%28%29%3B%0A%7D%0Athis.prop%20%3D%20function%28%29%20%7B%0A%20%20var%20id%20%3D%20dialog.document.getElementById%28%22tree%22%29.view.getCellText%28%0A%20%20%20%20dialog.document.getElementById%28%22tree%22%29.view.selection.currentIndex%2C%0A%20%20%20%20dialog.document.getElementById%28%22tree%22%29.columns.getColumnAt%280%29%29%3B%0A%20%20var%20node%20%3D%20document.getElementById%28id%29%3B%0A%20%20var%20out%20%3D%20new%20Array%28%29%3B%0A%20%20out.push%28%27windowtype%3D%22%27%20+%20document.documentElement.getAttribute%28%22windowtype%22%29%20+%20%27%22%20id%3D%22%27%20+%20id%20+%20%27%22%27%29%3B%0A%20%20out.push%28%22Properties%22%29%3B%0A%20%20for%20%28var%20i%20in%20node%29%20%7B%0A%20%20%20%20if%20%28i%20%3D%3D%20%22cbCommand%22%20%20%7C%7C%0A%20%20%20%20%20%20%20%20i%20%3D%3D%20%22cbInitCode%22%20%7C%7C%0A%20%20%20%20%20%20%20%20i%20%3D%3D%20%22Help%22%20%20%20%20%20%20%20%7C%7C%0A%20%20%20%20%20%20%20%20i%20%3D%3D%20%22URI%22%29%20%7B%0A%20%20%20%20%20%20out.push%28i%20+%20%22%20%22%20+%20typeof%20node%5Bi%5D%20+%20%22%5Cn%22%20+%20%22%5Bomitted%5D%22%29%3B%0A%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20out.push%28i%20+%20%22%20%22%20+%20typeof%20node%5Bi%5D%20+%20%22%5Cn%22%20+%20node%5Bi%5D%29%3B%0A%20%20%20%20%7D%0A%20%20%7D%0A%20%20openTab%28out%29%3B%0A%20%20dialog.close%28%29%3B%0A%7D%0Athis.link%20%3D%20function%28%29%20%7B%0A%20%20var%20id%20%3D%20dialog.document.getElementById%28%22tree%22%29.view.getCellText%28%0A%20%20%20%20dialog.document.getElementById%28%22tree%22%29.view.selection.currentIndex%2C%0A%20%20%20%20dialog.document.getElementById%28%22tree%22%29.columns.getColumnAt%280%29%29%3B%0A%20%20var%20out%20%3D%20new%20Array%28%29%3B%0A%20%20out.push%28%27windowtype%3D%22%27%20+%20document.documentElement.getAttribute%28%22windowtype%22%29%20+%20%27%22%20id%3D%22%27%20+%20id%20+%20%27%22%27%29%3B%0A%20%20out.push%28%22URI%22%29%3B%0A%20%20out.push%28unescape%28document.getElementById%28id%29.URI%29%29%3B%0A%20%20openTab%28out%29%3B%0A%20%20dialog.close%28%29%3B%0A%7D%0Athis.inspect%20%3D%20function%28%29%20%7B%0A%20%20if%20%28typeof%28inspectDOMDocument%29%20%3D%3D%20%22undefined%22%29%20%7B%0A%20%20%20%20custombuttons.alertBox%28this.label%2C%20%22DOM%20Inspector%20is%20not%20enabled%20or%20installed.%22%29%3B%0A%20%20%20%20return%3B%0A%20%20%7D%0A%20%20var%20id%20%3D%20dialog.document.getElementById%28%22tree%22%29.view.getCellText%28%0A%20%20%20%20dialog.document.getElementById%28%22tree%22%29.view.selection.currentIndex%2C%0A%20%20%20%20dialog.document.getElementById%28%22tree%22%29.columns.getColumnAt%280%29%29%3B%0A%20%20inspectDOMNode%28document.getElementById%28id%29%29%3B%0A%20%20dialog.close%28%29%3B%0A%7D%0Athis.setAttribute%28%22onclick%22%2C%20%22custombuttons.gQuot.mHandler%28event%2C%20this%29%22%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

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

Выделить код

Код:

var data = <window title={this.label} onload={'opener.document.getElementById("' + this.id + '").load()'}
  xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
    <keyset>
      <key keycode="VK_ESCAPE" oncommand="close()"/>
    </keyset>
    <vbox flex="1">
      <tree id="tree" hidecolumnpicker="true" seltype="single" flex="1">
        <treecols>
          <treecol id="firstColumn" label="Id" width="200" sortDirection="ascending"
            onclick={'opener.document.getElementById("' + this.id + '").reorder(this)'}/>
          <treecol id="secondColumn" label="Image &amp; Label" flex="1" sortDirection="ascending"
            onclick={'opener.document.getElementById("' + this.id + '").reorder(this)'}/>
        </treecols>
        <treechildren id="treechildren"/>
      </tree>
      <separator class="thin"/>
      <hbox>
        <button label="Edit" oncommand={'opener.document.getElementById("' + this.id + '").edit()'}/>
        <button label="Delete" oncommand={'opener.document.getElementById("' + this.id + '").remove()'}/>
        <button label="Attributes" oncommand={'opener.document.getElementById("' + this.id + '").attr()'}/>
        <button label="Properties" oncommand={'opener.document.getElementById("' + this.id + '").prop()'}/>
        <button label="URI" oncommand={'opener.document.getElementById("' + this.id + '").link()'}/>
        <button label="DOMi" oncommand={'opener.document.getElementById("' + this.id + '").inspect()'}/>
      </hbox>
    </vbox>
</window>;
var bool = XML.prettyPrinting;
XML.prettyPrinting = false;
data = '<?xml version="1.0"?><?xml-stylesheet href="chrome://global/skin/" type="text/css"?>' + data.toXMLString();
XML.prettyPrinting = bool;
var dialog;
function getImage(s) {
  if (s == "custombuttons-stdicon-1") return "chrome://custombuttons/skin/button.png";
  if (s == "custombuttons-stdicon-2") return "chrome://custombuttons/skin/stdicons/rbutton.png";
  if (s == "custombuttons-stdicon-3") return "chrome://custombuttons/skin/stdicons/gbutton.png";
  if (s == "custombuttons-stdicon-4") return "chrome://custombuttons/skin/stdicons/bbutton.png";
  return "http://forum.mozilla-russia.org/uploaded/custombuttons_button.png";
}
function openTab(arr) {
  for (var i = 0; i < arr.length; i++) {
    var converter = Components.classes["@mozilla.org/intl/scriptableunicodeconverter"].
      createInstance(Components.interfaces.nsIScriptableUnicodeConverter);
    converter.charset = "UTF-8";
    arr[i] = converter.ConvertFromUnicode(arr[i]);
    arr[i] = arr[i].replace(/&/g, "&amp;");
    arr[i] = arr[i].replace(/>/g, "&gt;");
    arr[i] = arr[i].replace(/</g, "&lt;");
    arr[i] = arr[i].replace(/"/g, "&quot;");
    arr[i] = arr[i].replace(/'/g, "&apos;");
  }
  var data = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">';
  data += "<html><head><title>" + arr[1] + "</title>";
  data += '<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">';
  data += "</head><body><pre>" + arr.join("\n\n") + "</pre></body></html>";
  var info = Components.classes["@mozilla.org/xre/app-info;1"].
    getService(Components.interfaces.nsIXULAppInfo);
  if (info.name == "Firefox" || info.name == "SeaMonkey") {
    gBrowser.addTab("data:text/html;charset=utf-8;base64," + btoa(data));
  }
  if (info.name == "Thunderbird") {
    openContentTab("data:text/html;charset=utf-8;base64," + btoa(data));
  }
}
this.leftclick = function(event) {
  var url = "data:application/vnd.mozilla.xul+xml;text/plain," + data;
  var feature = "chrome,centerscreen,width=600,height=200,dialog=no";
  dialog = window.openDialog(url, "", feature);
}
this.load = function() {
  var nodeList = document.getElementsByTagName("toolbarbutton");
  var children = dialog.document.getElementById("treechildren");
  for (var i = 0; i < nodeList.length; i++) {
    if (nodeList[i].id.search("custombuttons-button") == 0) {
      var item = document.createElement("treeitem");
      var row = document.createElement("treerow");
      var cell = document.createElement("treecell");
      cell.setAttribute("label", nodeList[i].id);
      row.appendChild(cell);
      var cell = document.createElement("treecell");
      cell.setAttribute("src", nodeList[i].image || getImage(nodeList[i].cbStdIcon));
      cell.setAttribute("label", String.fromCharCode(32, 32) + nodeList[i].label);
      row.appendChild(cell);
      item.appendChild(row);
      children.appendChild(item);
    }
  }
  dialog.document.getElementById("tree").focus();
  dialog.document.getElementById("tree").view.selection.select(0);
}
this.reorder = function(node) {
  var nodeList = document.getElementsByTagName("toolbarbutton");
  var orderArr = new Array();
  for (var i = 0; i < nodeList.length; i++) {
    if (nodeList[i].id.search("custombuttons-button") == 0) {
      var item = document.createElement("treeitem");
      var row = document.createElement("treerow");
      var cell = document.createElement("treecell");
      cell.setAttribute("label", nodeList[i].id);
      row.appendChild(cell);
      var cell = document.createElement("treecell");
      cell.setAttribute("src", nodeList[i].image || getImage(nodeList[i].cbStdIcon));
      cell.setAttribute("label", String.fromCharCode(32, 32) + nodeList[i].label);
      row.appendChild(cell);
      item.appendChild(row);
      orderArr.push([nodeList[i].id.substring(20), nodeList[i].label, item]);
    }
  }
  var id = node.getAttribute("id");
  var sortDirection = node.getAttribute("sortDirection");
  if (id == "firstColumn" && sortDirection == "ascending") orderArr.sort(function(a, b) { return a[0] - b[0] });
  if (id == "firstColumn" && sortDirection == "descending") orderArr.sort(function(a, b) { return b[0] - a[0] });
  if (id == "secondColumn" && sortDirection == "ascending") orderArr.sort(function(a, b) { return a[1] > b[1] });
  if (id == "secondColumn" && sortDirection == "descending") orderArr.sort(function(a, b) { return a[1] < b[1] });
  node.setAttribute("sortDirection", sortDirection == "descending" ? "ascending" : "descending");
  var children = dialog.document.getElementById("treechildren");
  for (var i = 0; i < children.childNodes.length; i++) {
    children.appendChild(orderArr[i][2]);
    children.removeChild(children.firstChild);
  }
  dialog.document.getElementById("tree").focus();
  dialog.document.getElementById("tree").view.selection.select(0);
}
this.edit = function() {
  var id = dialog.document.getElementById("tree").view.getCellText(
    dialog.document.getElementById("tree").view.selection.currentIndex,
    dialog.document.getElementById("tree").columns.getColumnAt(0));
  custombuttons.editButton(document.getElementById(id));
  dialog.close();
}
this.remove = function() {
  var id = dialog.document.getElementById("tree").view.getCellText(
    dialog.document.getElementById("tree").view.selection.currentIndex,
    dialog.document.getElementById("tree").columns.getColumnAt(0));
  custombuttons.removeButton(document.getElementById(id));
  dialog.close();
}
this.attr = function() {
  var id = dialog.document.getElementById("tree").view.getCellText(
    dialog.document.getElementById("tree").view.selection.currentIndex,
    dialog.document.getElementById("tree").columns.getColumnAt(0));
  var node = document.getElementById(id);
  var out = new Array();
  out.push('windowtype="' + document.documentElement.getAttribute("windowtype") + '" id="' + id + '"');
  out.push("Attributes");
  for (var i = 0; i < node.attributes.length; i++) {
    if (node.attributes[i].nodeName == "cb-oncommand" ||
        node.attributes[i].nodeName == "cb-init"      ||
        node.attributes[i].nodeName == "Help") {
      out.push(node.attributes[i].nodeName + " " + typeof node.attributes[i].nodeValue + "\n" + "[omitted]");
    } else {
      out.push(node.attributes[i].nodeName + " " + typeof node.attributes[i].nodeValue + "\n" + node.attributes[i].nodeValue);
    }
  }
  openTab(out);
  dialog.close();
}
this.prop = function() {
  var id = dialog.document.getElementById("tree").view.getCellText(
    dialog.document.getElementById("tree").view.selection.currentIndex,
    dialog.document.getElementById("tree").columns.getColumnAt(0));
  var node = document.getElementById(id);
  var out = new Array();
  out.push('windowtype="' + document.documentElement.getAttribute("windowtype") + '" id="' + id + '"');
  out.push("Properties");
  for (var i in node) {
    if (i == "cbCommand"  ||
        i == "cbInitCode" ||
        i == "Help"       ||
        i == "URI") {
      out.push(i + " " + typeof node[i] + "\n" + "[omitted]");
    } else {
      out.push(i + " " + typeof node[i] + "\n" + node[i]);
    }
  }
  openTab(out);
  dialog.close();
}
this.link = function() {
  var id = dialog.document.getElementById("tree").view.getCellText(
    dialog.document.getElementById("tree").view.selection.currentIndex,
    dialog.document.getElementById("tree").columns.getColumnAt(0));
  var out = new Array();
  out.push('windowtype="' + document.documentElement.getAttribute("windowtype") + '" id="' + id + '"');
  out.push("URI");
  out.push(unescape(document.getElementById(id).URI));
  openTab(out);
  dialog.close();
}
this.inspect = function() {
  if (typeof(inspectDOMDocument) == "undefined") {
    custombuttons.alertBox(this.label, "DOM Inspector is not enabled or installed.");
    return;
  }
  var id = dialog.document.getElementById("tree").view.getCellText(
    dialog.document.getElementById("tree").view.selection.currentIndex,
    dialog.document.getElementById("tree").columns.getColumnAt(0));
  inspectDOMNode(document.getElementById(id));
  dialog.close();
}
this.setAttribute("onclick", "custombuttons.gQuot.mHandler(event, this)");

Button Archive TIDY test(Firefox)
Аналог кнопки ExpImpCB(Firefox) (экспорт-импорт кнопок)
Предназначение - архивация кнопок в файл html, бекап.
Отличия:
- кнопка работает во всех версиях браузера
- с помощью чек-боксов в окне предварительного просмотра списка кнопок, можно выбрать состав архива
- кнопки неактивные и кнопки-«дубли» не сохраняются («дубли» можно добавить, неактивные - нет)
- кнопка «инспектирует» на старте все кнопки и предлагает во всех тех кнопках, которые не имеют собственной иконки, поменять «стандартную» на уникальную, после этого(замены) кнопка меняет цвет с красной на зеленую и готова к архивации...

авторы: squeaky, SCClockDr
коррекция отображения кириллицы: LouCypher

Код кнопки

Код

Выделить код

Код:

// See the initialise tab for user options



/* Using the Button Archive List button
   ====================================

    Click on any item to toggle it from:-

    Show button (green background)
    
    to
    
    Don't show button (red background)
    
    Once done, click on the "See final list" button at the 
    bottom of the menu to check your list before posting.


    In the (final) check list popup you can return to the edit list or
    copy your final list to the clipboard using the buttons at
    the bottom of the list.
*/



  this.togglecheck(event);

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

Примечание. Подсказка об особенностях кнопки - здесь.

Два аналога кнопки Bookmarks | Manager | Add для новых версий Фокса.

My Bookmarks(Firefox 3.6++)

ЛКМ = открыть Менеджер закладок
СКМ = открыть закладки в боковой панели
ПКМ = добавить все вкладки в закладки

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

Выделить код

Код:

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%3EMy%20Bookmarks%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+rsA2fq7ANn6uwDZ+rsA2fq7ANn6uwDZ+rsA2fq7ANn6uwDZ+rsA2fq7ANn6uwDZ+rsA2fq7ANkAAAAA+rMA2fx7MP/8fjD//H4w//x+MP/8fjD//H4w//x+MP/8fjD//H4w//x+MP/8fjD//H4w//x+MP/8ezD/+rMA2fqnANn8di3/+rYt//q2Lf/6ti3/+rYt//q2Lf/6ti3/+rYt//q2Lf/6ti3/+rYt//q2Lf/6ti3//HYt//qnANn6ngDZ/HEr//qqKv/6qir//LtR//y7Uf/6qir/+qoq//qqKv/6qir//LtR//y7Uf/6qir/+qoq//xxK//6ngDZ/JcA2f9rJv/8nyb//J8m//yrQv//+vL//MV3//yfJv/8nyb//MV3///68v/8q0L//J8m//yfJv//ayb//JcA2fyLANn/YiT//Jcj//yXI//8lyP//+vW////////37r//9+6////////69b//Jcj//yXI//8lyP//2Ik//yLANn8ggDZ/1of//yKHv/8ih7//Ioe//y9gf///////////////////////L2B//yKHv/8ih7//Ioe//9aH//8ggDZ/HoA2f9VHP/8gRz//IEc//yBHP//x5z////////////////////////HnP/8gRz//IEc//yBHP//VRz//HoA2fxtANn/SRf//HMX//x8Jv//3cf//////////////////////////////////93H//x8Jv/8cxf//0kX//xtANn8ZQDZ/0MU//x9Mv//0rj//9vE///bxP//5NT/////////////5NT//9vE///bxP//0rj//H0y//9DFP/8ZQDZ/FgA2f89Ev/8YBL//GAS//xgEv/8YBL//HQw/////////////HQw//xgEv/8YBL//GAS//xgEv//PRL//FgA2f9RANn/NQ3//1cP//9XD///Vw///1cP//9XD///39H//9/R//9XD///Vw///1cP//9XD///Vw///zUN//9RANn/SADZ/y8K//9LCv//Swr//0sK//9LCv//Swr//5h1//+Ydf//Swr//0sK//9LCv//Swr//0sK//8vCv//SADZ/zwA2f8pCP//QQj//0EI//9BCP//QQj//0EI//9VJv//WSb//0EI//9BCP//QQj//0EI//9BCP//KQj//zwA2f8zANn/HAP//yAD//8gA///IAP//yAD//8gA///IAP//yAD//8gA///IAP//yAD//8gA///IAP//xwD//8zANkAAAAA/yoA2f8qANn/KgDZ/yoA2f8qANn/KgDZ/yoA2f8qANn/KgDZ/yoA2f8qANn/KgDZ/yoA2f8qANkAAAAAgAGsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBgAGsQQ%3D%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bthis.tooltipText%20%3D%20%22L%3DBookmarks%20Manager%20%7C%20M%3DBookmarks%20%7C%20R%3DAll%20Tabs%20to%20Bookmarks%22%3B%0A%0Athis.%20onclick%20%3D%20function%20%28event%29%0A%7B%20%20%20if%20%28event.%20button%20%3D%3D%200%29%20PlacesCommandHook.showPlacesOrganizer%28%27AllBookmarks%27%29%3B%0A%20%20%20%20if%20%28event.%20button%20%3D%3D%201%29%20toggleSidebar%28%27viewBookmarksSidebar%27%29%3B%0A%20%20%20%20if%20%28event.%20button%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%29%20%7B%20%0A%20%20%20%20%20%20%20%20event.preventDefault%28%29%3B%20event.stopPropagation%28%29%3B%20document.getElementById%28%22Browser%3ABookmarkAllTabs%22%29.doCommand%28%29%3B%20%7D%3B%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

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

Выделить код

Код:

this.tooltipText = "L=Bookmarks Manager | M=Bookmarks | R=All Tabs to Bookmarks";

this. onclick = function (event)
{   if (event. button == 0) PlacesCommandHook.showPlacesOrganizer('AllBookmarks');
    if (event. button == 1) toggleSidebar('viewBookmarksSidebar');
    if (event. button == 2 && !event.ctrlKey && !event.shiftKey && !event.altKey && !event.metaKey) { 
        event.preventDefault(); event.stopPropagation(); document.getElementById("Browser:BookmarkAllTabs").doCommand(); };
};

My Bookmarks menu(Firefox 3.6++)

Кнопка-меню с теми же функциями, что и кнопка выше.

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

Выделить код

Код:

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%3EMy%20Bookmarks%20menu%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlWNA/5RiP/+UYT7/k2A9/5NfPP+SXzz/kl47/5FdOv+QXDn/kFw4/49bN/+PWjb/AAAAAAAAAAAAAAAAAAAAAJVjQf/au5v/2bmY/9i2lf/WtJL/1bKP/9SvjP/TrYn/0qqG/9Gog//QpoD/j1s3/wAAAAAAAAAAAAAAAAAAAACWZEH/272d/5x9W//Kn3P/yJxu/8eYav/FlWb/w5Jh/8KOXf/Ai1n/0KiD/5BbOP9RNiL/AAAAAAAAAAAAAAAAlmRC/9y/n/+ggmD/g262/8mfcv9yWLD/xphp/8WUZf/DkWH/wY5c/9Gqhf+QXDj/UDcj/wAAAAAAAAAAAAAAAJdlQ//dwaL/o4Vk/0ZC8/9bTNL/KSDs/8eabf/Gl2j/xJRk/8OQX//Sq4f/kFw5/1E3JP8AAAAAAAAAAAAAAACXZkT/3cOk/6aJaf9KRvT/bW31/ywk7f/JnXD/x5ps/8aWZ//Ek2P/062J/5FdOv9RNyT/AAAAAAAAAAAAAAAAmGZE/97Fpv+qjmz/TUr1/6Kp+v8wKO7/yqB0/8idb//HmWv/xZZn/9SvjP+RXjv/UTgk/wAAAAAAAAAAAAAAAJhnRf/fxqj/rZJx/1FP9v+lrPr/NC3v/8ujd//Kn3P/yJxu/8eYav/VsY7/kl47/1I4Jf8AAAAAAAAAAAAAAACZaEb/4Mir/7CWdf9VU/b/qK/6/zcx8P/Npnv/y6J2/8mfcv/Im27/1rOQ/5JfPP9SOSX/AAAAAAAAAAAAAAAAmWhG/+HKrf+0mnr/WFf3/6qy+v87NfH/zqh+/8ylev/LoXb/yZ5x/9e1kv+TYD3/Ujkl/wAAAAAAAAAAAAAAAJppR//izK//uJ9+/1xc+P+ttfv/Pzrx//Xt5P/17eT/9e3k/8qhdP/XtpX/k2A9/1M5Jv8AAAAAAAAAAAAAAACaaUj/486x/7ujg/9gYPn/sLn7/0I+8v/RroX/z6qB/82nfP/Mo3j/2LiX/5RhPv9TOib/AAAAAAAAAAAAAAAAm2pJ/+TQtP/ItZz/Y2T6/7O8+/9GQvP/3sSl/93Bov/cv5//2ryc/9m6mf+UYT//Uzom/wAAAAAAAAAAAAAAAJtrSf/l0bb/mmlI/2dp+/+2v/v/Skb0/5hmRP+XZUP/lmRC/5ZkQf+VY0D/lWJA/1Q6J/8AAAAAAAAAAAAAAACcbEr/m2pJ/7KOdP9rbfv/XFz4/01K9f/y7en/9O/r//Xw7f/28vD/9/Tx//j18/9UOyf/AAAAAAAAAAAAAAAAoWtR/5trSv+bakn/mmpI/5ppR/+ZaEb/mWdF/5hmRf+XZkT/l2VD/5ZkQv+WY0H/lGI//wAAAAAAAAAAgAesQYAHrEGAA6xBgAOsQYADrEGAA6xBgAOsQYADrEGAA6xBgAOsQYADrEGAA6xBgAOsQYADrEGAA6xBgAOsQQ%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%20menu%20%3D%20%3Cmenupopup%20xmlns%3D%22http%3A//www.mozilla.org/keymaster/gatekeeper/there.is.only.xul%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%0A%0A%20%20%20%20%20%3Cmenuitem%20label%3D%22Bookmarks%20Manager%22%0A%20%20%20%20%20%20%20class%3D%22menuitem-iconic%22%20%0A%20%20%20%20%20%20%20image%3D%22data%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlWNA/5RiP/+UYT7/k2A9/5NfPP+SXzz/kl47/5FdOv+QXDn/kFw4/49bN/+PWjb/AAAAAAAAAAAAAAAAAAAAAJVjQf/au5v/2bmY/9i2lf/WtJL/1bKP/9SvjP/TrYn/0qqG/9Gog//QpoD/j1s3/wAAAAAAAAAAAAAAAAAAAACWZEH/272d/5x9W//Kn3P/yJxu/8eYav/FlWb/w5Jh/8KOXf/Ai1n/0KiD/5BbOP9RNiL/AAAAAAAAAAAAAAAAlmRC/9y/n/+ggmD/g262/8mfcv9yWLD/xphp/8WUZf/DkWH/wY5c/9Gqhf+QXDj/UDcj/wAAAAAAAAAAAAAAAJdlQ//dwaL/o4Vk/0ZC8/9bTNL/KSDs/8eabf/Gl2j/xJRk/8OQX//Sq4f/kFw5/1E3JP8AAAAAAAAAAAAAAACXZkT/3cOk/6aJaf9KRvT/bW31/ywk7f/JnXD/x5ps/8aWZ//Ek2P/062J/5FdOv9RNyT/AAAAAAAAAAAAAAAAmGZE/97Fpv+qjmz/TUr1/6Kp+v8wKO7/yqB0/8idb//HmWv/xZZn/9SvjP+RXjv/UTgk/wAAAAAAAAAAAAAAAJhnRf/fxqj/rZJx/1FP9v+lrPr/NC3v/8ujd//Kn3P/yJxu/8eYav/VsY7/kl47/1I4Jf8AAAAAAAAAAAAAAACZaEb/4Mir/7CWdf9VU/b/qK/6/zcx8P/Npnv/y6J2/8mfcv/Im27/1rOQ/5JfPP9SOSX/AAAAAAAAAAAAAAAAmWhG/+HKrf+0mnr/WFf3/6qy+v87NfH/zqh+/8ylev/LoXb/yZ5x/9e1kv+TYD3/Ujkl/wAAAAAAAAAAAAAAAJppR//izK//uJ9+/1xc+P+ttfv/Pzrx//Xt5P/17eT/9e3k/8qhdP/XtpX/k2A9/1M5Jv8AAAAAAAAAAAAAAACaaUj/486x/7ujg/9gYPn/sLn7/0I+8v/RroX/z6qB/82nfP/Mo3j/2LiX/5RhPv9TOib/AAAAAAAAAAAAAAAAm2pJ/+TQtP/ItZz/Y2T6/7O8+/9GQvP/3sSl/93Bov/cv5//2ryc/9m6mf+UYT//Uzom/wAAAAAAAAAAAAAAAJtrSf/l0bb/mmlI/2dp+/+2v/v/Skb0/5hmRP+XZUP/lmRC/5ZkQf+VY0D/lWJA/1Q6J/8AAAAAAAAAAAAAAACcbEr/m2pJ/7KOdP9rbfv/XFz4/01K9f/y7en/9O/r//Xw7f/28vD/9/Tx//j18/9UOyf/AAAAAAAAAAAAAAAAoWtR/5trSv+bakn/mmpI/5ppR/+ZaEb/mWdF/5hmRf+XZkT/l2VD/5ZkQv+WY0H/lGI//wAAAAAAAAAAgAesQYAHrEGAA6xBgAOsQYADrEGAA6xBgAOsQYADrEGAA6xBgAOsQYADrEGAA6xBgAOsQYADrEGAA6xBgAOsQQ%3D%3D%22%0A%20%20%20%20%20%20%20onclick%3D%7B%22document.getElementById%28%27%22%20+%20this.id%20+%20%22%27%29.bookmarksManager%28event%29%22%7D/%3E%20%0A%0A%20%20%20%20%20%3Cmenuitem%20label%3D%22Open%20Bookmarks%20In%20Side%20Bar%22%0A%20%20%20%20%20%20%20class%3D%22menuitem-iconic%22%0A%20%20%20%20%20%20%20image%3D%22data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAK8AAACvABQqw0mAAAABZ0RVh0Q3JlYXRpb24gVGltZQAwOC8xMS8wNdiEE10AAAAldEVYdFNvZnR3YXJlAE1hY3JvbWVkaWEgRmlyZXdvcmtzIE1YIDIwMDSHdqzPAAABq0lEQVQ4y8VTSy8DURS+RTcWaql2/gVha2svaVKCnYhEhEhpLSRdSFQqmnos/AASsWHjuakmhA190ZY2rWkZ7VSNIp97brWmiA2JSb7M5HyPc05yhgFgvwH7s4Beq3u6z+YO9NkW8DPcAdJWBPCnutviCkViMTwXcgKFJ6UIVcGTmoWqZgQuryIgLXm0ATXmsXm8POchy0mkpTBSUghKJoasfI2MHIV8G0b2PsZDZJCWPNoAvWnUidcXFZn7BI6DadylwtwY5sYLyKkgUjc+SIkzqI8ySEueioDOYQeMDoPAjieCnJKE58SDrYNdbO5v48C7J7hGR/33AUT2H/UIUTTq5534FLcBvoofknSORPwUZc2MgUy1wkv7EDGnWDEYN5WnaHDUVcDIO1OdNM7shAgRk1DxEOsYy3dh6nEAy7BjhcMHL06xh32sYg0uUSOONKQlD3lZR79dfGwU3Fh8sJUnoF0rwWuz9VjKTwotadrNI2L/JgIVLMdDxVTGmlkVa3lHG711etZC3PiHplXotGdZ6s6Jxs8ny+s6LV/SfL1tDfnt7X/i2b//jW8TQI5LK3NhrAAAAABJRU5ErkJggg%3D%3D%22%0A%20%20%20%20%20%20%20onclick%3D%7B%22document.getElementById%28%27%22%20+%20this.id%20+%20%22%27%29.openBookmarksSideBar%28event%29%22%7D/%3E%20%20%20%20%20%20%20%20%20%0A%20%0A%20%20%20%20%20%3Cmenuitem%20label%3D%22Bookmark%20All%20Tabs%22%0A%20%20%20%20%20%20class%3D%22menuitem-iconic%22%0A%20%20%20%20%20%20image%3D%22data%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMq0H/Ea1i/x2ztf8ds7X/HbO1/xm1tf8ZsLL/GYSt/xoco/8YHaP/Ghyi/zc/bP8wcSz/gX9d/3ROMtD/+v8BTduD/xitSv8wkXD/Z9vm/2bb4/9i2uP/WdXe/yaztf81bZn/Z2Hb/1VxgP8TlRL/D6gN/xOVEv+Rm27/VDsnxlTeif8YrUr/GnhJ/zfK3v8wytv/NdDe/2DY4P8ms7X/JG2E/3GUjP8hrCL/BtMF/wDbAP8G0wX/Iawi/4Sec/9X3o//HK1K/xpwOf8+yd7/O8nb/z3M2/9l1OD/KLi4/yR5ff8/aVv/Hr0f/wLnBP8A7wD/AucE/x69H/9RllP/Xd6T/x2tTf8acDn/SMrg/0DJ3v9DzN7/adXg/yy1uP8keX3/cJaL/y7CLv8f+R//DPsM/x/5H/8uwi7/n4Rk/2Tel/8drU3/GnA5/1PL4P9Lyt7/Tsje/3DV4P8stbj/JHl9/11M1P9XiXn/bvV7/0X5Rv9u9Xv/d8iD/1hALP9p4J//Ia1N/xpwOf9YzOD/U87g/1PL4P911+b/Lri4/yR5ff9kU9b/V4l5/271e/9F+Ub/bvV7/3fIg/9XPyv/bOCg/yGwUf8acDn/YtLj/1/P4/9f0eP/eNXj/y+4uv8keX3/a1zb/1eJef9u9Xv/RflG/271e/93yIP/Vj0p/3TjpP8jsFL/GnA5/2fH1v9lytv/aNHj/37Z5v8ytbj/JHl9/3Nk2f9yjoX/V3R+/1J2gf+525b/wLuN/1Y9Kf9/46r/JLJT/xpwOf/c8/f/2vH1/2zP4P+J3ej/Mri6/yR5ff95atn/kIfg/y4wq/8iH2n/1reV/5hoRv9WPSn/g+au/yeyVv8acDn/d8rZ/3LQ4P911eb/jt3o/zS4uv8keX3/gHLb/5OK4/8wMqv/Ih9p/9i6mv+YaUf/Vj0p/4rms/8pslf/GnA5/6Ti7f+i4Ov/mdvo/5Xd6P82uLr/JHl9/6OX5v+ZkOD/MzWr/yIfaf/avp//mWpJ/1Y9Kf8ktVT/HK1M/xpwOf9IvsL/SL7C/0jAwv8yuLr/KLW4/yR5ff9DRbX/LzGt/ycpqP8iH2n/m2pI/5VjQP9WPSn/4evk//Dw8P8acDn/0+fo/8/n6P/M5eb/4evq//Dw8P8keX3/ysrg/+Hi6//w8PD/Ih9p/+vn5f/v7+//Vj0p/yq1Vv8esE//G6FI/0y+wv9Lu7//SMDC/za6uv8tuLr/Kamr/0VHtf80OK3/KSur/yUnnP+cbEv/lmVC/4dbO/8hsFH/IKtP/ySfXP8yuLr/Mri6/y+4uv8vuLr/LbO1/y6OpP8sL6v/LC6o/yoso/86MYn/l2ZE/5JjQv+DXD3eAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQ%3D%3D%22%0A%20%20%20%20%20%20onclick%3D%7B%22document.getElementById%28%27%22%20+%20this.id%20+%20%22%27%29.bookmarkAllTabs%28event%29%22%7D/%3E%20%0A%0A%3C/menupopup%3E%3B%0A%0Avar%20bool%20%3D%20XML.prettyPrinting%3B%0AXML.prettyPrinting%20%3D%20false%3B%0Avar%20el%20%3D%20new%20DOMParser%28%29.parseFromString%28menu.toXMLString%28%29%2C%20%22application/xml%22%29.documentElement%3B%0AXML.prettyPrinting%20%3D%20bool%3B%0Athis.appendChild%28el%29%3B%0Athis.type%20%3D%20%22menu%22%3B%0Athis.orient%20%3D%20%22horizontal%22%3B%20%20%20%20%20%20%20%20%20%20%20%0A%0Athis.bookmarksManager%20%3D%20function%28event%29%20%7B%20PlacesCommandHook.showPlacesOrganizer%28%27AllBookmarks%27%29%3B%20%7D%3B%0Athis.openBookmarksSideBar%20%3D%20function%28event%29%20%7B%20toggleSidebar%28%27viewBookmarksSidebar%27%29%3B%20%7D%3B%0Athis.bookmarkAllTabs%20%3D%20function%28event%29%20%7B%20document.getElementById%28%22Browser%3ABookmarkAllTabs%22%29.doCommand%28%29%3B%20%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

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

Выделить код

Код:

var menu = <menupopup xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
                      xmlns:cb="http://xsms.nm.ru/custombuttons/">


     <menuitem label="Bookmarks Manager"
       class="menuitem-iconic" 
       image="data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlWNA/5RiP/+UYT7/k2A9/5NfPP+SXzz/kl47/5FdOv+QXDn/kFw4/49bN/+PWjb/AAAAAAAAAAAAAAAAAAAAAJVjQf/au5v/2bmY/9i2lf/WtJL/1bKP/9SvjP/TrYn/0qqG/9Gog//QpoD/j1s3/wAAAAAAAAAAAAAAAAAAAACWZEH/272d/5x9W//Kn3P/yJxu/8eYav/FlWb/w5Jh/8KOXf/Ai1n/0KiD/5BbOP9RNiL/AAAAAAAAAAAAAAAAlmRC/9y/n/+ggmD/g262/8mfcv9yWLD/xphp/8WUZf/DkWH/wY5c/9Gqhf+QXDj/UDcj/wAAAAAAAAAAAAAAAJdlQ//dwaL/o4Vk/0ZC8/9bTNL/KSDs/8eabf/Gl2j/xJRk/8OQX//Sq4f/kFw5/1E3JP8AAAAAAAAAAAAAAACXZkT/3cOk/6aJaf9KRvT/bW31/ywk7f/JnXD/x5ps/8aWZ//Ek2P/062J/5FdOv9RNyT/AAAAAAAAAAAAAAAAmGZE/97Fpv+qjmz/TUr1/6Kp+v8wKO7/yqB0/8idb//HmWv/xZZn/9SvjP+RXjv/UTgk/wAAAAAAAAAAAAAAAJhnRf/fxqj/rZJx/1FP9v+lrPr/NC3v/8ujd//Kn3P/yJxu/8eYav/VsY7/kl47/1I4Jf8AAAAAAAAAAAAAAACZaEb/4Mir/7CWdf9VU/b/qK/6/zcx8P/Npnv/y6J2/8mfcv/Im27/1rOQ/5JfPP9SOSX/AAAAAAAAAAAAAAAAmWhG/+HKrf+0mnr/WFf3/6qy+v87NfH/zqh+/8ylev/LoXb/yZ5x/9e1kv+TYD3/Ujkl/wAAAAAAAAAAAAAAAJppR//izK//uJ9+/1xc+P+ttfv/Pzrx//Xt5P/17eT/9e3k/8qhdP/XtpX/k2A9/1M5Jv8AAAAAAAAAAAAAAACaaUj/486x/7ujg/9gYPn/sLn7/0I+8v/RroX/z6qB/82nfP/Mo3j/2LiX/5RhPv9TOib/AAAAAAAAAAAAAAAAm2pJ/+TQtP/ItZz/Y2T6/7O8+/9GQvP/3sSl/93Bov/cv5//2ryc/9m6mf+UYT//Uzom/wAAAAAAAAAAAAAAAJtrSf/l0bb/mmlI/2dp+/+2v/v/Skb0/5hmRP+XZUP/lmRC/5ZkQf+VY0D/lWJA/1Q6J/8AAAAAAAAAAAAAAACcbEr/m2pJ/7KOdP9rbfv/XFz4/01K9f/y7en/9O/r//Xw7f/28vD/9/Tx//j18/9UOyf/AAAAAAAAAAAAAAAAoWtR/5trSv+bakn/mmpI/5ppR/+ZaEb/mWdF/5hmRf+XZkT/l2VD/5ZkQv+WY0H/lGI//wAAAAAAAAAAgAesQYAHrEGAA6xBgAOsQYADrEGAA6xBgAOsQYADrEGAA6xBgAOsQYADrEGAA6xBgAOsQYADrEGAA6xBgAOsQQ=="
       onclick={"document.getElementById('" + this.id + "').bookmarksManager(event)"}/> 

     <menuitem label="Open Bookmarks In Side Bar"
       class="menuitem-iconic"
       image="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAK8AAACvABQqw0mAAAABZ0RVh0Q3JlYXRpb24gVGltZQAwOC8xMS8wNdiEE10AAAAldEVYdFNvZnR3YXJlAE1hY3JvbWVkaWEgRmlyZXdvcmtzIE1YIDIwMDSHdqzPAAABq0lEQVQ4y8VTSy8DURS+RTcWaql2/gVha2svaVKCnYhEhEhpLSRdSFQqmnos/AASsWHjuakmhA190ZY2rWkZ7VSNIp97brWmiA2JSb7M5HyPc05yhgFgvwH7s4Beq3u6z+YO9NkW8DPcAdJWBPCnutviCkViMTwXcgKFJ6UIVcGTmoWqZgQuryIgLXm0ATXmsXm8POchy0mkpTBSUghKJoasfI2MHIV8G0b2PsZDZJCWPNoAvWnUidcXFZn7BI6DadylwtwY5sYLyKkgUjc+SIkzqI8ySEueioDOYQeMDoPAjieCnJKE58SDrYNdbO5v48C7J7hGR/33AUT2H/UIUTTq5534FLcBvoofknSORPwUZc2MgUy1wkv7EDGnWDEYN5WnaHDUVcDIO1OdNM7shAgRk1DxEOsYy3dh6nEAy7BjhcMHL06xh32sYg0uUSOONKQlD3lZR79dfGwU3Fh8sJUnoF0rwWuz9VjKTwotadrNI2L/JgIVLMdDxVTGmlkVa3lHG711etZC3PiHplXotGdZ6s6Jxs8ny+s6LV/SfL1tDfnt7X/i2b//jW8TQI5LK3NhrAAAAABJRU5ErkJggg=="
       onclick={"document.getElementById('" + this.id + "').openBookmarksSideBar(event)"}/>         
 
     <menuitem label="Bookmark All Tabs"
      class="menuitem-iconic"
      image="data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMq0H/Ea1i/x2ztf8ds7X/HbO1/xm1tf8ZsLL/GYSt/xoco/8YHaP/Ghyi/zc/bP8wcSz/gX9d/3ROMtD/+v8BTduD/xitSv8wkXD/Z9vm/2bb4/9i2uP/WdXe/yaztf81bZn/Z2Hb/1VxgP8TlRL/D6gN/xOVEv+Rm27/VDsnxlTeif8YrUr/GnhJ/zfK3v8wytv/NdDe/2DY4P8ms7X/JG2E/3GUjP8hrCL/BtMF/wDbAP8G0wX/Iawi/4Sec/9X3o//HK1K/xpwOf8+yd7/O8nb/z3M2/9l1OD/KLi4/yR5ff8/aVv/Hr0f/wLnBP8A7wD/AucE/x69H/9RllP/Xd6T/x2tTf8acDn/SMrg/0DJ3v9DzN7/adXg/yy1uP8keX3/cJaL/y7CLv8f+R//DPsM/x/5H/8uwi7/n4Rk/2Tel/8drU3/GnA5/1PL4P9Lyt7/Tsje/3DV4P8stbj/JHl9/11M1P9XiXn/bvV7/0X5Rv9u9Xv/d8iD/1hALP9p4J//Ia1N/xpwOf9YzOD/U87g/1PL4P911+b/Lri4/yR5ff9kU9b/V4l5/271e/9F+Ub/bvV7/3fIg/9XPyv/bOCg/yGwUf8acDn/YtLj/1/P4/9f0eP/eNXj/y+4uv8keX3/a1zb/1eJef9u9Xv/RflG/271e/93yIP/Vj0p/3TjpP8jsFL/GnA5/2fH1v9lytv/aNHj/37Z5v8ytbj/JHl9/3Nk2f9yjoX/V3R+/1J2gf+525b/wLuN/1Y9Kf9/46r/JLJT/xpwOf/c8/f/2vH1/2zP4P+J3ej/Mri6/yR5ff95atn/kIfg/y4wq/8iH2n/1reV/5hoRv9WPSn/g+au/yeyVv8acDn/d8rZ/3LQ4P911eb/jt3o/zS4uv8keX3/gHLb/5OK4/8wMqv/Ih9p/9i6mv+YaUf/Vj0p/4rms/8pslf/GnA5/6Ti7f+i4Ov/mdvo/5Xd6P82uLr/JHl9/6OX5v+ZkOD/MzWr/yIfaf/avp//mWpJ/1Y9Kf8ktVT/HK1M/xpwOf9IvsL/SL7C/0jAwv8yuLr/KLW4/yR5ff9DRbX/LzGt/ycpqP8iH2n/m2pI/5VjQP9WPSn/4evk//Dw8P8acDn/0+fo/8/n6P/M5eb/4evq//Dw8P8keX3/ysrg/+Hi6//w8PD/Ih9p/+vn5f/v7+//Vj0p/yq1Vv8esE//G6FI/0y+wv9Lu7//SMDC/za6uv8tuLr/Kamr/0VHtf80OK3/KSur/yUnnP+cbEv/lmVC/4dbO/8hsFH/IKtP/ySfXP8yuLr/Mri6/y+4uv8vuLr/LbO1/y6OpP8sL6v/LC6o/yoso/86MYn/l2ZE/5JjQv+DXD3eAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQ=="
      onclick={"document.getElementById('" + this.id + "').bookmarkAllTabs(event)"}/> 

</menupopup>;

var bool = XML.prettyPrinting;
XML.prettyPrinting = false;
var el = new DOMParser().parseFromString(menu.toXMLString(), "application/xml").documentElement;
XML.prettyPrinting = bool;
this.appendChild(el);
this.type = "menu";
this.orient = "horizontal";           

this.bookmarksManager = function(event) { PlacesCommandHook.showPlacesOrganizer('AllBookmarks'); };
this.openBookmarksSideBar = function(event) { toggleSidebar('viewBookmarksSidebar'); };
this.bookmarkAllTabs = function(event) { document.getElementById("Browser:BookmarkAllTabs").doCommand(); };


В кнопке использованы некоторые элементы кода и иконки из кнопки mrbunnylamakins.

Close this toolbar(Firefox) Скрыть панель (автонастраиваемая)

Аналог кнопки СкрытьПоказать панель
Кнопка не требует настройки, после установки кнопки нужно просто перетянуть ее на требуемую панель и панель будет всегда по умолчанию скрыта,
В кнопке отсутствует функция переключения «скрыть/показать», поэтому удобнее всего ее использовать на тех панелях, открытие которых будет нужно очень редко.
Показать панель можно будет или «галочкой» или другой кнопкой-переключателем, например,  - кнопкой переключения группы панелей ТoggleToolbars
Автор: squeaky

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

Выделить код

Код:

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%3EClose%20this%20toolbar%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/gif%3Bbase64%2CR0lGODlhDgAOAPcAAL0pAL0xEL05GL1CIcYpAMYxAMYxCMY5EMY5GMZjStY5ENZrUtZzWt4xAN5CGN5CId5KGN5KId5KKd5SId5SKd5SMec5AOc5COdCCOdCEOdKEOdKGOdKIedSGOdSIedSKedSMedaKedaMedaOedjMedjOedjQudjSudrSudrUudzUudzWud7Wu9CCO9SGO9SIe9aIe9aKe9zWu97Y++EY++Ea++Mc++Ue++chO+cjPetlPe1nPe1pfe9pfe9rffGtffGvffOvffOxvfWxvfWzv/Ovf/n3v/n5//v5//v7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////ywAAAAADgAOAAAIvwB12KixQkUKFChOmBhRQQKDGzpyDKzBgsWKFShMVBhQI8eNgQxWpDiBIgXDASxs3DjyI4UJjT6MnFxRowYQJUI0ClHCowKFASkqrtgJ5CaQCBF+nrho8KaSHxM4IB1gIoXBFEGUPP3QAUIEBCNOWN0Z5OaPDhsgHKhQ9QfOEiWy7uiQIUCEESqO+DBRgkQIHkY8YADgoMKIjCNKhAjhIQQGCwAURJDg0+eECBAwXGgAYIGAz6AFHDAQAACABAEBADs%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%0Aconst%20toolbar%20%3D%20document.getElementById%28this.parentNode.id%29%3B%0A%0Atoolbar.collapsed%20%3D%20true%3B%0A%0Atoolbar.setAttribute%28%22persist%22%2C%20%22collapsed%22%29%3B%0A%0A%0A%0A//%20MANY%20thanks%20to%20nicholas%20for%20help%20with%20this%20attribute%0Athis.setAttribute%28%22style%22%2C%20%22padding-bottom%3A%200px%20%21important%3B%20padding-left%3A%202px%20%21important%3B%20padding-right%3A%202px%20%21important%3B%20padding-top%3A%200px%20%21important%3B%22%29%3B%0A%0A%0Athis.thisbar%20%3D%20document.getElementById%28this.parentNode.id%29%3B%0A%0Avar%20checkcb%20%3D%20this.thisbar.id%0A%0A%20//%20alert%28%22thisbar%20%3D%20%22%20+%20this.thisbar.id%29%3B%0A%0A%20var%20rExp%20%3D%20/__customToolbar_/%3B%0A%0A%20%20if%28rExp.test%28checkcb%29%29%0A%20%20%7B%0A%20%20%20%20checkcb%20%3D%20checkcb.substring%2816%2C%20checkcb.length%29%3B%0A%20%20%7D%0A%20%20%20%20%0Athis.tooltipText%20%3D%20%22Close%20%22%20+%20checkcb%20+%20%22%20toolbar%22%3B%0A%0A%0A%0A%0A%0A%0A/*----------------------%20Button%20Code%20Block%20End%20-----------------------*/%0A%20%20%20%20%0A%20%20%20%20%0A%0Athis.setAttribute%28%22author%22%2C%22squeaky%22%29%3B%0Athis.setAttribute%28%22version%22%2C%2220080308.1.2%22%29%3B%0Athis.setAttribute%28%22homepage%22%2C%22http%3A//custombuttons2.com/forum/viewtopic.php%3Ff%3D35%26t%3D728%22%29%3B%0Athis.setAttribute%28%22dependency%22%2C%22FF2.0*%2CCB2%202.0.5*%22%29%3B%0Athis.setAttribute%28%22status%22%2C%22Complete%22%29%3B%0Athis.setAttribute%28%22public%22%2Ctrue%29%3B%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*Code*/%0A%0A//%20If%20you%20would%20like%20your%20browser%20to%20always%20start%20with%0A//%20this%20toolbar%20collapsed%3A-%0A//%20un%20comment%20the%20code%20in%20the%20initialisation%20tab%0A//%0A//%20Thanks%20to%20ithinc%20for%20the%20%22persist%22%20line.%0A%0Aconst%20toolbar%20%3D%20document.getElementById%28this.parentNode.id%29%3B%0A%0A%20%20toolbar.collapsed%20%3D%20true%3B%0A%0A%20%20toolbar.setAttribute%28%22persist%22%2C%20%22collapsed%22%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%0A/*%20+++-----------------------%20help%20information%20for%20this%20button%20-----------------------+++%20*/%0A%0ANo%20help%20developed%20for%20%0A%3Clabel%3E%20button%0Acustombuttons-button%3Cid%3E.%0A%0A%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

Код:

Выделить код

Код:

/*Code*/

// If you would like your browser to always start with
// this toolbar collapsed:-
// un comment the code in the initialisation tab
//
// Thanks to ithinc for the "persist" line.

const toolbar = document.getElementById(this.parentNode.id);

  toolbar.collapsed = true;

  toolbar.setAttribute("persist", "collapsed");

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

Выделить код

Код:

/*Initialization code*/


const toolbar = document.getElementById(this.parentNode.id);

toolbar.collapsed = true;

toolbar.setAttribute("persist", "collapsed");



// MANY thanks to nicholas for help with this attribute
this.setAttribute("style", "padding-bottom: 0px !important; padding-left: 2px !important; padding-right: 2px !important; padding-top: 0px !important;");


this.thisbar = document.getElementById(this.parentNode.id);

var checkcb = this.thisbar.id

 // alert("thisbar = " + this.thisbar.id);

 var rExp = /__customToolbar_/;

  if(rExp.test(checkcb))
  {
    checkcb = checkcb.substring(16, checkcb.length);
  }
    
this.tooltipText = "Close " + checkcb + " toolbar";






/*---------------------- Button Code Block End -----------------------*/
    
    

this.setAttribute("author","squeaky");
this.setAttribute("version","20080308.1.2");
this.setAttribute("homepage","http://custombuttons2.com/forum/viewtopic.php?f=35&t=728");
this.setAttribute("dependency","FF2.0*,CB2 2.0.5*");
this.setAttribute("status","Complete");
this.setAttribute("public",true);

Popap-Toolbar!(Firefox) - Всплывающая панель
Небольшая переделка оригинальной кнопки Popap-toolbar (доступно только через web.archive.org).
Позволяет отображать скрытую панель с кнопками (созданную пользователем) в компактном виде.
Название по-умолчанию для пользовательской панели: MButtons. Его можно изменить в коде кнопки (смотри внутри комментарий).

ЛКМ  =>  Показать / Скрыть панель
ПКМ  =>  Меню кнопки

После нажатия ЛКМ по элементам (кнопкам) всплывающей панели через 2сек произойдет ее автозакрытие.

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

Выделить код

Код:

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%3EPopap-Toolbar%21%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAABh0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjM2qefiJQAAAhdJREFUOE+tk01oE1EUhTN/eTN1pVgNQWJHKFm40apdmUmMXTQQEHGjkCyEoiuraE3sShCLIsUfsqzdKSqtVmgVqS5iKQQEuyiKNAu7KUImXcWYWuhwvHfMDKModuGFDx7vvXPueXeYUOg/lU0+zb/QEehh0XqVyBBKsHfzw4WTqOaPoJpL+RiKDLq0JXCxPP2q7Oi6vvbbfqjJ4uU+E8tHd/sYshQ0sCKRyLeb4zMIC533f0nR5M6uOB3zCRqc2qnXX5crGC5NIT80Ci2sz5CJ7qX7l4GVzWTW7j99i8K9KQzdmSQDsUHi45s1WJyde+cMl57j8t1nLpxC1cLffQMeGEcOQofeDL7S4LirD4n5jHGLPxVP+09s5tw1yREVokEsEAOEGvzWtN5D1IkuQgqe5foObG18mj7nrLy5hOpE3ske2r4uNOlMwGQHrVcHxwahCa1FazNoUlmaverYL47Bnkih9shCZbQHHUJepEsG4YutEQv9N/oR3RVtCSHYxK3Gl/nrsCdTsB8nUHuQwMdSL4yw7LTnUi+OFZEcSSJ+JY54MY50IQ1FUziJWwufX150ak+SqD1MYGX8MOau7WODpXaCLo5tnjXRXehG7HQMqqGCprDXMxjI9nauz9/aj/e3D7ribM82CFU6Txe09ltNSZVa0RNRyIL+kZ9i2TNQeWD8Zp1ic2cWK7L7fq946qakSBzbF/8A350C1KoJvKcAAAAASUVORK5CYII%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%20%0A//%20%u0412%u0432%u0435%u0441%u0442%u0438%20%u043D%u0430%u0437%u0432%u0430%u043D%u0438%u0435%20%u0442%u0443%u043B%u0431%u0430%u0440%u0430%0Avar%20popupToolbarName%20%3D%20%22MButtons%22%3B%0A%0Avar%20popupToolbarId%20%3D%20%22__customToolbar_%22%20+%20popupToolbarName.replace%28%22%20%22%2C%20%22_%22%29%3B%0Avar%20contextPopupId%20%3D%20%22popuptoolbar-contextpopup%22%3B%0A%20%0Athis.type%20%3D%20%22menu%22%3B%0Athis._init%20%3D%20function%28%29%20%7B%0A%20%20popupToolbarName%20%3D%20this.label%3B%0A%20%20popupId%20%3D%20popupToolbarName.replace%28%22%20%22%2C%20%22%22%29.toLowerCase%28%29%20+%20%22-%22%20+%20this.type%20+%20%22popup%22%3B%0A%20%20var%20popupToolbar%20%3D%20document.getElementById%28popupToolbarId%29%3B%0A%20%20if%20%28popupToolbar%29%20%7B%0A%20%20%20%20popupToolbar.setAttribute%28%22collapsed%22%2C%20%22true%22%29%3B%0A%20%20%20%20document.persist%28popupToolbarId%2C%20%22collapsed%22%29%3B%0A%20%20%7D%0A%20%0A%20%20var%20popup%20%3D%20document.getElementById%28popupId%29%3B%0A%20%20if%20%28popup%29%20%7B%0A%20%20%20%20popup.hidePopup%28%29%3B%0A%20%20%20%20popup.parentNode.removeChild%28popup%29%3B%0A%20%20%7D%0A%20%0A%20%20popup%20%3D%20document.getElementById%28%22mainPopupSet%22%29.appendChild%28document.createElement%28%22menupopup%22%29%29%3B%0A%20%20popup.setAttribute%28%22id%22%2C%20popupId%29%3B%0A%20%20popup.setAttribute%28%22position%22%2C%20%22after_start%22%29%3B%0A%20%0A%20%20if%20%28this.type%20%3D%3D%20%22menu%22%29%20%7B%0A%20%20%20%20while%20%28this.firstChild%20%26%26%20this.firstChild.localName%20%3D%3D%20%22menupopup%22%29%20%7B%0A%20%20%20%20%20%20this.firstChild.hidePopup%28%29%3B%0A%20%20%20%20%20%20this.removeChild%28this.firstChild%29%3B%0A%20%20%20%20%7D%0A%20%20%20%20this.appendChild%28popup%29%3B%0A%20%20%20%20popup.setAttribute%28%22onpopupshowing%22%2C%20%27this.parentNode.setPopup%28event%29%3B%27%29%3B%0A%20%20%7D%0A%20%20else%20%7B%0A%20%20%20%20popup.setAttribute%28%22onpopupshowing%22%2C%20%27document.popupNode.setPopup%28event%29%3B%27%29%3B%0A%20%20%7D%0A%20%0A%20%20popup.setAttribute%28%22onpopupshown%22%2C%20%27%7B%5C%0A%20%20%20%20window.addEventListener%28%22popuphidden%22%2C%20function%28e%29%20%7B%5C%0A%20%20%20%20%20%20var%20popup%20%3D%20document.getElementById%28popupId%29%3B%5C%0A%20%20%20%20%20%20if%20%28e.target%20%3D%3D%20popup%29%20%7B%5C%0A%20%20%20%20%20%20%20%20window.removeEventListener%28%22popuphidden%22%2C%20arguments.callee%2C%20false%29%3B%5C%0A%20%20%20%20%20%20%20%20return%3B%5C%0A%20%20%20%20%20%20%7D%5C%0A%20%20%20%20%20%20var%20popupNode%20%3D%20document.popupNode%3B%5C%0A%20%20%20%20%20%20while%20%28popupNode%20%26%26%20popupNode%20%21%3D%20popup%29%20popupNode%20%3D%20popupNode.parentNode%3B%5C%0A%20%20%20%20%20%20if%20%28popupNode%20%3D%3D%20popup%29%20popup.hidePopup%28%29%3B%5C%0A%20%20%20%20%7D%2C%20false%29%3B%5C%0A%20%20%7D%27.replace%28%22popupId%22%2C%20%27%22%27%20+%20popupId%20+%20%27%22%27%29%29%3B%0A%20%0A%20%20popup.setAttribute%28%22onpopuphidden%22%2C%20%27%7B%5C%0A%20%20%20%20var%20popup%20%3D%20event.target%3B%5C%0A%20%20%20%20if%20%28popup.firstChild%20%26%26%20popup.firstChild.localName%20%3D%3D%20%22toolbar%22%29%20%7B%5C%0A%20%20%20%20%20%20var%20popupToolbar%20%3D%20popup.firstChild%3B%5C%0A%20%20%20%20%20%20popupToolbar.removeAttribute%28%22style%22%29%3B%5C%0A%20%20%20%20%20%20popupToolbar.setAttribute%28%22collapsed%22%2C%20%22true%22%29%3B%5C%0A%20%20%20%20%20%20document.persist%28popupToolbar.id%2C%20%22collapsed%22%29%3B%5C%0A%20%20%20%20%20%20var%20navbox%20%3D%20document.getElementById%28%22navigator-toolbox%22%29%3B%5C%0A%20%20%20%20%20%20var%20nextElement%20%3D%20navbox.firstChild%3B%5C%0A%20%20%20%20%20%20while%20%28nextElement%20%26%26%20nextElement.localName%20%21%3D%20%22toolbarset%22%29%20%7B%5C%0A%20%20%20%20%20%20%20%20if%20%28Number%28nextElement.getAttribute%28%22customindex%22%29%29%20%3E%20Number%28popupToolbar.getAttribute%28%22customindex%22%29%29%29%5C%0A%20%20%20%20%20%20%20%20%20%20break%3B%5C%0A%20%20%20%20%20%20%20%20nextElement%20%3D%20nextElement.nextSibling%3B%5C%0A%20%20%20%20%20%20%7D%5C%0A%20%20%20%20%20%20navbox.insertBefore%28popupToolbar%2C%20nextElement%29%3B%5C%0A%20%20%20%20%20%20popupToolbar.firstPermanentChild%20%3D%20null%3B%5C%0A%20%20%20%20%20%20popupToolbar.lastPermanentChild%20%3D%20null%3B%5C%0A%20%20%20%20%20%20popupToolbar.currentSet%20%3D%20popupToolbar.getAttribute%28%22currentset%22%29%3B%5C%0A%20%20%20%20%7D%5C%0A%20%20%20%20while%20%28popup.lastChild%20%26%26%20popup.lastChild.localName%20%3D%3D%20%22menuitem%22%29%5C%0A%20%20%20%20%20%20popup.removeChild%28popup.lastChild%29%3B%5C%0A%20%20%7D%27%29%3B%0A%20%0A%20%20var%20contextPopup%20%3D%20document.getElementById%28contextPopupId%29%3B%0A%20%20if%20%28contextPopup%29%20%7B%0A%20%20%20%20contextPopup.hidePopup%28%29%3B%0A%20%20%20%20contextPopup.parentNode.removeChild%28contextPopup%29%3B%0A%20%20%7D%0A%20%0A%20%20contextPopup%20%3D%20document.getElementById%28%22mainPopupSet%22%29.appendChild%28document.createElement%28%22menupopup%22%29%29%3B%0A%20%20contextPopup.setAttribute%28%22id%22%2C%20contextPopupId%29%3B%0A%20%20contextPopup.setAttribute%28%22position%22%2C%20%22at_pointer%22%29%3B%0A%20%20contextPopup.setAttribute%28%22onpopupshowing%22%2C%20%27document.popupNode.setContextPopup%28event%29%3B%27%29%3B%0A%20%0A%20%20var%20menuitem%20%3D%20document.createElement%28%22menuitem%22%29%3B%0A%20%20menuitem.setAttribute%28%22label%22%2C%20%22Show%20Context%20Menu%20With%20Toolbar%22%29%3B%0A%20%20menuitem.setAttribute%28%22type%22%2C%20%22checkbox%22%29%3B%0A%20%20menuitem.setAttribute%28%22checked%22%2C%20this.getBoolPref%28%27showContextWithToolbar%27%29%29%3B%0A%20%20menuitem.setAttribute%28%22oncommand%22%2C%20%22document.popupNode.setBoolPref%28%27showContextWithToolbar%27%2C%20this.getAttribute%28%27checked%27%29%20%3D%3D%20%27true%27%29%3B%22%29%3B%0A%20%20contextPopup.appendChild%28menuitem%29%3B%0A%20%20contextPopup.appendChild%28document.createElement%28%22menuseparator%22%29%29%3B%0A%20%0A//%20%20this.tooltipText%20%3D%20this.label%3B%0A%20%20%20%20this.tooltipText%20%3D%20%22%22%3B%0A%7D%0A%20%0Athis.setBoolPref%20%3D%20function%28name%2C%20value%29%20%7B%0A%20%20var%20prefs%20%3D%20Cc%5B%22@mozilla.org/preferences-service%3B1%22%5D.getService%28Ci.nsIPrefBranch%29%3B%0A%20%20prefs.setBoolPref%28%22custombuttons.popuptoolbar.%22%20+%20name%2C%20value%29%3B%0A%7D%0A%20%0Athis.getBoolPref%20%3D%20function%28name%29%20%7B%0A%20%20var%20prefs%20%3D%20Cc%5B%22@mozilla.org/preferences-service%3B1%22%5D.getService%28Ci.nsIPrefBranch%29%3B%0A%20%20return%20prefs.getPrefType%28%22custombuttons.popuptoolbar.%22%20+%20name%29%0A%20%20%20%20%20%20%20%20%26%26%20prefs.getBoolPref%28%22custombuttons.popuptoolbar.%22%20+%20name%29%3B%0A%7D%0A%20%0Athis.setPopup%20%3D%20function%28event%29%20%7B%0A%20%20if%20%28this.getBoolPref%28%27showContextWithToolbar%27%29%29%20%7B%0A%20%20%20%20document.popupNode%20%3D%20this%3B%0A%20%20%20%20this.setContextPopup%28event%29%3B%0A%20%20%7D%0A%20%0A%20%20var%20popup%20%3D%20event.target%3B%0A%20%20var%20popupToolbar%20%3D%20document.getElementById%28popupToolbarId%29%3B%0A%20%20if%20%28popupToolbar%20%26%26%20popupToolbar.parentNode%20%21%3D%20popup%20%26%26%20this.parentNode%20%21%3D%20popupToolbar%29%20%7B%0A%20%20%20%20popup.insertBefore%28popupToolbar%2C%20popup.firstChild%29%3B%0A%20%20%20%20popupToolbar.setAttribute%28%22collapsed%22%2C%20%22false%22%29%3B%0A%20%20%20%20if%20%28%21this.getBoolPref%28%27showContextWithToolbar%27%29%29%0A%20%20%20%20%20%20popupToolbar.setAttribute%28%22style%22%2C%20%22border%3A%20none%20%21important%3B%22%29%3B%0A%20%20%7D%0A%20%0A%20%20if%20%28%21popup.firstChild%29%20%7B%0A%20%20%20%20document.popupNode%20%3D%20this%3B%0A%20%20%20%20this.setContextPopup%28event%29%3B%0A%20%20%7D%0A%7D%0A%20%0Athis.setContextPopup%20%3D%20function%28event%29%20%7B%0A%20%20var%20contextPopup%20%3D%20event.target%3B%0A%20%20while%20%28contextPopup.lastChild%20%26%26%20contextPopup.lastChild.localName%20%3D%3D%20%22menuitem%22%29%0A%20%20%20%20contextPopup.removeChild%28contextPopup.lastChild%29%3B%0A%20%0A%20%20var%20toolbars%20%3D%20document.getElementById%28%22navigator-toolbox%22%29.getElementsByTagName%28%22toolbar%22%29%3B%0A%20%20for%20%28var%20i%3D0%3B%20i%3Ctoolbars.length%3B%20i++%29%20%7B%0A%20%20%20%20var%20toolbarname%20%3D%20toolbars%5Bi%5D.getAttribute%28%22toolbarname%22%29%3B%0A%20%20%20%20var%20toolbarid%20%3D%20toolbars%5Bi%5D.getAttribute%28%22id%22%29%3B%0A%20%20%20%20var%20menuitem%20%3D%20contextPopup.appendChild%28document.createElement%28%22menuitem%22%29%29%3B%0A%20%20%20%20menuitem.setAttribute%28%22label%22%2C%20toolbarname%29%3B%0A%20%20%20%20menuitem.setAttribute%28%22type%22%2C%20%22radio%22%29%3B%0A%20%20%20%20menuitem.setAttribute%28%22name%22%2C%20%22toolbars-radio%22%29%3B%0A%20%20%20%20menuitem.setAttribute%28%22checked%22%2C%20%28this.label%20%3D%3D%20toolbarname%29%29%3B%0A%20%20%20%20menuitem.setAttribute%28%22disabled%22%2C%20%28%22__customToolbar_%22%20+%20toolbarname.replace%28%22%20%22%2C%20%22_%22%29%20%21%3D%20toolbarid%29%20%7C%7C%20%28this.parentNode%20%3D%3D%20toolbars%5Bi%5D%29%29%3B%0A%20%20%20%20menuitem.setAttribute%28%22oncommand%22%2C%20%22document.popupNode.setToolbar%28this.label.toString%28%29%29%3B%22%29%3B%0A%20%20%7D%0A%7D%0A%20%0Athis.setToolbar%20%3D%20function%28toolbarname%29%20%7B%0A%20%20var%20toolbar%20%3D%20document.getElementById%28%22__customToolbar_%22%20+%20toolbarname.replace%28%22%20%22%2C%20%22_%22%29%29%3B%0A%20%20if%20%28toolbar%20%26%26%20toolbar%20%21%3D%20this.parentNode%29%20%7B%0A%20%20%20%20this.label%20%3D%20toolbarname%3B%0A%20%20%20%20if%20%28toolbar.firstChild%20%26%26%20toolbar.firstChild.image%29%0A//%20%20%20%20%20%20this.image%20%3D%20toolbar.firstChild.image%3B%0A%20%0A%20%20%20%20this._init%28%29%3B%0A%20%20%7D%0A%7D%0A%20%0Avar%20that%20%3D%20this%3B%0Athis.hideDropMarker%20%3D%20function%28%29%20%7B%0A%20%20var%20dropMarker%20%3D%20document.getAnonymousElementByAttribute%28that%2C%20%22class%22%2C%20%22toolbarbutton-menu-dropmarker%22%29%3B%0A%20%20if%20%28dropMarker%29%20%7B%0A%20%20%20%20dropMarker.setAttribute%28%22hidden%22%2C%20%22true%22%29%3B%0A%20%20%7D%20else%20%7B%0A%20%20%20%20setTimeout%28that.hideDropMarker%2C%2010%29%3B%0A%20%20%7D%0A%7D%0A%20%0Athis.showPopup%20%3D%20function%28event%29%20%7B%0A%20%20document.popupNode%20%3D%20this%3B%0A%20%20document.getElementById%28popupId%29.showPopup%28this%2C%20-1%2C%20-1%2C%20%22popup%22%2C%20%22bottomleft%22%2C%20%22topleft%22%29%3B%0A%7D%0A%20%0Athis.showContextPopup%20%3D%20function%28event%29%20%7B%0A%20%20document.popupNode%20%3D%20this%3B%0A%20%20document.getElementById%28contextPopupId%29.showPopup%28this%2C%20event.screenX%2C%20event.screenY%2C%20%22context%22%2C%20%22none%22%2C%20%22none%22%29%3B%0A%7D%0A%20%0Athis.leftclick%20%3D%20this.showPopup%3B%0A//%20this.rightclick%20%3D%20this.showContextPopup%3B%0A%20%0Aif%20%28this.type%20%3D%3D%20%22menu%22%29%20%7B%0A%20%20this.leftclick%20%3D%20this.hideDropMarker%3B%0A%20%20this.hideDropMarker%28%29%3B%0A%7D%0A%20%0Athis._init%28%29%3B%0A%20%0Athis.setAttribute%28%27onclick%27%2C%20%27if%20%28event.target%20%3D%3D%20event.currentTarget%29%20gQuot%28event%2C%20this%29%3B%27%29%3B%0A%20%0A%0A%0A//%20%u0430%u0432%u0442%u043E%u043C%u0430%u0442%u0438%u0447%u0435%u0441%u043A%u0438%20%u0437%u0430%u043A%u0440%u044B%u0432%u0430%u0435%u0442%20%u043C%u0435%u043D%u044E%20%u043F%u043E%u0441%u043B%u0435%20%u043A%u043B%u0438%u043A%u0430%20%u041B%u041A%u041C%20%u043F%u043E%20%u0435%u0433%u043E%20%u044D%u043B%u0435%u043C%u0435%u043D%u0442%u0430%u043C%20%28%u043A%u043D%u043E%u043F%u043A%u0430%u043C%29%20/%20%u0438%u043D%u0442%u0435%u0440%u0432%u0430%u043B%202%u0441%u0435%u043A%0A%0Adocument.getElementById%28popupToolbarId%29.addEventListener%28%22click%22%2C%20openfalse%2C%20true%29%3B%0Afunction%20openfalse%28event%29%20%7B%0A%09%20%20%20%20if%28event.button%20%3D%3D%200%29%20%7B%0A%0A%09%09setTimeout%28function%28%29%20%7B%0A%09%09var%20popup%20%3D%20document.getElementById%28popupId%29%3B%0A%09%09window.removeEventListener%28%22popuphidden%22%2C%20arguments.callee%2C%20false%29%3B%0A%09%09var%20popupNode%20%3D%20document.popupNode%3B%0A%09%09popup.hidePopup%28%29%3B%7D%2C%202000%29%3B%0A%09%09%0A%09%09%7D%3B%0A%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

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

Выделить код

Код:

/*Initialization code*/
 
// Ввести название тулбара
var popupToolbarName = "MButtons";

var popupToolbarId = "__customToolbar_" + popupToolbarName.replace(" ", "_");
var contextPopupId = "popuptoolbar-contextpopup";
 
this.type = "menu";
this._init = function() {
  popupToolbarName = this.label;
  popupId = popupToolbarName.replace(" ", "").toLowerCase() + "-" + this.type + "popup";
  var popupToolbar = document.getElementById(popupToolbarId);
  if (popupToolbar) {
    popupToolbar.setAttribute("collapsed", "true");
    document.persist(popupToolbarId, "collapsed");
  }
 
  var popup = document.getElementById(popupId);
  if (popup) {
    popup.hidePopup();
    popup.parentNode.removeChild(popup);
  }
 
  popup = document.getElementById("mainPopupSet").appendChild(document.createElement("menupopup"));
  popup.setAttribute("id", popupId);
  popup.setAttribute("position", "after_start");
 
  if (this.type == "menu") {
    while (this.firstChild && this.firstChild.localName == "menupopup") {
      this.firstChild.hidePopup();
      this.removeChild(this.firstChild);
    }
    this.appendChild(popup);
    popup.setAttribute("onpopupshowing", 'this.parentNode.setPopup(event);');
  }
  else {
    popup.setAttribute("onpopupshowing", 'document.popupNode.setPopup(event);');
  }
 
  popup.setAttribute("onpopupshown", '{\
    window.addEventListener("popuphidden", function(e) {\
      var popup = document.getElementById(popupId);\
      if (e.target == popup) {\
        window.removeEventListener("popuphidden", arguments.callee, false);\
        return;\
      }\
      var popupNode = document.popupNode;\
      while (popupNode && popupNode != popup) popupNode = popupNode.parentNode;\
      if (popupNode == popup) popup.hidePopup();\
    }, false);\
  }'.replace("popupId", '"' + popupId + '"'));
 
  popup.setAttribute("onpopuphidden", '{\
    var popup = event.target;\
    if (popup.firstChild && popup.firstChild.localName == "toolbar") {\
      var popupToolbar = popup.firstChild;\
      popupToolbar.removeAttribute("style");\
      popupToolbar.setAttribute("collapsed", "true");\
      document.persist(popupToolbar.id, "collapsed");\
      var navbox = document.getElementById("navigator-toolbox");\
      var nextElement = navbox.firstChild;\
      while (nextElement && nextElement.localName != "toolbarset") {\
        if (Number(nextElement.getAttribute("customindex")) > Number(popupToolbar.getAttribute("customindex")))\
          break;\
        nextElement = nextElement.nextSibling;\
      }\
      navbox.insertBefore(popupToolbar, nextElement);\
      popupToolbar.firstPermanentChild = null;\
      popupToolbar.lastPermanentChild = null;\
      popupToolbar.currentSet = popupToolbar.getAttribute("currentset");\
    }\
    while (popup.lastChild && popup.lastChild.localName == "menuitem")\
      popup.removeChild(popup.lastChild);\
  }');
 
  var contextPopup = document.getElementById(contextPopupId);
  if (contextPopup) {
    contextPopup.hidePopup();
    contextPopup.parentNode.removeChild(contextPopup);
  }
 
  contextPopup = document.getElementById("mainPopupSet").appendChild(document.createElement("menupopup"));
  contextPopup.setAttribute("id", contextPopupId);
  contextPopup.setAttribute("position", "at_pointer");
  contextPopup.setAttribute("onpopupshowing", 'document.popupNode.setContextPopup(event);');
 
  var menuitem = document.createElement("menuitem");
  menuitem.setAttribute("label", "Show Context Menu With Toolbar");
  menuitem.setAttribute("type", "checkbox");
  menuitem.setAttribute("checked", this.getBoolPref('showContextWithToolbar'));
  menuitem.setAttribute("oncommand", "document.popupNode.setBoolPref('showContextWithToolbar', this.getAttribute('checked') == 'true');");
  contextPopup.appendChild(menuitem);
  contextPopup.appendChild(document.createElement("menuseparator"));
 
//  this.tooltipText = this.label;
    this.tooltipText = "";
}
 
this.setBoolPref = function(name, value) {
  var prefs = Cc["@mozilla.org/preferences-service;1"].getService(Ci.nsIPrefBranch);
  prefs.setBoolPref("custombuttons.popuptoolbar." + name, value);
}
 
this.getBoolPref = function(name) {
  var prefs = Cc["@mozilla.org/preferences-service;1"].getService(Ci.nsIPrefBranch);
  return prefs.getPrefType("custombuttons.popuptoolbar." + name)
        && prefs.getBoolPref("custombuttons.popuptoolbar." + name);
}
 
this.setPopup = function(event) {
  if (this.getBoolPref('showContextWithToolbar')) {
    document.popupNode = this;
    this.setContextPopup(event);
  }
 
  var popup = event.target;
  var popupToolbar = document.getElementById(popupToolbarId);
  if (popupToolbar && popupToolbar.parentNode != popup && this.parentNode != popupToolbar) {
    popup.insertBefore(popupToolbar, popup.firstChild);
    popupToolbar.setAttribute("collapsed", "false");
    if (!this.getBoolPref('showContextWithToolbar'))
      popupToolbar.setAttribute("style", "border: none !important;");
  }
 
  if (!popup.firstChild) {
    document.popupNode = this;
    this.setContextPopup(event);
  }
}
 
this.setContextPopup = function(event) {
  var contextPopup = event.target;
  while (contextPopup.lastChild && contextPopup.lastChild.localName == "menuitem")
    contextPopup.removeChild(contextPopup.lastChild);
 
  var toolbars = document.getElementById("navigator-toolbox").getElementsByTagName("toolbar");
  for (var i=0; i<toolbars.length; i++) {
    var toolbarname = toolbars[i].getAttribute("toolbarname");
    var toolbarid = toolbars[i].getAttribute("id");
    var menuitem = contextPopup.appendChild(document.createElement("menuitem"));
    menuitem.setAttribute("label", toolbarname);
    menuitem.setAttribute("type", "radio");
    menuitem.setAttribute("name", "toolbars-radio");
    menuitem.setAttribute("checked", (this.label == toolbarname));
    menuitem.setAttribute("disabled", ("__customToolbar_" + toolbarname.replace(" ", "_") != toolbarid) || (this.parentNode == toolbars[i]));
    menuitem.setAttribute("oncommand", "document.popupNode.setToolbar(this.label.toString());");
  }
}
 
this.setToolbar = function(toolbarname) {
  var toolbar = document.getElementById("__customToolbar_" + toolbarname.replace(" ", "_"));
  if (toolbar && toolbar != this.parentNode) {
    this.label = toolbarname;
    if (toolbar.firstChild && toolbar.firstChild.image)
//      this.image = toolbar.firstChild.image;
 
    this._init();
  }
}
 
var that = this;
this.hideDropMarker = function() {
  var dropMarker = document.getAnonymousElementByAttribute(that, "class", "toolbarbutton-menu-dropmarker");
  if (dropMarker) {
    dropMarker.setAttribute("hidden", "true");
  } else {
    setTimeout(that.hideDropMarker, 10);
  }
}
 
this.showPopup = function(event) {
  document.popupNode = this;
  document.getElementById(popupId).showPopup(this, -1, -1, "popup", "bottomleft", "topleft");
}
 
this.showContextPopup = function(event) {
  document.popupNode = this;
  document.getElementById(contextPopupId).showPopup(this, event.screenX, event.screenY, "context", "none", "none");
}
 
this.leftclick = this.showPopup;
// this.rightclick = this.showContextPopup;
 
if (this.type == "menu") {
  this.leftclick = this.hideDropMarker;
  this.hideDropMarker();
}
 
this._init();
 
this.setAttribute('onclick', 'if (event.target == event.currentTarget) gQuot(event, this);');
 


// автоматически закрывает меню после клика ЛКМ по его элементам (кнопкам) / интервал 2сек

document.getElementById(popupToolbarId).addEventListener("click", openfalse, true);
function openfalse(event) {
        if(event.button == 0) {

        setTimeout(function() {
        var popup = document.getElementById(popupId);
        window.removeEventListener("popuphidden", arguments.callee, false);
        var popupNode = document.popupNode;
        popup.hidePopup();}, 2000);
        
        };

};


За советы спасибо bunda1

Добавлено:
31.10.11 - Исправлен код автозакрытия панели после клика ЛКМ

Многоцветное автовыделение( Firefox 24+ ) от 07.10.2016.
Выделяет разными цветами различные слова/тексты на страницах во всех открытых вкладках. При наведении курсором на кнопку в сплывающей подсказке отображался текст для автовыделение вместе с подсказкой по кнопке.
Для добавления слов или фраз их нужно выделить на странице и нажать СКМ либо ввести в поле ввода после нажатия СКМ на кнопке - можно в поле ввода за один раз ввести несколько слов/текстов раздельных через разделитель |. Также можно после нажатия Shift+ПКМ редактировать, добавлять, удалять сохранные слова/тексты для автовыделение в вкладке Справка кнопки, слова/тексты нужно размещать в столбике без пустых строк.
Можно менять цвета, очередность цветов и и добавлять цвета для автовыделение в коде инициализации в строке: var colors = ["#FFFF00", "#FF0000", "#66FFFF", "#66FF99", "#FFA500", "#FF00FF"];


ЛКМ =>  Bключить/выключить,
СКМ =>  Добавить текст для автовыделения, выделенный или из диалога ввода,
ПКМ =>  Забыть весь текст для автовыделения,
Shift+ПКМ => Редактировать текст для автовыделения,
Ctrl+ПКМ   => Меню кнопки.

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

Выделить код

Код:

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%u041C%u043D%u043E%u0433%u043E%u0446%u0432%u0435%u0442%u043D%u043E%u0435%20%u0430%u0432%u0442%u043E%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u0438%u0435%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEREAAAEAIADwBAAAFgAAACgAAAARAAAAIgAAAAEAIAAAAAAAyAQAAAAAAAAAAAAAAAAAAAAAAAD///8A////AP///wD+//4B////APX69AV9vWaPVJsR9GabDPiQrDGn6OzRG////wD+/v0B////AP///gL///0B////AP///wD///8A////AP3+/gP///8ActGnhRyqVP83q0r8PqMu/kqZDf9yoh7Wu8t8YNjan07m4bM9+ffqCf///wD///4B////AP///wD8/v8C//7/AOL5/A4d1NrUFc/G/yHEov0qt3b/NKtM/UGeHv9WlAD/eJcB/peZAP+nphzH5+bAIP///wD+/v8A/fz/A/3+/wH///8A5/b+CyG8/c4Jz/z/ENfm/RrLuf8nu4b/M61S/UGgJvtbnBH8fqAQ/IKXAP+lrjax/v76AP7+/gH///8A7fD9CNni/Bb///8Ac7/4dQCn9/8P1f38ENbh/xzIsf8ouoD/NKtL/0GeHf9enA79dJ0M/4yiGOrx8d0c/f3/AJaT7105O+TOHTjn5GuP8n7u9v4AOK/3ugW/+/8N2vX9FdDN/yDDoP8rtXD/N6c//kqdGPpcnBD/dqIZ3/L05BCVht5rLhXE/zMj0f0nKuL/EkHp7+Dm/Bq64/wyBKz4/w/W/fwP1+X/Gsq4/ya+kPwwsWH+M58o/jSSAP+exXNr////AFkwrepXMrT8SjPG9icg2v8xRunM8fX+BfL5/gcdpPbOBMH8/w/b9vwX0dH+FcKk/yS3evFZum2rpdOaUPj79gD///8BZy6R8lsqn/8/Hbb/NSfS6MPE+DDj7PwI8vP9ALHe/DQXs/nWAs/9/wDV5v9C1Mmwye/jI////wD///8B////AP7+/gG/oclQgVSpuIhuy4/OyfIheHbpgx815+4vZ+7C2uf8Fuz5/we+8P83y/f8Jvb9/QL///8A8vv4CZPUpGO837Y5////AP///wD6+f0D////AIVy1IsgEsz/Lini+Qow5/+Gq/Vq////AM/t/Ruo6/4+6/z9C////wB817lzE6dQ/zGeJfOs05lI/Pv9Bf///wDXy+knTCOu7UYvxf89KtH4Fhrh/4yb9GTB3/sjCJH07QC9+v854Pio9///AFHOsrMktnX/NKtO/0KoPsz9/P0D////AMey2ElWJaL/UzG4+k0vv/4sGs/5vLn1Mkl68aoLcvD/G6j4+QDH+v+29f8xY9zUkA/Eo/8swpH3JL6M/P38/gL///8A08DcNF8kkPlgNar9Sh2m/3texp/i4PsPKTDk7hxP7P8eefD7Apb1/47Z/E2x8vw2AMrv/wXN5/8O0Ova////AP///wH8+/wAoHe0iWkukfN+U66v8+31C9PL7iA3H8n6KSzi/yNF6/sMVe3/rc35PP///wB/zv1qM7L7u53e/j7///8A////AP///wD7+fsB6NzqD/n2+gT///8A7uf0EV80rONFKcD/LCTU/zxC47/u8P4D////Af7+/gH//f4A///+AP///wD///8A//7/AP79/gL///8A/v7/Av38/gT///8AsZHEZmAplv5gOrPQzMbwKf///wD9/f4C/f//A/7//wL9/v8CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%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.onclick%20%3De%3D%3E%20%7B%0A%20%20%20%0A%20%20%20//%20%u0434%u0435%u0439%u0441%u0442%u0432%u0438%u0435%20%u043F%u0440%u0438%20%u043A%u043B%u0438%u043A%u0435%20%u041B%u041A%u041C%20....%0A%20%20%20if%20%28%20e.button%20%3D%3D%200%20%29%20%7B%0A%20%20%20%20%20%20%20%20cbu.setPrefs%28s%2C%20%21cbu.getPrefs%28s%29%29%3B%0A%20%20%20%20%20%20%20%20cbu.getPrefs%28s%29%20%3F%20doHighlight%28%29%20%3A%20clearHighlight%28%29%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%0A%20%20%20//%20%u0434%u0435%u0439%u0441%u0442%u0432%u0438%u0435%20%u043F%u0440%u0438%20%u043A%u043B%u0438%u043A%u0435%20%u0421%u041A%u041C%20....%20%20%20%20%0A%20%20%20if%20%28%20e.button%20%3D%3D%201%20%29%20toggleHighlightValue%28%27add%27%29%3B%0A%20%20%20%20%20%0A%20%20%20//%20%u0434%u0435%u0439%u0441%u0442%u0432%u0438%u0435%20%u043F%u0440%u0438%20%u043A%u043B%u0438%u043A%u0435%20%u041F%u041A%u041C%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%20toggleHighlightValue%28%27clear%27%29%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%0A%20%20%20//%20%u0434%u0435%u0439%u0441%u0442%u0432%u0438%u0435%20%u043F%u0440%u0438%20%u043A%u043B%u0438%u043A%u0435%20Ctrl%20+%20%u041F%u041A%u041C%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%20e.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%0A%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20//%20%u043E%u0442%u043A%u0440%u044B%u0442%u044C%20%u0440%u0435%u0434%u0430%u043A%u0442%u043E%u0440%20%u043A%u043D%u043E%u043F%u043A%u0438%20%u0432%20%u0432%u043A%u043B%u0430%u0434%u043A%u0435%20%u0421%u043F%u0440%u0430%u0432%u043A%u0430%0A%20%20%20%20%20%20%20%20function%20observer%28subject%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20subject.addEventListener%28%22load%22%2C%20%28e%2C%20doc%20%3D%20e.target%29%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%20doc.URL.startsWith%28%22chrome%3A//custombuttons%22%29%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Services.ww.unregisterNotification%28observer%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20doc.getElementsByTagName%28%22tabs%22%29%5B0%5D.children%5B2%5D.click%28%29%3B%0A%20%20%20%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%29%3B%0A%20%20%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%20%20%20%20Services.ww.registerNotification%28observer%29%3B%0A%0A%20%20%20%20%20%20%20%20custombuttons.editButton%28this%29%3B%20//%20%u043E%u0442%u043A%u0440%u044B%u0442%u044C%20%u0440%u0435%u0434%u0430%u043A%u0442%u043E%u0440%0A%20%20%20%20%20%20%20%20%7D%20%0A%7D%3B%0A%0A%0A//%20%u0426%u0432%u0435%u0442%u0430%20%u0434%u043B%u044F%20%u0430%u0432%u0442%u043E%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u0438%u0435%2C%20%u043C%u043E%u0436%u043D%u043E%20%u043C%u0435%u043D%u044F%u0442%u044C%20%u0438%20%u0434%u043E%u0431%u0430%u0432%u043B%u044F%u0442%u044C%20..........%0Avar%20colors%20%3D%20%5B%22%23FFFF00%22%2C%20%22%23FF0000%22%2C%20%22%2366FFFF%22%2C%20%22%2366FF99%22%2C%20%22%23FFA500%22%2C%20%22%23FF00FF%22%5D%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.onmouseover%20%3D%28%29%3D%3E%20%7B%0A%20%20%20var%20array%20%3D%20getArray%28%29.map%28str%3D%3E%20%7B%20return%20str.slice%280%2C50%29%20+%20%28str.length%20%3E%2050%20%3F%20%22...%22%20%3A%20%22%22%29%20%7D%29%3B%0A%20%20%20this.tooltipText%20%3D%20self.label%20+%20%22%5Cn%u041B%3A%20B%u043A%u043B%u044E%u0447%u0438%u0442%u044C/%u0432%u044B%u043A%u043B%u044E%u0447%u0438%u0442%u044C%20%5Cn%u0421%3A%20%u0414%u043E%u0431%u0430%u0432%u0438%u0442%u044C%20%u0442%u0435%u043A%u0441%u0442%5Cn%u041F%3A%20%u0421%u0431%u0440%u043E%u0441%u0438%u0442%u044C%20%u0432%u0435%u0441%u044C%20%u0442%u0435%u043A%u0441%u0442%5CnShift+%u041F%3A%20%u0420%u0435%u0434%u0430%u043A%u0442%u0438%u0440%u043E%u0432%u0430%u0442%u044C%20%u0442%u0435%u043A%u0441%u0442%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5Cn%5Cn%u0422%u0435%u043A%u0441%u0442%20%u0434%u043B%u044F%20%u0430%u0432%u0442%u043E%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u0438%u044F%3A%20%5Cn%22%20+%20array.join%28%22%5Cn%22%29%3B%0A%7D%3B%0A%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%u0430%u0432%u0442%u043E%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u0438%u044F%20..........%0Avar%20s%20%3D%20%22CB.autoHighlight%22%3B%0Afunction%20toggleImage%28%29%20%7B%0A%20%20%20self.ownerDocument.getAnonymousElementByAttribute%28self%2C%20%22class%22%2C%20%22toolbarbutton-icon%22%29.%0A%20%20%20src%20%3D%20cbu.getPrefs%28s%29%0A%20%20%20%3F%20self.image%0A%20%20%20%3A%20%22data%3Aimage/x-icon%3Bbase64%2CAAABAAEAEREAAAEAIADwBAAAFgAAACgAAAARAAAAIgAAAAEAIAAAAAAAyAQAAAAAAAAAAAAAAAAAAAAAAAD///8A/v7+AP39/QH9/f0B/f39Af39/QH///8AmJiYKQAAALEDAwPqAAAA1gAAAGm7u7sA////Afv7+wD///8A////AP39/QH9/f0D////AP///wD7+/sB////AKKiogoAAADJAAAA/wAAAP0BAQH+AAAA/wsLC3HDw8MA////Bfb29gP+/v4A////Aefn5wDT09MJ1tbWCdTU1AT///8AXFxcSwAAAPsEBAT/AAAA/gAAAPwFBQX/AAAA63Nzczvu7u4A/Pz8Avz8/AHr6+sJMjIyZgAAAL8CAgLCAAAApsbGxhhoaGhLAAAA/gUFBf8AAAD+AAAA/wAAAP0DAwP/AAAA6hMTE5eHh4cr3d3dACsrK4gAAAD/AwMD/gMDA/wAAAD/Hh4emy0tLQwAAADwAQEB/wAAAP4AAAD/AAAA/wAAAP8BAQH9AwMD/wAAAOcrKys5AwMD7gYGBv4AAAD7BAQE/QAAAP9KSkp5////ABUVFcIAAAD/AQEB/QAAAP8AAAD/AAAA/wAAAP4BAQH6BwcH/wICAr8BAQGfAAAA/wEBAf8AAADrBQUFeMbGxgX///8AGhoawQAAAP8BAQH+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD9BgYG66+vrwc1NTVCDw8PPgAAADUREREt0tLSF+7u7gAdHR27AAAA/wICAvsBAQH9AQEB/QEBAf0BAQH8AQEB+wICAv8BAQHC////AsHBwQAICAhzAAAA6AQEBP8AAADqWlpaL25ubj8AAAD4AgIC/wAAAP4AAAD/AAAA/wAAAP4CAgL/AAAA3VtbWznHx8cABgYGbwAAAP8BAQH+AAAA+AUFBf8AAAB18PDwAIyMjDwYGBiuGRkZwxgYGJQTExNzFhYWdQUFBWRgYGAb////ALS0tBwAAADXBQUF/wAAAPgFBQX/AAAA90tLSzunp6cApqamDaurqwP///8A////AP///wD///8A////AP///wD7+/sBtLS0LQAAAOwLCwv/CQkJ+wAAAP88PDyLkJCQDAICAqYAAADdAAAAkJCQkAP///8AW1tbLUlJSXFnZ2cR////AP7+/gHNzc0HDAwMpAAAAP8AAADuJycneRMTEw8PDw/AAQEB/wsLC/8AAAD6cnJyPHR0dB4AAADiAAAA/yAgIJX///8A/v7+Av///wC7u7sPgoKCRYqKii3T09MACgoKaAAAAP8BAQH4AgIC/AAAAP8vLy9GKysreQAAAP8FBQX/BwcH3LS0tAj///8A/f39Af39/QH///8A////AOzs7AYDAwPEAAAA/wAAAPsCAgL/AAAA8mtrawlMTEygAAAA/wgICP8AAADpampqGP///wD///8A/Pz8Afn5+QT+/v4B7e3tBAQEBMEAAAD/AQEB/QAAAP8TExNv////AFJSUosAAAD/AwMD/wEBAauurq4A////Av///wD///8A/v7+AP///wLv7+8AAwMDSwAAAOADAwPZAAAAZZOTkwP///8AT09PIQAAALYAAAC3oaGhIf///wD9/f0BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%3D%22%3B%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%29%3B%20%0A%0A%0A//%20%u0410%u0432%u0442%u043E%u043C%u0430%u0442%u0438%u0447%u0435%u0441%u043A%u0438%20%u0432%u044B%u0434%u0435%u043B%u0438%u0442%u044C%20%u0432%u0441%u0435%20%u0438%u0441%u043A%u043E%u043C%u044B%u0435%20%u0442%u0435%u043A%u0441%u0442%u044B%20%u0440%u0430%u0437%u043D%u044B%u043C%u0438%20%u0446%u0432%u0435%u0442%u0430%u043C%u0438%20..........%0Afunction%20doHighlight%28node%20%3D%20content.document.body%29%20%7B%0A%20%20%20if%20%28%20%21cbu.getPrefs%28s%29%20%7C%7C%20%21node%29%20return%3B%0A%20%20%20%0A%20%20%20//%20%u0435%u0441%u043B%u0438%20%u044D%u0442%u043E%20%u043D%u0435%20%u043F%u0443%u0441%u0442%u043E%u0439%20%u0442%u0435%u043A%u0441%u0442%u043E%u0432%u043E%u0439%20%u0443%u0437%u0435%u043B%0A%20%20%20if%20%28%20node.nodeName%20%3D%3D%20%22%23text%22%20%26%26%20node.data.replace%28/%5E%5Cs+%7C%5Cs+%24/g%2C%22%22%29%20%21%3D%20%22%22%20%29%20%7B%0A%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20var%20data%20%3D%20node.data.toLowerCase%28%29%2C%20highlightText%20%3D%20getArray%28%29%3B%20%0A%20%20%20%20%20%20%20%20var%20arr%20%3D%20highlightText.filter%28str%3D%3E%20%7B%20return%20%7Edata.indexOf%28str%29%20%7D%29%3B%0A%0A%20%20%20%20%20%20%20%20if%20%28%20arr%20%21%3D%20%22%22%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20arr.reverse%28%29.forEach%28str%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20parentNode%20%3D%20node.parentNode%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20color%20%3D%20colors%5BhighlightText.indexOf%28str%29%5D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%20parentNode.className%20%3D%3D%20_id%20%29%20%7B%20//%20%u0435%u0441%u043B%u0438%20%u043D%u0430%u0434%20%u0442%u0435%u043A%u0441%u0442%u043E%u0432%u044B%u043C%20%u0443%u0437%u043B%u043E%u043C%20%u043A%u043D%u043E%u043F%u043A%u0430%20%u0443%u0436%u0435%20%u0441%u043E%u0437%u0434%u0430%u043B%u0430%20span%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20parentNode.style.backgroundColor%20%3D%20color%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20%20%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%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20span%20%3D%20content.document.createElement%28%22span%22%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20span.style.backgroundColor%20%3D%20color%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20span.className%20%3D%20_id%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20middle%20%3D%20node.splitText%28data.indexOf%28str%29%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20middle.splitText%28str.length%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20node.parentNode.insertBefore%28span%2C%20middle%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20span.appendChild%28middle%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%29%3B%0A%20%20%20%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%20else%20if%20%28%20node.nodeType%20%3D%3D%201%20%26%26%20node.firstChild%20%26%26%20%21/script%7Cstyle/.test%28node.localName%29%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5B...node.childNodes%5D.forEach%28node%3D%3E%20doHighlight%28node%29%20%29%3B%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%7D%3B%0AdoHighlight%28%29%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%u0437%u0430%u0433%u0440%u0443%u0437%u043A%u043E%u0439%20%u0438%20%u043F%u0435%u0440%u0435%u043A%u043B%u044E%u0447%u0435%u043D%u0438%u0435%u043C%20%u0432%u043A%u043B%u0430%u0434%u043A%u0438%20%u0438%20%u0437%u0430%u043F%u0443%u0441%u043A%u0430%u044E%u0442%20%u0430%u0432%u0442%u043E%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u0438%u0435%20..........%0Avar%20listener%20%3D%20%7B%20%0A%20%20%20onStateChange%3A%20function%28wpr%2C%20req%2C%20flag%29%20%7B%0A%20%20%20%20%20%20if%20%28%20gBrowser.currentURI.spec.startsWith%28%22http%22%29%20%26%26%20flag%20%26%20Ci.nsIWebProgressListener.STATE_STOP%20%29%0A%20%20%20%20%20%20%20%20%20%20%20setTimeout%28%28%29%3D%3E%20doHighlight%28%29%2C%200%29%3B%0A%20%20%20%7D%2C%0A%20%20%20%20%20%20%0A%20%20%20onLocationChange%3A%20function%28wpr%2C%20req%29%20%7B%0A%20%20%20%20%20%20if%20%28%20gBrowser.currentURI.spec.startsWith%28%22http%22%29%20%26%26%20%21req%20%26%26%20wpr.document.readyState%20%3D%3D%20%22complete%22%20%29%0A%20%20%20%20%20%20%20%20%20%20%20setTimeout%28%28%29%3D%3E%20doHighlight%28%29%2C%200%29%3B%0A%20%20%20%7D%20%20%20%20%20%20%20%0A%7D%3B%0AgBrowser.addProgressListener%28listener%29%3B%0AaddDestructor%28%28%29%3D%3E%20gBrowser.removeProgressListener%28listener%29%20%29%3B%0A%0A%0A//%20%u041F%u0435%u0440%u0435%u0431%u0440%u0430%u0442%u044C%20%u0432%u0441%u0435%20%u043E%u0442%u043A%u0440%u044B%u0442%u044B%u0435%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u044B%20%u0438%20%u0443%u0434%u0430%u043B%u0438%u0442%u044C%20%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u0438%u0435%20..........%0Afunction%20clearHighlight%28reason%20%3D%20false%29%20%7B%0A%20%20%20if%20%28%20reason%20%3D%3D%20%27destructor%27%20%29%20return%3B%0A%20%20%20%0A%20%20%20for%20%28%20var%20br%20of%20gBrowser.browsers%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%5B...br.contentDocument.querySelectorAll%28%27SPAN%5Bclass%3D%27%20+%20_id%20+%20%27%5D%27%29%5D%0A%20%20%20%20%20%20%20%20%20.forEach%28el%3D%3E%20el.style%20%3D%20%22%22%20%29%3B%0A%20%20%20%20%20%20%20%20%20%7D%0A%7D%3B%20%0AaddDestructor%28clearHighlight%29%3B%0A%0A%20%0A//%20%u0414%u043E%u0431%u0430%u0432%u0438%u0442%u044C%20%u0438%u043B%u0438%20%u0443%u0434%u0430%u043B%u0438%u0442%u044C%20%u0442%u0435%u043A%u0441%u0442%20%u0434%u043B%u044F%20%u0430%u0432%u0442%u043E%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u0438%u044F%20..........%0Afunction%20toggleHighlightValue%28arg%29%20%7B%20%0A%20%20if%20%28%20arg%20%3D%3D%20%27clear%27%20%29%0A%20%20%20%20%20%20%20var%20text%20%3D%20%27%27%2C%20notification%20%3D%20%22%u0422%u0435%u043A%u0441%u0442%20%u0434%u043B%u044F%20%u0430%u0432%u0442%u043E%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u0438%u044F%20%u0443%u0434%u0430%u043B%u0451%u043D%22%3B%0A%20%20%0A%20%20if%20%28%20arg%20%3D%3D%20%27add%27%20%29%20%7B%20%20%0A%20%20%20%20%20%20%20var%20sel%20%3D%20getSelect%28%29%2C%20array%20%3D%20getArray%28%29%3B%20%0A%20%20%20%20%20%20%20var%20array%20%3D%20%28array%20%3D%3D%20%22%22%29%20%3F%20%22%22%20%3A%20array.join%28%22%5Cn%22%29%20+%20%22%5Cn%22%3B%20%20%20%20%20%0A%0A%20%20%20%20%20%20%20if%20%28%20sel%20%29%20%7B%20var%20text%20%3D%20array%20+%20sel%20%7D%0A%20%20%20%20%20%20%20else%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20var%20val%20%3D%20custombuttons.promptBox%28self.label%2C%20%27B%u0432%u0435%u0434%u0438%u0442%u0435%20%u0442%u0435%u043A%u0441%u0442%20%u0434%u043B%u044F%20%u0430%u0432%u0442%u043E%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u0438%u044F%3A%27%29%5B1%5D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%20val%20%3D%3D%20%22%22%20%29%20return%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20var%20text%20%3D%20array%20+%20val.split%28%22%7C%22%29.join%28%22%5Cn%22%29%3B%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20goDoCommand%28%22cmd_selectNone%22%29%3B%0A%20%20%20%20%20%20%20var%20notification%20%3D%20%22%u0414%u043E%u0431%u0430%u0432%u0438%u043B%20%u0442%u0435%u043A%u0441%u0442%20%u0434%u043B%u044F%20%u0430%u0432%u0442%u043E%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u0438%u044F%3A%20%5Cn%22%20+%20%28sel%20%3F%20sel%20%3A%20val.replace%28/%5C%7C/g%2C%22%5Cn%22%29%29%3B%0A%20%20%20%20%20%20%20%7D%0A%20%20%20%0A%20%20saveTextToHelp%28text.toLowerCase%28%29%29%3B%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%0A%20%20cbu.setPrefs%28s%2C%20%28arg%20%3D%3D%20%27add%27%29%29%3B%0A%20%20cbu.getPrefs%28s%29%20%3F%20doHighlight%28%29%20%3A%20clearHighlight%28%29%3B%0A%20%20%0A%20%20var%20alertsService%20%3D%20Cc%5B%22@mozilla.org/alerts-service%3B1%22%5D.getService%28Ci.nsIAlertsService%29%3B%0A%20%20alertsService.showAlertNotification%28self.image%2C%20self.label%2C%20notification%29%3B%0A%20%20setTimeout%28%28%29%3D%3E%20alertsService.closeAlert%28%29%2C%201500%29%3B%0A%7D%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%28text%29%20%7B%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%20text%29%3B%0A%20%20%20btn.setAttribute%28%22Help%22%2C%20text%29%3B%0A%20%20%20AO.overlay.saveOverlayToProfile%28%29%3B%20%20%20%0A%7D%3B%0A%0A%0A//%20%u041F%u043E%u043B%u0443%u0447%u0438%u0442%u044C%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%u0442%u0435%u043A%u0441%u0442%u0430%u043C%u0438%20%u0434%u043B%u044F%20%u0430%u0432%u0442%u043E%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u0438%u044F%20..........%0Afunction%20getArray%28%29%20%7B%0A%20%20%20return%20%28custombutton.buttonGetHelp%28self%29%29.toLowerCase%28%29.split%28%22%5Cn%22%29.filter%28el%3D%3E%20/%5CS/.test%28el%29%29%3B%0A%7D%3B%0A%0A%0A//%20%u041F%u043E%u043B%u0443%u0447%u0438%u0442%u044C%20%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u043D%u044B%u0439%20%u0442%u0435%u043A%u0441%u0442%20%u0438%u0437%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u044B%20%u0438%u043B%u0438%20false%20..........%0Afunction%20getSelect%28%29%20%7B%0A%20%20%20var%20el%20%3D%20document.commandDispatcher.focusedElement%3B%0A%20%20%20try%20%7B%20return%20el.value.substring%28el.selectionStart%2C%20el.selectionEnd%29%20%7D%20catch%28e%29%20%7B%7D%3B%0A%20%20%20var%20sel%20%3D%20document.commandDispatcher.focusedWindow.getSelection%28%29%3B%0A%20%20%20return%20%28sel%20%3D%3D%20%27%27%29%20%3F%20false%20%3A%20sel.toString%28%29.replace%28/%5E%5Cs+%7C%5Cs+%24/g%2C%22%22%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

Переключить джетпак( Firefox 7+ ) от 29.07.2013.
Кнопка даёт возможность быстро включить или выключить конкретное джетпак расширение - Jetpacks. Джетпак для переключения надо выбрать в меню с джетпаками которое можно открыть правым кликом на кнопке, после выбора иконка кнопки меняется на иконку джетпака. Всплывающая подсказка(tooltip) у кнопки показывает джетпак для переключения. Иконка кнопки отображает состояние джетпака для переключения.

Скриншоты меню с джетпаками и подсказки у кнопки
k3zw.jpg  1lir.jpg

ЛКМ => Включить / выключить джетпак.
СКМ => 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%3E%u041F%u0435%u0440%u0435%u043A%u043B%u044E%u0447%u0438%u0442%u044C%20%u0434%u0436%u0435%u0442%u043F%u0430%u043A%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEREAAAEAIADwBAAAFgAAACgAAAARAAAAIgAAAAEAIAAAAAAAyAQAAAAAAAAAAAAAAAAAAAAAAAADAwMAAQMEBgEDBQoBAwUIAQUHCwEDBQcAAAABAAAAAQEEBwkBBAYKAQMFCQEDBQgAAAECAAAAAgAAAAEAAAABAAAAAAwOEAUQdam9E5TV6BOPzt8Si8jfBBsnLwAAAAUAAAAABjFHUROT1OoTj87dEo3M4wMbJzQAAAAAAAECCQAAAAQAAAABAAQGCRGY1uAXvf//Fr3//xKc29AABAYAAAMFBAAAAAADGCIXFLH48RW6//8Vt///BCU1OwAAAAAAAwQEAAAAAAAAAAAABAUJDpTN2w+2/v8Osvj9Eanp6AIWHhcAAAAAAAAAAAUwQTkSt/3/ErP5+xK0+v8DJDI7AAAAAAACAgMAAQICAAAAAAADBQkPodbgINL//x/H/PwOwP//DJTIwwU9U0YGSGFVDaXf3A++//8Pufr8D7v+/wQuPj4CHCYoAh4oKQAAAAAAAAABAAYICwxqjJUUVGtdJ3aSiCzG+/oKxP//Dsj//w3I//8Nwv7+DL39/wy+/f8Mvv3/C6vk4A26+PsNv/7/BU9oZAAAAAAAAAAAAAAAAAACAwMAAAAAFm2JgBDN//8Jvff5CsD6/ArB/P0Kwv7/CsL+/wrC/v8IxP//CsD7+wnJ//8Io9XZAQMEBAAAAAAAAgIDAQkMDAEAAAACQFJGB9D//wfE+/0Hxv7/B8b+/wfG/v8Hxv7/B8b+/w7O//8EyP39DNX//x6nzM4AAAAAAAEBAQAEBQIAAQICAAAAAAV6mpEH1f//B8j8/AfK//8Hyv//B8r//wfK//8Fyv//H6XJwDK94+kxvuXoDj5LQwAAAAABBwgMEoOirhFxi34Ujq6lG9L//xrO//8azv//Gs7//xrO//8bzv//G87//RvP//8FKTM6BAUEBQMLDg4AAAAAAAAAAQEEBQklstXgLub//yzZ/f0r0P79MNH//zDR//8w0f//L9H//yvQ/v0r0P/7LND//worND0AAAAAAQMDBAACAgIAAAAAAQgKB0m31t1f4P//XNn9/Vvd//9H1//+Rdb//0TW//9K2P/+YN7+/2Dd//5b2v7/DioyOAAAAAABAwMDAAAAAAAAAAAAAQEAFCUqLRwwNj4aLDA6HTU9PFLF5t9b3f//XeH//0isycAZKS4wHC80PhotMzkDBwgHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQICAgAAAAAYLTQybtv8/23b+/tv4P//YsTi6QcNDxAAAAAAAAEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAECAgICBAUFAAAAABgnLSmV6Pr6i+r//5Hx//+Fzd7fBQkMDAAAAAEBAwMEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQECAAAAAEhja2SUx9ngjsDR1TJFTEQAAAAAAQICAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAAAAAAMEBQYDAwQEAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%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%u041F%u0435%u0440%u0435%u043A%u043B%u044E%u0447%u0438%u0442%u044C%20%u0434%u0436%u0435%u0442%u043F%u0430%u043A%20%u043E%u0442%2029.07.2013.%20................................%0A%0A%0A//%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%3D%20function%28e%29%20%7B%0A%0A%20%20%20%20%20//%20%u041B%u041A%u041C%20%u043F%u0435%u0440%u0435%u043A%u043B%u044E%u0447%u0430%u0435%u0442%20%u0434%u0436%u0435%u0442%u043F%u0430%u043A%20%u0443%u043A%u0430%u0437%u0430%u043D%u043D%u044B%u0439%20%u0432%20%27about%3Aconfig%27....%0A%20%20%20%20%20if%20%28%20e.button%20%3D%3D%200%20%29%20%7B%0A%0A%20%20%20%20%20%20%20%20%20%20if%20%28%20%21cbu.isPref%28%20jetName%20%29%20%29%20%7B%20%20%20//%20%u0435%u0441%u043B%u0438%20%u0434%u0436%u0435%u0442%u043F%u0430%u043A%20%u0434%u043B%u044F%20%u043F%u0435%u0440%u0435%u043A%u043B%u044E%u0447%u0435%u043D%u0438%u044F%20%u043D%u0435%20%u0443%u043A%u0430%u0437%u0430%u043D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20alertsService.showAlertNotification%28%20button.image%2C%20button.label%2C%20%22%u0423%u0441%u0442%u0430%u043D%u043E%u0432%u0438%u0442%u0435%20%u0434%u0436%u0435%u0442%u043F%u0430%u043A%20%u0434%u043B%u044F%20%u043F%u0435%u0440%u0435%u043A%u043B%u044E%u0447%u0435%u043D%u0438%u044F%22%2C%20false%2C%20%22%22%2C%20null%2C%20%22%22%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20button.toggle%20%3D%20false%2C%20jetpacksName%20%3D%20aPrefs.getValue%28%20jetName%2C%200%29%3B%0A%20%20%20%20%20%20%20%20%20%20AddonManager.getAddonsByTypes%28%5B%22extension%22%5D%2C%20function%28addons%29%20%7B%20%20//%20%u043F%u0435%u0440%u0435%u043A%u043B%u044E%u0447%u0438%u0442%u044C%20%u0434%u0436%u0435%u0442%u043F%u0430%u043A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20addons.forEach%28function%28addon%2C%20i%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%20addons%5Bi%5D.name%20%3D%3D%20jetpacksName%20%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%20addons%5Bi%5D.userDisabled%20%3D%20%21addons%5Bi%5D.userDisabled%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%20cbu.setPrefs%28%20jet%2C%20%21addons%5Bi%5D.userDisabled%20%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%20button.toggle%20%3D%20true%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%7D%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%20button.toggle%20%3D%3D%20false%20%29%20%7B%20%20//%20%u0435%u0441%u043B%u0438%20%u0434%u0436%u0435%u0442%u043F%u0430%u043A%20%u0434%u043B%u044F%20%u043F%u0435%u0440%u0435%u043A%u043B%u044E%u0447%u0435%u043D%u0438%u044F%20%u043D%u0435%20%u043D%u0430%u0439%u0434%u0435%u043D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20alertsService.showAlertNotification%28%22chrome%3A//global/skin/icons/error-16.png%22%2C%20button.label%2C%20%22%u0414%u0436%u0435%u0442%u043F%u0430%u043A%20%u0434%u043B%u044F%20%u043F%u0435%u0440%u0435%u043A%u043B%u044E%u0447%u0435%u043D%u0438%u044F%20%u043D%u0435%20%u043D%u0430%u0439%u0434%u0435%u043D%22%2C%20false%2C%20%22%22%2C%20null%2C%20%22%22%29%3B%0A%20%20%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%7D%29%3B%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%0A%20%20%20%20%20//%20%u0421%u041A%u041C%20%u043E%u0442%u043A%u0440%u044B%u0432%u0430%u0435%u0442%20%u0441%u0442%u0430%u043D%u0434%u0430%u0440%u0442%u043D%u0443%u044E%20%u043A%u043E%u043D%u0442%u0435%u043A%u0441%u0442%u043D%u0443%u044E%20%u043C%u0435%u043D%u044E%20%u043A%u043D%u043E%u043F%u043A%u0438%20....%20%20%20%20%20%20%0A%20%20%20%20%20if%20%28%20e.button%20%3D%3D%201%20%29%20%7B%20gShowPopup%28this%29%20%7D%3B%20%20%20%20%20%20%0A%20%20%20%20%20%0A%20%20%20%20%20//%20%u041F%u041A%u041C%20%u0441%u043E%u0437%u0434%u0430%u0451%u0442%20%u0438%20%u043E%u0442%u043A%u0440%u044B%u0432%u0430%u0435%u0442%20%u043C%u0435%u043D%u044E%20%u0441%20%u0434%u0436%u0435%u0442%u043F%u0430%u043A%u0430%u043C%u0438%20....%20%20%20%20%20%0A%20%20%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%20%20%20e.preventDefault%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%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%20%20%20%20%20if%20%28%20node%20%29%20node.parentNode.removeChild%28%20node%20%29%3B%20//%20%u0443%u0434%u0430%u043B%u0438%u0442%u044C%20%u0441%u0442%u0430%u0440%u043E%u0435%20%u043C%u0435%u043D%u044E%0A%0A%20%20%20%20%20%20%20%20%20%20var%20menuPopup%20%3D%20document.getElementById%28%22mainPopupSet%22%29.appendChild%28document.createElement%28%22menupopup%22%29%29%3B%20//%20%u0441%u043E%u0437%u0434%u0430%u0442%u044C%20%u043D%u043E%u0432%u043E%u0435%20%u043C%u0435%u043D%u044E%0A%20%20%20%20%20%20%20%20%20%20menuPopup.id%20%3D%20this.id%20+%20%22-menuPopup%22%3B%0A%20%20%20%20%20%20%20%20%20%20AddonManager.getAddonsByTypes%28%5B%22extension%22%5D%2C%20function%28addons%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20addons.forEach%28function%28addon%2C%20i%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%20addons%5Bi%5D.operationsRequiringRestart%20%3E%200%20%29%20return%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20mItem%20%3D%20document.createElement%28%22menuitem%22%29%3B%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20mItem.setAttribute%28%22label%22%2C%20addons%5Bi%5D.name%20%29%3B%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20mItem.setAttribute%28%22class%22%2C%20%22menuitem-iconic%22%29%3B%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20mItem.setAttribute%28%22image%22%2C%20addons%5Bi%5D.iconURL%20%7C%7C%20addons%5Bi%5D.icon64URL%20%7C%7C%20%22chrome%3A//mozapps/skin/extensions/extensionGeneric-16.png%22%29%3B%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%20addons%5Bi%5D.name%20%3D%3D%20aPrefs.getValue%28%20jetName%2C%200%20%29%20%29%20mItem.setAttribute%28%27style%27%2C%20%27color%3A%20red%3B%20font-weight%3A%20bold%3B%27%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20mItem.addEventListener%28%27click%27%2C%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20function%20%28e%29%20%7B%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%20aPrefs.setValue%28%20jetName%2C%20addons%5Bi%5D.name%20%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%20cbu.setPrefs%28%20jet%2C%20addons%5Bi%5D.isActive%20%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%20setImage%28%20this.image%20%29%3B%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%20%7D%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%29%3B%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20menuPopup.appendChild%28mItem%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%29%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%29%3B%20%20%20%20%20%20%20%20%20%0A%20%20%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%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%7D%20%20%20%20%0A%7D%3B%0A%0A%0A//%20%u041E%u0431%u044A%u044F%u0432%u043B%u044F%u0435%u043C%20%u043F%u0435%u0440%u0435%u043C%u0435%u043D%u043D%u044B%u0435%20%u0434%u043B%u044F%20%u044D%u0442%u043E%u0439%20%u0432%u043A%u043B%u0430%u0434%u043A%u0438%20................................%0Avar%20button%20%3D%20this%3B%0Avar%20aPrefs%20%3D%20Application.prefs%3B%0Avar%20alertsService%20%3D%20Components.classes%5B%22@mozilla.org/alerts-service%3B1%22%5D.getService%28Components.interfaces.nsIAlertsService%29%3B%0A%0Avar%20num%20%3D%20_id.replace%28/custombuttons-button/g%2C%20%22%22%29%3B%20//%20%u0441%u043E%u0437%u0434%u0430%u0442%u044C%20%u0438%u043D%u0434%u0438%u0432%u0438%u0434%u0443%u0430%u043B%u044C%u043D%u044B%u0435%20%u043D%u0430%u0441%u0442%u0440%u043E%u0439%u043A%u0438%20%u0434%u043B%u044F%20%27about%3Aconfig%27%20%0Avar%20jet%20%3D%20%22CB%22%20+%20num%20+%20%22.toggleJetpacks%22%3B%20%0Avar%20jetName%20%3D%20%22CB%22%20+%20num%20+%20%22.toggleJetpacks.name%22%3B%20%0Aif%20%28%20%21cbu.isPref%28%20jet%20%29%20%29%20cbu.setPrefs%28%20jet%2C%20true%20%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................................%0Athis.onmouseover%20%3D%20function%28%29%20%7B%0A%20%20%20%20%20//%20%u043F%u043E%u043B%u0443%u0447%u0438%u0442%u044C%20%u0438%20%u043E%u0431%u0440%u0435%u0437%u0430%u0442%u044C%20%u043F%u043E%u0434%u0441%u043A%u0430%u0437%u043A%u0443%20....%0A%20%20%20%20%20var%20val%20%3D%20aPrefs.getValue%28%20jetName%2C%200%29%3B%0A%20%20%20%20%20val%20%3D%20%28%20val%20%3D%3D%200%20%29%20%3F%20%22%u043D%u0435%20%u0443%u0441%u0442%u0430%u043D%u043E%u0432%u043B%u0435%u043D%u043E%22%20%3A%20val%3B%0A%20%20%20%20%20var%20jetpacks%20%3D%20val.substring%280%2C50%29%20+%20%28%20%28val.length%20%3E%2050%29%20%3F%20%27....%27%20%3A%20%22%22%20%29%3B%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%0A%20%20%20%20%20this.tooltipText%20%3D%20%22%u041F%u0435%u0440%u0435%u043A%u043B%u044E%u0447%u0438%u0442%u044C%3A%20%22%20+%20jetpacks%20+%20%20%22%5Cn%u041B%3A%20B%u043A%u043B%u044E%u0447%u0438%u0442%u044C%20-%20%u0432%u044B%u043A%u043B%u044E%u0447%u0438%u0442%u044C%20%5Cn%u0421%3A%20CB%20%u041C%u0435%u043D%u044E%20%5Cn%u041F%3A%20%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20%u043C%u0435%u043D%u044E%20%u0441%20%u0434%u0436%u0435%u0442%u043F%u0430%u043A%u0430%u043C%u0438%22%3B%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%7D%3B%0A%0A%0A//%20%u0417%u0430%u043C%u0435%u043D%u0438%u0442%u044C%20%u0438%u043A%u043E%u043D%u043A%u0443%20%u043A%u043D%u043E%u043F%u043A%u0438%20%u043D%u0430%20%u0438%u043A%u043E%u043D%u043A%u0443%20%u043F%u0435%u0440%u0435%u043A%u043B%u044E%u0447%u0430%u0435%u043C%u043E%u0433%u043E%20%u0434%u0436%u0435%u0442%u043F%u0430%u043A%u0430%20................................%0Afunction%20setImage%28%20image%20%29%20%7B%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20var%20link%20%3D%20custombuttons.makeButtonLink%28%22edit%22%2C%20_id%20%29%3B%0A%20%20%20var%20param%20%3D%20custombuttons.cbService.getButtonParameters%28%20link%20%29.wrappedJSObject%3B%0A%20%20%20param.image%20%3D%20image%3B%0A%20%20%20custombuttons.cbService.installButton%28%20param%20%29%3B%0A%7D%3B%0A%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................................%0Afunction%20toggleImage%28%29%20%7B%0A%20%20%20%20cbu.getPrefs%28%20jet%20%29%20%0A%20%20%20%20%3F%20button.style.filter%20%3D%20%27%27%20%20%20%20%0A%20%20%20%20%3A%20button.style.filter%20%3D%20%27url%28%22chrome%3A//mozapps/skin/extensions/extensions.svg%23greyscale%22%29%27%3B%0A%7D%3B%0AtoggleImage%28%29%3B%0AgPrefService.addObserver%28%20jet%2C%20toggleImage%2C%20false%20%29%3B%0AaddDestructor%28function%28%29%20%7B%20gPrefService.removeObserver%28%20jet%2C%20toggleImage%2C%20false%20%29%20%7D%29%3B%0A%0A%0A//%20%u0418%u043A%u043E%u043D%u043A%u0430%20%u043A%u043D%u043E%u043F%u043A%u0438%20%u043D%u0435%20%u0431%u043E%u043B%u044C%u0448%u0435%2016px%20................................%0Avar%20icon%20%3D%20document.getAnonymousElementByAttribute%28%20this%2C%20%22class%22%2C%20%22toolbarbutton-icon%22%29%3B%0Aicon.style.width%20%3D%20%2216px%22%3B%20icon.style.height%20%3D%20%2216px%22%3B%0Athis.onDestroy%20%3D%20function%20%28%29%20%7B%0A%20%20%20%20%20var%20icon%20%3D%20document.getAnonymousElementByAttribute%28%20this%2C%20%22class%22%2C%20%22toolbarbutton-icon%22%29%3B%0A%20%20%20%20%20icon.style.width%20%3D%20%2216px%22%3B%20icon.style.height%20%3D%20%2216px%22%3B%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

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

Выделить код

Код:

// Переключить джетпак от 29.07.2013. ................................


// Настройка функций кликов мыши для кнопки ................................
this.onclick = function(e) {

     // ЛКМ переключает джетпак указанный в 'about:config'....
     if ( e.button == 0 ) {

          if ( !cbu.isPref( jetName ) ) {   // если джетпак для переключения не указан
               alertsService.showAlertNotification( button.image, button.label, "Установите джетпак для переключения", false, "", null, "");
               return;
               }         
          
          button.toggle = false, jetpacksName = aPrefs.getValue( jetName, 0);
          AddonManager.getAddonsByTypes(["extension"], function(addons) {  // переключить джетпак
             addons.forEach(function(addon, i) {
                    if ( addons[i].name == jetpacksName ) {
                         addons[i].userDisabled = !addons[i].userDisabled;
                         cbu.setPrefs( jet, !addons[i].userDisabled );
                         button.toggle = true;
                         }                                        
                    });
                    
             if ( button.toggle == false ) {  // если джетпак для переключения не найден
                  alertsService.showAlertNotification("chrome://global/skin/icons/error-16.png", button.label, "Джетпак для переключения не найден", false, "", null, "");
                  }
          });    
          }
     
     // СКМ открывает стандартную контекстную меню кнопки ....      
     if ( e.button == 1 ) { gShowPopup(this) };      
     
     // ПКМ создаёт и открывает меню с джетпаками ....     
     if ( e.button == 2 && !e.ctrlKey && !e.shiftKey && !e.altKey && !e.metaKey ) { 
          e.preventDefault();
          
          var node = document.getElementById(this.id + "-menuPopup");
          if ( node ) node.parentNode.removeChild( node ); // удалить старое меню

          var menuPopup = document.getElementById("mainPopupSet").appendChild(document.createElement("menupopup")); // создать новое меню
          menuPopup.id = this.id + "-menuPopup";
          AddonManager.getAddonsByTypes(["extension"], function(addons) {
          addons.forEach(function(addon, i) {
                 if ( addons[i].operationsRequiringRestart > 0 ) return;
                 var mItem = document.createElement("menuitem");    
                 mItem.setAttribute("label", addons[i].name );          
                 mItem.setAttribute("class", "menuitem-iconic");               
                 mItem.setAttribute("image", addons[i].iconURL || addons[i].icon64URL || "chrome://mozapps/skin/extensions/extensionGeneric-16.png");    
                 if ( addons[i].name == aPrefs.getValue( jetName, 0 ) ) mItem.setAttribute('style', 'color: red; font-weight: bold;');
                 
                 mItem.addEventListener('click', 
                       function (e) { 
                          aPrefs.setValue( jetName, addons[i].name );
                          cbu.setPrefs( jet, addons[i].isActive );
                          setImage( this.image );  
                       } 
                 ); 
                  
                 menuPopup.appendChild(mItem);
                 });
          });         
          menuPopup.showPopup(this, -1, -1, "popup", "bottomleft", "topleft");          
          }    
};


// Объявляем переменные для этой вкладки ................................
var button = this;
var aPrefs = Application.prefs;
var alertsService = Components.classes["@mozilla.org/alerts-service;1"].getService(Components.interfaces.nsIAlertsService);

var num = _id.replace(/custombuttons-button/g, ""); // создать индивидуальные настройки для 'about:config' 
var jet = "CB" + num + ".toggleJetpacks"; 
var jetName = "CB" + num + ".toggleJetpacks.name"; 
if ( !cbu.isPref( jet ) ) cbu.setPrefs( jet, true );


// Подсказка для кнопки ................................
this.onmouseover = function() {
     // получить и обрезать подсказку ....
     var val = aPrefs.getValue( jetName, 0);
     val = ( val == 0 ) ? "не установлено" : val;
     var jetpacks = val.substring(0,50) + ( (val.length > 50) ? '....' : "" );              
     
     this.tooltipText = "Переключить: " + jetpacks +  "\nЛ: Bключить - выключить \nС: CB Меню \nП: Открыть меню с джетпаками";               
};


// Заменить иконку кнопки на иконку переключаемого джетпака ................................
function setImage( image ) {                    
   var link = custombuttons.makeButtonLink("edit", _id );
   var param = custombuttons.cbService.getButtonParameters( link ).wrappedJSObject;
   param.image = image;
   custombuttons.cbService.installButton( param );
};


// Установить нужную иконку кнопки при старте браузера или при изменениях настроек ................................
function toggleImage() {
    cbu.getPrefs( jet ) 
    ? button.style.filter = ''    
    : button.style.filter = 'url("chrome://mozapps/skin/extensions/extensions.svg#greyscale")';
};
toggleImage();
gPrefService.addObserver( jet, toggleImage, false );
addDestructor(function() { gPrefService.removeObserver( jet, toggleImage, false ) });


// Иконка кнопки не больше 16px ................................
var icon = document.getAnonymousElementByAttribute( this, "class", "toolbarbutton-icon");
icon.style.width = "16px"; icon.style.height = "16px";
this.onDestroy = function () {
     var icon = document.getAnonymousElementByAttribute( this, "class", "toolbarbutton-icon");
     icon.style.width = "16px"; icon.style.height = "16px";
};

Red Links( Firefox24+ ) от 26.08.2016.
Кнопка дает возможность быстро менять цвет всех внутренних и внешних ссылок на всех страницах.

При наведении курсором на кнопку в сплывающей подсказке(тултипе) отражаются настройки кнопки:
23ae4e18ef062263c1ac34432b6a761f.png

Настройки кнопки в меню кнопки:
fd0f1abbd9a05ae9c1b0c5f27f27a555.png

ЛКМ => Включить - выключить,
ПКМ => Mеню кнопки,
Двойной ПКМ => 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%3ERed%20links%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEhIAAAEAIACABQAAFgAAACgAAAASAAAAJAAAAAEAIAAAAAAAWAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAASw8NZZYdGuubHhv/mh4b/poeG/+aHhv/mh4b/5oeG/+aHhv/mh4b/5oeG/+aHhv/mh4b/pseG/+WHRrrSw8NZQAAAABODw1oqSEd/58fG/6eHxv/nh8b/54fG/+eHxv/nh8b/54fG/+dHxv/nh8b/54fG/+eHxv/nh8b/54fG/+fHxv+qSEd/04PDWeeHhvjpB8c/6EfHP2iHxz/oh8c/6IfHP+iHxv/oh8b/6UgHf+lIB3/ox8c/6IfG/+iHxz/oh8c/6IfHP+hHxz9pB8c/54eG+OnIBz9ph8c/6cfHP+nHxz/px8c/6YfHP+pIB3/qSMg/50dGv+cHBn/pyIf/6ohHf+mHxz/px8c/6cfHP+nHxz/ph8c/6cgHP2rIBz+qyAc/6sgHP+rIBz/qiAc/68iHv+iHhr/cwMC/2sCAv9rAwP/bQEA/5obGP+vIh7/qiAc/6sgHP+rIBz/qyAc/6sgHP6vIBz/ryAc/68gHP+uIBz/syId/50bGP9pAAD/oGFg/+LMzP/kz8//p2xr/2gBAP+hHBn/tCMe/64gHP+vIBz/ryAc/68gHP+zIRz/syEc/7IhHP+1Ih3/qR8b/2cAAP+yfn3///////v8/P/7+/v//////7uMjP9rAAD/rB8a/7YjHf+yIRz/syEc/7MhHP+4IR3/uCEd/7chHf+/JiL/hwYE/51fX///////9fLy/6xPTf+iQ0L/7+np//////+2h4f/dwQD/7YiHv+3IR3/uCEd/7ghHf+8Ih3/vCId/7siHf/BJSD/hAkH/9jBwf//////mUlI/5MHA/9rAAD/iDc2/+/j4///////oWVk/6MPCv/IKiX/uiId/7wiHf/AIh3/wCId/78iHf/HJSD/lA4L/9XBwf//////kkRD/14AAP+8j47/3sXF/5xVVf/Ts7L/izc3/3kAAP+cEA3/xSQe/8AjHv/GIh3/xiId/8YiHf/JJiH/uBIO/6xkY///////+PHx/4w6Of/Ts7L//////+bT0/91Ghn/awsK/9nBwf+0ior/nAoG/84lIP/LIx3/yyMd/8sjHf/KIx3/0SYg/7IQC/+zfX3///////Pq6f+bVFP/38nJ///////p2dn/jTw7/+3e3v//////uomJ/6kMB//QIx3/0CMd/9AjHf/QIx3/zyMd/9gnIf+mCQX/q3l5///////QsLD/cQ4N/+LNzf//////487O/55XVv/y6Of//////8WVlP/VIx3+1SMd/9UjHf/VIx3/1SMd/9QkHf/bJh//qw4J/7xkYv+MNTT/bQYF/4o2Nv/dxMT//////658fP+CKir/+PLy//////7cIxz92iMc/9sjHP/bIxz/2yMc/9sjHP/ZIxz/5igg/8ETDv9gAAD/2r29//fy8f+aU1L/t3x8/7w7N/9mAAD/rHp6//////3aIhvj4SQc/98jHP3gIxz/4CMc/+AjHP/gIxz/3yMc/+EoIf+EBwX/rX5+///////u6un/njU0/4IAAP95ISD96tnZ//T39+NxEg5o9yce/+ckHP7kJBz/5SQc/+UkHP/lJBz/5CQc/+klHf/dIxz/cgAA/616ev//////8+3u/69/f//l09P+/////318fGcBAAAAcRINZeQjG+vsJBz/6iQc/uskHP/rJBz/6yQc/+kkHP/yJh7/0iEb/2cAAP+3hIT//////v/////39/fre3p6ZQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%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.onclick%20%3De%3D%3E%20%7B%0A%0A%20%20%20//%20%u0434%u0435%u0439%u0441%u0442%u0432%u0438%u0435%20%u043F%u0440%u0438%20%u043A%u043B%u0438%u043A%u0435%20%u041B%u041A%u041C%20....%0A%20%20%20if%20%28%20e.button%20%3D%3D%200%20%29%0A%20%20%20%20%20%20%20%20addColorForLinks%28%20cbu.setPrefs%28%22CB.RedLinks%22%2C%20%21cbu.getPrefs%28%22CB.RedLinks%22%29%29%20%29%3B%0A%20%20%20%20%20%0A%20%20%20//%20%u0434%u0435%u0439%u0441%u0442%u0432%u0438%u0435%20%u043F%u0440%u0438%20%u043A%u043B%u0438%u043A%u0435%20%u041F%u041A%u041C%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%20menu.showPopup%28%20this%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%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%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..............%0Acbu.isPref%28%22CB.RedLinks%22%2C%20false%29%3B%0Acbu.isPref%28%22CB.RedLinks.internalColor%22%2C%20%22red%22%29%3B%0Acbu.isPref%28%22CB.RedLinks.externalColor%22%2C%20%22green%22%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..............%0Athis.onmouseover%20%3D%28%29%3D%3E%20%7B%0A%20%20%20this.tooltipText%20%3D%20self.label%20+%20%22%5Cn%u041B%3A%20%20%u0412%u043A%u043B%u044E%u0447%u0438%u0442%u044C%20-%20%u0432%u044B%u043A%u043B%u044E%u0447%u0438%u0442%u044C%20%5Cn%u041F%3A%20M%u0435%u043D%u044E%20%u043A%u043D%u043E%u043F%u043A%u0438%20%5Cn%u0414%u041F%3A%20CB%20%u043C%u0435%u043D%u044E%22%20+%20%22%5Cn%5Cn%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%22%u0426%u0432%u0435%u0442%20%u0432%u043D%u0435%u0448%u043D%u0438%u0445%20%u0441%u0441%u044B%u043B%u043E%u043A%3A%20%22%20+%20cbu.getPrefs%28%22CB.RedLinks.externalColor%22%29%20+%20%22%5Cn%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%22%u0426%u0432%u0435%u0442%20%u0432%u043D%u0443%u0442%u0440%u0435%u043D%u043D%u0438%u0445%20%u0441%u0441%u044B%u043B%u043E%u043A%3A%20%22%20+%20cbu.getPrefs%28%22CB.RedLinks.internalColor%22%29%3B%0A%7D%3B%0A%0A%0A//%20%u0421%u043E%u0437%u0434%u0430%u0442%u044C%20%u043C%u0435%u043D%u044E%20%u0441%20%u043D%u0430%u0441%u0442%u0440%u043E%u0439%u043A%u0430%u043C%u0438%20%u0434%u043B%u044F%20%u043A%u043D%u043E%u043F%u043A%u0438%20..............%0Avar%20array%20%3D%20%5B%0A%20%20%20%7B%20label%3A%20%27%u0426%u0432%u0435%u0442%20%u0432%u043D%u0435%u0448%u043D%u0438%u0445%20%u0441%u0441%u044B%u043B%u043E%u043A%3A%20%27%2C%20value%3A%20%27CB.RedLinks.externalColor%27%2C%20default%3A%20%27red%27%7D%2C%0A%20%20%20%7B%20label%3A%20%27%u0426%u0432%u0435%u0442%20%u0432%u043D%u0443%u0442%u0440%u0435%u043D%u043D%u0438%u0445%20%u0441%u0441%u044B%u043B%u043E%u043A%3A%20%27%2C%20value%3A%20%27CB.RedLinks.internalColor%27%2C%20default%3A%20%27green%27%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%5D%0Avar%20menu%20%3D%20self.appendChild%28document.createElement%28%22menupopup%22%29%29%3B%0Aarray.forEach%28m%3D%3E%20%7B%0A%20%20%20var%20mItem%20%3D%20document.createElement%28%22menuitem%22%29%3B%20%20%20%20%20%20%20%20%0A%20%20%20mItem.setAttribute%28%22label%22%2C%20m.label%20+%20cbu.getPrefs%28m.value%29%29%3B%20%20%20%20%20%0A%20%20%20mItem.onclick%20%3D%28%29%3D%3E%20%7B%0A%20%20%20%20%20%20var%20color%20%3D%20custombuttons.promptBox%28mItem.label%2C%20%27%u041E%u0442%u043C%u0435%u043D%u0430%20%u0432%u0435%u0440%u043D%u0451%u0442%20%u0437%u043D%u0430%u0447%u0435%u043D%u0438%u0435%20%u043F%u043E%20%u0443%u043C%u043E%u043B%u0447%u0430%u043D%u0438%u044E%27%29%5B1%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7C%7C%20m.default%3B%0A%20%20%20%20%20%20cbu.setPrefs%28m.value%2C%20color%29%3B%0A%20%20%20%20%20%20mItem.label%20%3D%20m.label%20+%20color%3B%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20addColorForLinks%28%29%3B%0A%20%20%20%7D%0A%20%20%20menu.appendChild%28mItem%29%3B%0A%7D%29%3B%0Amenu.setAttribute%28%22onclick%22%2C%20%22event.stopPropagation%28%29%22%29%3B%0A%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..............%0Avar%20s%20%3D%20%22CB.RedLinks%22%3B%0Afunction%20toggleImage%28%29%20%7B%0A%20%20%20self.ownerDocument.getAnonymousElementByAttribute%28self%2C%20%22class%22%2C%20%22toolbarbutton-icon%22%29.%0A%20%20%20src%20%3D%20%21cbu.getPrefs%28s%29%0A%20%20%20%3F%20self.image%20%0A%20%20%20%3A%20%22data%3Aimage/x-icon%3Bbase64%2CAAABAAEAEhIAAAEAIACABQAAFgAAACgAAAASAAAAJAAAAAEAIAAAAAAAWAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAADw1LZR0aluseG5v/Hhua/h4bmv8eG5r/Hhua/x4bmv8eG5r/Hhua/x4bmv8eG5r/Hhua/h4bm/8dGpbrDw1LZQAAAAAPDU5oIR2p/x8bn/4fG57/Hxue/x8bnv8fG57/Hxue/x8bnv8fG53/Hxue/x8bnv8fG57/Hxue/x8bnv8fG5/+IR2p/w8NTmceG57jHxyk/x8cof0fHKL/Hxyi/x8cov8fG6L/Hxui/yAdpf8gHaX/Hxyj/x8bov8fHKL/Hxyi/x8cov8fHKH9Hxyk/x4bnuMgHKf9Hxym/x8cp/8fHKf/Hxyn/x8cpv8gHan/IyCp/x0anf8cGZz/Ih+n/yEdqv8fHKb/Hxyn/x8cp/8fHKf/Hxym/yAcp/0gHKv+IByr/yAcq/8gHKv/IByq/yIer/8eGqL/AwJz/wICa/8DA2v/AQBt/xsYmv8iHq//IByq/yAcq/8gHKv/IByr/yAcq/4gHK//IByv/yAcr/8gHK7/Ih2z/xsYnf8AAGn/YWCg/8zM4v/Pz+T/bGun/wEAaP8cGaH/Ix60/yAcrv8gHK//IByv/yAcr/8hHLP/IRyz/yEcsv8iHbX/Hxup/wAAZ/9+fbL///////z8+//7+/v//////4yMu/8AAGv/Hxqs/yMdtv8hHLL/IRyz/yEcs/8hHbj/IR24/yEdt/8mIr//BgSH/19fnf//////8vL1/09NrP9DQqL/6env//////+Hh7b/BAN3/yIetv8hHbf/IR24/yEduP8iHbz/Ih28/yIdu/8lIMH/CQeE/8HB2P//////SUiZ/wcDk/8AAGv/NzaI/+Pj7///////ZWSh/w8Ko/8qJcj/Ih26/yIdvP8iHcD/Ih3A/yIdv/8lIMf/DguU/8HB1f//////REOS/wAAXv+Pjrz/xcXe/1VVnP+zstP/NzeL/wAAef8QDZz/JB7F/yMewP8iHcb/Ih3G/yIdxv8mIcn/Eg64/2RjrP//////8fH4/zo5jP+zstP//////9PT5v8aGXX/Cwpr/8HB2f+KirT/Cgac/yUgzv8jHcv/Ix3L/yMdy/8jHcr/JiDR/xALsv99fbP//////+rp8/9UU5v/ycnf///////Z2en/PDuN/97e7f//////iYm6/wwHqf8jHdD/Ix3Q/yMd0P8jHdD/Ix3P/ych2P8JBab/eXmr//////+wsND/Dg1x/83N4v//////zs7j/1dWnv/o5/L//////5WUxf8jHdX+Ix3V/yMd1f8jHdX/Ix3V/yQd1P8mH9v/Dgmr/2RivP81NIz/BgVt/zY2iv/ExN3//////3x8rv8qKoL/8vL4//////4jHNz9Ixza/yMc2/8jHNv/Ixzb/yMc2/8jHNn/KCDm/xMOwf8AAGD/vb3a//Lx9/9TUpr/fHy3/zs3vP8AAGb/enqs//////0iG9rjJBzh/yMc3/0jHOD/Ixzg/yMc4P8jHOD/Ixzf/ygh4f8HBYT/fn6t///////q6e7/NTSe/wAAgv8hIHn92dnq//f39OMSDnFoJx73/yQc5/4kHOT/JBzl/yQc5f8kHOX/JBzk/yUd6f8jHN3/AABy/3p6rf//////7e7z/39/r//T0+X+/////3x8fWcAAAEAEg1xZSMb5OskHOz/JBzq/iQc6/8kHOv/JBzr/yQc6f8mHvL/IRvS/wAAZ/+EhLf//////v/////39/frenp7ZQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%3D%22%3B%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%u0418%u0437%u043C%u0435%u043D%u0438%u0442%u044C%20%u0446%u0432%u0435%u0442%20%u0432%u043D%u0443%u0442%u0440%u0435%u043D%u043D%u0438%u0445%20%u0438%20%u0432%u043D%u0435%u0448%u043D%u0438%u0445%20%u0441%u0441%u044B%u043B%u043E%u043A%20%u043D%u0430%20%u0442%u0435%u043A%u0443%u0449%u0435%u0439%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u0435%20..........%0Afunction%20addColorForLinks%28%29%20%7B%0A%20%20%20var%20currHost%20%3D%20gBrowser.currentURI.host%3B%0A%20%20%20var%20run%20%3D%20cbu.getPrefs%28%22CB.RedLinks%22%29%3B%0A%0A%20%20%20function%20colorizeLinks%28win%29%20%7B%0A%20%20%20%20%20%20var%20doc%20%3D%20win.document%2C%20links%20%3D%20doc.links%3B%0A%20%20%20%20%20%20if%20%28%20%28run%20%7C%7C%20%22flag%22%20in%20doc%29%20%26%26%20links%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20run%20%3F%20doc.flag%20%3D%20true%20%3A%20delete%20doc.flag%3B%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%20Array.forEach%28links%2C%20function%28link%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%22previousColor%22%20in%20link%29%20link.style.color%20%3D%20link.previousColor%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20link.previousColor%20%3D%20link.style.color%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%20run%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20link.style.color%20%3D%20%28link.host%20%3D%3D%20currHost%29%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3F%20cbu.getPrefs%28%22CB.RedLinks.internalColor%22%29%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3A%20cbu.getPrefs%28%22CB.RedLinks.externalColor%22%29%3B%0A%20%20%20%20%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%20%20%20%20else%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%22previousColor%22%20in%20link%29%20delete%20link.previousColor%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%29%0A%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20for%20%28var%20i%20%3D%200%3B%20i%20%3C%20win.frames.length%3B%20i++%29%20colorizeLinks%28win.frames%5Bi%5D%29%3B%0A%20%20%20%7D%3B%0A%20%20%20colorizeLinks%28content%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%u0437%u0430%u0433%u0440%u0443%u0437%u043A%u043E%u0439%20%u0438%20%u043F%u0435%u0440%u0435%u043A%u043B%u044E%u0447%u0435%u043D%u0438%u0435%u043C%20%u0432%u043A%u043B%u0430%u0434%u043A%u0438%20..............%0Avar%20listener%20%3D%20%7B%20%0A%20%20%20onStateChange%3A%20function%28wpr%2C%20req%2C%20flag%29%20%7B%0A%20%20%20%20%20%20if%20%28%20gBrowser.currentURI.spec.startsWith%28%22http%22%29%20%26%26%20flag%20%26%20Ci.nsIWebProgressListener.STATE_STOP%20%29%0A%20%20%20%20%20%20%20%20%20%20%20addColorForLinks%28%29%3B%0A%20%20%20%7D%2C%0A%20%20%20%20%20%20%0A%20%20%20onLocationChange%3A%20function%28wpr%2C%20req%29%20%7B%0A%20%20%20%20%20%20if%20%28%20gBrowser.currentURI.spec.startsWith%28%22http%22%29%20%26%26%20%21req%20%26%26%20wpr.document.readyState%20%3D%3D%20%22complete%22%29%0A%20%20%20%20%20%20%20%20%20%20%20addColorForLinks%28%29%3B%0A%20%20%20%7D%20%20%20%20%20%20%20%0A%7D%3B%0AgBrowser.addProgressListener%28listener%29%3B%0AaddDestructor%28function%28%29%20gBrowser.removeProgressListener%28listener%29%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

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

Выделить код

Код:

// Настройка функций кликов мыши для кнопки ..............
this.onclick =e=> {

   // действие при клике ЛКМ ....
   if ( e.button == 0 )
        addColorForLinks( cbu.setPrefs("CB.RedLinks", !cbu.getPrefs("CB.RedLinks")) );
     
   // действие при клике ПКМ ....    
   if ( e.button == 2 && !e.ctrlKey && !e.shiftKey && !e.altKey && !e.metaKey ) { 
        e.preventDefault();  
        menu.showPopup( this, -1, -1, "popup", "bottomleft", "topleft");
        }
};
this.oncontextmenu =e=> { e.button && !e.ctrlKey && e.preventDefault() };


// Создать настройки кнопки в about:config если они не существует ..............
cbu.isPref("CB.RedLinks", false);
cbu.isPref("CB.RedLinks.internalColor", "red");
cbu.isPref("CB.RedLinks.externalColor", "green");


// Подсказка для кнопки ..............
this.onmouseover =()=> {
   this.tooltipText = self.label + "\nЛ:  Включить - выключить \nП: Mеню кнопки \nДП: CB меню" + "\n\n" +
                      "Цвет внешних ссылок: " + cbu.getPrefs("CB.RedLinks.externalColor") + "\n" +
                      "Цвет внутренних ссылок: " + cbu.getPrefs("CB.RedLinks.internalColor");
};


// Создать меню с настройками для кнопки ..............
var array = [
   { label: 'Цвет внешних ссылок: ', value: 'CB.RedLinks.externalColor', default: 'red'},
   { label: 'Цвет внутренних ссылок: ', value: 'CB.RedLinks.internalColor', default: 'green'},
            ]
var menu = self.appendChild(document.createElement("menupopup"));
array.forEach(m=> {
   var mItem = document.createElement("menuitem");        
   mItem.setAttribute("label", m.label + cbu.getPrefs(m.value));     
   mItem.onclick =()=> {
      var color = custombuttons.promptBox(mItem.label, 'Отмена вернёт значение по умолчанию')[1]
                  || m.default;
      cbu.setPrefs(m.value, color);
      mItem.label = m.label + color;     
             
      addColorForLinks();
   }
   menu.appendChild(mItem);
});
menu.setAttribute("onclick", "event.stopPropagation()");


// Установить нужную иконку кнопки при старте браузера или при изменениях настроек кнопки ..............
var s = "CB.RedLinks";
function toggleImage() {
   self.ownerDocument.getAnonymousElementByAttribute(self, "class", "toolbarbutton-icon").
   src = !cbu.getPrefs(s)
   ? self.image 
   : "data:image/x-icon;base64,AAABAAEAEhIAAAEAIACABQAAFgAAACgAAAASAAAAJAAAAAEAIAAAAAAAWAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAADw1LZR0aluseG5v/Hhua/h4bmv8eG5r/Hhua/x4bmv8eG5r/Hhua/x4bmv8eG5r/Hhua/h4bm/8dGpbrDw1LZQAAAAAPDU5oIR2p/x8bn/4fG57/Hxue/x8bnv8fG57/Hxue/x8bnv8fG53/Hxue/x8bnv8fG57/Hxue/x8bnv8fG5/+IR2p/w8NTmceG57jHxyk/x8cof0fHKL/Hxyi/x8cov8fG6L/Hxui/yAdpf8gHaX/Hxyj/x8bov8fHKL/Hxyi/x8cov8fHKH9Hxyk/x4bnuMgHKf9Hxym/x8cp/8fHKf/Hxyn/x8cpv8gHan/IyCp/x0anf8cGZz/Ih+n/yEdqv8fHKb/Hxyn/x8cp/8fHKf/Hxym/yAcp/0gHKv+IByr/yAcq/8gHKv/IByq/yIer/8eGqL/AwJz/wICa/8DA2v/AQBt/xsYmv8iHq//IByq/yAcq/8gHKv/IByr/yAcq/4gHK//IByv/yAcr/8gHK7/Ih2z/xsYnf8AAGn/YWCg/8zM4v/Pz+T/bGun/wEAaP8cGaH/Ix60/yAcrv8gHK//IByv/yAcr/8hHLP/IRyz/yEcsv8iHbX/Hxup/wAAZ/9+fbL///////z8+//7+/v//////4yMu/8AAGv/Hxqs/yMdtv8hHLL/IRyz/yEcs/8hHbj/IR24/yEdt/8mIr//BgSH/19fnf//////8vL1/09NrP9DQqL/6env//////+Hh7b/BAN3/yIetv8hHbf/IR24/yEduP8iHbz/Ih28/yIdu/8lIMH/CQeE/8HB2P//////SUiZ/wcDk/8AAGv/NzaI/+Pj7///////ZWSh/w8Ko/8qJcj/Ih26/yIdvP8iHcD/Ih3A/yIdv/8lIMf/DguU/8HB1f//////REOS/wAAXv+Pjrz/xcXe/1VVnP+zstP/NzeL/wAAef8QDZz/JB7F/yMewP8iHcb/Ih3G/yIdxv8mIcn/Eg64/2RjrP//////8fH4/zo5jP+zstP//////9PT5v8aGXX/Cwpr/8HB2f+KirT/Cgac/yUgzv8jHcv/Ix3L/yMdy/8jHcr/JiDR/xALsv99fbP//////+rp8/9UU5v/ycnf///////Z2en/PDuN/97e7f//////iYm6/wwHqf8jHdD/Ix3Q/yMd0P8jHdD/Ix3P/ych2P8JBab/eXmr//////+wsND/Dg1x/83N4v//////zs7j/1dWnv/o5/L//////5WUxf8jHdX+Ix3V/yMd1f8jHdX/Ix3V/yQd1P8mH9v/Dgmr/2RivP81NIz/BgVt/zY2iv/ExN3//////3x8rv8qKoL/8vL4//////4jHNz9Ixza/yMc2/8jHNv/Ixzb/yMc2/8jHNn/KCDm/xMOwf8AAGD/vb3a//Lx9/9TUpr/fHy3/zs3vP8AAGb/enqs//////0iG9rjJBzh/yMc3/0jHOD/Ixzg/yMc4P8jHOD/Ixzf/ygh4f8HBYT/fn6t///////q6e7/NTSe/wAAgv8hIHn92dnq//f39OMSDnFoJx73/yQc5/4kHOT/JBzl/yQc5f8kHOX/JBzk/yUd6f8jHN3/AABy/3p6rf//////7e7z/39/r//T0+X+/////3x8fWcAAAEAEg1xZSMb5OskHOz/JBzq/iQc6/8kHOv/JBzr/yQc6f8mHvL/IRvS/wAAZ/+EhLf//////v/////39/frenp7ZQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=";
};
toggleImage();
gPrefService.addObserver(s, toggleImage, false);
addDestructor(()=> gPrefService.removeObserver(s, toggleImage) );


// Изменить цвет внутренних и внешних ссылок на текущей странице ..........
function addColorForLinks() {
   var currHost = gBrowser.currentURI.host;
   var run = cbu.getPrefs("CB.RedLinks");

   function colorizeLinks(win) {
      var doc = win.document, links = doc.links;
      if ( (run || "flag" in doc) && links ) {
            run ? doc.flag = true : delete doc.flag;
            
            Array.forEach(links, function(link) {
               if ("previousColor" in link) link.style.color = link.previousColor;
               link.previousColor = link.style.color;
               
               if ( run ) {
                    link.style.color = (link.host == currHost) 
                    ? cbu.getPrefs("CB.RedLinks.internalColor") 
                    : cbu.getPrefs("CB.RedLinks.externalColor");
                    }
               else 
                    if ("previousColor" in link) delete link.previousColor;
            })
           }
      for (var i = 0; i < win.frames.length; i++) colorizeLinks(win.frames[i]);
   };
   colorizeLinks(content);   
};


// Обработчик следит за загрузкой и переключением вкладки ..............
var listener = { 
   onStateChange: function(wpr, req, flag) {
      if ( gBrowser.currentURI.spec.startsWith("http") && flag & Ci.nsIWebProgressListener.STATE_STOP )
           addColorForLinks();
   },
      
   onLocationChange: function(wpr, req) {
      if ( gBrowser.currentURI.spec.startsWith("http") && !req && wpr.document.readyState == "complete")
           addColorForLinks();
   }       
};
gBrowser.addProgressListener(listener);
addDestructor(function() gBrowser.removeProgressListener(listener));

Переключать проигрывания анимации(gif)( Firefox24+ ) от 08.06.2016.
Кнопка останавливает или запускает проигрывания gif-анимации на страницах. При включении gif-анимации обновляется текущая страница, чтобы изменения вступили в силу в других страницах нужно обновить эти страницы.

ЛКМ => Включить или выключить gif-анимацию.

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

Выделить код

Код:

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%u043E%u043A%u0430%u0437%u044B%u0432%u0430%u0442%u044C%20%u0430%u043D%u0438%u043C%u0430%u0446%u0438%u044E%28gif%29%20%u043D%u0430%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u0430%u0445%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAADAFBMVEUAAADT09PU1NTPz8+d3X45whyHh4fOzs6EhITR0dHS0tKDg4NB8Rs19AyC52s14RCBgYHS0tKCgoI1zRSAgIDS0tI62RkzuRd+fn7Q0NA5yhorsBB9fX061hkusxIkqQlWVlaWlpa/v786yhsrrxAjnwpjY2OMjIyNjY2SkpKTk5OTk5OTk5OTk5Nbo008nCghnQkhnQg2miJTm0WNjY2NjY02ow3o6OjMzMzHx8fJycnDw8NM+SXR0dEpoxDFxcXS0tLLy8vIyMjQ0NA5xRxN+yU4ux7CwsI72RnKyspSvR7BwcFI9iIqpBGG6HBJ+x+Y3Yk75RbAwMDNzc1d+TU5wx096hc/tRs+3BOGy3cyrRpB4h1HnjRc+zTT09MppBFw8VNj5EZPvBqd3X5myFQspxQ74hfGxsZPtR4jjwckkAfPz89S9iyd5IxU2DdR1zbExMRQ0jY62Rk4sh8smQqGhoY9+BJLtDRL+SYkkAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACU2kAXAAABAHRSTlMA19fn/v0e5zfnrTf9UPKjN9I35jfn/eY35/ajN/bmUAE4/vnpfQMTZpKkrLa80ef4996ycif//////////////////////////////////////////////////////////////////////////////////////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8GAuXAAAAAlwSFlzAAALEgAACxIB0t1+/AAAAOpJREFUGJU9zGdTAjEQgOGNir2iYu8KgoA95fodHUQ6KmIX7L3/e/fU8f2Q7D6TCQA09xFCGuwIaQdoSv53dmgMAtBLxliSneJJDaMNgVGM/Vyq+ge4vtov1NAIArVHds2uvmjophE/pb/t7L5nju9aAGvlvFDYLkfT6ehWtw0dCZNncy8PnEduO7sQnJKUOAnfm2bk4MjRg9ArLOu5JEmfRc1y9CMM6BciHBe4C+EaQhiWH/WnuFLU9LeP0TGE8VQstlfZ12S5OjE5BTA9M5vPp85rdUWZm19wA3gWvb4lfyC4vLK6tr6x+Q2vMzR/vIyeZQAAAABJRU5ErkJggg%3D%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bthis._handleClick%20%3D%28%29%3D%3E%20%7B%0A%20%20%20cbu.setPrefs%28s%2C%20cbu.getPrefs%28s%29%20%3D%3D%20%22normal%22%20%3F%20%22none%22%20%3A%20%22normal%22%29%3B%0A%20%20%20cbu.getPrefs%28s%29%20%3D%3D%20%22normal%22%20%3F%20BrowserReload%28%29%20%3A%20setTimeout%28%28%29%3D%3E%20BrowserStop%28%29%2C%2050%29%3B%0A%7D%3B%0A%0Avar%20s%20%3D%20%22image.animation_mode%22%3B%0Afunction%20toggleImage%28%29%20%7B%0A%20%20%20var%20icon%20%3D%20self.ownerDocument.getAnonymousElementByAttribute%28self%2C%20%22class%22%2C%20%22toolbarbutton-icon%22%29%3B%0A%20%20%20icon.src%20%3D%20cbu.getPrefs%28s%29%20%3D%3D%20%22normal%22%20%0A%20%20%20%3F%20self.image%0A%20%20%20%3A%20%22data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAABblBMVEUAAADq6urr6+vm5ubnuaPgTC2enp7l5eWbm5vo6Ojp6emampr0Zkf2WjjupJPwUjCYmJjp6emZmZnpSSeXl5fp6enoVzjiPx2VlZXn5+fkTi7bNhSUlJTnVjfdORfVLgxtbW2tra3W1tbjUDHaNhTLLQ16enqjo6OkpKSpqamqqqqqqqqqqqqqqqq3dWjBSjLJKwzJKwvARCu1aVqkpKSkpKTORBH////j4+Pe3t7g4ODa2tr7cVLo6OjNNBXc3Nzp6eni4uLf39/n5+fhTi/8clPdSSvZ2dnoWDnh4eHdZi3Y2Nj4bU/ONRbvqJj8bk3ouK3sXT7X19fk5OT7gWLgTS/uYULdTiHtWTHYpJnVPiDoZEbAWEH8gWLq6urONBb1lH7qhW/gYiXnuaPUhnfQOBnrXD3d3d3bYSa7Lgq8Lwrm5ub4d1ntvbLgdV7fc13b29vbcVzoVznZRSfFOQ2dnZ36Yj/LYkv7cVO8MAsi43WXAAAANnRSTlMA19fn/v0e5zfnrTf9UPKjN9I35jfn/eY35/ajN/bmUAE4/vnpfQMTZpKkrLa80ef4996yciec+O5uAAAA5ElEQVR4Xj3M1XLDMBBA0VVTJ2nKzMzMIrPDjGVmZv77rt2Z3oeV9oxGAOBvJoRUuRESAqhO/Xd2aLUD0GvGWIqd4qSWVYPAKMa8Q9c98NZ394Ue7kag7pXdspsfGr7z4af0r63tz/zxQwCwIOflcm4zls3GMg0u1CZtXii+PXEeva+rR2iRMnkSebTt6MGR0ojQJBzndUPK74rhKK0IbeaViCQE7kJ0dCJ0qc/mS0KrGObHV08vQl86Ht/Z3TNUdb9/YBBgaHikVEqfX1xq2ujY+ATA5NT0zOzc/MLi0vLK6tr6L68zNH+FfEIKAAAAAElFTkSuQmCC%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%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B%0A%0A%0A%0A%0A%0A%0A%20%20%20%20%20%20%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._handleClick =()=> {
   cbu.setPrefs(s, cbu.getPrefs(s) == "normal" ? "none" : "normal");
   cbu.getPrefs(s) == "normal" ? BrowserReload() : setTimeout(()=> BrowserStop(), 50);
};

var s = "image.animation_mode";
function toggleImage() {
   var icon = self.ownerDocument.getAnonymousElementByAttribute(self, "class", "toolbarbutton-icon");
   icon.src = cbu.getPrefs(s) == "normal" 
   ? self.image
   : "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAABblBMVEUAAADq6urr6+vm5ubnuaPgTC2enp7l5eWbm5vo6Ojp6emampr0Zkf2WjjupJPwUjCYmJjp6emZmZnpSSeXl5fp6enoVzjiPx2VlZXn5+fkTi7bNhSUlJTnVjfdORfVLgxtbW2tra3W1tbjUDHaNhTLLQ16enqjo6OkpKSpqamqqqqqqqqqqqqqqqq3dWjBSjLJKwzJKwvARCu1aVqkpKSkpKTORBH////j4+Pe3t7g4ODa2tr7cVLo6OjNNBXc3Nzp6eni4uLf39/n5+fhTi/8clPdSSvZ2dnoWDnh4eHdZi3Y2Nj4bU/ONRbvqJj8bk3ouK3sXT7X19fk5OT7gWLgTS/uYULdTiHtWTHYpJnVPiDoZEbAWEH8gWLq6urONBb1lH7qhW/gYiXnuaPUhnfQOBnrXD3d3d3bYSa7Lgq8Lwrm5ub4d1ntvbLgdV7fc13b29vbcVzoVznZRSfFOQ2dnZ36Yj/LYkv7cVO8MAsi43WXAAAANnRSTlMA19fn/v0e5zfnrTf9UPKjN9I35jfn/eY35/ajN/bmUAE4/vnpfQMTZpKkrLa80ef4996yciec+O5uAAAA5ElEQVR4Xj3M1XLDMBBA0VVTJ2nKzMzMIrPDjGVmZv77rt2Z3oeV9oxGAOBvJoRUuRESAqhO/Xd2aLUD0GvGWIqd4qSWVYPAKMa8Q9c98NZ394Ue7kag7pXdspsfGr7z4af0r63tz/zxQwCwIOflcm4zls3GMg0u1CZtXii+PXEeva+rR2iRMnkSebTt6MGR0ojQJBzndUPK74rhKK0IbeaViCQE7kJ0dCJ0qc/mS0KrGObHV08vQl86Ht/Z3TNUdb9/YBBgaHikVEqfX1xq2ujY+ATA5NT0zOzc/MLi0vLK6tr6L68zNH+FfEIKAAAAAElFTkSuQmCC";  
};
toggleImage();
gPrefService.addObserver(s, toggleImage, false);
addDestructor(()=> gPrefService.removeObserver(s, toggleImage) );

Password(Firefox,Thunderbird)
ЛКМ - Вызывает диаловое окно «Сохранённые пароли»
Аналогично нажатию Инструменты-Настройки-Защита-Сохранёные пароли

Код кнопки

Выделить код

Код:

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%3EPassword%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*/%0Athis.tooltipText%20%3D%20%22%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20%u043E%u043A%u043D%u043E%20%AB%u0421%u043E%u0445%u0440%u0430%u043D%u0451%u043D%u043D%u044B%u0435%20%u043F%u0430%u0440%u043E%u043B%u0438%BB%22%3B%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*CODE*/%0AopenWindow%28%22Toolkit%3APasswordManager%22%2C%20%22chrome%3A//passwordmgr/content/passwordManager.xul%22%2C%20%22%22%2C%20null%29%3B%0Areturn%3B%0A%0Afunction%20openWindow%28aWindowType%2C%20aURL%2C%20aFeatures%2C%20aParams%29%20%7B%0A%20%20%20%20%3Bvar%20wm%20%3D%20Components.classes%5B%27@mozilla.org/appshell/window-mediator%3B1%27%5D.getService%28Components.interfaces.nsIWindowMediator%29%3B%0A%20%20%20%20%3Bvar%20win%20%3D%20aWindowType%20%3F%20wm.getMostRecentWindow%28aWindowType%29%20%3A%20null%3B%0A%20%20%20%20win%20%3D%20window.openDialog%28aURL%2C%20%22_blank%22%2C%20features%2C%20aParams%29%3B%0A%20%20%20%20if%20%28win%29%20%7B%0A%20%20%20%20%20%20%20%20if%20%28%22initWithParams%22%20in%20win%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20win.initWithParams%28aParams%29%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20win.focus%28%29%3B%0A%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20var%20features%20%3D%20%22resizable%2Cdialog%3Dno%2Ccenterscreen%22%20+%20%28aFeatures%20%21%3D%20%22%22%20%3F%20%22%2C%22%20+%20aFeatures%20%3A%20%22%22%29%3B%0A%20%20%20%20%20%20%20%20var%20parentWindow%20%3D%20this.instantApply%20%7C%7C%20%21window.opener%20%7C%7C%20window.opener.closed%20%3F%20window%20%3A%20window.opener%3B%0A%20%20%20%20%20%20%20%20win%20%3D%20parentWindow.openDialog%28aURL%2C%20%22_blank%22%2C%20features%2C%20aParams%29%3B%0A%20%20%20%20%7D%0A%20%20%20%20return%20win%3B%0A%7D%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

Код (секция Код)

Выделить код

Код:

/*CODE*/
openWindow("Toolkit:PasswordManager", "chrome://passwordmgr/content/passwordManager.xul", "", null);
return;

function openWindow(aWindowType, aURL, aFeatures, aParams) {
    ;var wm = Components.classes['@mozilla.org/appshell/window-mediator;1'].getService(Components.interfaces.nsIWindowMediator);
    ;var win = aWindowType ? wm.getMostRecentWindow(aWindowType) : null;
    win = window.openDialog(aURL, "_blank", features, aParams);
    if (win) {
        if ("initWithParams" in win) {
            win.initWithParams(aParams);
        }
        win.focus();
    } else {
        var features = "resizable,dialog=no,centerscreen" + (aFeatures != "" ? "," + aFeatures : "");
        var parentWindow = this.instantApply || !window.opener || window.opener.closed ? window : window.opener;
        win = parentWindow.openDialog(aURL, "_blank", features, aParams);
    }
    return win;
}

Код (секция Инициализация)

Выделить код

Код:

/*Initialization Code*/
this.tooltipText = "Открыть окно «Сохранённые пароли»";


За идею кода спасибо -Infocatcher

AntiMalware(Firefox)
ЛКМ - Запускает проверку сайта(текущего) на вирусы
Аналогично функциям FlagFox

Код кнопки

Выделить код

Код:

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%3EAntiMalware%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%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%3D%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B/*Initialization%20Code*/%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*CODE*/%0Aconst%20cTitle%20%3D%20%22%u041E%u0448%u0438%u0431%u043A%u0430%22%0Aconst%20cMsg%20%3D%20%22%u041D%u0435%u0432%u0435%u0440%u043D%u044B%u0439%20%u0430%u0434%u0440%u0435%u0441%20%u0438%u043B%u0438%20%u043E%u0448%u0438%u0431%u043A%u0430%20%u043F%u0435%u0440%u0435%u0434%u0430%u0447%u0438%22%0Avar%20domainName%20%3D%20%22%22%3B%0Atry%20%7B%0A%20%20%20%20domainName%20%3D%20content.location.hostname%3B%0A%20%20%20%20getBrowser%20%28%29.%20selectedTab%20%3D%20getBrowser%20%28%29.%20addTab%20%28%22http%3A//antivirus-alarm.ru/proverka/%3Furl%3D%22+domainName%29%3B%0A%7D%0Acatch%28e%29%20%7B%0A%20custombuttons.%20alertBox%20%28cTitle%2C%20cMsg%29%3B%20%0A%7D%3B%0A%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

Код (секция Код)

Выделить код

Код:

/*CODE*/
const cTitle = "Ошибка"
const cMsg = "Неверный адрес или ошибка передачи"
var domainName = "";
try {
    domainName = content.location.hostname;
    getBrowser (). selectedTab = getBrowser (). addTab ("http://antivirus-alarm.ru/proverka/?url="+domainName);
}
catch(e) {
 custombuttons. alertBox (cTitle, cMsg); 
};

Код (секция Инициализация)

Выделить код

Код:

/*Initialization Code*/


P.S. Для запуска в Thunderbird надо исправить открытие вкладки.

Open URLs(Thunderbird)
Выдаёт меню адресов с иконкой и названием для загрузки в новом табе

Код кнопки

Выделить код

Код:

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%3EOpen%20URLs%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%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/*Initialization%20Code*/%0A%0Afunction%20TabsUrl%28OpenUrl%29%7B%0Avar%20inBackground%20%3D%20false%3B%0Avar%20cnConf%20%3D%20OpenUrl%3B%0Avar%20tabmail%20%3D%20document.%20getElementById%20%28%22tabmail%22%29%3B%0Atabmail.%20openTab%0A%20%20%20%28%0A%20%20%20%20%20%20%22contentTab%22%2C%0A%09%7B%20background%3A%20inBackground%2C%0A%09%20%20contentPage%3A%20cnConf%0A%09%7D%0A%20%20%20%20%29%0A%7D%3B%0A%0A//var%20NumMenu%20%3D%201%20//%20%u0427%u0438%u0441%u043B%u043E%20%u043F%u0443%u043D%u043A%u0442%u043E%u0432%20%u0432%20%u043C%u0435%u043D%u044E%0Avar%20OpenMenu%20%3D%0A%3Cmenupopup%20xmlns%3D%22http%3A//www.mozilla.org/keymaster/gatekeeper/there.is.only.xul%22%0A%20%20%20%20%20%20%20oncommand%3D%22this.parentNode.openadres%28event%29%22%3E%0A%0A%20%20%20%20%3Cmenuitem%20%0A%20%20%20%20%20%20class%3D%22menuitem-iconic%22%0A%20%20%20%20%20%20value%3D%22https%3A//www.google.com%22%20%0A%20%20%20%20%20%20image%3D%22data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAACQAAAAkCAYAAADhAJiYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyBpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBXaW5kb3dzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkY1MjI5QkVERDU1MjExRTBCREIxRkM2NDg5MzRDQTQyIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkY1MjI5QkVFRDU1MjExRTBCREIxRkM2NDg5MzRDQTQyIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6RjUyMjlCRUJENTUyMTFFMEJEQjFGQzY0ODkzNENBNDIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6RjUyMjlCRUNENTUyMTFFMEJEQjFGQzY0ODkzNENBNDIiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz65gakZAAAIYUlEQVR42rxY628U1xX/3Xnt2y/sxTYrHCi48QbTpJBA5RCqVmoSpUlREBaqAqrUj5Yq1H7o9/4HfKzSNHxoVAlC06pSRT80oVjEBuRCEhtjHmbt+rXZtdf2vuZxZ6bnzngtY7y7ViI60vGMZ+7c+7u/c87vnFlg7Th79iwGBgbitm3/juyu67rFZ2mO4+Qsy7qysrLy7sWLF2VsPs6fP3+IBt4ic2nwuhG4b2S13t04Px18fHz8/Llz51ra2tp8MP39/Yl8Pn9DPP2mAL4NcHHouv7bZDIJRVVVHDt27M1oNPoK3Yew/+ch1pNlGYyxk8TQR1I8HpeOHj16SDwktKiA2q7RlJ4xJs6Ody3RtSSBFoJ3ppF15yZQ3X19fQcU+ifIOW8RgIjCbTHEmFiMiSuUSi4sC+C0qKbSuy7dK7swTQembsK1LXR0hhEOa978NY4YBXmrQmBUwzDkCn3bASTTrheXGW7fWcHUoxJcJww5pCLeJsGwgpidLmA1l0Zp1cLhwyra2wM0xqk6t7gvGCwUCqpCF4xASRtdVhMMMTOXlnDlyhJNsIqDB1WEIwXMzWm4+6WJRUOBns9j/94Cjr/RjO7nYsScDM5tuFUZZ966ts2Zsu4qAlPPZSImlgoMn123iIVZvPN2HIldIQTDLg4mJVwNKLj8L/KfqWB2nuNHrRE0N0QIjOOFVz3uBSHrzHACI87VTAAWE0/Pq5iYnEEwtoRQhLJDYTRJADJUvPyqgu4kg6yEMPXYwciteZqXw7FpszXmdtbJABTxx7Z9QLUYEoFs2TIyGQnLWR2hFp0W1iEpMmyCwy0XURV4uTeExRTD0oKBew/mkC8kENJUOHVCobK2ItKV5BA2t+oDMoHskkWxo2GJB+EYlN4mg63YXmqb9P/e9hASnTbu3ytjJWtB1w1oikQsuHXc5WfgOkN2HYaEnljcxfhEHmWuIpV1MLuygh1tQYhsdmhjGllA5mC0eC77NQ72yF5M2F44uDVlRDyn5BIMMe8Fy+I1ARFmUE7SgiaKeRUBdwdGhnR07zahBWiASREfpCxbDmD0Vo5YKeCVo9+ls0Ib4XUj2qYxIk6Vig5YpuXfrPGmpjK8eZxhaiyP9LyJG/8GdjaaOP5DBXLYwvxSAH/9yyL+O3MLJ091I/n8d2gjJup4y3OXJ5rElOIJO8WQyAbDNMDIN5LgEHhqVzq907Vbxs9Py7jwURZjj1fxwSUT2fI+dH9fw8g1CQ/HHuEXA+148UA7ZCbDJP1hWwFiFeYdumRrAkmAhO8sy095Ty8oZwQotiZYTyoqPPq7kyH85tfduDMxj9UlDYoexuiwjOHhLzy2Dr/USQGv0HxWzaLqVUGhPZK0rkPrwijcJahzPX65F2kVQBthiafCvU0xGa/3JahdsHHtWh53Pm1FoSwjNalT2XDR2GBQ1vnjN79fAeTtcE2lKzj8GPKEUQQ13zKoGZ5kSlRz2zWhkyIzU0JHgiZlRUSDOzE5kcb7fyjgdH8MuzpojOFi45RbxajrijDxWVLEaMfmddPeh0W6I1MV52FMzWjERhnz0w5ypRyJYAa8ZKMp0oa7YxG8/3sd770HJHaLUHDr9kS0ui+MnoOc+jokwDAqrIuFVty8LmPo0yy0cAGJLgeNLS5++hawMKtjbGSBuoFGTKeC+OOHqxj4VQOiYQe1hNqv9n6noVSC1ea2Z1u7jMCQniysJnBtMIDb1wdx5AjDS4citJiNoBwBFXTYUgTf6wX++XcLmaUQ7k7O4epgAe++1UE9Eq8OSHL9eKW1JRFUzlpQV1jabK5D5cIMY3wqgpuDN/DC/hUc72tAQ1BGUItACdhU00inqFF6sdfFyTMamhKklbwB9ydSlMWmX2CrzL+eVJ5Si3QTPnSqu8yVHJTNADJzRZRzi9i3jyq6o0ANUxCKztGh4ir6C6bDJcXe/5yEH7zK8WBc1L0yDK7T/BrN7VR1mQh3uxLUrtcC+KA2A/Lzy8bcvIKpBxEa04ySnYccoV1zAkLsETyvlrkS6Y5Du7QM7Ii2kj4U0Lkr7GWRl8G16sdaIiuCHa8Xcqs3aAEK/fxyDjPU42haK8a/CqK7J4zWxiI4xYbEVBJTcj0xxWQLRbMJNz830Nq8iNeOtcHSHS9xavfpzMOgVPpZv+pvDcimtN3bVcTuXTpS9w1Mjbfi8p84Dr0WxR5yT1ihZp4bxLSK+UwMn10ld01PoP9MIzrjDSSQddgRzFDS+EpNANiaarrO1k0+tTSIhoo49TMFf/vHIr76IofM6E7cm9pBKa8h1lxEUNJh5Bl1Aqvo7FzEL8+IvkiGoYtNsto6JPkSzryO0fuacj0xrqVDooOIxThOn4pRrTKoqacmn5r5silcpUMjd7XvU5HYQ0x2hT01L5Xsp0rP1r267KFYcxn51zIsiSqzoNV2qn87Gab4BLKR7FHR8zx1CLzotRau+DCkCUW/JPJEuMjZ5gewICAgBQRBnD6nbalEivVoMpXRVEpjRfXF0XGrmigDpSK1pvQxaFOWudRng5P/OUO5bBMrIjncmnNUTGiTUIJQKIz8amF5dmY2p5CbzOHhGyNv/OT1QntHR1SIGCF9qvV4FodYo6mpmYgQrcvwl49TqUnvizWbzXJD1+PJZM8L8XgbEz4VPYo4i+h/FhYMBtHS0kJnKkW372Q+vHDhg3Q6PaT47Syfu/zJJ3/OF/PKiRMnftx7oLc5EolU+Rbf3N2wJx9t57cByW830ukF/vnQUOrSpY8/fvjw4SA9yldmE8A6yZIdHZ1H9u7pSkqKGn52v80IHZCcYrGQHh0dvW2a5n/o5n2y3MbtCjVoIusgI91HaBsZ+20OQf8K2ddrVhQ3/yfAANxTCPXwqxZ5AAAAAElFTkSuQmCC%22%20%20%20%20%20%0A%20%20%20%20%20%20label%3D%22Google%22/%3E%0A%20%20%20%20%3Cmenuitem%20%20%0A%20%20%20%20%20%20class%3D%22menuitem-iconic%22%0A%20%20%20%20%20%20value%3D%22http%3A//forum.mozilla-russia.org%22%20%0A%20%20%20%20%20%20image%3D%22data%3Aimage/png%3Bbase64%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%22%20%20%20%20%20%0A%20%20%20%20%20%20label%3D%22%u0424%u043E%u0440%u0443%u043C%20Mozilla%22/%3E%0A%3C/menupopup%3E%3B%0A%0AOpenMenu%20%3D%20custombuttonsUtils.%20makeXML%20%28OpenMenu%29%3B%0A//OpenMenu.%20childNodes%20%5B1%5D.%20setAttribute%20%28%22checked%22%2C%20%22true%22%29%3B%20//%u0443%u0431%u0440%u0430%u043B%20%u043F%u0440%u043E%u0432%u0435%u0440%u043A%u0443%20%u0442.%u043A.%20%u043E%u043D%u0430%20%u043E%u0448%u0438%u0431%u043E%u0447%u043D%u0430%0Athis.%20orient%20%3D%20%22horizontal%22%3B%0Athis.%20type%20%3D%20%22menu%22%3B%0Athis.%20appendChild%20%28OpenMenu%29%3B%0Athis.%20openadres%20%3D%20function%20%28MyEvets%29%0A%7B%0A%20%20%20%20var%20url%20%3D%20MyEvets.%20target.%20getAttribute%20%28%22value%22%29%3B%0A%20%20%20%20TabsUrl%28url%29%3B%0A%7D%3B%0A%0A//%20%u041E%u0442%u043A%u0440%u044B%u0432%u0430%u0435%u0442%20%u0441%u043F%u0438%u0441%u043E%u043A%20%u043A%u043E%u0433%u0434%u0430%20%u043A%u0443%u0440%u0441%u043E%u0440%20%u043C%u044B%u0448%u043A%u0438%20%u043D%u0430%u0434%20%u043A%u043D%u043E%u043F%u043A%u043E%u0439%0Athis.%20onmouseover%20%3D%20function%20%28event%29%0A%7B%0A%20%20%20%20this.%20open%20%3D%20true%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

Код (секция Код)

Код (секция Инициализация)

Выделить код

Код:

/*Initialization Code*/

function TabsUrl(OpenUrl){
var inBackground = false;
var cnConf = OpenUrl;
var tabmail = document. getElementById ("tabmail");
tabmail. openTab
   (
      "contentTab",
    { background: inBackground,
      contentPage: cnConf
    }
    )
};

//var NumMenu = 1 // Число пунктов в меню
var OpenMenu =
<menupopup xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
       oncommand="this.parentNode.openadres(event)">

    <menuitem 
      class="menuitem-iconic"
      value="https://www.google.com" 
      image="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAAkCAYAAADhAJiYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyBpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBXaW5kb3dzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkY1MjI5QkVERDU1MjExRTBCREIxRkM2NDg5MzRDQTQyIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkY1MjI5QkVFRDU1MjExRTBCREIxRkM2NDg5MzRDQTQyIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6RjUyMjlCRUJENTUyMTFFMEJEQjFGQzY0ODkzNENBNDIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6RjUyMjlCRUNENTUyMTFFMEJEQjFGQzY0ODkzNENBNDIiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz65gakZAAAIYUlEQVR42rxY628U1xX/3Xnt2y/sxTYrHCi48QbTpJBA5RCqVmoSpUlREBaqAqrUj5Yq1H7o9/4HfKzSNHxoVAlC06pSRT80oVjEBuRCEhtjHmbt+rXZtdf2vuZxZ6bnzngtY7y7ViI60vGMZ+7c+7u/c87vnFlg7Th79iwGBgbitm3/juyu67rFZ2mO4+Qsy7qysrLy7sWLF2VsPs6fP3+IBt4ic2nwuhG4b2S13t04Px18fHz8/Llz51ra2tp8MP39/Yl8Pn9DPP2mAL4NcHHouv7bZDIJRVVVHDt27M1oNPoK3Yew/+ch1pNlGYyxk8TQR1I8HpeOHj16SDwktKiA2q7RlJ4xJs6Ody3RtSSBFoJ3ppF15yZQ3X19fQcU+ifIOW8RgIjCbTHEmFiMiSuUSi4sC+C0qKbSuy7dK7swTQembsK1LXR0hhEOa978NY4YBXmrQmBUwzDkCn3bASTTrheXGW7fWcHUoxJcJww5pCLeJsGwgpidLmA1l0Zp1cLhwyra2wM0xqk6t7gvGCwUCqpCF4xASRtdVhMMMTOXlnDlyhJNsIqDB1WEIwXMzWm4+6WJRUOBns9j/94Cjr/RjO7nYsScDM5tuFUZZ966ts2Zsu4qAlPPZSImlgoMn123iIVZvPN2HIldIQTDLg4mJVwNKLj8L/KfqWB2nuNHrRE0N0QIjOOFVz3uBSHrzHACI87VTAAWE0/Pq5iYnEEwtoRQhLJDYTRJADJUvPyqgu4kg6yEMPXYwciteZqXw7FpszXmdtbJABTxx7Z9QLUYEoFs2TIyGQnLWR2hFp0W1iEpMmyCwy0XURV4uTeExRTD0oKBew/mkC8kENJUOHVCobK2ItKV5BA2t+oDMoHskkWxo2GJB+EYlN4mg63YXmqb9P/e9hASnTbu3ytjJWtB1w1oikQsuHXc5WfgOkN2HYaEnljcxfhEHmWuIpV1MLuygh1tQYhsdmhjGllA5mC0eC77NQ72yF5M2F44uDVlRDyn5BIMMe8Fy+I1ARFmUE7SgiaKeRUBdwdGhnR07zahBWiASREfpCxbDmD0Vo5YKeCVo9+ls0Ib4XUj2qYxIk6Vig5YpuXfrPGmpjK8eZxhaiyP9LyJG/8GdjaaOP5DBXLYwvxSAH/9yyL+O3MLJ091I/n8d2gjJup4y3OXJ5rElOIJO8WQyAbDNMDIN5LgEHhqVzq907Vbxs9Py7jwURZjj1fxwSUT2fI+dH9fw8g1CQ/HHuEXA+148UA7ZCbDJP1hWwFiFeYdumRrAkmAhO8sy095Ty8oZwQotiZYTyoqPPq7kyH85tfduDMxj9UlDYoexuiwjOHhLzy2Dr/USQGv0HxWzaLqVUGhPZK0rkPrwijcJahzPX65F2kVQBthiafCvU0xGa/3JahdsHHtWh53Pm1FoSwjNalT2XDR2GBQ1vnjN79fAeTtcE2lKzj8GPKEUQQ13zKoGZ5kSlRz2zWhkyIzU0JHgiZlRUSDOzE5kcb7fyjgdH8MuzpojOFi45RbxajrijDxWVLEaMfmddPeh0W6I1MV52FMzWjERhnz0w5ypRyJYAa8ZKMp0oa7YxG8/3sd770HJHaLUHDr9kS0ui+MnoOc+jokwDAqrIuFVty8LmPo0yy0cAGJLgeNLS5++hawMKtjbGSBuoFGTKeC+OOHqxj4VQOiYQe1hNqv9n6noVSC1ea2Z1u7jMCQniysJnBtMIDb1wdx5AjDS4citJiNoBwBFXTYUgTf6wX++XcLmaUQ7k7O4epgAe++1UE9Eq8OSHL9eKW1JRFUzlpQV1jabK5D5cIMY3wqgpuDN/DC/hUc72tAQ1BGUItACdhU00inqFF6sdfFyTMamhKklbwB9ydSlMWmX2CrzL+eVJ5Si3QTPnSqu8yVHJTNADJzRZRzi9i3jyq6o0ANUxCKztGh4ir6C6bDJcXe/5yEH7zK8WBc1L0yDK7T/BrN7VR1mQh3uxLUrtcC+KA2A/Lzy8bcvIKpBxEa04ySnYccoV1zAkLsETyvlrkS6Y5Du7QM7Ii2kj4U0Lkr7GWRl8G16sdaIiuCHa8Xcqs3aAEK/fxyDjPU42haK8a/CqK7J4zWxiI4xYbEVBJTcj0xxWQLRbMJNz830Nq8iNeOtcHSHS9xavfpzMOgVPpZv+pvDcimtN3bVcTuXTpS9w1Mjbfi8p84Dr0WxR5yT1ihZp4bxLSK+UwMn10ld01PoP9MIzrjDSSQddgRzFDS+EpNANiaarrO1k0+tTSIhoo49TMFf/vHIr76IofM6E7cm9pBKa8h1lxEUNJh5Bl1Aqvo7FzEL8+IvkiGoYtNsto6JPkSzryO0fuacj0xrqVDooOIxThOn4pRrTKoqacmn5r5silcpUMjd7XvU5HYQ0x2hT01L5Xsp0rP1r267KFYcxn51zIsiSqzoNV2qn87Gab4BLKR7FHR8zx1CLzotRau+DCkCUW/JPJEuMjZ5gewICAgBQRBnD6nbalEivVoMpXRVEpjRfXF0XGrmigDpSK1pvQxaFOWudRng5P/OUO5bBMrIjncmnNUTGiTUIJQKIz8amF5dmY2p5CbzOHhGyNv/OT1QntHR1SIGCF9qvV4FodYo6mpmYgQrcvwl49TqUnvizWbzXJD1+PJZM8L8XgbEz4VPYo4i+h/FhYMBtHS0kJnKkW372Q+vHDhg3Q6PaT47Syfu/zJJ3/OF/PKiRMnftx7oLc5EolU+Rbf3N2wJx9t57cByW830ukF/vnQUOrSpY8/fvjw4SA9yldmE8A6yZIdHZ1H9u7pSkqKGn52v80IHZCcYrGQHh0dvW2a5n/o5n2y3MbtCjVoIusgI91HaBsZ+20OQf8K2ddrVhQ3/yfAANxTCPXwqxZ5AAAAAElFTkSuQmCC"     
      label="Google"/>
    <menuitem  
      class="menuitem-iconic"
      value="http://forum.mozilla-russia.org" 
      image="data:image/png;base64,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"     
      label="Форум Mozilla"/>
</menupopup>;

OpenMenu = custombuttonsUtils. makeXML (OpenMenu);
//OpenMenu. childNodes [1]. setAttribute ("checked", "true"); //убрал проверку т.к. она ошибочна
this. orient = "horizontal";
this. type = "menu";
this. appendChild (OpenMenu);
this. openadres = function (MyEvets)
{
    var url = MyEvets. target. getAttribute ("value");
    TabsUrl(url);
};

// Открывает список когда курсор мышки над кнопкой
this. onmouseover = function (event)
{
    this. open = true;
};

Linkification(Firefox)
Делает текстовые ссылки кликабельными
Кнопка взята оттуда. Еще куча кнопок от автора.
Альтернативная иконка, если кому не нравится исходная.

Пример для теста
http://www.foo.com/
https://foo.com/
foo.org
foo.net
foo.co.id
foo.it
mailto:foo@bar.com
mailto:foo@bar.co.id
foo@bar.net

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

Выделить код

Код:

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%3ELinkification%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANtJREFUeNrskz0Lg0AMhpN6i6B/z0lcnOyki47iqDg4SHVxESd/nOAHCIKcvdCDtmg7uJVmuASeNx/k7pBzDmfsAiftBwowcdR1fbs7540VlmVdv3Esy5KgaZqwrisRRVGgaRoSPcSHHNM05bZtQ1VVBDVNA1VVd8ed5xmmaaJY5rBhGKDrOhA+iiKM45g/d5MmuuZ5DkEQYBiGXOawvu+pqvCu6/JlWcDzvP2FMUYaEcscMUGRZZnj+z7ouk7CcRwhSZKXHRxxFE/ZMIzdLbdtS7fwieP/L8AmwABkrYI7KtvK5gAAAABJRU5ErkJggg%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%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*%0A%20%20%20%20Linkification%0A%20%20%20%20Original%20script%20by%20Misha%20Splurov%0A%20%20%20%20http%3A//userscripts.org/scripts/show/67744%0A*/%0A%0A//%20%28c%29%20http%3A//data.iana.org/TLD/tlds-alpha-by-domain.txt%0Avar%20domains%20%3D%20%5B%0A%20%20%22ac%22%2C%20%22ad%22%2C%20%22ae%22%2C%20%22aero%22%2C%20%22af%22%2C%20%22ag%22%2C%20%22ai%22%2C%20%22al%22%2C%20%22am%22%2C%20%22an%22%2C%20%22ao%22%2C%20%22aq%22%2C%0A%20%20%22ar%22%2C%20%22arpa%22%2C%20%22as%22%2C%20%22asia%22%2C%20%22at%22%2C%20%22au%22%2C%20%22aw%22%2C%20%22ax%22%2C%20%22az%22%2C%20%22ba%22%2C%20%22bb%22%2C%20%22bd%22%2C%0A%20%20%22be%22%2C%20%22bf%22%2C%20%22bg%22%2C%20%22bh%22%2C%20%22bi%22%2C%20%22biz%22%2C%20%22bj%22%2C%20%22bm%22%2C%20%22bn%22%2C%20%22bo%22%2C%20%22br%22%2C%20%22bs%22%2C%0A%20%20%22bt%22%2C%20%22bv%22%2C%20%22bw%22%2C%20%22by%22%2C%20%22bz%22%2C%20%22ca%22%2C%20%22cat%22%2C%20%22cc%22%2C%20%22cd%22%2C%20%22cf%22%2C%20%22cg%22%2C%20%22ch%22%2C%0A%20%20%22ci%22%2C%20%22ck%22%2C%20%22cl%22%2C%20%22cm%22%2C%20%22cn%22%2C%20%22co%22%2C%20%22com%22%2C%20%22coop%22%2C%20%22cr%22%2C%20%22cu%22%2C%20%22cv%22%2C%20%22cx%22%2C%0A%20%20%22cy%22%2C%20%22cz%22%2C%20%22de%22%2C%20%22dj%22%2C%20%22dk%22%2C%20%22dm%22%2C%20%22do%22%2C%20%22dz%22%2C%20%22ec%22%2C%20%22edu%22%2C%20%22ee%22%2C%20%22eg%22%2C%0A%20%20%22er%22%2C%20%22es%22%2C%20%22et%22%2C%20%22eu%22%2C%20%22fi%22%2C%20%22fj%22%2C%20%22fk%22%2C%20%22fm%22%2C%20%22fo%22%2C%20%22fr%22%2C%20%22ga%22%2C%20%22gb%22%2C%0A%20%20%22gd%22%2C%20%22ge%22%2C%20%22gf%22%2C%20%22gg%22%2C%20%22gh%22%2C%20%22gi%22%2C%20%22gl%22%2C%20%22gm%22%2C%20%22gn%22%2C%20%22gov%22%2C%20%22gp%22%2C%20%22gq%22%2C%0A%20%20%22gr%22%2C%20%22gs%22%2C%20%22gt%22%2C%20%22gu%22%2C%20%22gw%22%2C%20%22gy%22%2C%20%22hk%22%2C%20%22hm%22%2C%20%22hn%22%2C%20%22hr%22%2C%20%22ht%22%2C%20%22hu%22%2C%0A%20%20%22id%22%2C%20%22ie%22%2C%20%22il%22%2C%20%22im%22%2C%20%22in%22%2C%20%22info%22%2C%20%22int%22%2C%20%22io%22%2C%20%22iq%22%2C%20%22ir%22%2C%20%22is%22%2C%20%22it%22%2C%0A%20%20%22je%22%2C%20%22jm%22%2C%20%22jo%22%2C%20%22jobs%22%2C%20%22jp%22%2C%20%22ke%22%2C%20%22kg%22%2C%20%22kh%22%2C%20%22ki%22%2C%20%22km%22%2C%20%22kn%22%2C%20%22kp%22%2C%0A%20%20%22kr%22%2C%20%22kw%22%2C%20%22ky%22%2C%20%22kz%22%2C%20%22la%22%2C%20%22lb%22%2C%20%22lc%22%2C%20%22li%22%2C%20%22lk%22%2C%20%22lr%22%2C%20%22ls%22%2C%20%22lt%22%2C%0A%20%20%22lu%22%2C%20%22lv%22%2C%20%22ly%22%2C%20%22ma%22%2C%20%22mc%22%2C%20%22md%22%2C%20%22me%22%2C%20%22mg%22%2C%20%22mh%22%2C%20%22mil%22%2C%20%22mk%22%2C%20%22ml%22%2C%0A%20%20%22mm%22%2C%20%22mn%22%2C%20%22mo%22%2C%20%22mobi%22%2C%20%22mp%22%2C%20%22mq%22%2C%20%22mr%22%2C%20%22ms%22%2C%20%22mt%22%2C%20%22mu%22%2C%20%22museum%22%2C%0A%20%20%22mv%22%2C%20%22mw%22%2C%20%22mx%22%2C%20%22my%22%2C%20%22mz%22%2C%20%22na%22%2C%20%22name%22%2C%20%22nc%22%2C%20%22ne%22%2C%20%22net%22%2C%20%22nf%22%2C%20%22ng%22%2C%0A%20%20%22ni%22%2C%20%22nl%22%2C%20%22no%22%2C%20%22np%22%2C%20%22nr%22%2C%20%22nu%22%2C%20%22nz%22%2C%20%22om%22%2C%20%22org%22%2C%20%22pa%22%2C%20%22pe%22%2C%20%22pf%22%2C%0A%20%20%22pg%22%2C%20%22ph%22%2C%20%22pk%22%2C%20%22pl%22%2C%20%22pm%22%2C%20%22pn%22%2C%20%22pr%22%2C%20%22pro%22%2C%20%22ps%22%2C%20%22pt%22%2C%20%22pw%22%2C%20%22py%22%2C%0A%20%20%22qa%22%2C%20%22re%22%2C%20%22ro%22%2C%20%22rs%22%2C%20%22ru%22%2C%20%22rw%22%2C%20%22sa%22%2C%20%22sb%22%2C%20%22sc%22%2C%20%22sd%22%2C%20%22se%22%2C%20%22sg%22%2C%0A%20%20%22sh%22%2C%20%22si%22%2C%20%22sj%22%2C%20%22sk%22%2C%20%22sl%22%2C%20%22sm%22%2C%20%22sn%22%2C%20%22so%22%2C%20%22sr%22%2C%20%22st%22%2C%20%22su%22%2C%20%22sv%22%2C%0A%20%20%22sy%22%2C%20%22sz%22%2C%20%22tc%22%2C%20%22td%22%2C%20%22tel%22%2C%20%22tf%22%2C%20%22tg%22%2C%20%22th%22%2C%20%22tj%22%2C%20%22tk%22%2C%20%22tl%22%2C%20%22tm%22%2C%0A%20%20%22tn%22%2C%20%22to%22%2C%20%22tp%22%2C%20%22tr%22%2C%20%22travel%22%2C%20%22tt%22%2C%20%22tv%22%2C%20%22tw%22%2C%20%22tz%22%2C%20%22ua%22%2C%20%22ug%22%2C%20%22uk%22%2C%0A%20%20%22us%22%2C%20%22uy%22%2C%20%22uz%22%2C%20%22va%22%2C%20%22vc%22%2C%20%22ve%22%2C%20%22vg%22%2C%20%22vi%22%2C%20%22vn%22%2C%20%22vu%22%2C%20%22wf%22%2C%20%22ws%22%2C%0A%20%20%22ye%22%2C%20%22yt%22%2C%20%22yu%22%2C%20%22za%22%2C%20%22zm%22%2C%20%22zw%22%0A%5D%3B%0A%0A//%20%28c%29%20http%3A//yellow5.us/firefox/linkification/%0Avar%20tagsForSkip%20%3D%20%5B%0A%20%20%22a%22%2C%20%22applet%22%2C%20%22area%22%2C%20%22embed%22%2C%20%22frame%22%2C%20%22frameset%22%2C%20%22head%22%2C%20%22iframe%22%2C%0A%20%20%22img%22%2C%20%22map%22%2C%20%22meta%22%2C%20%22noscript%22%2C%20%22object%22%2C%20%22option%22%2C%20%22param%22%2C%20%22script%22%2C%0A%20%20%22select%22%2C%20%22style%22%2C%20%22textarea%22%2C%20%22title%22%0A%5D%3B%0A%0Avar%20inArray%20%3D%20function%28value%2C%20items%29%20%7B%0A%20%20for%20%28var%20i%20%3D%200%3B%20items%5Bi%5D%20%26%26%20value%20%21%3D%20items%5Bi%5D%3B%20i++%29%3B%0A%20%20return%20value%20%3D%3D%20items%5Bi%5D%3B%0A%7D%0A%0Avar%20urlsRegExp%20%3D%20/%28%5E%7C%5B%5Cs%28%29%5C%5B%5C%5D_%3A%7E+@*%22%27%3E%5D%29%28%28%3F%3Ahttps%3F%7Cftp%7Circ%29%3A%5C/%5C/%29%3F%28%5B-a-z%5Cd%3B%3A%26%3D+%24%2C%25_.%21%7E*%27%28%29%5D+@%29%3F%28%28%3F%3A%28%3F%3A25%5B0-5%5D%7C2%5B0-4%5D%5Cd%7C%5B01%5D%3F%5Cd%5Cd%3F%29%5C.%29%7B3%7D%28%3F%3A25%5B0-5%5D%7C2%5B0-4%5D%5Cd%7C%5B01%5D%3F%5Cd%5Cd%3F%29%7C%28%3F%3A%28www%7Circ%7Cftp%29%5C.%29%3F%28%3F%3A%28%3F%3A%5Ba-z%5Cd%5D%7C%5Ba-z%5Cd%5D%5Ba-z%5Cd-%5D*%5Ba-z%5Cd%5D%29%5C.%29+%28%5Ba-z%5D%7B2%2C6%7D%29%29%28%3A%5Cd+%29%3F%28%5C/%28%3F%3A%5B-%5Cw.%21%7E*%27%28%29%25%3A@%26%3D+%24%2C%3B%5C/%5D*%5B%5Cw%7E*%25@%26%3D+%24%5C/%5D%29%3F%28%3F%3A%5C%3F%28%3F%3A%5B-%5Cw%3B%5C/%3F%3A@%26%3D+%24%2C.%21%7E*%27%28%29%25%5C%5B%5C%5D%7C%5D*%5B%5Cw%5C/@%26%3D+%24%7E*%25%5D%29%3F%29%3F%28%3F%3A%23%28%3F%3A%5B-%5Cw%3B%5C/%3F%3A@%26%3D+%24%2C.%21%7E*%27%28%29%25%5D*%5B%5Cw%5C/@%26%3D+%24%7E*%25%5D%29%3F%29%3F%7C%5Cb%29/i%0A%0Avar%20linksCounter%20%3D%200%3B%0A%0Avar%20current%20%3D%20content.document.body%3B%0Awhile%20%28current%29%20%7B%0A%20%20if%20%28current.nodeName%20%3D%3D%20%22%23text%22%20%26%26%20%28match%20%3D%20current.nodeValue.match%28urlsRegExp%29%29%20%26%26%20inArray%28match%5B6%5D%2C%20domains%29%29%20%7B%0A%20%20%20%20var%20url%3B%0A%20%20%20%20if%20%28match%5B3%5D%20%26%26%20%21%20match%5B2%5D%20%26%26%20%21%20match%5B5%5D%20%26%26%20%21%20match%5B8%5D%20%26%26%20%28match%5B3%5D.indexOf%28%22%3A%22%29%20%3D%3D%20-1%20%7C%7C%20match%5B3%5D.indexOf%28%22mailto%3A%22%29%20%3D%3D%200%29%29%20%7B%0A%20%20%20%20%20%20url%20%3D%20%28match%5B3%5D.indexOf%28%22mailto%3A%22%29%20%3D%3D%20-1%20%3F%20%22mailto%3A%22%20%3A%20%22%22%29%0A%20%20%20%20%20%20%20%20%20%20+%20match%5B3%5D%0A%20%20%20%20%20%20%20%20%20%20+%20match%5B4%5D%3B%0A%20%20%20%20%7D%0A%20%20%20%20else%20%7B%0A%20%20%20%20%20%20url%20%3D%20%28match%5B2%5D%20%3F%20match%5B2%5D%20%3A%20%28%21%20match%5B5%5D%20%7C%7C%20match%5B5%5D%20%3D%3D%20%22www%22%20%3F%20%22http%22%20%3A%20match%5B5%5D%29%20+%20%22%3A//%22%29%0A%20%20%20%20%20%20%20%20%20%20+%20%28match%5B3%5D%20%3F%20match%5B3%5D%20%3A%20%22%22%29%0A%20%20%20%20%20%20%20%20%20%20+%20match%5B4%5D%0A%20%20%20%20%20%20%20%20%20%20+%20%28match%5B7%5D%20%3F%20match%5B7%5D%20%3A%20%22%22%29%0A%20%20%20%20%20%20%20%20%20%20+%20%28match%5B8%5D%20%3F%20match%5B8%5D%20%3A%20%22%22%29%3B%0A%20%20%20%20%7D%0A%20%20%20%20if%20%28url%29%20%7B%0A%20%20%20%20%20%20var%20range%20%3D%20content.document.createRange%28%29%3B%0A%20%20%20%20%20%20range.setStart%28current%2C%20match.index%20+%20match%5B1%5D.length%29%3B%0A%20%20%20%20%20%20range.setEnd%28current%2C%20match.index%20+%20match%5B0%5D.length%29%3B%0A%20%20%20%20%20%20var%20a%20%3D%20content.document.createElement%28%22a%22%29%3B%0A%20%20%20%20%20%20a.setAttribute%28%22href%22%2C%20url%29%3B%0A%20%20%20%20%20%20a.setAttribute%28%22target%22%2C%20%22_blank%22%29%3B%0A%20%20%20%20%20%20a.setAttribute%28%22class%22%2C%20%22linkified%22%29%3B%0A%20%20%20%20%20%20a.appendChild%28range.extractContents%28%29%29%3B%0A%20%20%20%20%20%20range.insertNode%28a%29%3B%0A%20%20%20%20%20%20range.detach%28%29%3B%0A%20%20%20%20%20%20linksCounter++%3B%0A%20%20%20%20%7D%0A%20%20%7D%0A%20%20if%20%28current.tagName%20%26%26%20%21inArray%28current.tagName.toLowerCase%28%29%2C%20tagsForSkip%29%20%26%26%20current.firstChild%29%20%7B%0A%20%20%20%20current%20%3D%20current.firstChild%3B%0A%20%20%7D%0A%20%20else%20if%20%28current.nextSibling%29%20%7B%0A%20%20%20%20current%20%3D%20current.nextSibling%3B%0A%20%20%7D%0A%20%20else%20%7B%0A%20%20%20%20do%20%7B%0A%20%20%20%20%20%20current%20%3D%20current.parentNode%3B%0A%20%20%20%20%7D%20while%20%28%21current.nextSibling%20%26%26%20current.parentNode%29%3B%0A%20%20%20%20current%20%3D%20current.nextSibling%3B%0A%20%20%7D%0A%7D%0A%0A/*%0Aif%20%28linksCounter%20%3E%200%29%20%7B%0A%20%20var%20style%20%3D%20content.document.createElement%28%22style%22%29%3B%0A%20%20style.type%20%3D%20%22text/css%22%3B%0A%20%20style.appendChild%28content.document.createTextNode%28%22a.linkified%3Abefore%20%7Bcontent%3A%20%22%7E%22%3B%20color%3A%20%23e00%3B%7D%22%29%29%3B%0A%20%20content.document.getElementsByTagName%28%22head%22%29%5B0%5D.appendChild%28style%29%3B%0A%7D%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

Код:

Выделить код

Код:

/*
    Linkification
    Original script by Misha Splurov
    http://userscripts.org/scripts/show/67744
*/

// (c) http://data.iana.org/TLD/tlds-alpha-by-domain.txt
var domains = [
  "ac", "ad", "ae", "aero", "af", "ag", "ai", "al", "am", "an", "ao", "aq",
  "ar", "arpa", "as", "asia", "at", "au", "aw", "ax", "az", "ba", "bb", "bd",
  "be", "bf", "bg", "bh", "bi", "biz", "bj", "bm", "bn", "bo", "br", "bs",
  "bt", "bv", "bw", "by", "bz", "ca", "cat", "cc", "cd", "cf", "cg", "ch",
  "ci", "ck", "cl", "cm", "cn", "co", "com", "coop", "cr", "cu", "cv", "cx",
  "cy", "cz", "de", "dj", "dk", "dm", "do", "dz", "ec", "edu", "ee", "eg",
  "er", "es", "et", "eu", "fi", "fj", "fk", "fm", "fo", "fr", "ga", "gb",
  "gd", "ge", "gf", "gg", "gh", "gi", "gl", "gm", "gn", "gov", "gp", "gq",
  "gr", "gs", "gt", "gu", "gw", "gy", "hk", "hm", "hn", "hr", "ht", "hu",
  "id", "ie", "il", "im", "in", "info", "int", "io", "iq", "ir", "is", "it",
  "je", "jm", "jo", "jobs", "jp", "ke", "kg", "kh", "ki", "km", "kn", "kp",
  "kr", "kw", "ky", "kz", "la", "lb", "lc", "li", "lk", "lr", "ls", "lt",
  "lu", "lv", "ly", "ma", "mc", "md", "me", "mg", "mh", "mil", "mk", "ml",
  "mm", "mn", "mo", "mobi", "mp", "mq", "mr", "ms", "mt", "mu", "museum",
  "mv", "mw", "mx", "my", "mz", "na", "name", "nc", "ne", "net", "nf", "ng",
  "ni", "nl", "no", "np", "nr", "nu", "nz", "om", "org", "pa", "pe", "pf",
  "pg", "ph", "pk", "pl", "pm", "pn", "pr", "pro", "ps", "pt", "pw", "py",
  "qa", "re", "ro", "rs", "ru", "rw", "sa", "sb", "sc", "sd", "se", "sg",
  "sh", "si", "sj", "sk", "sl", "sm", "sn", "so", "sr", "st", "su", "sv",
  "sy", "sz", "tc", "td", "tel", "tf", "tg", "th", "tj", "tk", "tl", "tm",
  "tn", "to", "tp", "tr", "travel", "tt", "tv", "tw", "tz", "ua", "ug", "uk",
  "us", "uy", "uz", "va", "vc", "ve", "vg", "vi", "vn", "vu", "wf", "ws",
  "ye", "yt", "yu", "za", "zm", "zw"
];

// (c) http://yellow5.us/firefox/linkification/
var tagsForSkip = [
  "a", "applet", "area", "embed", "frame", "frameset", "head", "iframe",
  "img", "map", "meta", "noscript", "object", "option", "param", "script",
  "select", "style", "textarea", "title"
];

var inArray = function(value, items) {
  for (var i = 0; items[i] && value != items[i]; i++);
  return value == items[i];
}

var urlsRegExp = /(^|[\s()\[\]_:~+@*"'>])((?:https?|ftp|irc):\/\/)?([-a-z\d;:&=+$,%_.!~*'()]+@)?((?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)|(?:(www|irc|ftp)\.)?(?:(?:[a-z\d]|[a-z\d][a-z\d-]*[a-z\d])\.)+([a-z]{2,6}))(:\d+)?(\/(?:[-\w.!~*'()%:@&=+$,;\/]*[\w~*%@&=+$\/])?(?:\?(?:[-\w;\/?:@&=+$,.!~*'()%\[\]|]*[\w\/@&=+$~*%])?)?(?:#(?:[-\w;\/?:@&=+$,.!~*'()%]*[\w\/@&=+$~*%])?)?|\b)/i

var linksCounter = 0;

var current = content.document.body;
while (current) {
  if (current.nodeName == "#text" && (match = current.nodeValue.match(urlsRegExp)) && inArray(match[6], domains)) {
    var url;
    if (match[3] && ! match[2] && ! match[5] && ! match[8] && (match[3].indexOf(":") == -1 || match[3].indexOf("mailto:") == 0)) {
      url = (match[3].indexOf("mailto:") == -1 ? "mailto:" : "")
          + match[3]
          + match[4];
    }
    else {
      url = (match[2] ? match[2] : (! match[5] || match[5] == "www" ? "http" : match[5]) + "://")
          + (match[3] ? match[3] : "")
          + match[4]
          + (match[7] ? match[7] : "")
          + (match[8] ? match[8] : "");
    }
    if (url) {
      var range = content.document.createRange();
      range.setStart(current, match.index + match[1].length);
      range.setEnd(current, match.index + match[0].length);
      var a = content.document.createElement("a");
      a.setAttribute("href", url);
      a.setAttribute("target", "_blank");
      a.setAttribute("class", "linkified");
      a.appendChild(range.extractContents());
      range.insertNode(a);
      range.detach();
      linksCounter++;
    }
  }
  if (current.tagName && !inArray(current.tagName.toLowerCase(), tagsForSkip) && current.firstChild) {
    current = current.firstChild;
  }
  else if (current.nextSibling) {
    current = current.nextSibling;
  }
  else {
    do {
      current = current.parentNode;
    } while (!current.nextSibling && current.parentNode);
    current = current.nextSibling;
  }
}

/*
if (linksCounter > 0) {
  var style = content.document.createElement("style");
  style.type = "text/css";
  style.appendChild(content.document.createTextNode("a.linkified:before {content: "~"; color: #e00;}"));
  content.document.getElementsByTagName("head")[0].appendChild(style);
}
*/

Открыть страницу в другом браузере( Firefox ) от 20.05.2019.
Кнопка открывает меню с браузерами и даёт возможность открыть текущую страницу по левому клику в меню на нужном браузере, иконки пунктов меню будет как у запускаемых программ(.exe файлов). Можно легко добавить в меню кнопки новый браузер, разделитель или другую программу которая тоже может открыть страницу. Можно удалить все не нужные пункты меню или разделители, также можно передвигать пункты меню или разделители что бы упорядочить их в нужном порядке, также можно менять название пунктов меню.

Скриншот меню кнопки
0c5640e50a212167a3137ee9871f7e7b.jpg

Функции кликов мыши для кнопки:
ЛКМ => Открыть меню с браузерамы,
СКМ => Добавить в меню новый браузер,

Функции кликов мыши для меню кнопки:
Л: Открыть страницу,
С: Добавить разделитель,
П: Удалить пункт меню или разделитель.
Ctrl+П: Изменить название пункта меню.

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

Выделить код

Код:

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%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u0443%20%u0432%20%u0434%u0440%u0443%u0433%u043E%u043C%20%u0431%u0440%u0430%u0443%u0437%u0435%u0440%u0435%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAACXBIWXMAAAsSAAALEgHS3X78AAAEgUlEQVQ4jU2TW2yTZQCG3+/7v/79266HraN1G8cNVoERNhk42BBmghiQBF3IMJnghYcbxUPEREiYF0bgihBREyNRQ4wENCwkBjlsyIA5WclWOe3ANrq2W1u6reu5/f//+7xQI8/tmzx5bx4yMjKCgYEByLIMAYBTirymEUYpbIrimkslzKXOpwLrV3NNceTAhZERNVfFC1mnNifGjO6i8NB4grCOjg7s378foBSVNju+3b6D+NUC/d43oGeK7dXLFlfu9BhKr244XObntvuvkPDURszNGiSjkhKTaYAtPO7tT15iQggAAASHVZJIs8sFlDqx69l1O4Lh+EeVddXPidrZN2XeZcDvswrGqnhBXXXowK2rRxtXGF0vy4XWzvOhG4wQ8o+IUCIAkYcoYrr+pXlqdo+nwQXR6BUk1WP13qhE5pRZX2cDMRRpn9U/LK870/egrfkZ66WCqir/P4IQakGHIad/LUaDbWrLIs2w+TbFyB16J75PDNg3I9V8XbKdO4GaEiffXWpqmZ8tN01Oq20ffLwuTv+1SOACvM7S+hcLtknbyzR56z0p2T9If3nYjmtTtSQV9BF51RqML1yOlP8hiQUfqU00va33RGD3a69fEZRQQgDoJmaAceu8t+/tWwxsDxK9o5OcOduICxE3ykvSSBUvhR66D1W/heyyGDG/GJLwxgSWb4q8NXh3xkgBEABQi6WqxvUr6neVzwHXbtJQO8dgQEWJG4gqZfDM3URZVzuml21DyRYdhk0JwutzWN0CT2OttJY6HApxWICG5uqad6qZVRry8s8j88j9YAJJi4JR5kZvnxfV1w+id8EupBreA1m5CNSVJZxRYTYT04JyuoTt2bNGb939KQjXthUNX8DJqAU/Oi1IbnFiY0UFgots2Onx4BQ/iC6sRX0sCclTBuR8EIQAnEAiRGYyM4MZ3PV06trz/Y81nM4UwZXOYLhlIbKPFdTHIzjh8+G3+FLkC1nU1uiQ2AMUIAlGOclnZR6OIcI4MTGiJzfoY4OlP0zbM1mJmx2KhHSxBe6KOKKBIdyOOFBpIHjaY8SOJV8AGT9ALKCEIDDBogODWj8DrBpJB+smxjPdV84Xeua3LjjCZUmzaBbmjffAVNGPl6pWIJGVYNW9KFE7IJgZah6abDYbfvq18HNsjocoVD8QuOWyrWzqyT1Qj4b/CPsU2cSy+bSWt+YwU4ihO9mJ7vhlNCndsBiMSGaYbmFWg7fX4D92OnEEACjJ+iEyYatTqI9qXBJ8x3yt492ROxQyQ07S5QLTcxmb/oKS0TebVS2dtOpWUSz19Rn9be2xV2eTPEQJqHTow70Q8T/X0vjjpuaaeRdnptPR/gujPekEXyOZjfN1JhOH0Ogn9gi15BTyKKDQ785lR949Htk7EVV7KAHlApyok5ehDn9lZdnJ9yU9l6Ys03X4ZMR/4GzCqtjleqnCXu1xs+IGU56MRrX43bHcWGimcJsQhADkhYAOAESdvIj80Dcw5vMYGQ7i4KlBdN4tIJEVIBD4L+knoRSAAPgT49/cEBl9hsIr+QAAAABJRU5ErkJggg%3D%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bthis.onclick%20%3De%3D%3E%20%7B%0A%20%20%20e.button%20%3D%3D%200%20%26%26%20menu.openPopup%28this%2C%20%22after_start%22%29%3B%0A%20%20%20e.button%20%3D%3D%201%20%26%26%20getAppPath%28%29%3B%20%20%20%20%0A%7D%3B%0A%0A%0Avar%20menu%20%3D%20self.appendChild%28document.createElement%28%22menupopup%22%29%29%3B%0AaddEventListener%28%22popuphidden%22%2C%20%28%29%3D%3E%20setTimeout%28%28%29%3D%3E%20addToHelp%28%29%2C%2050%29%2C%20true%2C%20menu%29%3B%0A%0A%20%20%20%20%20%20%20%20%20%0Afunction%20setItemsToMenu%28newPath%20%3D%20false%29%20%7B%0A%20%20%20menu.textContent%20%3D%20%22%22%3B%0A%20%20%20%0A%20%20%20menu.onclick%20%3D%28e%2C%20el%20%3D%20e.target%2C%20but%20%3D%20e.button%29%3D%3E%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%20%20%0A%20%20%20%20%20%20but%20%3D%3D%200%20%26%26%20el.path%20%26%26%20openWith%28el.path%29%3B%0A%20%20%20%20%20%20but%20%3D%3D%201%20%26%26%20addToSeparator%28e%29%3B%0A%20%20%20%20%20%20%21e.ctrlKey%20%26%26%20but%20%3D%3D%202%20%26%26%20removeNode%28e%29%3B%0A%20%20%20%20%20%20e.ctrlKey%20%26%26%20but%20%3D%3D%202%20%26%26%20changeMenuitemLabel%28e%29%3B%0A%20%20%20%7D%0A%0A%20%20%20var%20array%20%3D%20newPath%20%3F%20%28getHelp%28%29%20+%20%27%2C%27%20+%20newPath%29.split%28%27%2C%27%29%20%3A%20getHelp%28%29%3B%20%20%20%20%20%20%20%0A%20%20%20array.forEach%28path%3D%3E%20%7B%0A%20%20%20%20%20%20if%20%28path%20%3D%3D%20%22%22%29%20return%3B%0A%20%20%20%20%20%20if%20%28path%20%3D%3D%20%22separator%22%29%20%7B%20menu.appendChild%28document.createElement%28%22menuseparator%22%29%29%3B%20return%20%7D%3B%0A%20%20%20%20%20%20%0A%20%20%20%20%20%20var%20mItem%20%3D%20menu.appendChild%28document.createElement%28%22menuitem%22%29%29%3B%0A%20%20%20%20%20%20mItem.value%20%3D%20path%3B%0A%20%20%20%20%20%20mItem.path%20%3D%20path.split%28%22%3E%22%29.shift%28%29%3B%0A%20%20%20%20%20%20%0A%20%20%20%20%20%20var%20name%20%3D%20path.split%28%22%5C%5C%22%29.pop%28%29.replace%28%22.exe%22%2C%20%22%22%29%2C%0A%20%20%20%20%20%20%20%20%20%20name%20%3D%20%28/%3E/.test%28name%29%29%20%3F%20name.split%28%22%3E%22%29.pop%28%29%20%3A%20name%2C%0A%20%20%20%20%20%20%20%20%20%20name%20%3D%20name%5B0%5D.toUpperCase%28%29%20+%20name.slice%281%29%3B%0A%20%20%20%20%20%20%0A%20%20%20%20%20%20mItem.setAttribute%28%22label%22%2C%20name%29%3B%0A%20%20%20%20%20%20mItem.setAttribute%28%22tooltiptext%22%2C%20mItem.path%29%3B%0A%20%20%20%20%20%20mItem.setAttribute%28%22class%22%2C%20%22menuitem-iconic%22%29%3B%0A%20%20%20%20%20%20mItem.setAttribute%28%22image%22%2C%20%22moz-icon%3A//file%3A//%22%20+%20mItem.path%29%3B%0A%20%20%20%20%20%20mItem.onwheel%20%3De%3D%3E%20moveNode%28e%29%3B%0A%20%20%20%7D%29%0A%7D%3B%0AsetItemsToMenu%28%29%3B%0A%0A%0Afunction%20moveNode%28e%2C%20el%20%3D%20e.target%29%20%7B%0A%20%20%20menu.insertBefore%28el%2C%20e.deltaY%20%3E%200%20%3F%20el.nextSibling.nextSibling%20%3A%20%28el.previousSibling%20%7C%7C%20el%29%29%3B%0A%7D%3B%0A%0A%0Afunction%20addToSeparator%28e%2C%20el%20%3D%20e.target%29%20%7B%0A%20%20%20menu.insertBefore%28document.createElement%28%22menuseparator%22%29%2C%20el.nextSibling%29%3B%0A%7D%3B%0A%0A%0Afunction%20removeNode%28e%2C%20el%20%3D%20e.target%29%20%7B%0A%20%20%20el.remove%28%29%3B%0A%7D%3B%0A%0A%0Afunction%20changeMenuitemLabel%28e%2C%20el%20%3D%20e.target%29%20%7B%0A%20%20%20menu.hidePopup%28%29%3B%0A%20%20%20el.setAttribute%28%22context%22%2C%20%22event.stopPropagation%28%29%22%29%3B%0A%20%20%20%0A%20%20%20var%20label%20%3D%20custombuttons.promptBox%28%27%27%2C%20%27%u0412%u0435%u0434%u0438%u0442%u0435%20%u0434%u0440%u0443%u0433%u043E%u0435%20%u043D%u0430%u0437%u0432%u0430%u043D%u0438%u0435%20%u043F%u0443%u043D%u043A%u0442%u0430%27%29%5B1%5D%3B%0A%20%20%20if%20%28label%20%21%3D%20%27%27%29%20%7B%0A%20%20%20%20%20%20%20el.value%20%3D%20el.value.split%28%22%3E%22%29.shift%28%29%20+%20%22%3E%22%20+%20label%3B%0A%20%20%20%20%20%20%20el.setAttribute%28%27label%27%2C%20label%29%3B%0A%20%20%20%20%20%20%20%7D%0A%7D%3B%0A%0A%20%0Afunction%20getAppPath%28%29%20%7B%0A%20%20%20var%20fp%20%3D%20window.makeFilePicker%28%29%3B%0A%20%20%20fp.init%28window%2C%20%22%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20%u0444%u0430%u0439%u043B%22%2C%20fp.modeOpen%29%3B%0A%20%20%20fp.appendFilters%28fp.filterApps%29%3B%0A%20%20%20fp.init%28window%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%29%3B%0A%20%20%20fp.open%28result%20%3D%3E%20result%20%3D%3D%20fp.returnOK%20%26%26%20setItemsToMenu%28fp.file.path%29%29%3B%0A%7D%3B%0A%0A%0Afunction%20getHelp%28%29%20%7B%20%0A%20%20%20return%20self.getAttribute%28%27Help%27%29.split%28%27%5Cn%27%29.filter%28%28path%29%3D%3E%20/%5CS/.test%28path%29%29%3B%20%0A%7D%3B%0A%0A%0Afunction%20addToHelp%28%29%20%7B%0A%20%20%20var%20paths%20%3D%20%5B...menu.children%5D.map%28%28el%29%3D%3E%20el.value%20%7C%7C%20%22separator%22%29.join%28%22%5Cn%22%29%3B%0A%0A%20%20%20var%20link%20%3D%20custombuttons.makeButtonLink%28%22update%22%2C%20_id%29%3B%0A%20%20%20var%20params%20%3D%20custombuttons.cbService.getButtonParameters%28link%29.wrappedJSObject%3B%0A%20%20%20params.help%20%3D%20paths%3B%0A%20%20%20custombuttons.cbService.installButton%28params.wrappedJSObject%20%3D%20params%29%3B%0A%7D%3B%0A%0A%0Afunction%20openWith%28path%29%20%7B%0A%20%20%20var%20uri%20%3D%20gBrowser.currentURI.spec%3B%0A%20%20%20var%20uri%20%3D%20/.%u0440%u0444/.test%28uri%29%20%3F%20Services.io.newURI%28uri%2C%20null%2C%20null%29.asciiSpec%20%3A%20uri%3B%20%20%0A%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%20file.initWithPath%28path%29%3B%0A%20%20%20%21file.exists%28%29%20%26%26%20custombuttons.alertSlide%28self.label%2C%20%22%u0424%u0430%u0439%u043B%20%u043D%u0435%20%u0441%u0443%u0449%u0435%u0441%u0442%u0432%u0443%u0435%u0442%22%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%20%5Buri%5D%2C%201%29%3B%0A%7D%3B%0A%0A%0Athis.tooltipText%20%3D%20%22%u041B%3A%20%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20%u043C%u0435%u043D%u044E%20%u0441%20%u0431%u0440%u0430%u0443%u0437%u0435%u0440%u0430%u043C%u044B%20%5Cn%u0421%3A%20%u0414%u043E%u0431%u0430%u0432%u0438%u0442%u044C%20%u0432%20%u043C%u0435%u043D%u044E%20%u043D%u043E%u0432%u044B%u0439%20%u0431%u0440%u0430%u0443%u0437%u0435%u0440%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5Cn%5Cn%u0424%u0443%u043D%u043A%u0446%u0438%u0438%20%u043A%u043B%u0438%u043A%u043E%u0432%20%u043C%u044B%u0448%u0438%20%u0434%u043B%u044F%20%u043C%u0435%u043D%u044E%3A%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5Cn%20%20%u041B%3A%20%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u0443%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5Cn%20%20%u0421%3A%20%u0414%u043E%u0431%u0430%u0432%u0438%u0442%u044C%20%u0440%u0430%u0437%u0434%u0435%u043B%u0438%u0442%u0435%u043B%u044C%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5Cn%20%20%u041F%3A%20%u0423%u0434%u0430%u043B%u0438%u0442%u044C%20%u043F%u0443%u043D%u043A%u0442%20%u043C%u0435%u043D%u044E%20%u0438%u043B%u0438%20%u0440%u0430%u0437%u0434%u0435%u043B%u0438%u0442%u0435%u043B%u044C%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5Cn%20%20Ctrl+%u041F%3A%20%u0418%u0437%u043C%u0435%u043D%u0438%u0442%u044C%20%u043D%u0430%u0437%u0432%u0430%u043D%u0438%u0435%20%u043F%u0443%u043D%u043A%u0442%u0430%20%u043C%u0435%u043D%u044E%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5Cn%20%20%u041A%u043E%u043B%u0451%u0441%u0438%u043A%u043E%u043C%20%u043C%u044B%u0448%u0438%20%u043C%u043E%u0436%u043D%u043E%20%u043F%u0435%u0440%u0435%u0434%u0432%u0438%u0433%u0430%u0442%u044C%20%u043F%u0443%u043D%u043A%u0442%u044B%20%u043C%u0435%u043D%u044E%20%u0438%u043B%u0438%20%u0440%u0430%u0437%u0434%u0435%u043B%u0438%u0442%u0435%u043B%u0438%22%3B%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B%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%5BC%3A%5CProgram%20Files%20%28x86%29%5CInternet%20Explorer%5Ciexplore.exe%0AC%3A%5CProgram%20Files%20%28x86%29%5CGoogle%5CChrome%5CApplication%5Cchrome.exe%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

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

Выделить код

Код:

this.onclick =e=> {
   e.button == 0 && menu.openPopup(this, "after_start");
   e.button == 1 && getAppPath();    
};


var menu = self.appendChild(document.createElement("menupopup"));
addEventListener("popuphidden", ()=> setTimeout(()=> addToHelp(), 50), true, menu);

         
function setItemsToMenu(newPath = false) {
   menu.textContent = "";
   
   menu.onclick =(e, el = e.target, but = e.button)=> {
      e.preventDefault();
      e.stopPropagation();
      
      but == 0 && el.path && openWith(el.path);
      but == 1 && addToSeparator(e);
      !e.ctrlKey && but == 2 && removeNode(e);
      e.ctrlKey && but == 2 && changeMenuitemLabel(e);
   }

   var array = newPath ? (getHelp() + ',' + newPath).split(',') : getHelp();       
   array.forEach(path=> {
      if (path == "") return;
      if (path == "separator") { menu.appendChild(document.createElement("menuseparator")); return };
      
      var mItem = menu.appendChild(document.createElement("menuitem"));
      mItem.value = path;
      mItem.path = path.split(">").shift();
      
      var name = path.split("\\").pop().replace(".exe", ""),
          name = (/>/.test(name)) ? name.split(">").pop() : name,
          name = name[0].toUpperCase() + name.slice(1);
      
      mItem.setAttribute("label", name);
      mItem.setAttribute("tooltiptext", mItem.path);
      mItem.setAttribute("class", "menuitem-iconic");
      mItem.setAttribute("image", "moz-icon://file://" + mItem.path);
      mItem.onwheel =e=> moveNode(e);
   })
};
setItemsToMenu();


function moveNode(e, el = e.target) {
   menu.insertBefore(el, e.deltaY > 0 ? el.nextSibling.nextSibling : (el.previousSibling || el));
};


function addToSeparator(e, el = e.target) {
   menu.insertBefore(document.createElement("menuseparator"), el.nextSibling);
};


function removeNode(e, el = e.target) {
   el.remove();
};


function changeMenuitemLabel(e, el = e.target) {
   menu.hidePopup();
   el.setAttribute("context", "event.stopPropagation()");
   
   var label = custombuttons.promptBox('', 'Ведите другое название пункта')[1];
   if (label != '') {
       el.value = el.value.split(">").shift() + ">" + label;
       el.setAttribute('label', label);
       }
};

 
function getAppPath() {
   var fp = window.makeFilePicker();
   fp.init(window, "Открыть файл", fp.modeOpen);
   fp.appendFilters(fp.filterApps);
   fp.init(window, "Укажите путь к программе", fp.modeOpen);
   fp.open(result => result == fp.returnOK && setItemsToMenu(fp.file.path));
};


function getHelp() { 
   return self.getAttribute('Help').split('\n').filter((path)=> /\S/.test(path)); 
};


function addToHelp() {
   var paths = [...menu.children].map((el)=> el.value || "separator").join("\n");

   var link = custombuttons.makeButtonLink("update", _id);
   var params = custombuttons.cbService.getButtonParameters(link).wrappedJSObject;
   params.help = paths;
   custombuttons.cbService.installButton(params.wrappedJSObject = params);
};


function openWith(path) {
   var uri = gBrowser.currentURI.spec;
   var uri = /.рф/.test(uri) ? Services.io.newURI(uri, null, null).asciiSpec : uri;  

   var file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile);
   file.initWithPath(path);
   !file.exists() && custombuttons.alertSlide(self.label, "Файл не существует");
   var process = Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess);
   process.init(file);
   process.run(false, [uri], 1);
};


this.tooltipText = "Л: Открыть меню с браузерамы \nС: Добавить в меню новый браузер\
                   \n\nФункции кликов мыши для меню:\
                   \n  Л: Открыть страницу\
                   \n  С: Добавить разделитель\
                   \n  П: Удалить пункт меню или разделитель\
                   \n  Ctrl+П: Изменить название пункта меню\
                   \n  Колёсиком мыши можно передвигать пункты меню или разделители";

CB Profile Password( Firefox24+ ) от 09.11.2016.
Кнопка даёт возможность защитить свой браузер от обычных пользователей. Если кнопка включена  браузер при старте запросит пароль доступа и если ввести неправильный пароль браузер выключится.
Если вы забыли свой пароль доступа пишите мне в PM.

ЛКМ => Защитить запуск браузера,
СКМ => Изменить пароль,
ПКМ => 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%3ECB%20Profile%20Password%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEhIAAAEACADYBQAAFgAAACgAAAASAAAAJAAAAAEACAAAAAAAsAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAAICAgADAwMABAQEAAUFBQAGBgYABwcHAAgICAAJCQkACgoKAAsLCwAMDAwADQ0NAA4ODgAPDw8AEBAQABEREQASEhIAExMTABQUFAAVFRUAFhYWABcXFwAYGBgAGRkZABoaGgAbGxsAHBwcAB0dHQAeHh4AHx8fACAgIAAhISEAIiIiACMjIwAkJCQAJSUlACYmJgAnJycAKCgoACkpKQAqKioAKysrACwsLAAtLS0ALi4uAC8vLwAwMDAAMTExADIyMgAzMzMANDQ0ADU1NQA2NjYANzc3ADg4OAA5OTkAOjo6ADs7OwA8PDwAPT09AD4+PgA/Pz8AQEBAAEFBQQBCQkIAQ0NDAERERABFRUUARkZGAEdHRwBISEgASUlJAEpKSgBLS0sATExMAE1NTQBOTk4AT09PAFBQUABRUVEAUlJSAFNTUwBUVFQAVVVVAFZWVgBXV1cAWFhYAFlZWQBaWloAW1tbAFxcXABdXV0AXl5eAF9fXwBgYGAAYWFhAGJiYgBjY2MAZGRkAGVlZQBmZmYAZ2dnAGhoaABpaWkAampqAGtrawBsbGwAbW1tAG5ubgBvb28AcHBwAHFxcQBycnIAc3NzAHR0dAB1dXUAdnZ2AHd3dwB4eHgAeXl5AHp6egB7e3sAfHx8AH19fQB+fn4Af39/AICAgACBgYEAgoKCAIODgwCEhIQAhYWFAIaGhgCHh4cAiIiIAImJiQCKiooAi4uLAIyMjACNjY0Ajo6OAI+PjwCQkJAAkZGRAJKSkgCTk5MAlJSUAJWVlQCWlpYAl5eXAJiYmACZmZkAmpqaAJubmwCcnJwAnZ2dAJ6engCfn58AoKCgAKGhoQCioqIAo6OjAKSkpAClpaUApqamAKenpwCoqKgAqampAKqqqgCrq6sArKysAK2trQCurq4Ar6+vALCwsACxsbEAsrKyALOzswC0tLQAtbW1ALa2tgC3t7cAuLi4ALm5uQC6uroAu7u7ALy8vAC9vb0Avr6+AL+/vwDAwMAAwcHBAMLCwgDDw8MAxMTEAMXFxQDGxsYAx8fHAMjIyADJyckAysrKAMvLywDMzMwAzc3NAM7OzgDPz88A0NDQANHR0QDS0tIA09PTANTU1ADV1dUA1tbWANfX1wDY2NgA2dnZANra2gDb29sA3NzcAN3d3QDe3t4A39/fAODg4ADh4eEA4uLiAOPj4wDk5OQA5eXlAObm5gDn5+cA6OjoAOnp6QDq6uoA6+vrAOzs7ADt7e0A7u7uAO/v7wDw8PAA8fHxAPLy8gDz8/MA9PT0APX19QD29vYA9/f3APj4+AD5+fkA+vr6APv7+wD8/PwA/f39AP7+/gD///8A/5WTl5qam5ubm5qal5aSjpD/AACbko2VmKCgo6OjoJ2Yk42IipYAAIKEh4qQmJ2dnZ2bl5OKhIB7fAAAdXyAh7zw8vLy8vLy8LqAe3VtAABweHyA1f/8///8//z/1Xx1cWYAAGt2e3/V//z//P/////UdXFtYwAAY3Z9gtf8/Pz8/Pz8/9JxaWVdAABheX6D2Pz8/Pz8/Pz80GllX1gAAFx7gYTY/Pz8/Pz8/P/OY19bUQAAV32Ch5/X/ODQ0OD8151pWVNOAABVf4SJiJ78to2QtvyjlJFmT0oAAFOFi4uOpPy6l5e+/Kqbm5ZiSQAAU4qPkpSb+dmipNn5oqCkpJZTAABYkpiZnJrB+fPz/MKnqKqrq3YAAGKdnaCgpJqisrKioq6ysrS0jwAAgaSnqqqrra6usrS1uLq7u720AACbsrK0tbW4uru7vb/AwMPF0c4AAP+svcTExcnJzMzR09TU1NTQ/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B//%20CB%20Profile%20Password%20%u043E%u0442%2009.11.2016.%0A%0A//%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%20%0A%20%20%20//%20%u041B%u041A%u041C%20%u043F%u0435%u0440%u0435%u043A%u043B%u0443%u0447%u0430%u0435%u0442%20%u043A%u043D%u043E%u043F%u043A%u0443%20%u0438%20%u0437%u0430%u043F%u0440%u0430%u0448%u0438%u0432%u0430%u0435%u0442%20%u043F%u0430%u0440%u043E%u043B%u044C%20%u0435%u0441%u043B%u0438%20%u043E%u043D%20%u043D%u0435%20%u0441%u0443%u0449%u0435%u0441%u0442%u0432%u0443%u0435%u0442%20....%0A%20%20%20if%20%28%20e.button%20%3D%3D%200%20%29%20%7B%20%0A%20%20%20%20%20%20%20%20var%20run%20%3D%20cbu.getPrefs%28s%29%3B%0A%20%20%20%20%20%20%20%20var%20password%20%3D%20cbu.getPrefs%28%22CB.Password.value%22%29%3B%0A%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20if%20%28%20%21run%20%26%26%20password%20%3D%3D%20null%20%7C%7C%20password%20%3D%3D%20%27%27%20%29%20savePassword%28%29%3B%0A%20%20%20%20%20%20%20%20else%0A%20%20%20%20%20%20%20%20%20%20%20%20%20cbu.setPrefs%28s%2C%20%21run%29%3B%0A%20%20%20%20%20%20%20%20%7D%0A%09%0A%20%20%20//%20%u0421%u041A%u041C%20%u0437%u0430%u043F%u0440%u0430%u0448%u0438%u0432%u0430%u0435%u0442%20%u0438%20%u0441%u043E%u0445%u0440%u0430%u043D%u044F%u0435%u0442%20%u043F%u0430%u0440%u043E%u043B%u044C%20....%20%20%20%20%20%20%0A%20%20%20if%20%28%20e.button%20%3D%3D%201%20%29%20savePassword%28%29%3B%20%0A%7D%3B%0A%0A%0Avar%20s%20%3D%20%27CB.Password%27%3B%0Avar%20alertsService%20%3D%20Cc%5B%22@mozilla.org/alerts-service%3B1%22%5D.getService%28Ci.nsIAlertsService%29%3B%0A%0A%0A//%20%u0421%u043E%u0445%u0440%u0430%u043D%u0438%u0442%u044C%20%u043F%u0430%u0440%u043E%u043B%u044C%20...............%0Afunction%20savePassword%28%29%20%7B%0A%20%20%20var%20password%20%3D%20getPassword%28%29%3B%0A%20%20%20if%20%28%20%21password%20%29%20return%3B%0A%20%20%20%0A%20%20%20cbu.setPrefs%28%22CB.Password.value%22%2C%20convertFromUnicode%28%22UTF-8%22%2C%20password%29%29%3B%20%20%20%0A%20%20%20alertsService.showAlertNotification%28self.image%2C%20self.label%2C%20%22%u041F%u0430%u0440%u043E%u043B%u044C%20%u0441%u043E%u0445%u0440%u0430%u043D%u0451%u043D%22%29%3B%0A%7D%3B%0A%0A%0A//%20%u041F%u043E%u043B%u0443%u0447%u0438%u0442%u044C%20%u0437%u0430%u043A%u043E%u0434%u0438%u0440%u043E%u0432%u0430%u043D%u043D%u044B%u0439%20%u043F%u0430%u0440%u043E%u043B%u044C%20%u0438%u043B%u0438%20false%20%u0447%u0435%u0440%u0435%u0437%20%u043C%u043E%u0434%u0430%u043B%u044C%u043D%u043E%u0435%20%u043E%u043A%u043D%u043E%20%u0447%u0435%u0440%u0435%u0437%20%u043E%u043A%u043E%u0448%u043A%u043E%20%u0434%u043B%u044F%20%u0432%u043E%u0434%u0430%20%u043F%u0430%u0440%u043E%u043B%u044F%20...............%0Afunction%20getPassword%28%29%20%7B%20%20%20%0A%20%20%20var%20check%20%3D%20%7Bvalue%3A%20true%7D%2C%20password%20%3D%20%7Bvalue%3A%20%22%22%7D%3B%0A%20%20%20Cc%5B%22@mozilla.org/embedcomp/prompt-service%3B1%22%5D.getService%28Ci.nsIPromptService%29.%0A%20%20%20promptPassword%28null%2C%20self.label%2C%20%22%u0412%u0432%u0435%u0434%u0438%u0442%u0435%20%u043F%u0430%u0440%u043E%u043B%u044C%3A%22%2C%20password%2C%20null%2C%20check%29%3B%20%0A%20%20%20if%20%28%20password.value.length%20%29%20%20%0A%20%20%20%20%20%20%20%20return%20btoa%28unescape%28encodeURIComponent%28password.value%29%29%29%20%20%20%20%20%20%20%20%20%0A%20%20%20else%20%0A%20%20%20%20%20%20%20%20alertsService.showAlertNotification%28%22chrome%3A//global/skin/icons/error-16.png%22%2C%20self.label%2C%20%22%u041F%u0430%u0440%u043E%u043B%u044C%20%u043D%u0435%20%u0431%u044B%u043B%20%u0432%u0432%u0435%u0434%u0435%u043D%22%29%3B%0A%20%20%20%20%20%20%20%20return%20false%3B%20%20%20%20%20%20%20%20%0A%7D%3B%0A%20%0A%0A//%20%u041F%u0440%u043E%u0432%u0435%u0440%u0438%u0442%u044C%20%u043F%u0430%u0440%u043E%u043B%u044C%20%u043F%u0440%u0438%20%u0437%u0430%u043F%u0443%u0441%u043A%u0435%20%u0431%u0440%u0430%u0443%u0437%u0435%u0440%u0430%20%u0438%20%u0432%u044B%u043A%u043B%u044E%u0447%u0438%u0442%u044C%20%u0431%u0440%u0430%u0443%u0437%u0435%u0440%20%u0435%u0441%u043B%u0438%20%u043F%u0430%u0440%u043E%u043B%u044C%20%u043D%u0435%20%u0432%u0435%u0440%u043D%u044B%u0439%20...............%0Afunction%20checkingPassword%28%29%20%7B%20%0A%20%20%20cbu.setPrefs%28%22CB.Password.data%22%2C%20%22%22%29%3B%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20//%20%u0437%u0430%u043A%u0440%u044B%u0442%u044C%20%u0431%u0440%u0430%u0443%u0437%u0435%u0440%20%u0435%u0441%u043B%u0438%20%u043F%u0430%u0440%u043E%u043B%u044C%20%u043D%u0435%20%u0431%u044B%u043B%20%u0432%u0432%u0435%u0434%u0435%u043D%20%u0438%u043B%u0438%20%u043D%u0435%20%u043F%u0440%u0430%u0432%u0438%u043B%u044C%u043D%u044B%u0439%0A%20%20%20var%20password%20%3D%20getPassword%28%29%3B%0A%20%20%20if%20%28%20%21password%20%7C%7C%20password%20%21%3D%20gPrefService.getComplexValue%28%22CB.Password.value%22%2C%20Ci.nsISupportsString%29.data%20%29%20goQuitApplication%28%29%3B%0A%7D%3B%0Acbu.getPrefs%28%22CB.Password.data%22%29%20%3D%3D%20%27shutdown%27%20%26%26%20cbu.getPrefs%28s%29%20%26%26%20cbu.getPrefs%28%22CB.Password.value%22%29%20%26%26%20checkingPassword%28%29%3B%20%20%20%20%20%20%20%0A%0A%0A//%20%u0411%u043B%u043E%u043A%u0438%u0440%u043E%u0432%u0430%u0442%u044C%20%u0437%u0430%u043F%u0440%u043E%u0441%20%u043F%u0430%u0440%u043E%u043B%u044F%20%u0435%u0441%u043B%u0438%20%u0440%u0435%u0441%u0442%u0430%u0440%u0442%20...............%0Avar%20stopButton%20%3D%20%7B%0A%20%20%20observe%3A%20function%28subject%2C%20topic%2C%20data%29%20%7B%0A%20%20%20%20%20%20cbu.setPrefs%28%22CB.Password.data%22%2C%20data.toString%28%29%29%3B%0A%20%20%20%7D%0A%7D%3B%0AServices.obs.addObserver%28stopButton%2C%20%22quit-application%22%2C%20false%29%3B%0A%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%u0432%20%27about%3Aconfig%27%20...............%0Afunction%20toggleImage%28%29%20%7B%0A%20%20%20self.ownerDocument.getAnonymousElementByAttribute%28self%2C%20%22class%22%2C%20%22toolbarbutton-icon%22%29.%0A%20%20%20src%20%3D%20%21cbu.getPrefs%28s%29%0A%20%20%20%3F%20self.image%0A%20%20%20%3A%20%22data%3Aimage/x-icon%3Bbase64%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%22%3B%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%29%3B%20%0A%0A%0A//%20%u041F%u043E%u0434%u0441%u043A%u0430%u0437%u043A%u0430%20...............%0Athis.tooltipText%20%3D%20self.label%20+%20%22%5CnL%3A%20%20%u0417%u0430%u0449%u0438%u0442%u0438%u0442%u044C%20%u0437%u0430%u043F%u0443%u0441%u043A%20%u0431%u0440%u0430%u0443%u0437%u0435%u0440%u0430%20%5Cn%u0421%3A%20%u0418%u0437%u043C%u0435%u043D%u0438%u0442%u044C%20%u043F%u0430%u0440%u043E%u043B%u044C%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%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

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

Выделить код

Код:

// CB Profile Password от 09.11.2016.

// Настройка функций кликов мыши для кнопки ...............
this.onclick =e=> {
   
   // ЛКМ переклучает кнопку и запрашивает пароль если он не существует ....
   if ( e.button == 0 ) { 
        var run = cbu.getPrefs(s);
        var password = cbu.getPrefs("CB.Password.value");
        
        if ( !run && password == null || password == '' ) savePassword();
        else
             cbu.setPrefs(s, !run);
        }
    
   // СКМ запрашивает и сохраняет пароль ....      
   if ( e.button == 1 ) savePassword(); 
};


var s = 'CB.Password';
var alertsService = Cc["@mozilla.org/alerts-service;1"].getService(Ci.nsIAlertsService);


// Сохранить пароль ...............
function savePassword() {
   var password = getPassword();
   if ( !password ) return;
   
   cbu.setPrefs("CB.Password.value", convertFromUnicode("UTF-8", password));   
   alertsService.showAlertNotification(self.image, self.label, "Пароль сохранён");
};


// Получить закодированный пароль или false через модальное окно через окошко для вода пароля ...............
function getPassword() {   
   var check = {value: true}, password = {value: ""};
   Cc["@mozilla.org/embedcomp/prompt-service;1"].getService(Ci.nsIPromptService).
   promptPassword(null, self.label, "Введите пароль:", password, null, check); 
   if ( password.value.length )  
        return btoa(unescape(encodeURIComponent(password.value)))         
   else 
        alertsService.showAlertNotification("chrome://global/skin/icons/error-16.png", self.label, "Пароль не был введен");
        return false;        
};
 

// Проверить пароль при запуске браузера и выключить браузер если пароль не верный ...............
function checkingPassword() { 
   cbu.setPrefs("CB.Password.data", "");  
               
   // закрыть браузер если пароль не был введен или не правильный
   var password = getPassword();
   if ( !password || password != gPrefService.getComplexValue("CB.Password.value", Ci.nsISupportsString).data ) goQuitApplication();
};
cbu.getPrefs("CB.Password.data") == 'shutdown' && cbu.getPrefs(s) && cbu.getPrefs("CB.Password.value") && checkingPassword();       


// Блокировать запрос пароля если рестарт ...............
var stopButton = {
   observe: function(subject, topic, data) {
      cbu.setPrefs("CB.Password.data", data.toString());
   }
};
Services.obs.addObserver(stopButton, "quit-application", false);


// Установить нужную иконку кнопки при старте браузера или при изменениях настроек в 'about:config' ...............
function toggleImage() {
   self.ownerDocument.getAnonymousElementByAttribute(self, "class", "toolbarbutton-icon").
   src = !cbu.getPrefs(s)
   ? self.image
   : "data:image/x-icon;base64,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";
};
toggleImage();
gPrefService.addObserver(s, toggleImage, false);
addDestructor(()=> gPrefService.removeObserver(s, toggleImage)); 


// Подсказка ...............
this.tooltipText = self.label + "\nL:  Защитить запуск браузера \nС: Изменить пароль";

Открыть выделенный текст в внешнем текстовом редакторе( Firefox17+ ), от 29.01.2017.
Кнопка открывает выделенный текст из страницы или текстового поля в внешнем текстовом редакторе, который у вас по умолчанию открывает текстовые(.txt) файлы.

ЛКМ => открыть выделенный текст в внешнем текстовом редакторе.

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

Выделить код

Код:

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%u044B%u0434%u0435%u043B%u0435%u043D%u043D%u044B%u0439%20%u0442%u0435%u043A%u0441%u0442%20%u0432%20%u0432%u043D%u0435%u0448%u043D%u0435%u043C%20%u0442%u0435%u043A%u0441%u0442%u043E%u0432%u043E%u043C%20%u0440%u0435%u0434%u0430%u043A%u0442%u043E%u0440%u0435%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABuklEQVR42oXQTyiDYRwH8O+717+JgxOO40hKc5mEKJRdHGhRa8jm4kBubnLYheaETWgXGWMTLlqKA8kOJH+SaYqQrWWJse31vP9s4xlPvf1+7/O87+f59mMgraMZcHzdg1N4VzAcOE48YxVRaOI6oa8ygUHSYuSf1UY7nK4CYbOxoQHg4uRU/Pb8yi9UjdoLr1WfgnwDlcYQHK4DKHMLkcnGpSMxAqNghVpfdoEzl44OqI0PuL3ew919AMos7vt2nmBJX1FZjujLJY5XetIBJ6R7kreoKxr0/wV4SHcnbNbZatIiE1xJOsCdBLTA06dCiPT8NJRJgNZ2g11jCQ1wALFHEZhrxSoBnN7fCZrVgD4JSQCGeeD9SQSW2rFMgGCEmCQCm5GKmBZoQNc08PYsAmudWCTABiVBLUlgoibosACvQRHYMsDOJwgDnzEy/ahYP0nNyQdGlmhAmxkIS4CnH7ME2KEkKFUBo04aoB0DgtIQ9wcx1UsSBBI3f/BJyJOdB5jdNKB6AJG8mAA0bQ9jUq/C4envBEXFwPjmD0BG5H6I8cHSnUjA3/whzYKfwfg6BUiZtNXH4Z8lA19Kh9YRwR0sPwAAAABJRU5ErkJggg%3D%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B/*Initialization%20Code*/%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B//%20%u0417%u0430%u043F%u0438%u0441%u0430%u0442%u044C%20%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u043D%u044B%u0439%20%u0442%u0435%u043A%u0441%u0442%20%u0432%20%u0444%u0430%u0439%u043B%20%u0432%20%u043F%u0430%u043F%u043A%u0435%20%u043F%u0440%u043E%u0444%u0438%u043B%u044F%20%u0438%20%u043E%u0442%u043A%u0440%u044B%u0442%u044C%20%u0444%u0430%u0439%u043B%20%u0432%20%u0432%u043D%u0435%u0448%u043D%u0435%u043C%20%u0440%u0435%u0434%u0430%u043A%u0442%u043E%u0440%u0435%20..........%0Avar%20file%20%3D%20Services.dirsvc.get%28%27ProfD%27%2C%20Ci.nsIFile%29%3B%0Afile.append%28%22TextToEditor.txt%22%29%3B%0AcustombuttonsUtils.writeFile%28%20file.path%2C%20convertFromUnicode%28%22UTF-16%22%2C%20getSelect%28%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%0A%0A%0A//%20%u041F%u043E%u043B%u0443%u0447%u0438%u0442%u044C%20%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u043D%u044B%u0439%20%u0442%u0435%u043A%u0441%u0442%20%u0438%u0437%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u044B%20%u0438%u043B%u0438%20false%20..........%0Afunction%20getSelect%28%29%20%7B%0A%20%20%20var%20el%20%3D%20document.commandDispatcher.focusedElement%3B%0A%20%20%20try%20%7B%20return%20el.value.substring%28el.selectionStart%2C%20el.selectionEnd%29%20%7D%20catch%28e%29%20%7B%7D%3B%0A%20%20%20var%20sel%20%3D%20document.commandDispatcher.focusedWindow.getSelection%28%29%3B%0A%20%20%20return%20%28sel%20%3D%3D%20%27%27%29%20%3F%20false%20%3A%20sel.toString%28%29.replace%28/%5E%5Cs+%7C%5Cs+%24/g%2C%22%22%29%3B%0A%7D%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%0A%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

Код:

Выделить код

Код:

// Записать выделенный текст в файл в папке профиля и открыть файл в внешнем редакторе ..........
var file = Services.dirsvc.get('ProfD', Ci.nsIFile);
file.append("TextToEditor.txt");
custombuttonsUtils.writeFile( file.path, convertFromUnicode("UTF-16", getSelect()) );
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();
};


// Получить выделенный текст из страницы или false ..........
function getSelect() {
   var el = document.commandDispatcher.focusedElement;
   try { return el.value.substring(el.selectionStart, el.selectionEnd) } catch(e) {};
   var sel = document.commandDispatcher.focusedWindow.getSelection();
   return (sel == '') ? false : sel.toString().replace(/^\s+|\s+$/g,"");
};

Открыть папки и файлы Firefox( Firefox11+ ) от 13.02.2017.
Кнопка дает возможность из меню кнопки открыть папки и файлы Firefox.
Папки - Firefox, Profile, bookmarkbackups, extensions, custombuttons и также папки searchplugins где лежат плагины поиска (на Firefox 40+ отсутствуют), Chrome и Download если эти папки уже созданы.
Файлы - userChrome.css, userContent.css, user.js, prefs.js, если эти файлы уже созданы.

ЛКМ => Открыть меню кнопки.

Скриншот меню кнопки:
d8fb047b3563242f6b200d5c01f6fa66.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%u0442%u043A%u0440%u044B%u0442%u044C%20%u043F%u0430%u043F%u043A%u0438%20%u0438%20%u0444%u0430%u0439%u043B%u044B%20Firefox%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEREAAAEAIADwBAAAFgAAACgAAAARAAAAIgAAAAEAIAAAAAAAyAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAABsAAAAoAAAAFgAAAAAAAAAADggMA0MoOjIXDxQWAAAAAAEBAQEAAAAAAAAAAAAAAAAAAAAAAQEBCgAAADksLCytMDAw4gAAAI0bHBuDKR8lan1IaZfSg7XS+K3f/zwtN2IAAAAAAwIDAwAAAAAAAAAAAAAAAQMDAwADAwMUAgICZUtLS+xgYWH/RURF8W1tbfpQS07/hm99/8Czu/2tsK7/IiMijwAAAAADAgMCAAAAAAAAAAAAAAAAJSUlH1dXV8ROTk7cl5eX/7Gxsfytra3/fX19/UpMS/t2enf7tLe1+7u7u/8lJCSkAAAAGQUFBQABAQECAAAAAAAAAAAfHx8tYGBg8ZiYmP+Li4v9UlJS/pubm/6xsbH+paWl/qWlpf6GhYX+xsjH/1Q9R+JxQV3LRzFAWQAAAAACAQICAAAAAAMDAwNhYWHViIiI/zMzM/xvb2/+ioqK/p2dnf7n5+f+u7u7/pycnP7IyMj+WFBT/HZkb/9JQUeTAAAAAgMDAwESEhIAWlpaj4KCgv9aWlr+SUlJ/pGRkf6RkZH+i4uL/tzc3P6AgID+ysrK/sfHx/5MTk36U1ZU/zc4N4MBAAEBAgICAgkJCQB2dna+lZWV/2lpaf05OTn+bm5u/l9fX/7AwMD++vr6/ru7u/7CwsL+ysrK/lRUVPtkY2T/SEhIaQAAAAACAgIEAAAAAwcHBwBVVVWBqamp/5ubm/qQkJD+ysrK/uDg4P7b29v+0NDQ/sPDw/7Nzc3+WFhY+2xsbP9ISEhiAAAAAAICAgQCAgIFAAAAAFtbW3bKysr/x8fH+vX19f729vb+pKSk/re3t/7FxcX+zc3N/tLS0v5cXFz7dHR0/0hISGIAAAAAAwMDBAICAgQAAAAAMTExdY2Njf91dXX6tLS0/uDg4P65ubn+wsLC/s3Nzf7W1tb+29vb/mBgYPt6enr/S0tLYgAAAAADAwMEAgICBAAAAAAtLS1zd3d3/4qKivqdnZ3+pqam/re3t/7Gxsb+1NTU/t3d3f7f39/+Y2Nj+4CAgP9OTk5iAAAAAAMDAwQCAgIEAAAAAC4uLnN/f3//jIyM+p2dnf6pqan+tra2/sfHx/7Z2dn+6Ojo/u/v7/5sbGz7g4OD/1FRUWIAAAAAAwMDBAICAgQAAAAALy8vc39/f/+JiYn6nZ2d/rCwsP7AwMD+ysrK/sfHx/60tLT+mZmZ/mBgYPuTk5P/UlJSYgAAAAADAwMEAgICBAAAAAAvLy9zhISE/5CQkPmYmJj9i4uL/XZ2dv1lZWX9XFxc/WJiYv14eHj9mpqa+snJyf9RUVFhAAAAAAMDAwQCAgIEAAAAADAwMHRoaGj/SUlJ+z09Pf86Ojr/SEhI/2JiYv99fX3/lpaW/6ysrP+8vLz70tLS/1JSUmIAAAAAAwMDBAEBAQQAAAAAIyMjVzY2Nu8wMDDjS0tL5mFhYedzc3PnfHx85oeHh+WWlpbkqKio5La1tuHNzMzzb29vWAAAAAAEBAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%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%20menuPopup.showPopup%28this%2C%20-1%2C%20-1%2C%20%22popup%22%2C%20%22bottomleft%22%2C%20%22topleft%22%29%3B%0A%0A%0A//%20%u0421%u043E%u0437%u0434%u0430%u0442%u044C%20%u043C%u0435%u043D%u044E%20..................%0Avar%20array%20%3D%20%5B%0A%20%20%20%20%20%7B%0A%20%20%20%20%20%20label%3A%20%22Profile%22%2C%0A%20%20%20%20%20%20image%3A%20%22chrome%3A//mozapps/skin/profile/profileicon.png%22%2C%0A%20%20%20%20%20%20value%3A%20%22ProfD%22%20%0A%20%20%20%20%20%7D%2C%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%7B%20%0A%20%20%20%20%20%20label%3A%20%22Firefox%22%2C%0A%20%20%20%20%20%20image%3A%20%22chrome%3A//branding/content/icon16.png%22%2C%0A%20%20%20%20%20%20value%3A%20%22CurProcD%22%0A%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%7B%0A%20%20%20%20%20%20label%3A%20%22Download%22%2C%0A%20%20%20%20%20%20image%3A%20%22chrome%3A//mozapps/skin/downloads/downloadIcon.png%22%2C%0A%20%20%20%20%20%20value%3A%20%22DfltDwnld%22%20%0A%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%7B%0A%20%20%20%20%20%20separator%3A%20%27%27%0A%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%7B%0A%20%20%20%20%20%20label%3A%20%22Extensions%22%2C%0A%20%20%20%20%20%20image%3A%20%22chrome%3A//mozapps/skin/extensions/extensionGeneric-16.png%22%2C%0A%20%20%20%20%20%20value%3A%20%22ProfD%2Cextensions%22%20%0A%20%20%20%20%20%7D%2C%20%0A%20%20%20%20%20%7B%0A%20%20%20%20%20%20label%3A%20%22Custom%20buttons%22%2C%0A%20%20%20%20%20%20image%3A%20%22chrome%3A//custombuttons/skin/cbicon.png%22%2C%0A%20%20%20%20%20%20value%3A%20%22ProfD%2Ccustombuttons%22%20%0A%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%7B%0A%20%20%20%20%20%20label%3A%20%22Bookmark%20backups%22%2C%0A%20%20%20%20%20%20image%3A%20%22chrome%3A//custombuttons/skin/button.png%22%2C%0A%20%20%20%20%20%20value%3A%20%22ProfD%2Cbookmarkbackups%22%20%0A%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%7B%0A%20%20%20%20%20%20label%3A%20%22Search%20plugins%28default%29%22%2C%0A%20%20%20%20%20%20style%3A%20%22chrome%3A//global/skin/icons/Search-glass.png%22%2C%0A%20%20%20%20%20%20value%3A%20%22CurProcD%2Csearchplugins%22%20%0A%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%7B%0A%20%20%20%20%20%20label%3A%20%22Search%20plugins%28user-defined%29%22%2C%0A%20%20%20%20%20%20style%3A%20%22chrome%3A//global/skin/icons/Search-glass.png%22%2C%0A%20%20%20%20%20%20value%3A%20%22UsrSrchPlugns%22%0A%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%7B%0A%20%20%20%20%20%20separator%3A%20%27%27%0A%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%7B%0A%20%20%20%20%20%20label%3A%20%22Chrome%22%2C%0A%20%20%20%20%20%20image%3A%20%22chrome%3A//global/skin/dirListing/folder.png%22%2C%0A%20%20%20%20%20%20value%3A%20%22UChrm%22%20%0A%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%7B%0A%20%20%20%20%20%20label%3A%20%22userChrome.css%22%2C%0A%20%20%20%20%20%20style%3A%20%22chrome%3A//global/skin/icons/folder-item.png%22%2C%0A%20%20%20%20%20%20value%3A%20%22ProfD%2Cchrome%2CuserChrome.css%22%20%0A%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%7B%0A%20%20%20%20%20%20label%3A%20%22userContent.css%22%2C%0A%20%20%20%20%20%20style%3A%20%22chrome%3A//global/skin/icons/folder-item.png%22%2C%0A%20%20%20%20%20%20value%3A%20%22ProfD%2Cchrome%2CuserContent.css%22%20%20%0A%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%7B%0A%20%20%20%20%20%20label%3A%20%22user.js%22%2C%0A%20%20%20%20%20%20style%3A%20%22chrome%3A//global/skin/icons/folder-item.png%22%2C%0A%20%20%20%20%20%20value%3A%20%22ProfD%2C%2Cuser.js%22%20%0A%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%7B%0A%20%20%20%20%20%20label%3A%20%22prefs.js%22%2C%0A%20%20%20%20%20%20style%3A%20%22chrome%3A//global/skin/icons/folder-item.png%22%2C%0A%20%20%20%20%20%20value%3A%20%22ProfD%2C%2Cprefs.js%22%20%0A%20%20%20%20%20%7D%20%20%20%20%20%0A%5D%3B%0Avar%20version%20%3D%20parseInt%28Services.appinfo.version%29%3B%0Avar%20menuPopup%20%3D%20self.appendChild%28document.createElement%28%22menupopup%22%29%29%3B%0Aarray.forEach%28m%3D%3E%20%7B%0A%20%20%20if%20%28%20%22separator%22%20in%20m%20%29%20%7B%20menuPopup.appendChild%28document.createElement%28%22menuseparator%22%29%29%3B%20return%20%7D%3B%20LOG%28m.label.slice%280%2C6%29%29%0A%20%20%20if%20%28%20version%20%3E%2040%20%26%26%20m.label.startsWith%28%22Search%22%29%20%29%20return%3B%0A%20%20%20var%20mItem%20%3D%20menuPopup.appendChild%28document.createElement%28%22menuitem%22%29%29%3B%0A%20%20%20mItem.setAttribute%28%22label%22%2C%20m.label%29%3B%0A%20%20%20mItem.setAttribute%28%22value%22%2C%20m.value%29%3B%20%20%20%20%20%20%20%20%0A%20%20%20mItem.setAttribute%28%22class%22%2C%20%22menuitem-iconic%22%29%3B%0A%20%20%20%28%22image%22%20in%20m%29%20%26%26%20mItem.setAttribute%28%22image%22%2C%20m.image%29%3B%20%20%20%20%0A%20%20%20%28%22style%22%20in%20m%29%20%26%26%20mItem.setAttribute%28%22style%22%2C%20%22list-style-image%3A%20url%28%27%22+%20m.style%20+%22%27%29%3B%20-moz-image-region%3A%20rect%280%2C%2016px%2C%2016px%2C%200%29%22%29%3B%0A%7D%29%3B%0AmenuPopup.addEventListener%28%22click%22%2C%20e%3D%3E%20openFirefoxFolders%28e.target.value%29%29%3B%0A%20%0A%0A//%20%u0424%u0443%u043D%u043A%u0446%u0438%u044F%20%u043E%u0442%u043A%u0440%u044B%u0432%u0430%u0435%u0442%20%u043F%u0430%u043F%u043A%u0438%20%u0438%20%u0444%u0430%u0439%u043B%u044B%20Firefox%2C%20%u0432%u044B%u0431%u043E%u0440%20%u0437%u0430%u0432%u044B%u0441%u0438%u0442%20%u043E%u0442%20%u0430%u0440%u0433%u0443%u043C%u0435%u043D%u0442%u0430%20%27value%27%20...................toString%28%29.startsWith%28%22Search%22%29%0Afunction%20openFirefoxFolders%28value%29%20%7B%0A%20%20%20var%20array%20%3D%20value.split%28%22%2C%22%29%2C%0A%20%20%20directory%20%3D%20array%5B0%5D%2C%20folders%20%3D%20array%5B1%5D%2C%20file%20%3D%20array%5B2%5D%3B%0A%0A%20%20%20var%20dir%20%3D%20Services.dirsvc.get%28directory%2C%20Ci.nsIFile%29%3B%0A%20%20%20folders%20%26%26%20dir.append%28folders%29%3B%0A%20%20%20file%20%26%26%20%28dir.append%28file%29%2C%20dir.launch%28%29%29%3B%0A%20%20%20dir.exists%28%29%20%26%26%20%21file%20%26%26%20dir.reveal%28%29%3B%0A%7D%3B%0A%20%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%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

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

Выделить код

Код:

this._handleClick =()=> menuPopup.showPopup(this, -1, -1, "popup", "bottomleft", "topleft");


// Создать меню ..................
var array = [
     {
      label: "Profile",
      image: "chrome://mozapps/skin/profile/profileicon.png",
      value: "ProfD" 
     },        
     { 
      label: "Firefox",
      image: "chrome://branding/content/icon16.png",
      value: "CurProcD"
     },
     {
      label: "Download",
      image: "chrome://mozapps/skin/downloads/downloadIcon.png",
      value: "DfltDwnld" 
     },
     {
      separator: ''
     },
     {
      label: "Extensions",
      image: "chrome://mozapps/skin/extensions/extensionGeneric-16.png",
      value: "ProfD,extensions" 
     }, 
     {
      label: "Custom buttons",
      image: "chrome://custombuttons/skin/cbicon.png",
      value: "ProfD,custombuttons" 
     },
     {
      label: "Bookmark backups",
      image: "chrome://custombuttons/skin/button.png",
      value: "ProfD,bookmarkbackups" 
     },
     {
      label: "Search plugins(default)",
      style: "chrome://global/skin/icons/Search-glass.png",
      value: "CurProcD,searchplugins" 
     },
     {
      label: "Search plugins(user-defined)",
      style: "chrome://global/skin/icons/Search-glass.png",
      value: "UsrSrchPlugns"
     },
     {
      separator: ''
     },
     {
      label: "Chrome",
      image: "chrome://global/skin/dirListing/folder.png",
      value: "UChrm" 
     },
     {
      label: "userChrome.css",
      style: "chrome://global/skin/icons/folder-item.png",
      value: "ProfD,chrome,userChrome.css" 
     },
     {
      label: "userContent.css",
      style: "chrome://global/skin/icons/folder-item.png",
      value: "ProfD,chrome,userContent.css"  
     },
     {
      label: "user.js",
      style: "chrome://global/skin/icons/folder-item.png",
      value: "ProfD,,user.js" 
     },
     {
      label: "prefs.js",
      style: "chrome://global/skin/icons/folder-item.png",
      value: "ProfD,,prefs.js" 
     }     
];
var version = parseInt(Services.appinfo.version);
var menuPopup = self.appendChild(document.createElement("menupopup"));
array.forEach(m=> {
   if ( "separator" in m ) { menuPopup.appendChild(document.createElement("menuseparator")); return }; LOG(m.label.slice(0,6))
   if ( version > 40 && m.label.startsWith("Search") ) return;
   var mItem = menuPopup.appendChild(document.createElement("menuitem"));
   mItem.setAttribute("label", m.label);
   mItem.setAttribute("value", m.value);        
   mItem.setAttribute("class", "menuitem-iconic");
   ("image" in m) && mItem.setAttribute("image", m.image);    
   ("style" in m) && mItem.setAttribute("style", "list-style-image: url('"+ m.style +"'); -moz-image-region: rect(0, 16px, 16px, 0)");
});
menuPopup.addEventListener("click", e=> openFirefoxFolders(e.target.value));
 

// Функция открывает папки и файлы Firefox, выбор завысит от аргумента 'value' ...................toString().startsWith("Search")
function openFirefoxFolders(value) {
   var array = value.split(","),
   directory = array[0], folders = array[1], file = array[2];

   var dir = Services.dirsvc.get(directory, Ci.nsIFile);
   folders && dir.append(folders);
   file && (dir.append(file), dir.launch());
   dir.exists() && !file && dir.reveal();
};

Блокнот в вкладке( Firefox24+ ) от 27.09.2017.
Кнопка открывает в вкладке текстовое поле которое можно использовать как простой блокнот для заметок, можно открыть в блокноте выделенный на странице текст или текст из буфера обмена. Css код текстового поля находится в вкладке Справка и его можно менять как вам нравится, например: поменять фон блокнота на светло зеленей для этого нужно в вкладке Справка заменить background: #383838; на background: #F0FFF0, если блокнот открыт в текущей вкладке изменения блокнота будут сразу видны.

ЛКМ => Открыть блокнот в табе,
СКМ => Открыть в блокноте выделенный на странице текст или текст из буфера обмена,
ПКМ => 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%3E%u0411%u043B%u043E%u043A%u043D%u043E%u0442%20%u0432%20%u0432%u043A%u043B%u0430%u0434%u043A%u0435%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEREAAAEAIADwBAAAFgAAACgAAAARAAAAIgAAAAEAIAAAAAAAyAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAgAAAAApKSlRRkZGh0BAQHxBQUF+QUFBfkFBQX5BQUF+QEBAfEZGRogaGho1AAAAAAABAAECAgICAgICAgQEBAUAAAAAMTEwWeLi4f//////+vr6//r6+v/6+vr//Pz8//v7+//5+fn++/v7/7CwsPdNTU2hAQEBAgAAAAAAAAAAAwMDBAAAAABvbm+x8vHy/+Df4Pfi4+P76ubr++Lh4vvk5OT7/f39+/////v////77/Dv/aysrP8BEAElKngnxDCDLdEvgSzOLX8qy0GTPu1Zq1b/WatW/lasU/9op2f/xcPF/8PEw//i5+L/8vfx//H27//p6+n/qqqq/ESaQOS67a7/teip/rbpqv+36qv/suSm/6zfoP+s36D/teOo/4bNfP93s3b/39bf/9XY1f/5/Pj/+Pv2/+vs6/+qqar/T6RK8bvjsP6t2qT8sNym/LDcpvyx3af+st6o/7LeqP+w3ab/vuaz/1mqVP+2w7b/3dvd//D07//4+/f/6+zr/6qqqv8BNwFvndiU/8Djt/y34a//ueGw/7nhsP+54bD/ueGw/7jgr//B5Lj/mtSS/3q1ev/WzNb/4ufh//f79f/p6+n/qqqq/wAAAANHk0Pbzu/F/73gtP3A47f/wOO3/8Djt//A47f/wOO4/73itf/D5rn/Y7Je/7/MwP/k4eP/+f35/+vs6/+qqqr/AAAAAAAzAGap4KP/zebG+8Tkvv/G5b//xuS//8blv//F5b7/vuK2/8LkuP+U0Yv/ZaBl/97W3v/u9e3/6+3r/6qqqv8DAQMAAAAABE6XS+Db8dT/yuPD/czmxv/N5sf/zObG/8blv//A47j/t+Cu/7vjsP9nuWP/uMW5/+zr6//s7+z/qamq/wACAAQAAAAAATQBZrTir//a6dX70ufN/9Pozv/N5sf/xuS//8Djt/+44K//u+Ow/4zNgv9uqW7/6+Tr/+ru6v+qqar/AAAAAQMBAwAAAAAHVJhS2Or25v/W59L91OjP/8zmxv/G5b//wOO3/7rhsP+w3ab/tuSp/1isU/+vva//6+rq/6qqqv8AAAAAAQIBAwAAAAAENQRkv+S7/+Pr3vvR58z/zObG/8bkv/+/4rf/ueCw/7Hep/+z4Kf/h818/3Kucv/r4uv/qKqo/gAAAAAAAAABAwEDAAAAAApVl1TU7Pbo/9HlzP3P58j/xuS//8Ljuf+64bH/s9+p/6vcoP+t4KD/Wq5U/8bSx/23tLf9AAAAAAAAAAABAgEDAAAAAAk3CWaq36b/1unR+cLjvPzF5r78t+Cv/LXgrP2w36b8odmW/Kzgn/1yxGf7gLKA/52Sne0AAAAAAAAAAAAAAAECAQIAAAEADUOCQcdwt23/Zati82GrXvVjrWD4XKlY9FqpVvZaqlX3UqZN81OnTvxYbFndGxcbNAAAAAAAAAAAAAAAAAABAQEAAAAAFBAUHTAzMGcqKipRJSclUS8wL14nJyZNKCspVy4uLlsiJCJKNjU2aQQABAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%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.onclick%20%3De%3D%3E%20%7B%0A%20%20%20if%20%28%20e.button%20%3D%3D%200%20%29%20gBrowser.selectedTab%20%3D%20gBrowser.addTab%28notepad%29%3B%20//%20%u043E%u0442%u043A%u0440%u044B%u0442%u044C%20%u0431%u043B%u043E%u043A%u043D%u043E%u0442%20%20%20%20%0A%20%20%20%20%20%0A%20%20%20if%20%28%20e.button%20%3D%3D%201%20%29%20%7B%20%20%0A%20%20%20%20%20%20%20%20//%20%u0437%u0430%u043F%u043E%u043C%u043D%u0438%u0442%u044C%20%u0442%u0435%u043A%u0441%u0442%20%u0438%u0437%20%u0431%u0443%u0444%u0435%u0440%u0430%20%u043E%u0431%u043C%u0435%u043D%u0430%20%u0438%20%u0441%u043A%u043E%u043F%u0438%u0440%u043E%u0432%u0430%u0442%u044C%20%u0442%u0435%u043A%u0441%u0442%20%u043D%u0430%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u0435%0A%20%20%20%20%20%20%20%20var%20clip%20%3D%20gClipboard.read%28%29%3B%0A%20%20%20%20%20%20%20%20window.content.focus%28%29%3B%0A%20%20%20%20%20%20%20%20goDoCommand%28%22cmd_copy%22%29%3B%20%20%20%20%20%20%20%20%20%20%20%20%0A%0A%20%20%20%20%20%20%20%20//%20%u043E%u0442%u043A%u0440%u044B%u0442%u044C%20%u0431%u043B%u043E%u043A%u043D%u043E%u0442%20%u0438%20%u0432%u0441%u0442%u0430%u0432%u0438%u0442%u044C%20%u0442%u0435%u043A%u0441%u0442%20%u0438%u0437%20%u0431%u0443%u0444%u0435%u0440%u0430%20%u043E%u0431%u043C%u0435%u043D%u0430%0A%20%20%20%20%20%20%20%20var%20browser%20%3D%20gBrowser.getBrowserForTab%28gBrowser.selectedTab%20%3D%20gBrowser.addTab%28notepad%29%29%3B%20%0A%20%20%20%20%20%20%20%20browser.addEventListener%28%22pageshow%22%2C%20function%20c%28e%29%20%7B%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20this.removeEventListener%28e.type%2C%20c%29%3B%20%20%20%20%20%20%20%20%20%20%20%0A%0A%20%20%20%20%20%20%20%20%20%20%20setTimeout%28%28%29%3D%3E%20%7B%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20content.document.getElementsByTagName%28%22textarea%22%29%5B0%5D.value%20%3D%20gClipboard.read%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20clip%20%26%26%20gClipboard.write%28clip%29%3B%20//%20%u0432%u0435%u0440%u043D%u0443%u0442%u044C%20%u0442%u0435%u043A%u0441%u0442%20%u0432%20%u0431%u0443%u0444%u0435%u0440%20%u043E%u0431%u043C%u0435%u043D%u0430%20%0A%20%20%20%20%20%20%20%20%20%20%20%7D%2C%2050%29%3B%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%7D%29%3B%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%7D%3B%0A%7D%3B%0A%0A%0A//%20%u041E%u0431%u043D%u043E%u0432%u0438%u0442%u044C%20%u0431%u043B%u043E%u043A%u043D%u043E%u0442%20%u0432%20%u0442%u0435%u043A%u0443%u0449%u0435%u0439%20%u0432%u043A%u043B%u0430%u0434%u043A%u0435%20%u043F%u043E%u0441%u043B%u0435%20%u043E%u0431%u043D%u043E%u0432%u043B%u0435%u043D%u0438%u044F%20%u043A%u043D%u043E%u043F%u043A%u0438%20...........%0Aif%20%28%20gBrowser.currentURI.spec%20%3D%3D%20notepad%20%29%20%7B%0A%20%20%20%20%20var%20val%20%3D%20content.document.getElementsByTagName%28%22textarea%22%29%5B0%5D.value%3B%0A%20%20%20%20%20loadURI%28notepad%29%3B%0A%20%20%20%20%20setTimeout%28%28%29%3D%3E%20content.document.getElementsByTagName%28%22textarea%22%29%5B0%5D.value%20%3D%20val%2C%20500%29%3B%20%20%20%20%20%0A%20%20%20%20%20%7D%3B%0A%0A%20%20%20%20%20%20%20%20%0A//%20%u041E%u0447%u0438%u0441%u0442%u0438%u0442%u044C%20%u0430%u0434%u0440%u0435%u0441%u043D%u0443%u044E%20%u0441%u0442%u0440%u043E%u043A%u0443%20%u0432%20%u043A%u043B%u0430%u0434%u043A%u0435%20%u0431%u043B%u043E%u043A%u043D%u043E%u0442%u0430%20...........%0AaddEventListener%28%22TabAttrModified%22%2C%20%28%29%3D%3E%20gBrowser.currentURI.spec%20%3D%3D%20notepad%20%26%26%20gURLBar.reset%28%29%29%3B%0A%0A%0A//%20%u041F%u043E%u043B%u0443%u0447%u0430%u0435%u043C%20%u0430%u0434%u0440%u0435%u0441%20%u0431%u043B%u043E%u043A%u043D%u043E%u0442%u0430%20%u043A%u0430%u043A%20base64%20%u0438%u0437%20%u0432%u043A%u043B%u0430%u0434%u043A%u0438%20%u0421%u043F%u0440%u0430%u0432%u043A%u0430%20%u0438%20%u0434%u043E%u0431%u0430%u0432%u043B%u044F%u0435%u043C%20%u0438%u043A%u043E%u043D%u043A%u0443%20%u0434%u043B%u044F%20%u0432%u043A%u043B%u0430%u0434%u043A%u0438%20%u0431%u043B%u043E%u043A%u043D%u043E%u0442%u0430%20...........%0Avar%20notepad%20%3D%20%22data%3Atext/html%3Bbase64%2C%22%20+%20window.btoa%28self.getAttribute%28%27Help%27%29.replace%28%27selfImage%27%2C%20self.image%29%29%3B%0A%0A%0A//%20%u041F%u043E%u0434%u0441%u043A%u0430%u0437%u043A%u0430%20%u0443%20%u043A%u043D%u043E%u043F%u043A%u0438%20...........%0Athis.tooltipText%20%3D%20%22%u0411%u043B%u043E%u043A%u043D%u043E%u0442%20%u0432%20%u0432%u043A%u043B%u0430%u0434%u043A%u0435%20%5Cn%u041B%3A%20%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20%u0431%u043B%u043E%u043A%u043D%u043E%u0442%20%5Cn%u0421%3A%20%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20%u0431%u043B%u043E%u043A%u043D%u043E%u0442%20%u0441%20%u0442%u0435%u043A%u0441%u0442%u043E%u043C%28%20%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u043D%u044B%u043C%20%u0438%u043B%u0438%20%u0438%u0437%20%u0431%u0443%u0444%u0435%u0440%u0430%20%29%20%5Cn%u041F%3A%20CB%20%u043C%u0435%u043D%u044E%22%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%3Cmeta%20http-equiv%3D%22Content-Type%22%20content%3D%22text/html%3B%20charset%3Dutf-8%22/%3E%3Ctitle%3ENotepad%3C/title%3E%0A%3Chead%3E%0A%20%3Clink%20rel%3D%22shortcut%20icon%22%20href%3D%22data%3Aimage/x-icon%3Bbase64%2CAAABAAEAEREAAAEAIADwBAAAFgAAACgAAAARAAAAIgAAAAEAIAAAAAAAyAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAgAAAAApKSlRRkZGh0BAQHxBQUF+QUFBfkFBQX5BQUF+QEBAfEZGRogaGho1AAAAAAABAAECAgICAgICAgQEBAUAAAAAMTEwWeLi4f//////+vr6//r6+v/6+vr//Pz8//v7+//5+fn++/v7/7CwsPdNTU2hAQEBAgAAAAAAAAAAAwMDBAAAAABvbm+x8vHy/+Df4Pfi4+P76ubr++Lh4vvk5OT7/f39+/////v////77/Dv/aysrP8BEAElKngnxDCDLdEvgSzOLX8qy0GTPu1Zq1b/WatW/lasU/9op2f/xcPF/8PEw//i5+L/8vfx//H27//p6+n/qqqq/ESaQOS67a7/teip/rbpqv+36qv/suSm/6zfoP+s36D/teOo/4bNfP93s3b/39bf/9XY1f/5/Pj/+Pv2/+vs6/+qqar/T6RK8bvjsP6t2qT8sNym/LDcpvyx3af+st6o/7LeqP+w3ab/vuaz/1mqVP+2w7b/3dvd//D07//4+/f/6+zr/6qqqv8BNwFvndiU/8Djt/y34a//ueGw/7nhsP+54bD/ueGw/7jgr//B5Lj/mtSS/3q1ev/WzNb/4ufh//f79f/p6+n/qqqq/wAAAANHk0Pbzu/F/73gtP3A47f/wOO3/8Djt//A47f/wOO4/73itf/D5rn/Y7Je/7/MwP/k4eP/+f35/+vs6/+qqqr/AAAAAAAzAGap4KP/zebG+8Tkvv/G5b//xuS//8blv//F5b7/vuK2/8LkuP+U0Yv/ZaBl/97W3v/u9e3/6+3r/6qqqv8DAQMAAAAABE6XS+Db8dT/yuPD/czmxv/N5sf/zObG/8blv//A47j/t+Cu/7vjsP9nuWP/uMW5/+zr6//s7+z/qamq/wACAAQAAAAAATQBZrTir//a6dX70ufN/9Pozv/N5sf/xuS//8Djt/+44K//u+Ow/4zNgv9uqW7/6+Tr/+ru6v+qqar/AAAAAQMBAwAAAAAHVJhS2Or25v/W59L91OjP/8zmxv/G5b//wOO3/7rhsP+w3ab/tuSp/1isU/+vva//6+rq/6qqqv8AAAAAAQIBAwAAAAAENQRkv+S7/+Pr3vvR58z/zObG/8bkv/+/4rf/ueCw/7Hep/+z4Kf/h818/3Kucv/r4uv/qKqo/gAAAAAAAAABAwEDAAAAAApVl1TU7Pbo/9HlzP3P58j/xuS//8Ljuf+64bH/s9+p/6vcoP+t4KD/Wq5U/8bSx/23tLf9AAAAAAAAAAABAgEDAAAAAAk3CWaq36b/1unR+cLjvPzF5r78t+Cv/LXgrP2w36b8odmW/Kzgn/1yxGf7gLKA/52Sne0AAAAAAAAAAAAAAAECAQIAAAEADUOCQcdwt23/Zati82GrXvVjrWD4XKlY9FqpVvZaqlX3UqZN81OnTvxYbFndGxcbNAAAAAAAAAAAAAAAAAABAQEAAAAAFBAUHTAzMGcqKipRJSclUS8wL14nJyZNKCspVy4uLlsiJCJKNjU2aQQABAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%3D%22type%3D%22image/x-icon%22%3E%0A%3C/head%3E%0A%0A%3CTEXTAREA%3E%3C/TEXTAREA%3E%0A%3Cstyle%3E%0A%0Ahtml%20%7B%0A%20%20background-color%3A%20black%3B%0A%20%20overflow%3A%20hidden%3B%0A%7D%0Atextarea%20%7B%0A%20%20background%3A%20%23383838%3B%0A%20%20overflow-y%3A%20auto%3B%0A%20%20width%3A%20100%25%3B%0A%20%20height%3A%20100%25%3B%0A%20%20border-radius%3A%202px%3B%0A%20%20border%3A%202px%20inset%20white%3B%0A%20%20color%3A%20white%3B%0A%7D%0A%3C/style%3E%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

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

Выделить код

Код:

// Настройка функций кликов мыши для кнопки ...........
this.onclick =e=> {
   if ( e.button == 0 ) gBrowser.selectedTab = gBrowser.addTab(notepad); // открыть блокнот    
     
   if ( e.button == 1 ) {  
        // запомнить текст из буфера обмена и скопировать текст на странице
        var clip = gClipboard.read();
        window.content.focus();
        goDoCommand("cmd_copy");            

        // открыть блокнот и вставить текст из буфера обмена
        var browser = gBrowser.getBrowserForTab(gBrowser.selectedTab = gBrowser.addTab(notepad)); 
        browser.addEventListener("pageshow", function c(e) {      
           this.removeEventListener(e.type, c);           

           setTimeout(()=> {              
              content.document.getElementsByTagName("textarea")[0].value = gClipboard.read();
              clip && gClipboard.write(clip); // вернуть текст в буфер обмена 
           }, 50);      
        });       
        };
};


// Обновить блокнот в текущей вкладке после обновления кнопки ...........
if ( gBrowser.currentURI.spec == notepad ) {
     var val = content.document.getElementsByTagName("textarea")[0].value;
     loadURI(notepad);
     setTimeout(()=> content.document.getElementsByTagName("textarea")[0].value = val, 500);     
     };

        
// Очистить адресную строку в кладке блокнота ...........
addEventListener("TabAttrModified", ()=> gBrowser.currentURI.spec == notepad && gURLBar.reset());


// Получаем адрес блокнота как base64 из вкладки Справка и добавляем иконку для вкладки блокнота ...........
var notepad = "data:text/html;base64," + window.btoa(self.getAttribute('Help').replace('selfImage', self.image));


// Подсказка у кнопки ...........
this.tooltipText = "Блокнот в вкладке \nЛ: Открыть блокнот \nС: Открыть блокнот с текстом( выделенным или из буфера ) \nП: CB меню";

Справка:

Выделить код

Код:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/><title>Notepad</title>
<head>
 <link rel="shortcut icon" href="data:image/x-icon;base64,AAABAAEAEREAAAEAIADwBAAAFgAAACgAAAARAAAAIgAAAAEAIAAAAAAAyAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAgAAAAApKSlRRkZGh0BAQHxBQUF+QUFBfkFBQX5BQUF+QEBAfEZGRogaGho1AAAAAAABAAECAgICAgICAgQEBAUAAAAAMTEwWeLi4f//////+vr6//r6+v/6+vr//Pz8//v7+//5+fn++/v7/7CwsPdNTU2hAQEBAgAAAAAAAAAAAwMDBAAAAABvbm+x8vHy/+Df4Pfi4+P76ubr++Lh4vvk5OT7/f39+/////v////77/Dv/aysrP8BEAElKngnxDCDLdEvgSzOLX8qy0GTPu1Zq1b/WatW/lasU/9op2f/xcPF/8PEw//i5+L/8vfx//H27//p6+n/qqqq/ESaQOS67a7/teip/rbpqv+36qv/suSm/6zfoP+s36D/teOo/4bNfP93s3b/39bf/9XY1f/5/Pj/+Pv2/+vs6/+qqar/T6RK8bvjsP6t2qT8sNym/LDcpvyx3af+st6o/7LeqP+w3ab/vuaz/1mqVP+2w7b/3dvd//D07//4+/f/6+zr/6qqqv8BNwFvndiU/8Djt/y34a//ueGw/7nhsP+54bD/ueGw/7jgr//B5Lj/mtSS/3q1ev/WzNb/4ufh//f79f/p6+n/qqqq/wAAAANHk0Pbzu/F/73gtP3A47f/wOO3/8Djt//A47f/wOO4/73itf/D5rn/Y7Je/7/MwP/k4eP/+f35/+vs6/+qqqr/AAAAAAAzAGap4KP/zebG+8Tkvv/G5b//xuS//8blv//F5b7/vuK2/8LkuP+U0Yv/ZaBl/97W3v/u9e3/6+3r/6qqqv8DAQMAAAAABE6XS+Db8dT/yuPD/czmxv/N5sf/zObG/8blv//A47j/t+Cu/7vjsP9nuWP/uMW5/+zr6//s7+z/qamq/wACAAQAAAAAATQBZrTir//a6dX70ufN/9Pozv/N5sf/xuS//8Djt/+44K//u+Ow/4zNgv9uqW7/6+Tr/+ru6v+qqar/AAAAAQMBAwAAAAAHVJhS2Or25v/W59L91OjP/8zmxv/G5b//wOO3/7rhsP+w3ab/tuSp/1isU/+vva//6+rq/6qqqv8AAAAAAQIBAwAAAAAENQRkv+S7/+Pr3vvR58z/zObG/8bkv/+/4rf/ueCw/7Hep/+z4Kf/h818/3Kucv/r4uv/qKqo/gAAAAAAAAABAwEDAAAAAApVl1TU7Pbo/9HlzP3P58j/xuS//8Ljuf+64bH/s9+p/6vcoP+t4KD/Wq5U/8bSx/23tLf9AAAAAAAAAAABAgEDAAAAAAk3CWaq36b/1unR+cLjvPzF5r78t+Cv/LXgrP2w36b8odmW/Kzgn/1yxGf7gLKA/52Sne0AAAAAAAAAAAAAAAECAQIAAAEADUOCQcdwt23/Zati82GrXvVjrWD4XKlY9FqpVvZaqlX3UqZN81OnTvxYbFndGxcbNAAAAAAAAAAAAAAAAAABAQEAAAAAFBAUHTAzMGcqKipRJSclUS8wL14nJyZNKCspVy4uLlsiJCJKNjU2aQQABAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="type="image/x-icon">
</head>

<TEXTAREA></TEXTAREA>
<style>

html {
  background-color: black;
  overflow: hidden;
}
textarea {
  background: #383838;
  overflow-y: auto;
  width: 100%;
  height: 100%;
  border-radius: 2px;
  border: 2px inset white;
  color: white;
}
</style>

Настройки( Firefox 17-33 )
Открывает настройки. Даёт возможность закрывать настройки двойным кликом на окошке настройки любой клавишей мыши. После установки кнопки настройки будут открываться как не модальное окно, то есть браузер не блокировается как при обычном открытие настроек.
Если заменить в коде preferences.addEventListener на gBrowser.addEventListener то можно будет закрыть настройки двойным кликом на странице.

ЛКМ => открыть настройки.

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

Выделить код

Код:

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%u0430%u0441%u0442%u0440%u043E%u0439%u043A%u0438%20%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAADHUlEQVR4Xl3DS2hcVRzA4d+55869M5NMppOEyctoxlgnsRgxRrSKpaQ+arG4kkJEBQmu1YUaoXQluNEuRUQ3xShiKdpiKSFpNRAosbQaY3yUGqOpcZI0Zh7JzJx7zt9FyaYffKrp0Gl2iBMkERsSJwOqWJsUZwtUTb/zvTnxlHH1CKxFRNjhcRPKurtVLcpHTelPtkcGP47yrZ/adHiy9kT+gsskjlKLwDlu5QHgZLA20HHa9GcnzGB7j7svS/Tknkc5/MDTHNyTckN3jDntHUN7RxC6AVA3q9TBr8Hqt0uH9r/DcAKKhl3f/EXjPxuoQKE9H9uZohQTNjHocz99oTYqI4JYAA/nEGe79aUNqEDDzDqt26Xr8Q7/VNjiz/jNmIZqmdvDgGyuC5eK97rt7dDV67iawRNR+01f+4vykAdFIblV/zXeknjcC/0jKu49Fe9KPRbetWvKyzhykaFpqG/AZpvHURxAgSfKv6fe05t0fe1gFFaH6WhFF1wpNIkgWcbJRS/QzyV2Zy4ke2K0PdIbY/Tws9Ld8R4mavPFRpGaM8ga0AultnR7tlp7NZ30jzZkkkirRu0Obuh08IavmE4uSag2I2S9soyi7Clnvg+u//CtXpgrsGIwQZx/W5vHYg2xsZiWprjEaCn4JLbUbNKq2XpFIcv/Qbm0LNaGqmH4FBJFOGvfre478CadLWAhJTVySTPVmdFnUil/Lkj4+WtV9frlRe6sGuDyPExPj6r43s/AWd92tX1n9g3vxSpIAEVQAolQaIxT3q6pxkoVHEAOmP4Nzk48o8KHxyGyzTaXnYieHx7k6iY0K+jMwBWgAvhADIgAU4W1eZiZO8lG8RUVPHiCmxi2udZxVotnqFptR+5/CT+vWAL6gXuBq8AVA1+e+Jut4iC+v+ohAiLgZEr/vDyg1iqjFDZfVucWPuc2oMPAR18t8OHkCnkDNxagXjuO1qsAHjsUSBAriAeiEda31vjjF1icLbP45wtM/v4Wx87Oc37mNax5H6UA8LmFWIsoBcWt43wwPUU9MsSDS9joRy5eO09ML6E9dvwPdX9rZvPeL7sAAAAASUVORK5CYII%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.onclick%20%3D%20function%28e%29%20%7B%20%20%20%20%20%0A%20%20%20%20%20if%20%28%20e.button%20%3D%3D%200%20%29%20document.getElementById%28%27menu_preferences%27%29.click%28%29%3B%20%20%20%20%0A%7D%3B%0A%0A%0A//%20%u0421%u043B%u0435%u0434%u0438%u043C%20%u0437%u0430%u043F%u0443%u0441%u043A%u043E%u043C%20%u0432%u0441%u0435%u0445%20%u043A%u043E%u043C%u0430%u043D%u0434%20%u0438%20%u0437%u0430%u043F%u0443%u0441%u043A%u0430%u0435%u043C%20%u043D%u0443%u0436%u043D%u044B%u0435%20%u043A%u043E%u0434%u044B%20%u0438%20%u0444%u0443%u043D%u043A%u0446%u0438%u0438%20..........................%0Afunction%20commandHandler%28e%29%20%7B%0A%20%0A%20%20%20var%20command%20%3D%20e.target.getAttribute%28%22oncommand%22%29%3B%20%0A%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20//%20%u043E%u0442%u043A%u0440%u044B%u0432%u0430%u0442%u044C%20%27%u041D%u0430%u0441%u0442%u0440%u043E%u0439%u043A%u0438%27%20%u043A%u0430%u043A%20%u043D%u0435%20%u043C%u043E%u0434%u0430%u043B%u044C%u043D%u043E%u0435%20%u043E%u043A%u043D%u043E%20%u0438%20%u0434%u0430%u0442%u044C%20%u0432%u043E%u0437%u043C%u043E%u0436%u043D%u043E%u0441%u0442%u044C%20%u0437%u0430%u043A%u0440%u044B%u0442%u044C%20%u0434%u0432%u043E%u0439%u043D%u044B%u043C%20%u043A%u043B%u0438%u043A%u043E%u043C%20%u043D%u0430%20%u043E%u043A%u043E%u0448%u043A%u0435%20%u043D%u0430%u0441%u0442%u0440%u043E%u0435%u043A%20....%0A%20%20%20if%20%28%20command%20%3D%3D%20%27openPreferences%28%29%3B%27%20%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%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20//%20%u043E%u0442%u043A%u0440%u044B%u0442%u044C%20%u043D%u0430%u0441%u0442%u0440%u043E%u0439%u043A%u0438%2C%20%u0438%u043B%u0438%20%u0444%u043E%u043A%u0443%u0441%20%u043D%u0430%20%u043D%u0430%u0441%u0442%u0440%u043E%u0439%u043A%u0438%20%u0435%u0441%u043B%u0438%20%u043E%u043D%u0438%20%u0443%u0436%u0435%20%u043E%u0442%u043A%u0440%u044B%u0442%u044B%20....%0A%20%20%20%20%20%20%20%20var%20win%20%3D%20Cc%5B%22@mozilla.org/appshell/window-mediator%3B1%22%5D.getService%28Ci.nsIWindowMediator%29.getMostRecentWindow%28%22Browser%3APreferences%22%29%3B%0A%20%20%20%20%20%20%20%20var%20features%20%3D%20%22chrome%2C%20dialog%2C%20titlebar%2C%20toolbar%2C%20%22%20+%20%22centerscreen%2C%20minimizable%2C%20resizable%22%3B%0A%20%20%20%20%20%20%20%20if%20%28%20%21win%20%29%20var%20preferences%20%3D%20window.openDialog%28%22chrome%3A//browser/content/preferences/preferences.xul%22%2C%20%22Preferences%22%2C%20features%2C%20%22%22%29%3B%0A%20%20%20%20%20%20%20%20if%20%28%20win%20%29%20%7B%20win.focus%28%29%3B%20return%3B%20%7D%3B%20%0A%0A%20%20%20%20%20%20%20%20//%20%u043E%u0431%u0440%u0430%u0431%u043E%u0442%u0447%u0438%u043A%20%u0437%u0430%u043A%u0440%u044B%u0432%u0430%u0435%u0442%20%u043D%u0430%u0441%u0442%u0440%u043E%u0439%u043A%u0438%20%u043F%u043E%20%u0434%u0432%u043E%u0439%u043D%u043E%u043C%u0443%20%u043A%u043B%u0438%u043A%u0443%20%u043D%u0430%20%u043E%u043A%u043E%u0448%u043A%u0435%20%u043D%u0430%u0441%u0442%u0440%u043E%u0435%u043A%20%u0438%20%u0443%u0434%u0430%u043B%u044F%u0435%u0442%20%u0441%u0435%u0431%u044F%20....%0A%20%20%20%20%20%20%20%20preferences.addEventListener%28%22dblclick%22%2C%20function%28e%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20node%20%3D%20e.target.nodeName%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%20node%20%3D%3D%20%22textbox%22%20%7C%7C%20node%20%3D%3D%20%22filefield%22%20%29%20return%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20this.removeEventListener%28%22dblclick%22%2C%20arguments.callee%2C%20true%29%3B%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20this.close%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%20true%29%3B%20%0A%20%20%20%20%20%20%20%20%7D%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%7D%3B%0A%0Awindow.addEventListener%28%22command%22%2C%20commandHandler%2C%20true%29%3B%20%0Athis.onDestroy%20%3D%20function%28%29%20%7B%0A%20%20%20%20window.removeEventListener%28%22command%22%2C%20commandHandler%2C%20true%29%3B%0A%7D%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%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

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

Выделить код

Код:

// Настройка функций кликов мыши для кнопки ...............................................
this.onclick = function(e) {     
     if ( e.button == 0 ) document.getElementById('menu_preferences').click();    
};


// Следим запуском всех команд и запускаем нужные коды и функции ..........................
function commandHandler(e) {
 
   var command = e.target.getAttribute("oncommand"); 
           
   // открывать 'Настройки' как не модальное окно и дать возможность закрыть двойным кликом на окошке настроек ....
   if ( command == 'openPreferences();' ) {
        e.preventDefault();
        e.stopPropagation();
                
        // открыть настройки, или фокус на настройки если они уже открыты ....
        var win = Cc["@mozilla.org/appshell/window-mediator;1"].getService(Ci.nsIWindowMediator).getMostRecentWindow("Browser:Preferences");
        var features = "chrome, dialog, titlebar, toolbar, " + "centerscreen, minimizable, resizable";
        if ( !win ) var preferences = window.openDialog("chrome://browser/content/preferences/preferences.xul", "Preferences", features, "");
        if ( win ) { win.focus(); return; }; 

        // обработчик закрывает настройки по двойному клику на окошке настроек и удаляет себя ....
        preferences.addEventListener("dblclick", function(e) {
                    var node = e.target.nodeName;
                    if ( node == "textbox" || node == "filefield" ) return;
                    this.removeEventListener("dblclick", arguments.callee, true); 
                    this.close();
                    }, true); 
        }                 
};

window.addEventListener("command", commandHandler, true); 
this.onDestroy = function() {
    window.removeEventListener("command", commandHandler, true);
};


Настройки( Firefox 33+ )
Кнопка просто открывает настройки.

ЛКМ => открыть настройки.

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

Выделить код

Код:

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%u0430%u0441%u0442%u0440%u043E%u0439%u043A%u0438%20%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAADHUlEQVR4Xl3DS2hcVRzA4d+55869M5NMppOEyctoxlgnsRgxRrSKpaQ+arG4kkJEBQmu1YUaoXQluNEuRUQ3xShiKdpiKSFpNRAosbQaY3yUGqOpcZI0Zh7JzJx7zt9FyaYffKrp0Gl2iBMkERsSJwOqWJsUZwtUTb/zvTnxlHH1CKxFRNjhcRPKurtVLcpHTelPtkcGP47yrZ/adHiy9kT+gsskjlKLwDlu5QHgZLA20HHa9GcnzGB7j7svS/Tknkc5/MDTHNyTckN3jDntHUN7RxC6AVA3q9TBr8Hqt0uH9r/DcAKKhl3f/EXjPxuoQKE9H9uZohQTNjHocz99oTYqI4JYAA/nEGe79aUNqEDDzDqt26Xr8Q7/VNjiz/jNmIZqmdvDgGyuC5eK97rt7dDV67iawRNR+01f+4vykAdFIblV/zXeknjcC/0jKu49Fe9KPRbetWvKyzhykaFpqG/AZpvHURxAgSfKv6fe05t0fe1gFFaH6WhFF1wpNIkgWcbJRS/QzyV2Zy4ke2K0PdIbY/Tws9Ld8R4mavPFRpGaM8ga0AultnR7tlp7NZ30jzZkkkirRu0Obuh08IavmE4uSag2I2S9soyi7Clnvg+u//CtXpgrsGIwQZx/W5vHYg2xsZiWprjEaCn4JLbUbNKq2XpFIcv/Qbm0LNaGqmH4FBJFOGvfre478CadLWAhJTVySTPVmdFnUil/Lkj4+WtV9frlRe6sGuDyPExPj6r43s/AWd92tX1n9g3vxSpIAEVQAolQaIxT3q6pxkoVHEAOmP4Nzk48o8KHxyGyzTaXnYieHx7k6iY0K+jMwBWgAvhADIgAU4W1eZiZO8lG8RUVPHiCmxi2udZxVotnqFptR+5/CT+vWAL6gXuBq8AVA1+e+Jut4iC+v+ohAiLgZEr/vDyg1iqjFDZfVucWPuc2oMPAR18t8OHkCnkDNxagXjuO1qsAHjsUSBAriAeiEda31vjjF1icLbP45wtM/v4Wx87Oc37mNax5H6UA8LmFWIsoBcWt43wwPUU9MsSDS9joRy5eO09ML6E9dvwPdX9rZvPeL7sAAAAASUVORK5CYII%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%5Bdocument.getElementById%28%27menu_preferences%27%29.click%28%29%3B%0A%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

Вкладка Код:

Выделить код

Код:

document.getElementById('menu_preferences').click();

Save snapshot to html( Firefox24+ ) от 01.12.2017.
Кнопка сохраняет страницу с картинками или её часть, если она выделена, в html одним файлом.

Код кнопки

Выделить код

Код:

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%3ESave%20snapshot%20to%20html%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACaUlEQVR4AX3BTWvcVRTA4d+592am/5lp0qSxtEtRxI0oVmipuBFEEDfd1IUvCz+RO3du/QAqCgUjxULdWKFV8AUkapg0pplM5uX/cu85x7RQlDb4PPL62++8ubq68cLZjXPnY2hnKYk4JxMgZ/fpvHe6bo72tr745OO0trb+4pVLb1x7/92rFzfXIQr/a1kbX34T2Lrx2d350Uefpq4znc6y/b0Ho8oZVII5J4oC81qZTAL1YhmAXnK12LUqB1O40Br9fkQLT3DAIjQNLBsw1wBIKmahbkucTKFtjdxFioI7T4gRcnG0tJgVASSVUmKXS6hrJXeQC+QC5iD8h0NaAS2Cu6FFAxCCqkZVDWYKIjwiPEZ4SBzMCmo5AJJULWIau7ZlZ6zMZhV1q5g5j0sxcP+gpl4qZhqAmLTkBBbNnZvfjTk8zBxMWprWcAd3HhJxhoNEVSWGowsE0QBI6nIOajnEFEkp8Orl8wxHQ4QCKCJOjByL/PLbnB/u7DIYRFRLAELKucSmzuHPnTmT/TFX33qK61vbLGp479qzbG70eGR9NXHj258Yjc7h5gEIIecS6yaHxaJlWS9ZLjPf3x5z89Yuh9PMA/cnsLsPh9NMFMetYFYCEII7vRh7vapaReQUm2d6fPjBZV678hxrp3s80O9DFJBwin5/QFWtEWMvATGpFp8e3bOd8W0O9u/w1deZiy8/zysvLfj19xk//mzMF4W2c7b/2NPtv+52Kk11eHSPYyKD1bOXzMozpbRPSwjkpgiChJWAZ8UViBwTQSSnldjgVsXUm5Wm+Vz41xDoAwIETuaAAy3QAf4PtuhVEPpvXZEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAAAElFTkSuQmCC%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%0A%0A%20%20%20%20var%20saveToFile%20%3D%20function%20%28fileContent%2C%20fileName%29%20%7B%0A%20%20%20%20var%20uc%20%3D%20Components.classes%5B%27@mozilla.org/intl/scriptableunicodeconverter%27%5D.createInstance%28Components.interfaces.nsIScriptableUnicodeConverter%29%3B%0A%20%20%20%20uc.charset%20%3D%20%27utf-8%27%3B%0A%20%20%20%20fileContent%20%3D%20uc.ConvertFromUnicode%28fileContent%29%3B%0A%20%20%20%20var%20nsIFilePicker%20%3D%20Components.interfaces.nsIFilePicker%3B%0A%20%20%20%20var%20fp%20%3D%20Components.classes%5B%27@mozilla.org/filepicker%3B1%27%5D.createInstance%28nsIFilePicker%29%3B%0A%20%20%20%20fp.init%28window%2C%20%27%27%2C%20fp.modeSave%29%3B%0A%20%20%20%20fp.defaultString%20%3D%20fileName%3B%0A%20%20%20%20fp.appendFilters%28fp.filterHTML%29%3B%0A%20%20%20%20fp.appendFilters%28fp.filterAll%29%3B%0A%20%20%20%20fp.open%28function%20%28rv%29%20%7B%0A%20%20%20%20if%20%28rv%20%3D%3D%20nsIFilePicker.returnOK%20%7C%7C%20rv%20%3D%3D%20nsIFilePicker.returnReplace%29%20%7B%0A%20%20%20%20var%20stream%20%3D%20Components.classes%5B%27@mozilla.org/network/file-output-stream%3B1%27%5D.createInstance%28Components.interfaces.nsIFileOutputStream%29%3B%0A%20%20%20%20stream.init%28fp.file%2C%200x02%7C0x20%7C0x08%2C%200666%2C%200%29%3B%0A%20%20%20%20stream.write%28fileContent%2C%20fileContent.length%29%3B%0A%20%20%20%20stream.close%28%29%3B%0A%20%20%20%20%7D%0A%20%20%20%20%7D%29%3B%0A%20%20%20%20%7D%3B%0A%20%20%20%20var%20resolveURL%20%3D%20function%20%28url%2C%20base%29%20%7B%0A%20%20%20%20try%20%7B%0A%20%20%20%20var%20ioService%20%3D%20Components.classes%5B%27@mozilla.org/network/io-service%3B1%27%5D.getService%28Components.interfaces.nsIIOService%29%3B%0A%20%20%20%20var%20baseURI%20%3D%20ioService.newURI%28base%2C%20null%2C%20null%29%3B%0A%20%20%20%20var%20absURI%20%3D%20ioService.newURI%28url%2C%20null%2C%20baseURI%29%3B%0A%20%20%20%20return%20absURI.spec%3B%0A%20%20%20%20%7D%20catch%20%28e%29%20%7B%7D%0A%20%20%20%20%7D%3B%0A%20%20%20%20var%20getSelWin%20%3D%20function%20%28w%29%20%7B%0A%20%20%20%20if%20%28w.getSelection%28%29.toString%28%29%29%20return%20w%3B%0A%20%20%20%20for%20%28var%20i%20%3D%200%2C%20f%2C%20r%3B%20f%20%3D%20w.frames%5Bi%5D%3B%20i++%29%20%7B%0A%20%20%20%20try%20%7B%0A%20%20%20%20if%20%28r%20%3D%20getSelWin%28f%29%29%20return%20r%3B%0A%20%20%20%20%7D%20catch%28e%29%20%7B%7D%0A%20%20%20%20%7D%0A%20%20%20%20%7D%3B%0A%20%20%20%20var%20encodeImg%20%3D%20function%20%28src%2C%20obj%29%20%7B%0A%20%20%20%20var%20canvas%2C%20img%2C%20ret%20%3D%20src%3B%0A%20%20%20%20if%20%28/%5Ehttps%3F%3A%5C/%5C//.test%28src%29%29%20%7B%0A%20%20%20%20canvas%20%3D%20doc.createElement%28%27canvas%27%29%3B%0A%20%20%20%20if%20%28%21obj%20%7C%7C%20obj.nodeName.toLowerCase%28%29%20%21%3D%20%27img%27%29%20%7B%0A%20%20%20%20img%20%3D%20doc.createElement%28%27img%27%29%3B%0A%20%20%20%20img.src%20%3D%20src%3B%0A%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20img%20%3D%20obj%3B%0A%20%20%20%20%7D%3B%0A%20%20%20%20if%20%28img.complete%29%20try%7B%0A%20%20%20%20canvas.width%20%3D%20img.width%3B%0A%20%20%20%20canvas.height%20%3D%20img.height%3B%0A%20%20%20%20canvas.getContext%28%272d%27%29.drawImage%28img%2C%200%2C%200%29%3B%0A%20%20%20%20ret%20%3D%20canvas.toDataURL%28%28/%5C.jpe%3Fg/i.test%28src%29%20%3F%20%27image/jpeg%27%20%3A%20%27image/png%27%29%29%3B%0A%20%20%20%20%7D%20catch%20%28e%29%20%7B%7D%3B%0A%20%20%20%20if%20%28img%20%21%3D%20obj%29%20img.src%20%3D%20%27about%3Ablank%27%3B%0A%20%20%20%20%7D%3B%0A%20%20%20%20return%20ret%3B%0A%20%20%20%20%7D%3B%0A%20%20%20%20var%20toSrc%20%3D%20function%20%28obj%29%20%7B%0A%20%20%20%20var%20strToSrc%20%3D%20function%20%28str%29%20%7B%0A%20%20%20%20var%20chr%2C%20ret%20%3D%20%27%27%2C%20i%20%3D%200%2C%20meta%20%3D%20%7B%27%5Cb%27%3A%20%27%5C%5Cb%27%2C%20%27%5Ct%27%3A%20%27%5C%5Ct%27%2C%20%27%5Cn%27%3A%20%27%5C%5Cn%27%2C%20%27%5Cf%27%3A%20%27%5C%5Cf%27%2C%20%27%5Cr%27%3A%20%27%5C%5Cr%27%2C%20%27%5Cx22%27%20%3A%20%27%5C%5C%5Cx22%27%2C%20%27%5C%5C%27%3A%20%27%5C%5C%5C%5C%27%7D%3B%0A%20%20%20%20while%20%28chr%20%3D%20str.charAt%28i++%29%29%20%7B%0A%20%20%20%20ret%20+%3D%20meta%5Bchr%5D%20%7C%7C%20chr%3B%0A%20%20%20%20%7D%3B%0A%20%20%20%20return%20%27%5Cx22%27%20+%20ret%20+%20%27%5Cx22%27%3B%0A%20%20%20%20%7D%2C%0A%20%20%20%20arrToSrc%20%3D%20function%20%28arr%29%20%7B%0A%20%20%20%20var%20ret%20%3D%20%5B%5D%3B%0A%20%20%20%20for%20%28var%20i%20%3D%200%3B%20i%20%3C%20arr.length%3B%20i++%29%20%7B%0A%20%20%20%20ret%5Bi%5D%20%3D%20toSrc%28arr%5Bi%5D%29%20%7C%7C%20%27null%27%3B%0A%20%20%20%20%7D%3B%0A%20%20%20%20return%20%27%5B%27%20+%20ret.join%28%27%2C%27%29%20+%20%27%5D%27%3B%0A%20%20%20%20%7D%2C%0A%20%20%20%20objToSrc%20%3D%20function%20%28obj%29%20%7B%0A%20%20%20%20var%20val%2C%20ret%20%3D%20%5B%5D%3B%0A%20%20%20%20for%20%28var%20prop%20in%20obj%29%20%7B%0A%20%20%20%20if%20%28obj.hasOwnProperty%28prop%29%20%26%26%20%28val%20%3D%20toSrc%28obj%5Bprop%5D%29%29%29%20ret.push%28strToSrc%28prop%29%20+%20%27%3A%20%27%20+%20val%29%3B%0A%20%20%20%20%7D%3B%0A%20%20%20%20return%20%27%7B%27%20+%20ret.join%28%27%2C%27%29%20+%20%27%7D%27%3B%0A%20%20%20%20%7D%3B%0A%20%20%20%20switch%20%28Object.prototype.toString.call%28obj%29.slice%288%2C%20-1%29%29%20%7B%0A%20%20%20%20case%20%27Array%27%3A%20return%20arrToSrc%28obj%29%3B%0A%20%20%20%20case%20%27Boolean%27%3A%0A%20%20%20%20case%20%27Function%27%3A%0A%20%20%20%20case%20%27RegExp%27%3A%20return%20obj.toString%28%29%3B%0A%20%20%20%20case%20%27Date%27%3A%20return%20%27new%20Date%28%27%20+%20obj.getTime%28%29%20+%20%27%29%27%3B%0A%20%20%20%20case%20%27Math%27%3A%20return%20%27Math%27%3B%0A%20%20%20%20case%20%27Number%27%3A%20return%20isFinite%28obj%29%20%3F%20String%28obj%29%20%3A%20%27null%27%3B%0A%20%20%20%20case%20%27Object%27%3A%20return%20objToSrc%28obj%29%3B%0A%20%20%20%20case%20%27String%27%3A%20return%20strToSrc%28obj%29%3B%0A%20%20%20%20default%3A%20return%20obj%20%3F%20%28obj.nodeType%20%3D%3D%201%20%26%26%20obj.id%20%3F%20%27document.getElementById%28%27%20+%20strToSrc%28obj.id%29%20+%20%27%29%27%20%3A%20%27%7B%7D%27%29%20%3A%20%27null%27%3B%0A%20%20%20%20%7D%0A%20%20%20%20%7D%3B%0A%20%20%20%20var%20mainWin%20%3D%20document.commandDispatcher.focusedWindow.top%20%3D%3D%20content%20%3F%20document.commandDispatcher.focusedWindow%20%3A%20content%0A%20%20%20%20var%20selWin%20%3D%20getSelWin%28mainWin%29%2C%20win%20%3D%20selWin%20%7C%7C%20mainWin%2C%20doc%20%3D%20win.document%2C%20loc%20%3D%20win.location%3B%0A%20%20%20%20var%20ele%2C%20pEle%2C%20clone%2C%20reUrl%20%3D%20/%28url%5C%28%5Cx22%29%28.+%3F%29%28%5Cx22%5C%29%29/g%3B%0A%20%20%20%20if%20%28selWin%29%20%7B%0A%20%20%20%20var%20rng%20%3D%20win.getSelection%28%29.getRangeAt%280%29%3B%0A%20%20%20%20pEle%20%3D%20rng.commonAncestorContainer%3B%0A%20%20%20%20ele%20%3D%20rng.cloneContents%28%29%3B%0A%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20pEle%20%3D%20doc.documentElement%3B%0A%20%20%20%20ele%20%3D%20%28doc.body%20%7C%7C%20doc.getElementsByTagName%28%27body%27%29%5B0%5D%29.cloneNode%28true%29%3B%0A%20%20%20%20%7D%3B%0A%20%20%20%20while%20%28pEle%29%20%7B%0A%20%20%20%20if%20%28pEle.nodeType%20%3D%3D%201%29%20%7B%0A%20%20%20%20clone%20%3D%20pEle.cloneNode%28false%29%3B%0A%20%20%20%20clone.appendChild%28ele%29%3B%0A%20%20%20%20ele%20%3D%20clone%3B%0A%20%20%20%20%7D%3B%0A%20%20%20%20pEle%20%3D%20pEle.parentNode%0A%20%20%20%20%7D%3B%0A%20%20%20%20var%20sel%20%3D%20doc.createElement%28%27div%27%29%3B%0A%20%20%20%20sel.appendChild%28ele%29%3B%0A%20%20%20%20for%20%28var%20el%2C%20all%20%3D%20sel.getElementsByTagName%28%27*%27%29%2C%20i%20%3D%20all.length%3B%20i--%3B%29%20%7B%0A%20%20%20%20el%20%3D%20all%5Bi%5D%3B%0A%20%20%20%20if%20%28el.style%20%26%26%20el.style.backgroundImage%29%20el.style.backgroundImage%20%3D%20el.style.backgroundImage.replace%28reUrl%2C%20function%20%28a%2C%20prev%2C%20url%2C%20next%29%20%7B%0A%20%20%20%20if%20%28%21/%5E%5Ba-z%5D+%3A/.test%28url%29%29%20url%20%3D%20resolveURL%28url%2C%20loc.href%29%3B%0A%20%20%20%20return%20prev%20+%20encodeImg%28url%29%20+%20next%3B%0A%20%20%20%20%7D%29%3B%0A%20%20%20%20switch%20%28el.nodeName.toLowerCase%28%29%29%20%7B%0A%20%20%20%20case%20%27link%27%3A%0A%20%20%20%20case%20%27style%27%3A%0A%20%20%20%20case%20%27script%27%3A%20el.parentNode.removeChild%28el%29%3B%20break%3B%0A%20%20%20%20case%20%27a%27%3A%0A%20%20%20%20case%20%27area%27%3A%20if%20%28el.hasAttribute%28%27href%27%29%20%26%26%20el.getAttribute%28%27href%27%29.charAt%280%29%20%21%3D%20%27%23%27%29%20el.href%20%3D%20el.href%3B%20break%3B%0A%20%20%20%20case%20%27img%27%3A%0A%20%20%20%20case%20%27input%27%3A%20if%20%28el.hasAttribute%28%27src%27%29%29%20el.src%20%3D%20encodeImg%28el.src%2C%20el%29%3B%20break%3B%0A%20%20%20%20case%20%27audio%27%3A%0A%20%20%20%20case%20%27video%27%3A%0A%20%20%20%20case%20%27embed%27%3A%0A%20%20%20%20case%20%27frame%27%3A%0A%20%20%20%20case%20%27iframe%27%3A%20if%20%28el.hasAttribute%28%27src%27%29%29%20el.src%20%3D%20el.src%3B%20break%3B%0A%20%20%20%20case%20%27object%27%3A%20if%20%28el.hasAttribute%28%27data%27%29%29%20el.data%20%3D%20el.data%3B%20break%3B%0A%20%20%20%20case%20%27form%27%3A%20if%20%28el.hasAttribute%28%27action%27%29%29%20el.action%20%3D%20el.action%3B%20break%3B%0A%20%20%20%20%7D%0A%20%20%20%20%7D%3B%0A%20%20%20%20var%20head%20%3D%20ele.insertBefore%28doc.createElement%28%27head%27%29%2C%20ele.firstChild%29%3B%0A%20%20%20%20var%20meta%20%3D%20doc.createElement%28%27meta%27%29%3B%0A%20%20%20%20meta.httpEquiv%20%3D%20%27content-type%27%3B%0A%20%20%20%20meta.content%20%3D%20%27text/html%3B%20charset%3Dutf-8%27%3B%0A%20%20%20%20head.appendChild%28meta%29%3B%0A%20%20%20%20var%20title%20%3D%20doc.getElementsByTagName%28%27title%27%29%5B0%5D%3B%0A%20%20%20%20if%20%28title%29%20head.appendChild%28title.cloneNode%28true%29%29%3B%0A%20%20%20%20head.copyScript%20%3D%20function%20%28unsafeWin%29%20%7B%0A%20%20%20%20if%20%28%27%24%27%20in%20unsafeWin%29%20return%3B%0A%20%20%20%20var%20f%20%3D%20doc.createElement%28%27iframe%27%29%3B%0A%20%20%20%20f.src%20%3D%20%27about%3Ablank%27%3B%0A%20%20%20%20f.setAttribute%28%27style%27%2C%20%27position%3Afixed%3Bleft%3A0%3Btop%3A0%3Bvisibility%3Ahidden%3Bwidth%3A0%3Bheight%3A0%3B%27%29%3B%0A%20%20%20%20doc.documentElement.appendChild%28f%29%3B%0A%20%20%20%20var%20str%2C%20script%20%3D%20doc.createElement%28%27script%27%29%3B%0A%20%20%20%20script.type%20%3D%20%27text/javascript%27%3B%0A%20%20%20%20for%20%28var%20name%20in%20unsafeWin%29%20%7B%0A%20%20%20%20if%20%28name%20in%20f.contentWindow%20%7C%7C%20%21/%5E%5Ba-zA-Z_%24%5D%5B0-9a-zA-Z_%24%5D*%24/.test%28name%29%29%20continue%3B%0A%20%20%20%20try%20%7B%0A%20%20%20%20str%20%3D%20toSrc%28unsafeWin%5Bname%5D%29%3B%0A%20%20%20%20if%20%28%21/%5C%7B%5Cs*%5C%5Bnative%20code%5C%5D%5Cs*%5C%7D/.test%28str%29%29%20%7B%0A%20%20%20%20script.appendChild%28doc.createTextNode%28%27var%20%27%20+%20name%20+%20%27%20%3D%20%27%20+%20str.replace%28/%3C%5C/%28script%3E%29/ig%2C%20%27%3C%5C%5C/%241%27%29%20+%20%27%3B%5Cn%27%29%29%3B%0A%20%20%20%20%7D%0A%20%20%20%20%7D%20catch%20%28e%29%20%7B%7D%3B%0A%20%20%20%20%7D%3B%0A%20%20%20%20f.parentNode.removeChild%28f%29%3B%0A%20%20%20%20if%20%28script.childNodes.length%29%20this.nextSibling.appendChild%28script%29%3B%0A%20%20%20%20%7D%3B%0A%20%20%20%20head.copyScript%28win.wrappedJSObject%20%7C%7C%20win%29%3B%0A%20%20%20%20head.copyStyle%20%3D%20function%20%28s%29%20%7B%0A%20%20%20%20if%20%28%21s%29%20return%3B%0A%20%20%20%20var%20style%20%3D%20doc.createElement%28%27style%27%29%3B%0A%20%20%20%20style.type%20%3D%20%27text/css%27%3B%0A%20%20%20%20if%20%28s.media%20%26%26%20s.media.mediaText%29%20style.media%20%3D%20s.media.mediaText%3B%0A%20%20%20%20try%20%7B%0A%20%20%20%20for%20%28var%20i%20%3D%200%2C%20rule%3B%20rule%20%3D%20s.cssRules%5Bi%5D%3B%20i++%29%20%7B%0A%20%20%20%20if%20%28rule.type%20%21%3D%203%29%20%7B%0A%20%20%20%20if%28%28%21rule.selectorText%20%7C%7C%20rule.selectorText.indexOf%28%27%3A%27%29%20%21%3D%20-1%29%20%7C%7C%20%28%21sel.querySelector%20%7C%7C%20sel.querySelector%28rule.selectorText%29%29%29%20%7B%0A%20%20%20%20var%20css%20%3D%20%21rule.cssText%20%3F%20%27%27%20%3A%20rule.cssText.replace%28reUrl%2C%20function%20%28a%2C%20prev%2C%20url%2C%20next%29%20%7B%0A%20%20%20%20if%20%28%21/%5E%5Ba-z%5D+%3A/.test%28url%29%29%20url%20%3D%20resolveURL%28url%2C%20s.href%20%7C%7C%20loc.href%29%3B%0A%20%20%20%20if%28rule.type%20%3D%3D%201%20%26%26%20rule.style%20%26%26%20rule.style.backgroundImage%29%20url%20%3D%20encodeImg%28url%29%3B%0A%20%20%20%20return%20prev%20+%20url%20+%20next%3B%0A%20%20%20%20%7D%29%3B%0A%20%20%20%20style.appendChild%28doc.createTextNode%28css%20+%20%27%5Cn%27%29%29%3B%0A%20%20%20%20%7D%0A%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20this.copyStyle%28rule.styleSheet%29%3B%0A%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%20%20%7D%20catch%28e%29%20%7B%0A%20%20%20%20if%20%28s.ownerNode%29%20style%20%3D%20s.ownerNode.cloneNode%28false%29%3B%0A%20%20%20%20%7D%3B%0A%20%20%20%20this.appendChild%28style%29%3B%0A%20%20%20%20%7D%3B%0A%20%20%20%20var%20sheets%20%3D%20doc.styleSheets%3B%0A%20%20%20%20for%20%28var%20j%20%3D%200%3B%20j%20%3C%20sheets.length%3B%20j++%29%20head.copyStyle%28sheets%5Bj%5D%29%3B%0A%20%20%20%20head.appendChild%28doc.createTextNode%28%27%5Cn%27%29%29%3B%0A%20%20%20%20var%20doctype%20%3D%20%27%27%2C%20dt%20%3D%20doc.doctype%3B%0A%20%20%20%20if%20%28dt%20%26%26%20dt.name%29%20%7B%0A%20%20%20%20doctype%20+%3D%20%27%3C%21DOCTYPE%20%27%20+%20dt.name%3B%0A%20%20%20%20if%20%28dt.publicId%29%20doctype%20+%3D%20%27%20PUBLIC%20%5Cx22%27%20+%20dt.publicId%20+%20%27%5Cx22%27%3B%0A%20%20%20%20if%20%28dt.systemId%29%20doctype%20+%3D%20%27%20%5Cx22%27%20+%20dt.systemId%20+%20%27%5Cx22%27%3B%0A%20%20%20%20doctype%20+%3D%20%27%3E%5Cn%27%3B%0A%20%20%20%20%7D%3B%0A%20%20%20%20var%20fileName%20%3D%20selWin%20%3F%20win.getSelection%28%29.toString%28%29%20%3A%20%28title%20%26%26%20title.text%20%3F%20title.text%20%3A%20loc.pathname.split%28%27/%27%29.pop%28%29%29%3B%0A%20%20%20%20fileName%20%3D%20fileName.replace%28/%5B%3A%5C%5C%5C/%3C%3E%3F*%7C%22%5D+/g%2C%20%27_%27%29.replace%28/%5Cs+/g%2C%20%27%20%27%29.slice%280%2C%20100%29.replace%28/%5E%5Cs+%7C%5Cs+%24/g%2C%20%27%27%29%3B%0A%20%20%20%20fileName%20+%3D%20%28function%20%28%29%20%7B%0A%20%20%20%20var%20d%20%3D%20new%20Date%28%29%2C%20z%20%3D%20function%28n%29%7Breturn%20%27_%27%20+%20%28n%20%3C%2010%20%3F%20%270%27%20%3A%20%27%27%29%20+%20n%7D%3B%0A%20%20%20%20return%20z%28d.getHours%28%29%29%20+%20z%28d.getMinutes%28%29%29%20+%20z%28d.getSeconds%28%29%29%3B%0A%20%20%20%20%7D%29%28%29%3B%0A%20%20%20%20if%28%21/%5C.html%3F%24/.test%28fileName%29%29fileName%20+%3D%20%27.html%27%3B%0A%20%20%20%20saveToFile%28doctype%20+%20sel.innerHTML%20+%20%27%5Cn%3C%21--%20This%20document%20saved%20from%20%27%20+%20%28loc.protocol%20%21%3D%20%27data%3A%27%20%3F%20loc.href%20%3A%20%27data%3Auri%27%29%20+%20%27%20--%3E%27%2C%20fileName%29%3B%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


Код

Выделить код

Код:

var saveToFile = function (fileContent, fileName) {
    var uc = Components.classes['@mozilla.org/intl/scriptableunicodeconverter'].createInstance(Components.interfaces.nsIScriptableUnicodeConverter);
    uc.charset = 'utf-8';
    fileContent = uc.ConvertFromUnicode(fileContent);
    var nsIFilePicker = Components.interfaces.nsIFilePicker;
    var fp = Components.classes['@mozilla.org/filepicker;1'].createInstance(nsIFilePicker);
    fp.init(window, '', fp.modeSave);
    fp.defaultString = fileName;
    fp.appendFilters(fp.filterHTML);
    fp.appendFilters(fp.filterAll);
    fp.open(function (rv) {
    if (rv == nsIFilePicker.returnOK || rv == nsIFilePicker.returnReplace) {
    var stream = Components.classes['@mozilla.org/network/file-output-stream;1'].createInstance(Components.interfaces.nsIFileOutputStream);
    stream.init(fp.file, 0x02|0x20|0x08, 0666, 0);
    stream.write(fileContent, fileContent.length);
    stream.close();
    }
    });
    };
    var resolveURL = function (url, base) {
    try {
    var ioService = Components.classes['@mozilla.org/network/io-service;1'].getService(Components.interfaces.nsIIOService);
    var baseURI = ioService.newURI(base, null, null);
    var absURI = ioService.newURI(url, null, baseURI);
    return absURI.spec;
    } catch (e) {}
    };
    var getSelWin = function (w) {
    if (w.getSelection().toString()) return w;
    for (var i = 0, f, r; f = w.frames[i]; i++) {
    try {
    if (r = getSelWin(f)) return r;
    } catch(e) {}
    }
    };
    var encodeImg = function (src, obj) {
    var canvas, img, ret = src;
    if (/^https?:\/\//.test(src)) {
    canvas = doc.createElement('canvas');
    if (!obj || obj.nodeName.toLowerCase() != 'img') {
    img = doc.createElement('img');
    img.src = src;
    } else {
    img = obj;
    };
    if (img.complete) try{
    canvas.width = img.width;
    canvas.height = img.height;
    canvas.getContext('2d').drawImage(img, 0, 0);
    ret = canvas.toDataURL((/\.jpe?g/i.test(src) ? 'image/jpeg' : 'image/png'));
    } catch (e) {};
    if (img != obj) img.src = 'about:blank';
    };
    return ret;
    };
    var toSrc = function (obj) {
    var strToSrc = function (str) {
    var chr, ret = '', i = 0, meta = {'\b': '\\b', '\t': '\\t', '\n': '\\n', '\f': '\\f', '\r': '\\r', '\x22' : '\\\x22', '\\': '\\\\'};
    while (chr = str.charAt(i++)) {
    ret += meta[chr] || chr;
    };
    return '\x22' + ret + '\x22';
    },
    arrToSrc = function (arr) {
    var ret = [];
    for (var i = 0; i < arr.length; i++) {
    ret[i] = toSrc(arr[i]) || 'null';
    };
    return '[' + ret.join(',') + ']';
    },
    objToSrc = function (obj) {
    var val, ret = [];
    for (var prop in obj) {
    if (obj.hasOwnProperty(prop) && (val = toSrc(obj[prop]))) ret.push(strToSrc(prop) + ': ' + val);
    };
    return '{' + ret.join(',') + '}';
    };
    switch (Object.prototype.toString.call(obj).slice(8, -1)) {
    case 'Array': return arrToSrc(obj);
    case 'Boolean':
    case 'Function':
    case 'RegExp': return obj.toString();
    case 'Date': return 'new Date(' + obj.getTime() + ')';
    case 'Math': return 'Math';
    case 'Number': return isFinite(obj) ? String(obj) : 'null';
    case 'Object': return objToSrc(obj);
    case 'String': return strToSrc(obj);
    default: return obj ? (obj.nodeType == 1 && obj.id ? 'document.getElementById(' + strToSrc(obj.id) + ')' : '{}') : 'null';
    }
    };
    var mainWin = document.commandDispatcher.focusedWindow.top == content ? document.commandDispatcher.focusedWindow : content
    var selWin = getSelWin(mainWin), win = selWin || mainWin, doc = win.document, loc = win.location;
    var ele, pEle, clone, reUrl = /(url\(\x22)(.+?)(\x22\))/g;
    if (selWin) {
    var rng = win.getSelection().getRangeAt(0);
    pEle = rng.commonAncestorContainer;
    ele = rng.cloneContents();
    } else {
    pEle = doc.documentElement;
    ele = (doc.body || doc.getElementsByTagName('body')[0]).cloneNode(true);
    };
    while (pEle) {
    if (pEle.nodeType == 1) {
    clone = pEle.cloneNode(false);
    clone.appendChild(ele);
    ele = clone;
    };
    pEle = pEle.parentNode
    };
    var sel = doc.createElement('div');
    sel.appendChild(ele);
    for (var el, all = sel.getElementsByTagName('*'), i = all.length; i--;) {
    el = all[i];
    if (el.style && el.style.backgroundImage) el.style.backgroundImage = el.style.backgroundImage.replace(reUrl, function (a, prev, url, next) {
    if (!/^[a-z]+:/.test(url)) url = resolveURL(url, loc.href);
    return prev + encodeImg(url) + next;
    });
    switch (el.nodeName.toLowerCase()) {
    case 'link':
    case 'style':
    case 'script': el.parentNode.removeChild(el); break;
    case 'a':
    case 'area': if (el.hasAttribute('href') && el.getAttribute('href').charAt(0) != '#') el.href = el.href; break;
    case 'img':
    case 'input': if (el.hasAttribute('src')) el.src = encodeImg(el.src, el); break;
    case 'audio':
    case 'video':
    case 'embed':
    case 'frame':
    case 'iframe': if (el.hasAttribute('src')) el.src = el.src; break;
    case 'object': if (el.hasAttribute('data')) el.data = el.data; break;
    case 'form': if (el.hasAttribute('action')) el.action = el.action; break;
    }
    };
    var head = ele.insertBefore(doc.createElement('head'), ele.firstChild);
    var meta = doc.createElement('meta');
    meta.httpEquiv = 'content-type';
    meta.content = 'text/html; charset=utf-8';
    head.appendChild(meta);
    var title = doc.getElementsByTagName('title')[0];
    if (title) head.appendChild(title.cloneNode(true));
    head.copyScript = function (unsafeWin) {
    if ('$' in unsafeWin) return;
    var f = doc.createElement('iframe');
    f.src = 'about:blank';
    f.setAttribute('style', 'position:fixed;left:0;top:0;visibility:hidden;width:0;height:0;');
    doc.documentElement.appendChild(f);
    var str, script = doc.createElement('script');
    script.type = 'text/javascript';
    for (var name in unsafeWin) {
    if (name in f.contentWindow || !/^[a-zA-Z_$][0-9a-zA-Z_$]*$/.test(name)) continue;
    try {
    str = toSrc(unsafeWin[name]);
    if (!/\{\s*\[native code\]\s*\}/.test(str)) {
    script.appendChild(doc.createTextNode('var ' + name + ' = ' + str.replace(/<\/(script>)/ig, '<\\/$1') + ';\n'));
    }
    } catch (e) {};
    };
    f.parentNode.removeChild(f);
    if (script.childNodes.length) this.nextSibling.appendChild(script);
    };
    head.copyScript(win.wrappedJSObject || win);
    head.copyStyle = function (s) {
    if (!s) return;
    var style = doc.createElement('style');
    style.type = 'text/css';
    if (s.media && s.media.mediaText) style.media = s.media.mediaText;
    try {
    for (var i = 0, rule; rule = s.cssRules[i]; i++) {
    if (rule.type != 3) {
    if((!rule.selectorText || rule.selectorText.indexOf(':') != -1) || (!sel.querySelector || sel.querySelector(rule.selectorText))) {
    var css = !rule.cssText ? '' : rule.cssText.replace(reUrl, function (a, prev, url, next) {
    if (!/^[a-z]+:/.test(url)) url = resolveURL(url, s.href || loc.href);
    if(rule.type == 1 && rule.style && rule.style.backgroundImage) url = encodeImg(url);
    return prev + url + next;
    });
    style.appendChild(doc.createTextNode(css + '\n'));
    }
    } else {
    this.copyStyle(rule.styleSheet);
    }
    }
    } catch(e) {
    if (s.ownerNode) style = s.ownerNode.cloneNode(false);
    };
    this.appendChild(style);
    };
    var sheets = doc.styleSheets;
    for (var j = 0; j < sheets.length; j++) head.copyStyle(sheets[j]);
    head.appendChild(doc.createTextNode('\n'));
    var doctype = '', dt = doc.doctype;
    if (dt && dt.name) {
    doctype += '<!DOCTYPE ' + dt.name;
    if (dt.publicId) doctype += ' PUBLIC \x22' + dt.publicId + '\x22';
    if (dt.systemId) doctype += ' \x22' + dt.systemId + '\x22';
    doctype += '>\n';
    };
    var fileName = selWin ? win.getSelection().toString() : (title && title.text ? title.text : loc.pathname.split('/').pop());
    fileName = fileName.replace(/[:\\\/<>?*|"]+/g, '_').replace(/\s+/g, ' ').slice(0, 100).replace(/^\s+|\s+$/g, '');
    fileName += (function () {
    var d = new Date(), z = function(n){return '_' + (n < 10 ? '0' : '') + n};
    return z(d.getHours()) + z(d.getMinutes()) + z(d.getSeconds());
    })();
    if(!/\.html?$/.test(fileName))fileName += '.html';
    saveToFile(doctype + sel.innerHTML + '\n<!-- This document saved from ' + (loc.protocol != 'data:' ? loc.href : 'data:uri') + ' -->', fileName);

Copy links
Копирует ссылки из выделенного текста, а если ничего не выделено, то и вообще все ссылки, в буфер обмена (≈ расширению Multi Links).

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

Выделить код

Код:

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%3ECopy%20links%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAC4jAAAuIwF4pT92AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAkBJREFUeJydku1Lk1EYxp8/p28F9a36EGESUguliHBIyOYLKM7yZQ3LNF8oZaZirdwsl6JO02nLdG463WaaL1tZGmhqWGYzBCFwzxa/tkccbYw+eODicO7rvq/7Ovc5AiDEovzFD66Ur5KkWYmguPk71tldYnOjDrpXPuT1Izx06yifTiXPmcLAdiFqlwydbYHC5k1yG9eJK1DTtYlC30bXtwLqF+XkuvPJGEvlpjMBo6eT91+DOBaDFLdskVW3SpRAt2Mb+SMDz1cz6d5USfvdGRmTYiX51lQsSy7m1/YFqu0dZBv1ESeSQFJxyJ4tnZYvSjo2cjD7Chja0WDbvY3WXcvHjT9MLQexfghwZ/iJ5PBiRe++gGVym8tVU6jd58kaOUXrWibG9Wxy7IkUTlxAM5orFY9+CtA/F6DNJZLRW8K1RgsVxjUEbdc6yoZlZN1HSDGdpmkpjSJXIs+mnZTZayRn4c4D8wE634roHSLaN34K2n9z6ZYHQXl/AZXBR5nFQ5M9NAtzAhnWk5hnA/TM/OKp08vLdwHa3SKGUHHDsJ/rphIUg2c5nu5CSK/ykqX7SWX/HnVDfsoGxyU3D2wTkl2jU6RlXERn90t8Ud84eWNnqPVe5WiaA6G69TPJ91bQmPYo7fORbDoRmowQhXBhbOzGawXJ6imEntENzqk90p0OyNj1n9j+Mx6TD6Hq3IkkxnaLh0heeG82L5NUOhdFxOscj498ZZV25vAODlDyeP5wM/gXTs9WvG5CvFgYfwFzo6tZMWWyMgAAAABJRU5ErkJggg%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%20win%20%3D%20document.commandDispatcher.focusedWindow%2C%20doc%20%3D%20win.document%3B%0Avar%20sel%20%3D%20doc%2C%20winSel%20%3D%20win.getSelection%28%29%3B%0Aif%28winSel.toString%28%29%29%7B%0A%09sel%20%3D%20doc.createElement%28%27div%27%29%3B%0A%09sel.appendChild%28winSel.getRangeAt%280%29.cloneContents%28%29%29%3B%0A%7D%3B%0Avar%20str%20%3D%20%27%27%2C%20links%20%3D%20sel.getElementsByTagName%28%27a%27%29%3B%0Afor%28var%20i%20%3D%200%2C%20lnk%3B%20lnk%20%3D%20links%5Bi%5D%3B%20i++%29%7Bif%28lnk.href%29str%20+%3D%20lnk.href%20+%20%27%5Cr%5Cn%27%7D%3B%0AgClipboard.write%28str%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

UP
Перенаправляет на уровень вверх или, при зажатии, на самый верх (т.е. отсюда на http://forum.mozilla-russia.org/ , а если вы уже наверху, то на список похожих страниц).
(≈ расширению Uppity/Navigate Up).

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

Выделить код

Код:

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%3EUP%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAAA4AAAAQCAYAAAAmlE46AAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6AAAdTAAAOpgAAA6lwAAF2+XqZnUAAAB2ElEQVR4nGL8//8/AzkAIICY0AUYJzLyA3E9IY0AAYSiEaQJSB0wlTJpALLn49MIEEAsaPwD+faZBoZqKgxrDoklADUz/M//n4hNI0AAwTWCbEg0jzEQlmZneP7rKUOonSsDGwM7SPMBoOaF6BoBAogJpslC2TRBQpqf4cvPLww/fv1kePbrMYOXhQ2DpojGAqB8PLpGgABiAgrmm6oYJjjpWwE1fQVq+sXwHagRpPkv82+GHt8WBi0RTZBme2SNAAHEyDCBYT+ULeCl72YgLSnEwMnKxiDFJc1QsbL9A1D8AlT+AtDJhTCNAAHEAuQ4Qp1rz8jIcABkEwh8//MTptgRW+AABBBKqH7+9YWB6zcrmP2D7ScDDzuPAjZNQEvOAwQQPB6BJh+8/OgaAwsTK8OP378YXn17zaAvo6OAHjAwPkAAodj4/suHBfdfPkkQ5RcE841VdBk+fPsIChgHIPcBEINckADCAAHEiJxWYSnHTtvSQJhfgIGFmYlBmleagesfL4MYqyTDorNLGc49O78AlCgAAogRPZFDNU9QEJVNkBKUZBDhE2L49u07w+VH1xlefnnVANTUCFIHEEAYGpEMkAdSBlB8gAESwh9h8gABhFMjIQAQYADQGKKCjfSDsAAAAABJRU5ErkJggg%3D%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E2%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bvar%20btn%20%3D%20this%3B%0A%0Avar%20opt%20%3D%20%7B%0A%09delay%3A%20500%2C%0A%09timerId%3A%200%2C%0A%09isPressed%3A%20false%2C%0A%09longClick%3A%20function%28%29%7B%0A%09%09goUp%28false%29%3B%0A%09%7D%2C%0A%09stdClick%3A%20function%28%29%7B%0A%09%09goUp%28true%29%3B%0A%09%7D%0A%7D%3B%0A%0Afunction%20mouseDown%28e%29%7B%0A%09if%28e.button%20%3D%3D%200%29%7B%0A%09%09opt.isPressed%20%3D%20true%3B%0A%09%09opt.timerId%20%3D%20setTimeout%28function%28%29%7B%0A%09%09%09if%28opt.isPressed%29%7B%0A%09%09%09%09opt.isPressed%20%3D%20false%3B%0A%09%09%09%09var%20k%20%3D%20%22_transitionTimer%22%3B%0A%09%09%09%09if%28k%20in%20btn%29clearInterval%28btn%5Bk%5D%29%3B%0A%09%09%09%09var%20stl%20%3D%20btn.style%3B%0A%09%09%09%09stl.setProperty%28%22transition%22%2C%20%22opacity%20150ms%20ease-in-out%22%2C%20%22important%22%29%3B%0A%09%09%09%09btn%5Bk%5D%20%3D%20setTimeout%28function%28%29%20%7B%0A%09%09%09%09%09stl.setProperty%28%22opacity%22%2C%20%220.5%22%2C%20%22important%22%29%3B%0A%09%09%09%09%09btn%5Bk%5D%20%3D%20setTimeout%28function%28%29%20%7B%0A%09%09%09%09%09%09stl.opacity%20%3D%20%22%22%3B%0A%09%09%09%09%09%09btn%5Bk%5D%20%3D%20setTimeout%28function%28%29%20%7B%0A%09%09%09%09%09%09%09stl.transition%20%3D%20%22%22%3B%0A%09%09%09%09%09%09%09delete%20btn%5Bk%5D%3B%0A%09%09%09%09%09%09%7D%2C%20150%29%3B%0A%09%09%09%09%09%7D%2C%20150%29%3B%0A%09%09%09%09%7D%2C%200%29%3B%0A%09%09%09%09opt.longClick%28%29%3B%0A%09%09%09%7D%0A%09%09%7D%2C%20opt.delay%29%3B%0A%09%7D%0A%7D%3B%0A%0Afunction%20mouseUp%28e%29%7B%0A%09if%28e.button%20%3D%3D%200%29%7B%0A%09%09clearTimeout%28opt.timerId%29%3B%0A%09%09if%28opt.isPressed%29%7B%0A%09%09%09opt.isPressed%20%3D%20false%3B%0A%09%09%09opt.stdClick%28%29%3B%0A%09%09%7D%0A%09%7D%0A%7D%3B%0A%0Afunction%20mouseOut%28e%29%7B%0A%09if%28e.button%20%3D%3D%200%29%7B%0A%09%09opt.isPressed%20%3D%20false%3B%0A%09%7D%0A%7D%3B%0A%0Abtn.addEventListener%28%27mousedown%27%2C%20mouseDown%2C%20false%29%3B%0Abtn.addEventListener%28%27mouseup%27%2C%20mouseUp%2C%20false%29%3B%0Abtn.addEventListener%28%27mouseout%27%2C%20mouseOut%2C%20false%29%3B%0A%0Abtn.onDestroy%20%3D%20function%28%29%7B%0A%20%20%20%20btn.removeEventListener%28%27mousedown%27%2C%20mouseDown%2C%20false%29%3B%0A%09btn.removeEventListener%28%27mouseup%27%2C%20mouseUp%2C%20false%29%3B%0A%09btn.removeEventListener%28%27mouseout%27%2C%20mouseOut%2C%20false%29%3B%0A%7D%3B%0A%0A%0Afunction%20goUp%28step%29%7B%0A%09var%20loc%20%3D%20content.location%3B%0A%09if%20%28loc.protocol%20%3D%3D%20%27about%3A%27%29%20return%3B%0A%0A%09var%20p%20%3D%20loc.protocol%20+%20%27//%27%2C%20h%20%3D%20loc.host%20+%20%27/%27%3B%0A%09if%20%28loc.href%20%3D%3D%20p%20+%20h%29%20%7B%0A%09%09var%20a%20%3D%20h.split%28%27.%27%29%2C%20l%20%3D%20a.length%2C%20n%20%3D%202%3B%0A%09%09if%20%28l%20%3E%202%29%20%7B%0A%09%09%09if%20%28a%5B0%5D%20%3D%3D%20%27www%27%29%20%7Ba.shift%28%29%3B%20l--%7D%3B%0A%09%09%09if%20%28/%5E%28co%7Ccom%7Cnet%7Corg%7Cedu%7Cgov%7Cmil%7Cint%29%24/i.test%28a%5Bl%20-%202%5D%29%29%20n++%0A%09%09%7D%0A%09%09if%20%28l%20%3E%20n%29%20%7B%0A%09%09%09h%20%3D%20%28n%20%3D%3D%203%20%3F%20a%5Bl%20-%203%5D%20+%20%27.%27%20%3A%20%27%27%29%20+%20a%5Bl%20-%202%5D%20+%20%27.%27%20+%20a%5Bl%20-%201%5D%0A%09%09%7D%20else%20%7B%0A%09%09%09p%20%3D%20%27http%3A//www.google.com/search%3Fsourceid%3Dopera%26q%3Drelated%3A%27%20+%20p%0A%09%09%7D%0A%09%7D%20else%20if%20%28step%29%20%7B%0A%09%09h%20%3D%20loc.host%20+%20loc.pathname.replace%28/%5B%5E%5C/%5D+%5C/%3F%24/%2C%20%27%27%29%0A%09%7D%3B%0A%09loc.href%20%3D%20p%20+%20h%3B%0A%7D%3B%0A%0A%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%5BAlt+UP%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

Сохранить ярлык страницы на ...( Firefox24+ ) от 16.03.2017.
Сохраняет ярлыки страниц с иконкой сайта в указанную папку. Может сохранять ярлыки страниц в последнюю папку сохранения без запроса на место сохранение.

ЛКМ => Сохранить ярлык страницы в указанную папку,
Длиный ЛКМ => Сохранить ярлык страницы в последнюю папку сохранения без запроса,
СКМ => Сохранить ярлык с выделенным текстом или из буфера  в указанную папку,
Длиный СКМ => Сохранить ярлык с выделенным текстом или из буфера без запроса,
ПКМ => Стандартное меню кнопки

Код кнопки:

Выделить код

Код:

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%u043E%u0445%u0440%u0430%u043D%u0438%u0442%u044C%20%u044F%u0440%u043B%u044B%u043A%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u044B%20%u043D%u0430%20...%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEhIAAAEAIACABQAAFgAAACgAAAASAAAAJAAAAAEAIAAAAAAAWAUAAAAAAAAAAAAAAAAAAAAAAAD+/vL/5vP//9v2///p+Pb/+PTv//nx+P/19PX/+Pbv//z08f/4+O7/+fb0//v29f/1+O7/5Pr0/976///i7///9/b/////8//i7Ov/h5zF/2GEs/+LpLH/0dHW/9fO3v/O0dj/1NTQ/9zR0v/O1Mz/0tHS/9TO1P/N1tb/nrzE/22PtP9xiL7/s7nX//n59P/T5vb/V3i+/zNhrv9tkbb/4en9/+rn///j6/X/5+3t/+7r7//i7+j/5unv/+ji8//i7P7/mbvc/z9rsP8+YrP/jaLO//L8///K4v3/UnrU/zFqyv9kkMT/3er+/+vn///m7PP/5u7r/+rq7f/h8OX/6Ors/+rg9P/f5f//lLbn/zpsyP88ac3/iKXa/+z+///N4///Unvb/yxo0v9hkcz/4Oz///Ps/P/w8O3/7fLn//Dv7//r9+f/8Ozo//Xk8f/o6f//l7fr/zZr0v86adb/iKXc/+/+/v/R4/7/VHvb/ytq1f9hks7/4er///zu9//++uz/+Pno//Lv7v/t9eT/+vHo///r7v/x7Pz/mbrr/zZu1P82Z9X/jKXb//f++//W5v3/VX/a/yls2f9dk9D/4ez////z9v/69eb/9Pfo/+/x9f/r9O3//fLs///o5v/18fn/msDq/zJx1f81a9n/jqbd//z++v/U6P3/UoPc/yRw3/9Vldb/2uv////0/P/69+v/8vry/+Pt/f/g7/f/+vL1///w7f/2+vz/kMDp/yx11/8wbuD/jKbk//z6/f/T6/z/UYXc/yNx4v9Wldj/2+7///Xy+//X3+D/1ufu/+Tz///g9P//29vs/+re4f/y/P3/jsPq/yl32/8wcOP/jabl//n5///S6Pf/V4rZ/zFz3/91mtn/6fD6/+v7//+RvN//bpLH/9Pg/v/F3Pj/c4e2/8PF3f/1/P//lsPq/zV64P9Ec9r/marZ//H8///L5vz/Tork/yhy7f9smeP/4fD8/+H7//+Bue//N2/D/2eO3f9Zi9f/Pmi1/7fF7f/y/f//kMLw/yt58P88c+j/kKvh/+X8///O5/z/To3o/yF29f9imuv/3e/9/+X4//+Lv/P/LXPY/ylx4v8ict//M23N/7fI8v/2/v//kcTy/yd89/81dfP/ja3p/+f8///h6vf/YpTd/zF97P9rnub/6vP6//v9+f+jxOv/M3nb/xt19f8YePP/NXPV/8HK6f////f/pcro/zaB7v9Be+3/nbLg//j++v/n6vb/cJjW/z6D4f91peX/7PP5////+v+zx+f/PH/e/xZ5/f8Wevn/NnfY/8bO6f///+//sM3j/0OG6P9NgOj/orPb//r98//S4Pr/bZnf/0SM5f9qpOf/2O3///r///+txu//PIPm/xZ+//8Yffz/NXvm/7fL8/////z/q9Ht/0OJ7v9QhvH/mLLl/+T4/v/E3P//apjg/0yO3P9tquf/zfD//+T1//+ow/T/Robh/yuI+v8yiPL/OX3j/6bH9v/r////oM7x/0iK6v9Thej/krHm/9P4///U4///kqzZ/3qhxf+Qttf/1e39/+jw/f/AyOv/e5vQ/2WY1f9smMv/aZLU/7bN9f/x/v3/tNPm/3Kc2/+Emtz/s8De/+D9///z8f//6ev3/+Xu7v/g7O3/7fH5//Lr9v/x6fL/5ebx/9zr9f/i6uz/2OP3/+Tp+f/08+n/5/Ls/9jm/P/r5vz/9u/0//f/+f8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%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%u0421%u043E%u0445%u0440%u0430%u043D%u0438%u0442%u044C%20%u044F%u0440%u043B%u044B%u043A%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u044B%20%u043D%u0430%2C%20%u043E%u0442%2016.03.2017.%0A%0A//%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%20if%20%28%20e.button%20%3D%3D%202%20%29%20return%3B%20//%20%u0441%u0442%u043E%u043F%20%u0435%u0441%u043B%u0438%20%u041F%u041A%u041C%0A%0A%20%20%20%20self.onclick%20%3De%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%20%20%0A%20%20%20%20%20%20%20%20e.button%20%3D%3D%200%20%3F%20saveShortcuts%28false%29%20%3A%20saveShortcuts%28false%2C%20getSelect%28%29%29%3B%20%20%20%20%20%20%20%20%20%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%20%20%20%0A%20%20%20%20%20%20%20%20e.button%20%3D%3D%200%20%3F%20saveShortcuts%28true%29%20%3A%20saveShortcuts%28true%2C%20getSelect%28%29%29%3B%0A%20%20%20%20%7D%2C%20500%20%29%3B%0A%7D%3B%0A%0A%0A//%20%u041E%u0431%u044A%u044F%u0432%u043B%u044F%u0435%u043C%20%u043D%u0430%u0441%u0442%u0440%u043E%u0439%u043A%u0438%20%u0438%20%u043F%u0435%u0440%u0435%u043C%u0435%u043D%u043D%u044B%u0435%20%u0434%u043B%u044F%20%u044D%u0442%u043E%u0439%20%u0432%u043A%u043B%u0430%u0434%u043A%u0438%20.............%0Avar%20disk%20%3D%20%27C%27%3B%20//%20%u0434%u0438%u0441%u043A%20%u0434%u043B%u044F%20%u0441%u043E%u0445%u0440%u0430%u043D%u0435%u043D%u0438%u044F%20%u0438%u043A%u043E%u043D%u043E%u043A%20%u0434%u043B%u044F%20%u044F%u0440%u043B%u044B%u043A%u043E%u0432%20%u0438%20%u044F%u0440%u043B%u044B%u043A%u043E%u0432%20%u0441%u0430%u0439%u0442%u043E%u0432%0Avar%20pref%20%3D%20%22CB.Shortcuts.pathToSaveShortcuts%22%3B%0Avar%20alertsService%20%3D%20Cc%5B%22@mozilla.org/alerts-service%3B1%22%5D.getService%28Ci.nsIAlertsService%29%3B%0A%0A%0A//%20%u041F%u043E%u0434%u0441%u043A%u0430%u0437%u043A%u0430%20%u043A%u043D%u043E%u043F%u043A%u0438%20..............%0Athis.onmouseover%20%3D%28%29%3D%3E%20%7B%20%0A%20%20%20var%20folder%20%3D%20gPrefService.getComplexValue%28pref%2C%20Ci.nsISupportsString%29.data%3B%0A%20%20%20this.tooltipText%20%3D%20%22%u0421%u043E%u0445%u0440%u0430%u043D%u0438%u0442%u044C%20%u044F%u0440%u043B%u044B%u043A%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u044B%20%5Cn%u0414%u041B%20%20%20%20%u0421%u043E%u0445%u0440%u0430%u043D%u0438%u0442%u044C%20%u044F%u0440%u043B%u044B%u043A%20%u043A%u0430%u043A...%20%5Cn%u041B%3A%20%20%u0421%u043E%u0445%u0440%u0430%u043D%u0438%u0442%u044C%20%u044F%u0440%u043B%u044B%u043A%20%u0431%u0435%u0437%20%u0437%u0430%u043F%u0440%u043E%u0441%u0430%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5Cn%u0414%u0421%3A%20%20%20%u0421%u043E%u0445%u0440%u0430%u043D%u0438%u0442%u044C%20%u044F%u0440%u043B%u044B%u043A%20%u0441%20%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u043D%u044B%u043C%20%u0442%u0435%u043A%u0441%u0442%u043E%u043C%20%u0438%u043B%u0438%20%u0438%u0437%20%u0431%u0443%u0444%u0435%u0440%u0430%20%u043A%u0430%u043A...%20%5Cn%u0421%3A%20%20%20%u0421%u043E%u0445%u0440%u0430%u043D%u0438%u0442%u044C%20%u044F%u0440%u043B%u044B%u043A%20%u0441%20%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u043D%u044B%u043C%20%u0442%u0435%u043A%u0441%u0442%u043E%u043C%20%u0438%u043B%u0438%20%u0438%u0437%20%u0431%u0443%u0444%u0435%u0440%u0430%20%u0431%u0435%u0437%20%u0437%u0430%u043F%u0440%u043E%u0441%u0430%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5Cn%5Cn%u041F%u0430%u043F%u043A%u0430%20%u0434%u043B%u044F%20%u0441%u043E%u0445%u0440%u0430%u043D%u0435%u043D%u0438%u044F%20%u0431%u0435%u0437%20%u0437%u0430%u043F%u0440%u043E%u0441%u0430%3A%20%22%20+%20folder%3B%0A%7D%3B%0A%0A%0A//%20%u0421%u043E%u0445%u0440%u0430%u043D%u0438%u0442%u044C%20%u044F%u0440%u043B%u044B%u043A%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u044B%20%u0432%20%u0443%u043A%u0430%u0437%u0430%u043D%u043D%u0443%u044E%20%u043F%u0430%u043F%u043A%u0443%20%u0438%u043B%u0438%20%u0432%20%u043F%u043E%u0441%u043B%u0435%u0434%u043D%u044E%u044E%20%u043F%u0430%u043F%u043A%u0443%20%u0441%u043E%u0445%u0440%u0430%u043D%u0435%u043D%u0438%u044F%20..............%0Afunction%20saveShortcuts%28saveAs%2C%20shortcutName%29%20%7B%0A%20%20%20var%20url%20%3D%20content.document.location%3B%0A%20%20%20cbu.isPref%28pref%2C%20disk%20+%20%22%3A%5C%5C%22%29%3B%0A%0A%20%20%20//%20%u0431%u043B%u043E%u043A%u0438%u0440%u0443%u0435%u043C%20%u0441%u043E%u0437%u0434%u0430%u043D%u0438%u0435%20%u044F%u0440%u043B%u044B%u043A%u043E%u0432%20%u0434%u043B%u044F%20%u0432%u043D%u0443%u0442%u0440%u0435%u043D%u043D%u0438%u0445%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%20FF%0A%20%20%20if%20%28%20%5B%22about%3A%22%2C%20%22chrome%3A%22%2C%20%22jar%3A%22%2C%20%22data%3A%22%5D.indexOf%28url.protocol%29%20%21%3D%3D%20-1%20%29%20%7B%20%20%20%0A%20%20%20%20%20%20%20%20%20alertsService.showAlertNotification%28%22chrome%3A//global/skin/icons/error-16.png%22%2C%20self.label%2C%20%22%u041D%u0435%20%u043F%u043E%u0434%u0434%u0435%u0440%u0436%u0438%u0432%u0430%u0435%u0442%u0441%u044F%22%29%3B%0A%20%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20%20%20%20%20%20%7D%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%0A%20%20%20//%20%u043F%u043E%u043B%u0443%u0447%u0438%u0442%u044C%20%u043D%u0430%u0437%u0432%u0430%u043D%u0438%u0435%20%u044F%u0440%u043B%u044B%u043A%u0430%20%0A%20%20%20if%20%28%20saveAs%20%29%20shortcutName%20%3D%20setPathToShortcut%28shortcutName%29%0A%20%20%20else%20%0A%20%20%20%20%20%20%20%20shortcutName%20%3D%20shortcutName%20%3F%20shortcutName%20%3A%20getSiteName%28%29%20+%20getTabLabel%28%29%20+%20%22%20%22%20+%20Date.now%28%29%3B%0A%20%20%20if%20%28%20saveAs%20%26%26%20shortcutName%20%3D%3D%20false%20%29%20return%3B%0A%20%20%20%0A%20%20%20//%20%u0441%u043E%u0445%u0440%u0430%u043D%u0438%u0442%u044C%20%u0438%u043A%u043E%u043D%u043A%u0443%20%u0442%u0430%u0431%u0430%20%u0432%20%u0443%u0441%u0442%u0430%u043D%u043E%u0432%u043B%u0435%u043D%u043D%u0443%u044E%20%u043F%u0430%u043F%u043A%u0443%0A%20%20%20var%20faviconName%20%3D%20%22favicon%22%20+%20Date.now%28%29%3B%0A%20%20%20var%20favicon%20%3D%20saveFaviconToFolder%28faviconName%29%3B%0A%20%0A%20%20%20//%20%u043F%u043E%u043B%u0443%u0447%u0438%u0442%u044C%20%u043F%u0443%u0442%u044C%20%u0434%u043B%u044F%20%u0441%u043E%u0445%u0440%u0430%u043D%u0435%u043D%u0438%u044F%20%u044F%u0440%u043B%u044B%u043A%u0430%20%u0438%u0437%20%27about%3Aconfig%27%20%0A%20%20%20var%20pathToFolder%20%3D%20gPrefService.getComplexValue%28pref%2C%20Ci.nsISupportsString%29.data%3B%0A%20%20%20var%20pathToShortcut%20%3D%20pathToFolder%20+%20shortcutName%20+%20%22.url%22%3B%0A%20%20%20%20%20%20%20%0A%20%20%20//%20%u0430%u0434%u0440%u0435%u0441%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u044B%20%u0432%20UTF-8%20%u0435%u0441%u043B%u0438%20%u044D%u0442%u043E%20%u043F%u0440%u043E%u0442%u043E%u043A%u043E%u043B%20%27file%27%20%u0438%u043B%u0438%20%u0432%20%27Punycode%27%20%u0435%u0441%u043B%u0438%20%u044D%u0442%u043E%20.%u0440%u0444%20%u0434%u043E%u043C%u0435%u043D%0A%20%20%20if%20%28%20url.protocol%20%3D%3D%20%27file%3A%27%20%29%20url%20%3D%20convertFromUnicode%28%22UTF-8%22%2C%20url%29%3B%20%20%20%0A%20%20%20if%20%28%20url.host.slice%28-3%29%20%3D%3D%20%27.%u0440%u0444%27%29%20url%20%3D%20Services.io.newURI%28url%2C%20null%2C%20null%29.asciiSpec%3B%0A%20%20%20%20%20%0A%20%20%20//%20%u0442%u0435%u043A%u0441%u0442%20%u044F%u0440%u043B%u044B%u043A%u0430%20%u0438%u0437%20%u0430%u0434%u0440%u0435%u0441%u0430%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u044B%20%u0438%20%u043F%u0443%u0442%u0438%20%u043A%20%u0438%u043A%u043E%u043D%u043A%u0435%20%u0442%u0430%u0431%u0430%20%20%20%20%0A%20%20%20var%20text%20%3D%20%22%5BInternetShortcut%5D%22%20+%20%22%5Cr%5Cn%22%20+%20%22URL%3D%22%20+%20url%3B%0A%20%20%20var%20pathToFavicon%20%3D%20%22IconFile%3D%22%20+%20disk%20+%20%22%3A%5C%5CDocuments%20and%20Settings%5C%5CFavicon%5C%5C%22%20+%20faviconName%20+%20%22.ico%22%20+%20%22%5Cr%5Cn%22%3B%0A%20%20%20if%20%28%20favicon%20%3D%3D%20false%20%29%20var%20pathToFavicon%20%3D%20%22%22%3B%0A%20%20%20var%20data%20%3D%20text%20+%20%22%5Cr%5Cn%22%20+%20pathToFavicon%20+%20%22IconIndex%3D0%22%3B%20%20%20%20%20%20%0A%0A%20%20%20//%20%u0437%u0430%u043F%u0438%u0441%u0430%u0442%u044C%20%u0442%u0435%u043A%u0441%u0442%20%u0432%20%u044F%u0440%u043B%u044B%u043A%0A%20%20%20custombuttonsUtils.writeFile%28pathToShortcut%2C%20data%29%3B%0A%0A%20%20%20//%20%u043F%u043E%u0434%u0441%u043A%u0430%u0437%u043A%u0430%20....%0A%20%20%20var%20notification%20%3D%20%27%u0421%u043E%u0445%u0440%u0430%u043D%u0438%u043B%20%u0432%3A%20%27%20+%20pathToFolder%3B%0A%20%20%20var%20image%20%3D%20%28favicon%20%3D%3D%20false%29%20%3F%20self.image%20%3A%20gBrowser.selectedBrowser.mIconURL%3B%0A%20%20%20alertsService.showAlertNotification%28image%2C%20shortcutName%2C%20notification%29%3B%0A%7D%3B%0A%0A%0A//%20%u0423%u0441%u0442%u0430%u043D%u043E%u0432%u043A%u0430%20%u043F%u0443%u0442%u0438%20%u0438%20%u043D%u0430%u0437%u0432%u0430%u043D%u0438%u044F%20%u0434%u043B%u044F%20%u0441%u043E%u0445%u0440%u0430%u043D%u0435%u043D%u0438%u044F%20%u044F%u0440%u043B%u044B%u043A%u0430%20%u0447%u0435%u0440%u0435%u0437%20%u0434%u0438%u0430%u043B%u043E%u0433%20%u0441%u043E%u0445%u0440%u0430%u043D%u0435%u043D%u0438%u044F%2C%20%u043E%u0442%u043C%u0435%u043D%u0430%20%u043E%u0442%u0434%u0430%u0441%u0442%20%27false%27%20..............%0Afunction%20setPathToShortcut%28shortcutName%29%20%7B%20%20%20%20%20%0A%20%20%20//%20%u043F%u043E%u043B%u0443%u0447%u0438%u0442%u044C%20%u043F%u0440%u0435%u0434%u044B%u0434%u0443%u0449%u0438%u0439%20%u043F%u0443%u0442%u044C%20%u0434%u043B%u044F%20%u0441%u043E%u0445%u0440%u0430%u043D%u0435%u043D%u0438%u044F%20%u0438%u0437%20%27about%3Aconfig%27%0A%20%20%20var%20pathToFile%20%3D%20gPrefService.getComplexValue%28pref%2C%20Ci.nsISupportsString%29.data%3B%0A%20%20%20%0A%20%20%20//%20%u043D%u0430%u0437%u0432%u0430%u043D%u0438%u0435%20%u0434%u043B%u044F%20%u044F%u0440%u043B%u044B%u043A%u0430%0A%20%20%20var%20shortcutName%20%3D%20shortcutName%20%3F%20shortcutName%20%3A%20getSiteName%28%29%20+%20getTabLabel%28%29%20+%20%22%20%22%20+%20Date.now%28%29%3B%0A%0A%20%20%20//%20%u0434%u0438%u0430%u043B%u043E%u0433%20%u0441%u043E%u0437%u0434%u0430%u043D%u0438%u044F%20%u0438%20%u0443%u0441%u0442%u0430%u043D%u043E%u0432%u043A%u0438%20%u043F%u0443%u0442%u0438%20%20%20%20%0A%20%20%20var%20fp%20%3D%20window.makeFilePicker%28%29%3B%0A%20%20%20fp.init%28window%2C%20%22%u0423%u043A%u0430%u0436%u0438%u0442%u0435%20%u0433%u0434%u0435%20%u0441%u043E%u0445%u0440%u0430%u043D%u0438%u0442%u044C%20%u044F%u0440%u043B%u044B%u043A%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u044B%21%22%2C%20fp.modeSave%29%3B%0A%20%20%20fp.appendFilters%28fp.filterAll%29%3B%0A%20%20%20fp.defaultString%20%3D%20shortcutName%3B%0A%20%20%20%20%20%0A%20%20%20if%20%28%20fp.show%28%29%20%3D%3D%20fp.returnCancel%20%29%20return%20false%3B%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%0A%20%20%20//%20%u0443%u0431%u0440%u0430%u0442%u044C%20%u043D%u0430%u0437%u0432%u0430%u043D%u0438%u0435%20%u0444%u0430%u0439%u043B%u0430%20%u0438%u0437%20%u043F%u0443%u0442%u0438%20%u043A%20%u0444%u0430%u0439%u043B%u0443%20%u0438%20%u0437%u0430%u043F%u0438%u0441%u0430%u0442%u044C%20%u043F%u0443%u0442%u044C%20%u0432%20%27about%3Aconfig%27%0A%20%20%20var%20filePath%20%3D%20fp.file.path.toString%28%29%3B%0A%20%20%20var%20fileName%20%3D%20fp.file.leafName.toString%28%29%3B%0A%20%20%20cbu.setPrefs%28pref%2C%20convertFromUnicode%28%22UTF-8%22%2C%20filePath.replace%28fileName%2C%20%22%22%29%29%20%29%3B%20%20%20%20%20%20%0A%20%20%20return%20fileName%3B%0A%7D%3B%0A%0A%0A//%20%u0421%u043E%u0445%u0440%u0430%u043D%u0438%u0442%u044C%20%u0432%20%u0443%u043A%u0430%u0437%u0430%u043D%u043D%u0443%u044E%20%u043F%u0430%u043F%u043A%u0443%20%u0438%u043A%u043E%u043D%u043A%u0443%20%u0442%u0430%u0431%u0430%20%u043A%u0430%u043A%20.ico%20%u0438%20%u0431%u0435%u0437%20%u0434%u0438%u0430%u043B%u043E%u0433%u0430%20%u0441%u043E%u0445%u0440%u0430%u043D%u0435%u043D%u0438%u044F%20..............%0Afunction%20saveFaviconToFolder%28faviconName%29%20%7B%0A%20%20%20var%20url%20%3D%20gBrowser.mCurrentTab.image.replace%28%22%23-moz-resolution%3D16%2C16%22%2C%22%22%29%3B%0A%20%20%20if%20%28%20%21url%20%7C%7C%20content.document.mozSyntheticDocument%20%29%20return%20false%3B%0A%20%20%20if%20%28%20url.startsWith%28%22http%22%29%20%29%20url%20%3D%20%22moz-anno%3Afavicon%3A%22%20+%20url%3B%0A%0A%20%20%20var%20img%20%3D%20new%20Image%28%29%3B%0A%20%20%20img.onload%20%3D%20function%28%29%20%7B%0A%20%20%20%20%20%20%20var%20tools%20%3D%20Cc%5B%22@mozilla.org/image/tools%3B1%22%5D.getService%28Ci.imgITools%29%3B%0A%20%20%20%20%20%20%20var%20stream%20%3D%20Cc%5B%22@mozilla.org/scriptableinputstream%3B1%22%5D.createInstance%28Ci.nsIScriptableInputStream%29%3B%0A%20%20%20%20%20%20%20var%20file%20%3D%20Cc%5B%22@mozilla.org/file/local%3B1%22%5D.createInstance%28Ci.nsILocalFile%29%3B%0A%0A%20%20%20%20%20%20%20var%20request%20%3D%20img.QueryInterface%28Ci.nsIImageLoadingContent%29.getRequest%28img.CURRENT_REQUEST%29%3B%0A%20%20%20%20%20%20%20var%20istrm%20%3D%20tools.encodeImage%28request.image%2C%20%22image/vnd.microsoft.icon%22%2C%20%22format%3Dbmp%3Bbpp%3D32%22%29%3B%0A%20%20%20%20%20%20%20stream.init%28istrm%29%3B%0A%20%20%20%20%20%20%20var%20data%20%3D%20stream.readBytes%28stream.available%28%29%29%3B%0A%20%20%20%20%20%20%20istrm.close%28%29%3B%20stream.close%28%29%3B%0A%0A%20%20%20%20%20%20%20var%20path%20%3D%20disk%20+%20%22%3A%5C%5CDocuments%20and%20Settings%5C%5CFavicon%5C%5C%22%20+%20faviconName%20+%20%22.ico%22%3B%0A%20%20%20%20%20%20%20file.initWithPath%28path%29%3B%0A%20%20%20%20%20%20%20file.exists%28%29%20%26%26%20file.remove%28false%29%3B%0A%20%20%20%20%20%20%20try%20%7B%20file.create%28file.NORMAL_FILE_TYPE%2C%20448%29%20%7D%20%0A%20%20%20%20%20%20%20catch%28e%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20setTimeout%28%28%29%3D%3E%20%7B%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20alertsService.showAlertNotification%28%22chrome%3A//global/skin/icons/error-16.png%22%2C%20self.label%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%22%u041D%u0435%20%u043C%u043E%u0433%u0443%20%u0441%u043E%u0445%u0440%u0430%u043D%u0438%u0442%u044C%20%u0438%u043A%u043E%u043D%u043A%u0443%20%u0432%u043A%u043B%u0430%u0434%u043A%u0438%20%u043D%u0430%20%u0434%u0438%u0441%u043A%u0435%3A%20%22%20+%20disk%20+%20%22%5Cn%22%20+%20%22%u0423%u043A%u0430%u0436%u0438%u0442%u0435%20%u0432%20%u043D%u0430%u0447%u0430%u043B%u0435%20%u043A%u043E%u0434%u0430%20%u043A%u043D%u043E%u043F%u043A%u0438%20%u0434%u0440%u0443%u0433%u043E%u0439%20%u0434%u0438%u0441%u043A%21%22%29%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%202500%29%3B%0A%20%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%20%20%20cbu.writeFile%28path%2C%20data%29%3B%0A%20%20%20%7D%0A%20%20%20img.setAttribute%28%22src%22%2C%20url%29%3B%0A%7D%3B%0A%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%0A%0A%0A//%20%u041F%u043E%u043B%u0443%u0447%u0438%u0442%u044C%20%u043D%u0430%u0437%u0432%u0430%u043D%u0438%u0435%20%u0434%u043E%u043C%u0435%u043D%u0430%20%u0441%20%u0437%u0430%u0433%u043B%u0430%u0432%u043D%u044B%u043C%20%u043F%u0435%u0440%u0432%u044B%u043C%20%u0441%u0438%u043C%u0432%u043E%u043B%u043E%u043C%20%u0438%20%u0431%u0435%u0437%20%u043F%u0440%u0438%u0441%u0442%u0430%u0432%u043E%u043A%28%20%u0442%u0438%u043F%u0430%20.ru%20%u0438%20.com%20%29%20..............%0Afunction%20getSiteName%28%29%20%7B%0A%20%20%20try%20%7B%20var%20domain%20%3D%20content.document.domain.split%28%27.%27%29%20%7D%20catch%28e%29%20%7B%20return%20%22%22%20%7D%3B%0A%20%20%20domain%20%3D%20%28domain.length%20%3D%3D%202%29%20%3F%20domain%5B0%5D%20%3A%20domain%5B1%5D%0A%20%20%20return%20domain.charAt%280%29.toUpperCase%28%29%20+%20domain.slice%281%29.split%28%27.%27%29%5B0%5D%20+%20%22%20%22%3B%20%20%0A%7D%3B%0A%0A%0A//%20%u041F%u043E%u043B%u0443%u0447%u0438%u0442%u044C%20%u043D%u0430%u0437%u0432%u0430%u043D%u0438%u0435%20%u0432%u043A%u043B%u0430%u0434%u043A%u0438%20%u0431%u0435%u0437%20%u043D%u0435%20%u0441%u043E%u0445%u0440%u0430%u043D%u044F%u0435%u043C%u044B%u0445%20%u0441%u0438%u043C%u0432%u043E%u043B%u043E%u0432%20%u0438%20%u043B%u0438%u0448%u043D%u0438%u0445%20%u043F%u0440%u043E%u0431%u0435%u043B%u043E%u0432%20..............%0Afunction%20getTabLabel%28%29%20%7B%20%0A%20%20%20var%20label%20%3D%20gBrowser.mCurrentTab.label%3B%20%20%20%20%20%20%0A%20%20%20var%20label%20%3D%20label.replace%28/%5B%3A.%5C%5C%5C/%3C%3E%3F*%7C%22%5D+/g%2C%20%22%20%22%29.replace%28/%5Cs%5Cs+/g%2C%20%22%20%22%29%3B%0A%20%20%20return%20label.substring%280%2C%2050%29%3B%0A%7D%3B%0A%0A%0A//%20%u041F%u043E%u043B%u0443%u0447%u0438%u0442%u044C%20%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u043D%u044B%u0439%20%u0442%u0435%u043A%u0441%u0442%20%u0438%u0437%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u044B%20%u0438%u043B%u0438%20%u0438%u0437%20%u0431%u0443%u0444%u0435%u0440%u0430%20%u043E%u0431%u043C%u0435%u043D%u0430%2C%20%u0435%u0441%u043B%u0438%20%u043D%u0435%u0442%20%u0442%u0435%u043A%u0441%u0442%u0430%20%u043F%u043E%u043B%u0443%u0447%u0438%u0442%u044C%20%27false%27%20..............%0Afunction%20getSelect%28%29%20%7B%0A%20%20%20var%20sel%20%3D%20document.commandDispatcher.focusedWindow.getSelection%28%29.toString%28%29%3B%20//%20%u0438%u0437%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u044B%0A%20%20%20if%20%28%20sel%20%3D%3D%20%27%27%20%29%20%7B%20%20%20%20%0A%20%20%20%20%20%20%20var%20el%20%3D%20document.commandDispatcher.focusedElement%3B%20//%20%u0438%u0437%20%u0442%u0435%u043A%u0441%u0442%u043E%u0432%u043E%u0433%u043E%20%u043F%u043E%u043B%u044F%0A%20%20%20%20%20%20%20if%20%28%20el%20%26%26%20el.textLength%20%29%20%0A%20%20%20%20%20%20%20%20%20%20%20%20sel%20%3D%20el.value.substring%28el.selectionStart%2C%20el.selectionEnd%29%3B%20%20%0A%20%20%20%20%20%20%20%7D%0A%20%20%20if%20%28%20sel%20%3D%3D%20%27%27%20%29%20sel%20%3D%20gClipboard.read%28%29%3B%20//%20%u0438%u0437%20%u0431%u0443%u0444%u0435%u0440%u0430%20%u043E%u0431%u043C%u0435%u043D%u0430%0A%20%20%20if%20%28%20sel%20%3D%3D%20%27%27%20%29%20alertsService.showAlertNotification%28%22chrome%3A//global/skin/icons/error-16.png%22%2C%20self.label%2C%20%22%u0412%u044B%u0434%u0435%u043B%u0438%u0442%u0435%20%u0438%u043B%u0438%20%u0441%u043A%u043E%u043F%u0438%u0440%u0443%u0439%u0442%u0435%20%u0442%u0435%u043A%u0441%u0442%21%22%29%3B%0A%20%20%0A%20%20%20return%20%28%20sel%20%3D%3D%20%27%27%20%29%20%3F%20false%20%3A%20sel.replace%28/%5B%3A.%5C%5C%5C/%3C%3E%3F*%7C%22%5D+/g%2C%20%22%20%22%29.toString%28%29.replace%28/%5E%5Cs+%7C%5Cs+%24/g%2C%22%22%29%3B%20//%20%u0437%u0430%u043C%u0435%u043D%u0438%u0442%u044C%20%u043D%u0435%u0434%u043E%u043F%u0443%u0441%u0442%u0438%u043C%u044B%u0435%20%u0441%u0438%u043C%u0432%u043E%u043B%u044B%20%u0438%20%u0443%u0434%u0430%u043B%u0438%u0442%u044C%20%u043B%u0438%u0448%u043D%u0438%u0435%20%u043F%u0440%u043E%u0431%u0435%u043B%u044B%20%0A%7D%3B%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


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

Tetris (c)

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

Выделить код

Код:

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%3ETetris%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABeElEQVR42o2TzUrDQBSFz8QgtNBVS9di6K4LwZ0g+iju270+gq4EfZqu2oKULkTEhd2JG6PELpqG1vlLxrnTH6ykmknChMOdL/eee8NaN63reBYfZCYDLZMZlHfLkJlEmqVbNRh7K/PoT2aT4+Hz8FAoAc/zoL4UGvUGxmqM6Xy6VTOpgfpUFd8Yk0glsQLQu9YaUv+tEUAKmfiMMTCPOdE9bLH/p9kPu92XUlaIBlsaiVQb5xxCCMgvuchASNg458Uqzp0BKqx2VDvTqd7DctHBYD84rdarJ1ppgMFBoo+oH4Zhz9uxmZC4MPeVIWe1b9vn3afuJRfcHYZtUPwSX0R30dXvWD8PYGstxUm8YZiQopQXmwugWtcGLg0jswsDkiRxBlL7HMAClVLFAeFbiKAauI44v6g5NYPBw6AYoNlsonPf2fTgXRTPgFJPZgm44msAj3lxwLapKwywk1j6OZ3LqSvexn6vP5pP5z36xWnqDF3GjPJivwH38hbq/xF5SwAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAAASUVORK5CYII%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/*CODE*/%0Awindow.open%28%27data%3Atext/html%3Bbase64%2CPGh0bWw+DQoJPGhlYWQ+DQoJCTx0aXRsZT5UZXRyaXM8L3RpdGxlPg0KCQk8bWV0YSBuYW1lPSJhdXRob3IiIGNvbnRlbnQ9Imh0dHA6Ly9lbGJlcnRmLmNvbS90ZXRyaXMvIj4NCgkJPHN0eWxlIHR5cGU9InRleHQvY3NzIj4jdGV0cmlzICp7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDtib3JkZXI6bm9uZTtmb250LXNpemU6MWVtO2ZvbnQtd2VpZ2h0OmluaGVyaXQ7Zm9udC1mYW1pbHk6J1RyZWJ1Y2hldCBNUycsVmVyZGFuYSxBcmlhbDtsaW5lLWhlaWdodDoxLjRlbTtsaXN0LXN0eWxlOm5vbmUgaW5zaWRlO21hcmdpbjowO3BhZGRpbmc6MDt0ZXh0LWFsaWduOmluaGVyaXQ7dGV4dC1kZWNvcmF0aW9uOm5vbmU7fSN0ZXRyaXN7dGV4dC1hbGlnbjpjZW50ZXI7cGFkZGluZy10b3A6LjVlbTt9I3RldHJpcyBhOmxpbmssI3RldHJpcyBhOmhvdmVyLCN0ZXRyaXMgYTphY3RpdmUsI3RldHJpcyBhOnZpc2l0ZWR7Y29sb3I6IzIwMjt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO30jdGV0cmlzIHN0cm9uZ3tmb250LXdlaWdodDpib2xkO30jdGV0cmlzIC5jbGVhcntjbGVhcjpib3RoO30jdGV0cmlzLXdyYXB7bWFyZ2luOi4yZW0gYXV0byAwIGF1dG87cG9zaXRpb246cmVsYXRpdmU7dGV4dC1hbGlnbjpyaWdodDt3aWR0aDo0NTZweDt9I3RldHJpcy13cmFwLWlubmVye2JvcmRlcjoycHggc29saWQgIzMxMzttYXJnaW4tYm90dG9tOi4yZW07fSN0ZXRyaXMtbWFpbiwjdGV0cmlzLW92ZXJsYXksI3RldHJpcy1zaWRle2hlaWdodDo2MDBweDt9I3RldHJpcy1tYWluLCN0ZXRyaXMtb3ZlcmxheXt3aWR0aDozMDBweDt9I3RldHJpcy1tYWlue2JhY2tncm91bmQ6IzIwMjtmbG9hdDpsZWZ0O292ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZTt9I3RldHJpcy1vdmVybGF5e3Bvc2l0aW9uOmFic29sdXRlO30jdGV0cmlzLW1lc3NhZ2V7Zm9udC1zaXplOjJlbTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7fSN0ZXRyaXMtbWVzc2FnZSBwe2NvbG9yOiNGRkY7cGFkZGluZzouNWVtO30jdGV0cmlzLW1lc3NhZ2UgcCBzcGFue2Rpc3BsYXk6YmxvY2s7Zm9udC1zaXplOi41ZW07Zm9udC1zdHlsZTppdGFsaWM7dGV4dC10cmFuc2Zvcm06bm9uZTt9I3RldHJpcy1zaWRle2JhY2tncm91bmQ6IzMxMztjb2xvcjojRkZGO2Zsb2F0OnJpZ2h0O3RleHQtYWxpZ246bGVmdDt3aWR0aDoxNTJweDt9I3RldHJpcy1zaWRlLWlubmVye3BhZGRpbmc6MTZweDt9I3RldHJpcy1zaWRlIGRse2NsZWFyOmJvdGg7fSN0ZXRyaXMtc2lkZSBkdHtmbG9hdDpsZWZ0O30jdGV0cmlzLXNpZGUgZGR7ZmxvYXQ6cmlnaHQ7Zm9udC1mYW1pbHk6R2VvcmdpYSxzZXJpZjt9ZGQjdGV0cmlzLWxldmVsLGRkI3RldHJpcy1zY29yZXttYXJnaW4tYm90dG9tOjFlbTt9I3RldHJpcy1uZXh0e2JhY2tncm91bmQ6IzIwMjtwb3NpdGlvbjpyZWxhdGl2ZTtoZWlnaHQ6MTIwcHg7bWFyZ2luLWJvdHRvbToxZW07d2lkdGg6MTIwcHg7fSN0ZXRyaXMtbmV4dC1pbm5lcntwYWRkaW5nOjFlbTt9I3RldHJpcy1rZXlze2NvbG9yOiM5Nzk7Zm9udC1zaXplOi44ZW07bWFyZ2luLXRvcDoxZW07fTwvc3R5bGU+DQoJCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij52YXIgdGV0cmlzPXticmlja1NpemU6MzAsYnJpY2tCb3JkZXJTaXplOjIsbWFpbldpbldpZHRoOjEwLG1haW5XaW5IZWlnaHQ6MjAsbGV2ZWxVcFNjb3JlOjE1MCxsZXZlbDoxLHNjb3JlOjAsc2luZ2xlczowLGRvdWJsZXM6MCx0cmlwbGVzOjAscXVhZHM6MCxicmlja3M6W10scGlsZTpbXSxwaWxlQW5pbUxpbmU6W10scGlsZUFuaW1Ecm9wOltdLGdhbWVTdGFydDp0cnVlLGdhbWVPdmVyOmZhbHNlLHBhdXNlZDpmYWxzZSxrZXlQcmVzc2VkOmZhbHNlLHNoYXBlQ291bnQ6MCxrZXlEcm9wOjMyLGtleUxlZnQ6Mzcsa2V5Um90YXRlOjM4LGtleVJpZ2h0OjM5LGtleURvd246NDAsa2V5UGF1c2U6MTksa2V5U3RvcDoyNyxpbml0OmZ1bmN0aW9uKCl7dGV0cmlzLm1haW5XaW49ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRldHJpcy1tYWluIik7dGV0cmlzLm5leHRXaW49ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRldHJpcy1uZXh0LWlubmVyIik7dGV0cmlzLm1lc3NhZ2U9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRldHJpcy1tZXNzYWdlIik7dGV0cmlzLm1lc3NhZ2UuaW5uZXJIVE1MPSI8cD5OZXcgZ2FtZSA8c3Bhbj5QcmVzcyBhbnkga2V5IHRvIHN0YXJ0PC9zcGFuPjwvcD4iO2RvY3VtZW50Lm9ua2V5ZG93bj10ZXRyaXMua2V5TGlzdGVuZXJ9LG5ld0dhbWU6ZnVuY3Rpb24oKXtmb3IodmFyIEI9MDtCPHRldHJpcy5tYWluV2luV2lkdGg7QisrKXtpZighdGV0cmlzLnBpbGVbQl0pe3RldHJpcy5waWxlW0JdPVtdfXRldHJpcy5waWxlQW5pbUxpbmVbQl09W107dGV0cmlzLnBpbGVBbmltRHJvcFtCXT1bXTtmb3IodmFyIEE9MDtBPHRldHJpcy5tYWluV2luSGVpZ2h0O0ErKyl7aWYodGV0cmlzLnBpbGVbQl1bQV0pe3RldHJpcy5tYWluV2luLnJlbW92ZUNoaWxkKHRldHJpcy5waWxlW0JdW0FdKX10ZXRyaXMucGlsZVtCXVtBXT1mYWxzZTt0ZXRyaXMucGlsZUFuaW1MaW5lW0JdW0FdPWZhbHNlO3RldHJpcy5waWxlQW5pbURyb3BbQl1bQV09ZmFsc2V9fXRldHJpcy5sZXZlbD0xO3RldHJpcy5zY29yZT0wO3RldHJpcy5zaW5nbGVzPTA7dGV0cmlzLmRvdWJsZXM9MDt0ZXRyaXMudHJpcGxlcz0wO3RldHJpcy5xdWFkcz0wO3RldHJpcy51cGRhdGVTY29yZSgpO3RldHJpcy5uZXdTaGFwZSgpfSxuZXdTaGFwZTpmdW5jdGlvbigpe3RldHJpcy5zaGFwZUNvdW50Kys7dGV0cmlzLnNoYXBlTnVtPXR5cGVvZiAodGV0cmlzLnNoYXBlTnVtTmV4dCkhPSJ1bmRlZmluZWQiP3RldHJpcy5zaGFwZU51bU5leHQ6TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKjYpO3RldHJpcy5zaGFwZU51bU5leHQ9TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKjcpO3RldHJpcy5zaGFwZVJvdD10eXBlb2YgKHRldHJpcy5zaGFwZVJvdE5leHQpIT0idW5kZWZpbmVkIj90ZXRyaXMuc2hhcGVSb3ROZXh0Ok1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSo0KTt0ZXRyaXMuc2hhcGVSb3ROZXh0PU1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSo0KTt0ZXRyaXMuc2hhcGVQb3NIb3I9TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKih0ZXRyaXMubWFpbldpbldpZHRoLTYpKSszO3RldHJpcy5zaGFwZVBvc1Zlcj0tMTt0ZXRyaXMuZHJhd1NoYXBlKCk7dGV0cmlzLmRyYXdOZXh0KCk7dGV0cmlzLnNoYXBlTGFuZGVkPWZhbHNlO2NsZWFySW50ZXJ2YWwodGV0cmlzLmludHZhbCk7dGV0cmlzLmludHZhbD1zZXRJbnRlcnZhbCgidGV0cmlzLnRpbWVTdGVwKCkiLDIwMDAvdGV0cmlzLmxldmVsKX0sbmV3QnJpY2s6ZnVuY3Rpb24oQixELEEpe3ZhciBDPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO0Muc2V0QXR0cmlidXRlKCJzdHlsZSIsImJhY2tncm91bmQ6ICIrQisiOyBib3JkZXItY29sb3I6ICIrRCsiICIrQSsiICIrQSsiICIrRCsiOyBib3JkZXItd2lkdGg6ICIrdGV0cmlzLmJyaWNrQm9yZGVyU2l6ZSsicHg7IGJvcmRlci1zdHlsZTogc29saWQ7IGhlaWdodDogIisodGV0cmlzLmJyaWNrU2l6ZS10ZXRyaXMuYnJpY2tCb3JkZXJTaXplKjIpKyJweDsgbGVmdDogMDsgdG9wOiAwOyB3aWR0aDogIisodGV0cmlzLmJyaWNrU2l6ZS10ZXRyaXMuYnJpY2tCb3JkZXJTaXplKjIpKyI7IHBvc2l0aW9uOiBhYnNvbHV0ZTsiKTtyZXR1cm4gQ30sZHJhd1NoYXBlOmZ1bmN0aW9uKCl7dmFyIEQ9MCxCPXRydWU7dGV0cmlzLmJyaWNrUG9zPVtdO2Zvcih2YXIgQT0wO0E8NDtBKyspe2Zvcih2YXIgRj0wO0Y8NDtGKyspe2lmKHRldHJpcy5icmlja0xpYlt0ZXRyaXMuc2hhcGVOdW1dW0EqNCtGK3RldHJpcy5zaGFwZVJvdCoxNl0pe3RldHJpcy5icmlja1Bvc1tEXT17aG9yOkYrdGV0cmlzLnNoYXBlUG9zSG9yLHZlcjpBK3RldHJpcy5zaGFwZVBvc1Zlcn07aWYodGV0cmlzLmNvbGxpc2lvbih0ZXRyaXMuYnJpY2tQb3NbRF0uaG9yLHRldHJpcy5icmlja1Bvc1tEXS52ZXIpKXtCPWZhbHNlfUQrK319fWlmKEImJiF0ZXRyaXMucGF1c2VkJiYhdGV0cmlzLmdhbWVPdmVyKXt2YXIgRT10ZXRyaXMuYnJpY2tzP3RldHJpcy5icmlja3Muc2xpY2UoMCk6ZmFsc2U7Zm9yKHZhciBDPTA7QzxEO0MrKyl7dGV0cmlzLmJyaWNrc1tDXT10ZXRyaXMubmV3QnJpY2sodGV0cmlzLmJyaWNrTGliW3RldHJpcy5zaGFwZU51bV1bNjRdLHRldHJpcy5icmlja0xpYlt0ZXRyaXMuc2hhcGVOdW1dWzY1XSx0ZXRyaXMuYnJpY2tMaWJbdGV0cmlzLnNoYXBlTnVtXVs2Nl0pO3RldHJpcy5icmlja3NbQ10ubnVtPXRldHJpcy5zaGFwZUNvdW50O3RldHJpcy5icmlja3NbQ10uc3R5bGUubGVmdD10ZXRyaXMuYnJpY2tQb3NbQ10uaG9yKnRldHJpcy5icmlja1NpemUrInB4Ijt0ZXRyaXMuYnJpY2tzW0NdLnN0eWxlLnRvcD10ZXRyaXMuYnJpY2tQb3NbQ10udmVyKnRldHJpcy5icmlja1NpemUrInB4In1mb3IodmFyIEM9MDtDPEQ7QysrKXt0ZXRyaXMubWFpbldpbi5hcHBlbmRDaGlsZCh0ZXRyaXMuYnJpY2tzW0NdKX1mb3IodmFyIEM9MDtDPEQ7QysrKXtpZihFW0NdJiZFW0NdLm51bT09dGV0cmlzLnNoYXBlQ291bnQpe3RldHJpcy5tYWluV2luLnJlbW92ZUNoaWxkKEVbQ10pfX10ZXRyaXMucHJldlNoYXBlUm90PXRldHJpcy5zaGFwZVJvdDt0ZXRyaXMucHJldlNoYXBlUG9zSG9yPXRldHJpcy5zaGFwZVBvc0hvcjt0ZXRyaXMucHJldlNoYXBlUG9zVmVyPXRldHJpcy5zaGFwZVBvc1Zlcjt0ZXRyaXMucHJldkJyaWNrUG9zPXRldHJpcy5icmlja1Bvcy5zbGljZSgwKX1lbHNle3RldHJpcy5zaGFwZVJvdD10ZXRyaXMucHJldlNoYXBlUm90O3RldHJpcy5zaGFwZVBvc0hvcj10ZXRyaXMucHJldlNoYXBlUG9zSG9yO3RldHJpcy5zaGFwZVBvc1Zlcj10ZXRyaXMucHJldlNoYXBlUG9zVmVyO3RldHJpcy5icmlja1Bvcz10ZXRyaXMucHJldkJyaWNrUG9zLnNsaWNlKDApfX0sZHJhd05leHQ6ZnVuY3Rpb24oKXt0ZXRyaXMubmV4dFdpbi5pbm5lckhUTUw9IiI7Zm9yKHZhciBBPTA7QTw0O0ErKyl7Zm9yKHZhciBCPTA7Qjw0O0IrKyl7aWYodGV0cmlzLmJyaWNrTGliW3RldHJpcy5zaGFwZU51bU5leHRdW0EqNCtCK3RldHJpcy5zaGFwZVJvdE5leHQqMTZdKXticmljaz10ZXRyaXMubmV3QnJpY2sodGV0cmlzLmJyaWNrTGliW3RldHJpcy5zaGFwZU51bU5leHRdWzY0XSx0ZXRyaXMuYnJpY2tMaWJbdGV0cmlzLnNoYXBlTnVtTmV4dF1bNjVdLHRldHJpcy5icmlja0xpYlt0ZXRyaXMuc2hhcGVOdW1OZXh0XVs2Nl0pO2JyaWNrLnN0eWxlLmxlZnQ9Qip0ZXRyaXMuYnJpY2tTaXplKyJweCI7YnJpY2suc3R5bGUudG9wPUEqdGV0cmlzLmJyaWNrU2l6ZSsicHgiO3RldHJpcy5uZXh0V2luLmFwcGVuZENoaWxkKGJyaWNrKX19fX0sY29sbGlzaW9uOmZ1bmN0aW9uKEIsQSl7aWYoQjwwKXtpZih0ZXRyaXMua2V5UHJlc3NlZD09dGV0cmlzLmtleVJvdGF0ZSl7aWYoIXRldHJpcy5jb2xsaXNpb24oQisxLEEpKXt0ZXRyaXMuc2hhcGVQb3NIb3IrKzt0ZXRyaXMuZHJhd1NoYXBlKCk7cmV0dXJuIHRydWV9ZWxzZXt0ZXRyaXMuc2hhcGVSb3QtLTtyZXR1cm4gdHJ1ZX19cmV0dXJuIHRydWV9aWYoQj49dGV0cmlzLm1haW5XaW5XaWR0aCl7aWYodGV0cmlzLmtleVByZXNzZWQ9PXRldHJpcy5rZXlSb3RhdGUpe2lmKCF0ZXRyaXMuY29sbGlzaW9uKEItMSxBKSl7dGV0cmlzLnNoYXBlUG9zSG9yLS07dGV0cmlzLmRyYXdTaGFwZSgpO3JldHVybiB0cnVlfWVsc2V7dGV0cmlzLnNoYXBlUm90LS07cmV0dXJuIHRydWV9fXJldHVybiB0cnVlfWlmKEE+PXRldHJpcy5tYWluV2luSGVpZ2h0KXtpZih0ZXRyaXMua2V5UHJlc3NlZCE9dGV0cmlzLmtleVJvdGF0ZSl7dGV0cmlzLnNoYXBlUG9zVmVyLS19dGV0cmlzLnNoYXBlTGFuZGVkPXRydWU7cmV0dXJuIHRydWV9aWYodGV0cmlzLnBpbGVbQl1bQV0pe2lmKHRldHJpcy5zaGFwZVBvc1Zlcj50ZXRyaXMucHJldlNoYXBlUG9zVmVyKXt0ZXRyaXMuc2hhcGVMYW5kZWQ9dHJ1ZX1yZXR1cm4gdHJ1ZX1yZXR1cm4gZmFsc2V9LHRpbWVTdGVwOmZ1bmN0aW9uKCl7dGV0cmlzLnNoYXBlUG9zVmVyKys7dGV0cmlzLmRyYXdTaGFwZSgpO2lmKHRldHJpcy5zaGFwZUxhbmRlZCl7Zm9yKHZhciBFIGluIHRldHJpcy5icmlja3Mpe3RldHJpcy5waWxlW3RldHJpcy5icmlja1Bvc1tFXS5ob3JdW3RldHJpcy5icmlja1Bvc1tFXS52ZXJdPXRldHJpcy5icmlja3NbRV19dmFyIEM9MDtmb3IodmFyIEE9MDtBPHRldHJpcy5tYWluV2luSGVpZ2h0O0ErKyl7dmFyIEI9dHJ1ZTtmb3IodmFyIEY9MDtGPHRldHJpcy5tYWluV2luV2lkdGg7RisrKXtpZighdGV0cmlzLnBpbGVbRl1bQV0pe0I9ZmFsc2V9fWlmKEIpe0MrKztmb3IodmFyIEY9MDtGPHRldHJpcy5tYWluV2luV2lkdGg7RisrKXtpZih0ZXRyaXMucGlsZVtGXVtBXSl7dGV0cmlzLnBpbGVBbmltTGluZVtGXVtBXT10ZXRyaXMucGlsZVtGXVtBXTtzZXRUaW1lb3V0KCJ0ZXRyaXMubWFpbldpbi5yZW1vdmVDaGlsZCh0ZXRyaXMucGlsZUFuaW1MaW5lWyIrRisiXVsiK0ErIl0pOyIsRio1MCk7dGV0cmlzLnBpbGVbRl1bQV09ZmFsc2V9fWZvcih2YXIgRj0wO0Y8dGV0cmlzLm1haW5XaW5XaWR0aDtGKyspe2Zvcih2YXIgRD1BO0Q+MDtELS0pe2lmKHRldHJpcy5waWxlW0ZdW0RdKXt0ZXRyaXMucGlsZUFuaW1Ecm9wW0ZdW0RdPXRldHJpcy5waWxlW0ZdW0RdO3NldFRpbWVvdXQoInRldHJpcy5waWxlQW5pbURyb3BbIitGKyJdWyIrRCsiXS5zdHlsZS50b3AgPSAoICIrRCsiICsgMSApICogdGV0cmlzLmJyaWNrU2l6ZSArICdweCc7Iix0ZXRyaXMubWFpbldpbldpZHRoKjUwKTt0ZXRyaXMucGlsZVtGXVtEKzFdPXRldHJpcy5waWxlW0ZdW0RdO3RldHJpcy5waWxlW0ZdW0RdPWZhbHNlfX19fX10ZXRyaXMudXBkYXRlU2NvcmUoQyk7Zm9yKHZhciBGPTA7Rjx0ZXRyaXMubWFpbldpbldpZHRoO0YrKyl7aWYodGV0cmlzLnBpbGVbRl1bMF0pe3RldHJpcy5kb0dhbWVPdmVyKCk7cmV0dXJuIH19dGV0cmlzLm5ld1NoYXBlKCl9fSx1cGRhdGVTY29yZTpmdW5jdGlvbihBKXt2YXIgQj10ZXRyaXMuc2NvcmU7aWYoQSl7dGV0cmlzLnNjb3JlKz1BKkErQSoxMH1mb3IoaT1CO2k8dGV0cmlzLnNjb3JlO2krKyl7c2V0VGltZW91dCgiZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RldHJpcy1zY29yZScpLmlubmVySFRNTCA9ICciK2krIic7IiwoaS1CKSoyMCl9dGV0cmlzLmxldmVsPU1hdGguZmxvb3IodGV0cmlzLnNjb3JlL3RldHJpcy5sZXZlbFVwU2NvcmUpKzE7ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRldHJpcy1sZXZlbCIpLmlubmVySFRNTD10ZXRyaXMubGV2ZWw7aWYoQT09MSl7dGV0cmlzLnNpbmdsZXMrKztkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidGV0cmlzLXNpbmdsZXMiKS5pbm5lckhUTUw9dGV0cmlzLnNpbmdsZXN9aWYoQT09Mil7dGV0cmlzLmZsYXNoTWVzc2FnZSgnPHAgY2xhc3M9InRldHJpcy1kb3VibGUiPkRvdWJsZSE8L3A+Jyk7dGV0cmlzLmRvdWJsZXMrKztkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidGV0cmlzLWRvdWJsZXMiKS5pbm5lckhUTUw9dGV0cmlzLmRvdWJsZXN9aWYoQT09Myl7dGV0cmlzLmZsYXNoTWVzc2FnZSgnPHAgY2xhc3M9InRldHJpcy1kb3VibGUiPlRyaXBsZSE8L3A+Jyk7dGV0cmlzLnRyaXBsZXMrKztkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidGV0cmlzLXRyaXBsZXMiKS5pbm5lckhUTUw9dGV0cmlzLnRyaXBsZXN9aWYoQT09NCl7dGV0cmlzLmZsYXNoTWVzc2FnZSgnPHAgY2xhc3M9InRldHJpcy1kb3VibGUiPlRldHJpcyE8L3A+Jyk7dGV0cmlzLnF1YWRzKys7ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRldHJpcy1xdWFkcyIpLmlubmVySFRNTD10ZXRyaXMucXVhZHN9fSxmbGFzaE1lc3NhZ2U6ZnVuY3Rpb24oQSl7dGV0cmlzLm1lc3NhZ2UuaW5uZXJIVE1MPUE7c2V0VGltZW91dCgidGV0cmlzLm1lc3NhZ2UuaW5uZXJIVE1MID0gJyc7IiwxMDAwKX0sZG9HYW1lT3ZlcjpmdW5jdGlvbigpe2NsZWFySW50ZXJ2YWwodGV0cmlzLmludHZhbCk7dGV0cmlzLm1lc3NhZ2UuaW5uZXJIVE1MPSI8cD5HYW1lIG92ZXIgPHNwYW4+UHJlc3MgU3BhY2ViYXIgdG8gY29udGludWU8L3NwYW48L3A+Ijt0ZXRyaXMuZ2FtZU92ZXI9dHJ1ZX0sa2V5TGlzdGVuZXI6ZnVuY3Rpb24oQSl7aWYoIUEpe0E9d2luZG93LmV2ZW50fXRldHJpcy5rZXlQcmVzc2VkPUEua2V5Q29kZTtpZih0ZXRyaXMuZ2FtZVN0YXJ0KXt0ZXRyaXMuZ2FtZVN0YXJ0PWZhbHNlO3RldHJpcy5tZXNzYWdlLmlubmVySFRNTD0iIjt0ZXRyaXMubmV3R2FtZSgpfWVsc2V7aWYodGV0cmlzLmdhbWVPdmVyJiZBLmtleUNvZGU9PXRldHJpcy5rZXlEcm9wKXt0ZXRyaXMuZ2FtZU92ZXI9ZmFsc2U7dGV0cmlzLm1lc3NhZ2UuaW5uZXJIVE1MPSIiO3RldHJpcy5uZXdHYW1lKCl9ZWxzZXtpZighdGV0cmlzLmdhbWVPdmVyKXtpZihBLmtleUNvZGU9PXRldHJpcy5rZXlTdG9wfHxBLmtleUNvZGU9PXRldHJpcy5rZXlQYXVzZSl7dGV0cmlzLnBhdXNlZD0hdGV0cmlzLnBhdXNlZDtpZih0ZXRyaXMucGF1c2VkKXt0ZXRyaXMubWVzc2FnZS5pbm5lckhUTUw9IjxwPlBhdXNlZCA8c3Bhbj5QcmVzcyBFc2MgdG8gcmVzdW1lPC9zcGFuPC9wPiJ9ZWxzZXt0ZXRyaXMubWVzc2FnZS5pbm5lckhUTUw9IiJ9fWlmKCF0ZXRyaXMucGF1c2VkKXtpZihBLmtleUNvZGU9PXRldHJpcy5rZXlEcm9wKXtjbGVhckludGVydmFsKHRldHJpcy5pbnR2YWwpO3RldHJpcy5pbnR2YWw9c2V0SW50ZXJ2YWwoInRldHJpcy50aW1lU3RlcCgpIiwyMCl9aWYoQS5rZXlDb2RlPT10ZXRyaXMua2V5TGVmdCl7dGV0cmlzLnNoYXBlUG9zSG9yLS07dGV0cmlzLmRyYXdTaGFwZSgpfWlmKEEua2V5Q29kZT09dGV0cmlzLmtleVJvdGF0ZSl7dGV0cmlzLnNoYXBlUm90PSh0ZXRyaXMuc2hhcGVSb3QrMSklNDt0ZXRyaXMuZHJhd1NoYXBlKCl9aWYoQS5rZXlDb2RlPT10ZXRyaXMua2V5UmlnaHQpe3RldHJpcy5zaGFwZVBvc0hvcisrO3RldHJpcy5kcmF3U2hhcGUoKX1pZihBLmtleUNvZGU9PXRldHJpcy5rZXlEb3duKXt0ZXRyaXMuc2hhcGVQb3NWZXIrKzt0ZXRyaXMuZHJhd1NoYXBlKCl9fX19fXJldHVybiB0cnVlfSxicmlja0xpYjp7MDpbMSwwLDAsMCwxLDAsMCwwLDEsMSwwLDAsMCwwLDAsMCwxLDEsMSwwLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMSwxLDAsMCwwLDEsMCwwLDAsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMSwwLDEsMSwxLDAsMCwwLDAsMCwiI0Y5MCIsIiNGQzAiLCIjRjYwIl0sMTpbMCwxLDAsMCwwLDEsMCwwLDAsMSwwLDAsMCwxLDAsMCwwLDAsMCwwLDEsMSwxLDEsMCwwLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwxLDAsMCwwLDEsMCwwLDAsMSwwLDAsMCwwLDAsMCwxLDEsMSwxLDAsMCwwLDAsMCwwLDAsMCwiI0MwMCIsIiNFMDAiLCIjQjAwIl0sMjpbMSwxLDAsMCwxLDAsMCwwLDEsMCwwLDAsMCwwLDAsMCwxLDEsMSwwLDAsMCwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDEsMCwwLDEsMSwwLDAsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDEsMSwxLDAsMCwwLDAsMCwiIzBDMCIsIiMwRTAiLCIjMEEwIl0sMzpbMSwwLDAsMCwxLDEsMCwwLDEsMCwwLDAsMCwwLDAsMCwxLDEsMSwwLDAsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxLDAsMCwxLDEsMCwwLDAsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDEsMCwwLDEsMSwxLDAsMCwwLDAsMCwiIzAwQyIsIiMwMEUiLCIjMDBBIl0sNDpbMSwxLDAsMCwxLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwxLDEsMCwwLDEsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDEsMSwwLDAsMSwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMSwxLDAsMCwxLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwiIzYwQyIsIiM4MEUiLCIjNDBBIl0sNTpbMCwxLDEsMCwxLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDEsMSwwLDAsMCwxLDAsMCwwLDAsMCwwLDAsMSwxLDAsMSwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwxLDEsMCwwLDAsMSwwLDAsMCwwLDAsMCwiI0NDQyIsIiNFRUUiLCIjQUFBIl0sNjpbMSwxLDAsMCwwLDEsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDEsMCwwLDEsMSwwLDAsMSwwLDAsMCwwLDAsMCwwLDEsMSwwLDAsMCwxLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwxLDAsMCwxLDEsMCwwLDEsMCwwLDAsMCwwLDAsMCwiI0NDMCIsIiNFRTAiLCIjQUEwIl19LH07d2luZG93Lm9ubG9hZD10ZXRyaXMuaW5pdDs8L3NjcmlwdD4NCgk8aGVhZD4NCgk8Ym9keT4NCgkJPGRpdiBpZD0idGV0cmlzIj4NCgkJCTxkaXYgaWQ9InRldHJpcy13cmFwIj4NCgkJCQk8ZGl2IGlkPSJ0ZXRyaXMtd3JhcC1pbm5lciI+DQoJCQkJCTxkaXYgaWQ9InRldHJpcy1tYWluIj4JCQ0KCQkJCQk8L2Rpdj4NCgkJCQkJPGRpdiBpZD0idGV0cmlzLW92ZXJsYXkiPg0KCQkJCQkJPGRpdiBpZD0idGV0cmlzLW1lc3NhZ2UiPjwvZGl2Pg0KCQkJCQk8L2Rpdj4NCgkJCQkJPGRpdiBpZD0idGV0cmlzLXNpZGUiPg0KCQkJCQkJPGRpdiBpZD0idGV0cmlzLXNpZGUtaW5uZXIiPg0KCQkJCQkJCTxkaXYgaWQ9InRldHJpcy1uZXh0Ij4NCgkJCQkJCQkJPGRpdiBpZD0idGV0cmlzLW5leHQtaW5uZXIiPjwvZGl2Pg0KCQkJCQkJCTwvZGl2Pg0KCQkJCQkJCTxkaXYgaWQ9InRldHJpcy1zY29yZXMiPg0KCQkJCQkJCQk8ZGw+DQoJCQkJCQkJCQk8ZHQ+TGV2ZWw6PC9kdD4NCgkJCQkJCQkJCTxkZCBpZD0idGV0cmlzLWxldmVsIj4xPC9kZD4NCgkJCQkJCQkJPC9kbD4NCgkJCQkJCQkJPGRsPg0KCQkJCQkJCQkJPGR0PlNjb3JlOjwvZHQ+DQoJCQkJCQkJCQk8ZGQgaWQ9InRldHJpcy1zY29yZSI+MDwvZGQ+DQoJCQkJCQkJCTwvZGw+DQoJCQkJCQkJCTxkbD4NCgkJCQkJCQkJCTxkdD5TaW5nbGVzOjwvZHQ+DQoJCQkJCQkJCQk8ZGQgaWQ9InRldHJpcy1zaW5nbGVzIj4wPC9kZD4NCgkJCQkJCQkJPC9kbD4NCgkJCQkJCQkJPGRsPg0KCQkJCQkJCQkJPGR0PkRvdWJsZXM6PC9kdD4NCgkJCQkJCQkJCTxkZCBpZD0idGV0cmlzLWRvdWJsZXMiPjA8L2RkPg0KCQkJCQkJCQk8L2RsPg0KCQkJCQkJCQk8ZGw+DQoJCQkJCQkJCQk8ZHQ+VHJpcGxlczo8L2R0Pg0KCQkJCQkJCQkJPGRkIGlkPSJ0ZXRyaXMtdHJpcGxlcyI+MDwvZGQ+DQoJCQkJCQkJCTwvZGw+DQoJCQkJCQkJCTxkbD4NCgkJCQkJCQkJCTxkdD5UZXRyaXM6PC9kdD4NCgkJCQkJCQkJCTxkZCBpZD0idGV0cmlzLXF1YWRzIj4wPC9kZD4NCgkJCQkJCQkJPC9kbD4NCgkJCQkJCQkJPGRpdiBjbGFzcz0iY2xlYXIiPjwvZGl2Pg0KCQkJCQkJCTwvZGl2Pg0KCQkJCQkJCTxkaXYgaWQ9InRldHJpcy1rZXlzIj4NCgkJCQkJCQkJPGRsPg0KCQkJCQkJCQkJPGR0Pk1vdmU6PC9kdD4NCgkJCQkJCQkJCTxkZD4mbGFycjsgJmRhcnI7ICZyYXJyOzxkZD4NCgkJCQkJCQkJPC9kbD4NCgkJCQkJCQkJPGRsPg0KCQkJCQkJCQkJPGR0PlJvdGF0ZTo8L2R0Pg0KCQkJCQkJCQkJPGRkPiZ1YXJyOzxkZD4NCgkJCQkJCQkJPC9kbD4NCgkJCQkJCQkJPGRsPg0KCQkJCQkJCQkJPGR0PkRyb3A6PC9kdD4NCgkJCQkJCQkJCTxkZD5TcGFjZWJhcjxkZD4NCgkJCQkJCQkJPC9kbD4NCgkJCQkJCQkJPGRsPg0KCQkJCQkJCQkJPGR0PlBhdXplOjwvZHQ+DQoJCQkJCQkJCQk8ZGQ+UGF1emUvRXNjPGRkPg0KCQkJCQkJCQk8L2RsPg0KCQkJCQkJCQk8ZGl2IGNsYXNzPSJjbGVhciI+PC9kaXY+DQoJCQkJCQkJPC9kaXY+DQoJCQkJCQk8L2Rpdj4NCgkJCQkJPC9kaXY+DQoJCQkJCTxkaXYgY2xhc3M9ImNsZWFyIj48L2Rpdj4NCgkJCQk8L2Rpdj4NCgkJCTwvZGl2Pg0KCQkJPC9kaXY+DQoJPC9ib2R5Pg0KPC9odG1sPg%3D%3D%27%2C%27_blank%27%2C%27width%3D500%2Cheight%3D650%2Cleft%3D300%2Ctop%3D100%27%29%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

2 шага назад для Direct Images и подобных скриптов
Можно изменить количество шагов и их направленность ("javascript:history.go(-2)" заменить на "javascript:history.go(+2)").

Код кнопки

Выделить код

Код:

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%3E2%20%u0448%u0430%u0433%u0430%20%u041D%u0430%u0437%u0430%u0434%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABIAAAATCAYAAACdkl3yAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAOwgAADsIBFShKgAAAABp0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjUuMTAw9HKhAAADFUlEQVQ4T42UfUxNcRjHz5hzz8vFMGM2Nn+wsfGP28tNQiKr3ZuXiGqkkkQz8nY1eas/yKwW9+YuaxOWjWwqr/N2Vejtnu5EdPO6aSlRoijn6zk3NUc36zn77pzf5/d7PjvvDDOEiq/XelFeUkx9y+l4OGUfpZEy/b+ajbUiE/dMXL6pTvxKAcWiNBDn456L1j9M4T6DiqLt4rCYGnFbrEPsMr8Nh6luFmIcoiVGEscQvxb/dBwufEjCRsdIhbsXrS8X2KgK8UR01Uj5/Ptd6JG7kVLrjahKsZhSvVWaDEfbLbz9JoHWYEOlG1HkQ2HUulLhUvSj0fLNxpOQ5V9QKlnywroyQU6qnkmCGhd70yFhfZlW4eozCr8rTIq4L5TFlkxAefMV1+K+MlV6YU+FDi1d7/rZm68SIh9oQT29orDrPBN2g5+95pZQn2CbhpdfnqgkymDPIy/kPEtU8dftEtbe1oL6ekWhV3n/VUV8c9KDOWjscA6QKGCnzRNWxz+iNglhxSKo14dZcZlfvbKA/3641ID2H5/cShS4444nsu1q0avPEkKviFhRQKKQfD5zWT6PwhdmyLQNVttueMJSoRY1tEpYflFESD7nwxjPcRpDHpdtPCvIefZDrkftrhILPXDq8VbVVMMnCcY8AYazJFIqOJcbHnSGOxicw3dn2OLxo6dzgGtLgQeyStQiZ4uE4DMCgnL+iBTZ0myOCbRwMYFmTWdykRHtXa0q2eaLHki9Gd7/XimTzmYJSy08qEf9Hi3J0jCLMzVBARma1oQLejS1v++XxZ3TYUmmAKvNhJ5fvZdf/9FOjAetd/+J+KdrdAuPad5FnJ4BZ5PD1RSbq4PC/I9x3WmFUej8+Q31TXYsSucVPvhHOz+NneqXytYYjk9E1et72GDVgcbZxMNp37E9LxDlDbexII2D3xF2cJFy3+YdZMf7prB3Ao6MxeLUsZibwlqIMb4H2AA6bjEcnQzfFI3C/y9SZPp9LKc3sef1e1mZYu777xCfRWMnBRT9EP6PDOO9mx1BSaB4/91A4ymU/RTtb1y+mnDvcYnvAAAAAElFTkSuQmCC%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%20url%3D%22javascript%3Ahistory.go%28-2%29%22%3B%0AloadURI%20%28url%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

google-translate
Версия google-translate.js в виде кнопки. Переводит выделенный текст (без особых ограничений на размер) или всю страницу на русский. Также добавляет пункты меню: «Перевести на русский» и «Перевести на английский».

Код кнопки

Выделить код

Код:

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%3EGoogle%20translate%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAALCAIAAAD5gJpuAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAQtJREFUKM9VkSFOhFEQg799/CjEihWAwKDgIFwAyWHgLDjuAGfZgMCQDQkG8abtQ/z8u9A0k4rOTCez2u0GB0gCsLELbCuxLduJy0zAZgOQBBqQALEbtOQoyRgjSZLt9nOaJyf5K2zPjr01SWst8ermZtzd5euLhCQ2Y9iOHXssIvZYr1f39x/T87Ourtr7O3ZUyK6KlN5HVRaOqlxcNGACJKRItigdHFXpFdXoPVWRGmSac0suRYWUWhz7zt5/BXh65Pi6Hr7rI/IopZyqpSqldLsq9onPX3iabuHYr6o3pCVHP2Sa11nIzZdnMAmOSpyejiocVEhtjrwc15L5l4HVDgReCGTR+V9n/AAByma0J+vVwwAAAABJRU5ErkJggg%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*/%0A%0Avar%20btn%20%3D%20this%3B%0A%0Abtn.lastClick%20%3D%20%7B%0A%20%20%20%20X%3A%200%2C%0A%20%20%20%20Y%3A%200%0A%7D%3B%0AaddEventListener%28%22mouseup%22%2C%20function%28e%29%20%7B%0A%20%20%20%20if%20%28e%20%26%26%20e.button%20%3D%3D%200%20%26%26%20e.view.top%20%3D%3D%20content%29%20%7B%0A%20%20%20%20%20%20%20%20var%20lc%20%3D%20btn.lastClick%3B%0A%20%20%20%20%20%20%20%20lc.X%20%3D%20e.clientX%3B%0A%20%20%20%20%20%20%20%20lc.Y%20%3D%20e.clientY%3B%0A%20%20%20%20%7D%0A%7D%2C%20false%29%3B%0A%0Avar%20safeHTMLParser%20%3D%20function%28code%29%20%7B%0A%20%20%20%20var%20gUnescapeHTML%20%3D%20Cc%5B%22@mozilla.org/feed-unescapehtml%3B1%22%5D.getService%28Ci.nsIScriptableUnescapeHTML%29%3B%0A%20%20%20%20var%20doc%20%3D%20document.implementation.createDocument%28xhtmlns%2C%20%22html%22%2C%20null%29%3B%0A%20%20%20%20var%20body%20%3D%20document.createElementNS%28xhtmlns%2C%20%22body%22%29%3B%0A%20%20%20%20doc.documentElement.appendChild%28body%29%3B%0A%20%20%20%20body.appendChild%28gUnescapeHTML.parseFragment%28code%2C%20false%2C%20null%2C%20body%29%29%3B%0A%20%20%20%20return%20doc%3B%0A%7D%3B%0A%0Avar%20createWindow%20%3D%20function%28text%2C%20status%2C%20title%2C%20id%2C%20pos%2C%20size%29%7B%0A%20%20%20%20var%20win%20%3D%20document.commandDispatcher.focusedWindow.top%20%3D%3D%20content%20%3F%20document.commandDispatcher.focusedWindow%20%3A%20content%3B%0A%09var%20doc%20%3D%20win.document%2C%20wId%20%3D%20%27ujs_window%27+%28id%20%7C%7C%20%27%27%29%2C%20w%20%3D%20doc.getElementById%28wId%29%3B%0A%09var%20keyDown%20%3D%20function%28e%29%7Bif%28%21e.shiftKey%20%26%26%20%21e.ctrlKey%20%26%26%20%21e.altKey%20%26%26%20e.keyCode%20%3D%3D%2027%29doc.getElementById%28wId%29.closeWin%28%29%7D%3B%0A%09if%28w%29w.closeWin%28%29%3B%0A%09w%20%3D%20doc.createElement%28%27div%27%29%3B%0A%09w.setAttribute%28%27style%27%2C%20%27position%3Afixed%3Bdisplay%3Ablock%3Bvisibility%3Ahidden%3Bleft%3A0%3Btop%3A0%3Bwidth%3Aauto%3Bheight%3Aauto%3Bborder%3A1px%20solid%20gray%3Bpadding%3A3px%3Bmargin%3A0%3Bz-index%3A99999%3Boverflow%3Ahidden%3Bcursor%3Amove%3B%27+%28typeof%20w.style.borderRadius%20%3D%3D%3D%20%27string%27%20%3F%20%27background-color%3A%23f3f5f7%3Bpadding-top%3A4px%3Bborder-radius%3A4px%3Bbox-shadow%3A0%200%2012px%20rgba%280%2C0%2C0%2C.4%29%3B%27%20%3A%20%27background%3A-o-skin%28%22Window%20Skin%22%29%3B%27%29%29%3B%0A%09w.id%20%3D%20wId%3B%0A%09w.closeWin%20%3D%20function%28%29%7B%0A%09%09doc.removeEventListener%28%27keydown%27%2C%20keyDown%2C%20false%29%3B%0A%09%09this.parentNode.removeChild%28this%29%3B%0A%09%7D%3B%0A%09w.addEle%20%3D%20function%28str%2C%20style%29%7B%0A%09%09var%20ele%20%3D%20doc.createElement%28%27div%27%29%3B%0A%09%09ele.setAttribute%28%27style%27%2C%20style%29%3B%0A%09%09if%28str%29%7B%0A%09%09%09ele.innerHTML%20%3D%20str%3B%0A%09%09%09for%28var%20el%2C%20all%20%3D%20ele.getElementsByTagName%28%27*%27%29%2C%20i%20%3D%20all.length%3B%20i--%3B%29%7B%0A%09%09%09%09el%20%3D%20all%5Bi%5D%3B%0A%09%09%09%09if%28/%5E%28script%7Cframe%7Ciframe%7Capplet%7Cembed%7Cobject%29%24/i.test%28el.nodeName%29%29%7B%0A%09%09%09%09%09el.parentNode.removeChild%28el%29%3B%0A%09%09%09%09%7Delse%7B%0A%09%09%09%09%09for%28var%20att%20%3D%20el.attributes%2C%20j%20%3D%20att.length%3B%20j--%3B%29%7B%0A%09%09%09%09%09%09if%28/%5Eon%5Ba-z%5D+%24/i.test%28att%5Bj%5D.name%29%29att%5Bj%5D.value%20%3D%20%27%27%3B%0A%09%09%09%09%09%7D%0A%09%09%09%09%7D%0A%09%09%09%7D%0A%09%09%7D%3B%0A%09%09return%20this.appendChild%28ele%29%3B%0A%09%7D%3B%0A%09var%20img%20%3D%20doc.createElement%28%27div%27%29%3B%0A%09img.setAttribute%28%27style%27%2C%20%27display%3Ablock%3Bfloat%3Aright%3Bwidth%3A18px%3Bheight%3A18px%3Bpadding%3A0%3Bmargin%3A0%3Bborder%3Anone%3Bcursor%3Apointer%3Bbackground-image%3Aurl%28%22data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABIAAAASCAQAAAD8x0bcAAAAZElEQVR42mNgGNyAGQixsVGU/AdCXjCbHczmxKaMFywlAlWiw6DAwIZNmQhYGqJEDWoqFiAGVmKKTwk73CRJ/Ep0GIyhbsPpO4hbIG4TwKaMk0EZ7hYBBk1cvmNDEmbDrmSwAADE8h10+qICXwAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAAASUVORK5CYII%3D%22%29%3Bbackground%3A-o-skin%28%22Caption%20Close%20Button%20Skin%22%29%3B%27%29%3B%0A%09img.title%20%3D%20%28win.navigator.language.indexOf%28%27ru%27%29%20%3D%3D%200%29%20%3F%20%27%5Cu0417%5Cu0430%5Cu043A%5Cu0440%5Cu044B%5Cu0442%5Cu044C%27%20%3A%20%27Close%27%3B%0A%09img.addEventListener%28%27click%27%2C%20function%28%29%7Bthis.parentNode.closeWin%28%29%7D%2C%20false%29%3B%0A%09w.appendChild%28img%29%3B%0A%09w.addEle%28title%2C%20%27display%3Atable%3Bcolor%3A%23000%3Bfont%3A16px%20Times%20New%20Roman%3Bwidth%3Aauto%3Bheight%3Aauto%3Bpadding%3A0%3Bmargin%3A0%202px%3Bcursor%3Atext%3B%27%29%3B%0A%09var%20cnt%20%3D%20w.addEle%28text%2C%20%27display%3Ablock%3Bborder%3A1px%20solid%20%23aaa%3Bmargin%3A2px%200%201px%200%3Bpadding%3A4px%3Bbackground-color%3A%23fafcfe%3Bcolor%3A%23000%3Bfont%3A14px%20Times%20New%20Roman%3Bwidth%3A240px%3Bheight%3A120px%3Boverflow%3Aauto%3Bcursor%3Atext%3B%27%29%3B%0A%09w.addEle%28status%2C%20%27display%3Atable%3Bcolor%3A%23555%3Bfont%3A10px%20Times%20New%20Roman%3Bwidth%3Aauto%3Bheight%3Aauto%3Bpadding%3A0%3Bmargin%3A0%202px%3Bcursor%3Atext%3B%27%29%3B%0A%09w.addEventListener%28%27mousedown%27%2C%20function%28e%29%7B%0A%09%09if%28e.target%20%3D%3D%20w%29%7B%0A%09%09%09e.preventDefault%28%29%3B%0A%09%09%09var%20grabX%20%3D%20e.clientX%2C%20grabY%20%3D%20e.clientY%2C%20origX%20%3D%20parseInt%28w.style.left%29%2C%20origY%20%3D%20parseInt%28w.style.top%29%3B%0A%09%09%09var%20mouseMove%20%3D%20function%28ev%29%7B%0A%09%09%09%09w.style.left%20%3D%20origX+ev.clientX-grabX+%27px%27%3B%0A%09%09%09%09w.style.top%20%3D%20origY+ev.clientY-grabY+%27px%27%3B%0A%09%09%09%7D%3B%0A%09%09%09doc.addEventListener%28%27mousemove%27%2C%20mouseMove%2C%20false%29%3B%0A%09%09%09doc.addEventListener%28%27mouseup%27%2C%20function%28%29%7Bdoc.removeEventListener%28%27mousemove%27%2C%20mouseMove%2C%20false%29%7D%2C%20false%29%3B%0A%09%09%7D%0A%09%7D%2C%20false%29%3B%0A%09doc.documentElement.appendChild%28w%29%3B%0A%0A%09if%28size%29%7B%0A%09%09cnt.style.height%20%3D%20size.height%3B%0A%09%09cnt.style.width%20%3D%20size.width%3B%0A%09%7Delse%7B%0A%09%09for%28var%20i%20%3D%203%3B%20i%20%3C%2010%3B%20i++%29%7B%0A%09%09%09if%28cnt.scrollHeight%20%3E%20cnt.offsetHeight%20%7C%7C%20cnt.scrollWidth%20%3E%20cnt.offsetWidth%29%7B%0A%09%09%09%09cnt.style.height%20%3D%2050*i+%27px%27%3B%0A%09%09%09%09cnt.style.width%20%3D%20100*i+%27px%27%3B%0A%09%09%09%7Delse%20break%3B%0A%09%09%7D%0A%09%7D%3B%0A%09var%20docEle%20%3D%20doc.compatMode%20%3D%3D%20%27CSS1Compat%27%20%3F%20doc.documentElement%20%3A%20doc.body%3B%0A%09var%20mX%20%3D%20docEle.clientWidth-w.offsetWidth%2C%20mY%20%3D%20docEle.clientHeight-w.offsetHeight%3B%0A%09if%28mX%20%3C%200%29%7Bcnt.style.width%20%3D%20parseInt%28cnt.style.width%29+mX+%27px%27%3B%20mX%20%3D%200%7D%3B%0A%09if%28mY%20%3C%200%29%7Bcnt.style.height%20%3D%20parseInt%28cnt.style.height%29+mY+%27px%27%3B%20mY%20%3D0%7D%3B%0A%09var%20hW%20%3D%20parseInt%28w.offsetWidth/2%29%3B%0A%09w.style.left%20%3D%20%28pos%20%26%26%20pos.X%20%3C%20mX+hW%20%3F%20%28pos.X%20%3E%20hW%20%3F%20pos.X-hW%20%3A%200%29%20%3A%20mX%29+%27px%27%3B%0A%09w.style.top%20%3D%20%28pos%20%26%26%20pos.Y+10%20%3C%20mY%20%3F%20pos.Y+10%20%3A%20mY%29+%27px%27%3B%0A%09w.style.visibility%20%3D%20%27visible%27%3B%0A%09doc.addEventListener%28%27keydown%27%2C%20keyDown%2C%20false%29%3B%0A%7D%3B%0A%0Avar%20getSel%20%3D%20function%20%28w%29%20%7B%0A%20%20%20%20var%20s%2C%20d%20%3D%20w.document%3B%0A%20%20%20%20if%20%28d.selection%29%20%7B%0A%20%20%20%20%20%20%20%20var%20r%20%3D%20d.selection.createRange%28%29%3B%0A%20%20%20%20%20%20%20%20s%20%3D%20r%20%3F%20r.text%20%3A%20%27%27%0A%20%20%20%20%7D%20else%20%7B%0A%09%09s%20%3D%20d.getSelection%28%29.toString%28%29%3B%0A%09%09if%20%28%21s%29%20%7B%0A%09%09%09var%20e%2C%20t%20%3D%20d.getElementsByTagName%28%27textarea%27%29%2C%20u%20%3D%20d.getElementsByTagName%28%27input%27%29%2C%20i%20%3D%20t.length%3B%0A%09%09%09while%28e%20%3D%20%28i%20%3E%200%29%20%3F%20t%5B--i%5D%20%3A%20u%5B-i--%5D%29try%7B%0A%09%09%09%09if%20%28e.offsetHeight%20%3E%200%20%26%26%20%28s%20%3D%20e.value.substring%28e.selectionStart%2C%20e.selectionEnd%29%29%29%20break%0A%09%09%09%7Dcatch%28x%29%7B%7D%0A%09%09%7D%0A%09%7D%3B%0A%20%20%20%20if%20%28%21s%29%20for%20%28var%20j%20%3D%200%2C%20f%3B%20f%20%3D%20w.frames%5Bj%5D%3B%20j++%29%20%7B%0A%20%20%20%20%20%20%20%20try%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20%28s%20%3D%20getSel%28f%29%29%20break%0A%20%20%20%20%20%20%20%20%7D%20catch%28x%29%20%7B%7D%0A%20%20%20%20%7D%3B%0A%20%20%20%20return%20s%0A%7D%3B%0A%0Avar%20ujs_google_translate%20%3D%20function%20%28dir%29%7B%0A%20%20%20%20var%20win%20%3D%20content%2C%20lng%20%3D%20win.navigator.language.slice%280%2C%202%29%2C%20txt%20%3D%20getSel%28win%29%3B%0A%20%20%20%20if%20%28txt%29%20%7B%20%0A%20%20%20%20%20%20%20%20var%20xhr%20%3D%20new%20XMLHttpRequest%28%29%3B%0A%20%20%20%20%20%20%20%20var%20encTxt%20%3D%20%27text%3D%27%20+%20encodeURIComponent%28txt%29%2C%20post%20%3D%20encTxt.length%20%3E%201024%2C%20l%20%3D%20dir.split%28%27%7C%27%29%3B%0A%20%20%20%20%20%20%20%20var%20url%20%3D%20%27https%3A//translate.google.com/%3F%27%20+%20%28post%20%3F%20%27%27%20%3A%20encTxt%20+%20%27%26%27%29%20+%20%27sl%3D%27%20+%20l%5B0%5D%20+%20%27%26tl%3D%27%20+%20l%5B1%5D%20+%20%27%26hl%3D%27%20+%20lng%20+%20%27%26eotf%3D0%26ujs%3Dgtt%27%3B%0A%0A%20%20%20%20%20%20%20%20xhr.open%28post%20%3F%20%27POST%27%20%3A%20%27GET%27%2C%20url%2C%20true%29%3B%0A%20%20%20%20%20%20%20%20if%28post%29xhr.setRequestHeader%28%27Content-Type%27%2C%20%27application/x-www-form-urlencoded%27%29%3B%0A%20%20%20%20%20%20%20%20xhr.onreadystatechange%20%3D%20function%28%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20try%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28xhr.readyState%20%3D%3D%204%20%26%26%20xhr.status%20%3D%3D%20200%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20result%20%3D%20%27%27%2C%20status%20%3D%20%27%27%2C%20tmp%20%3D%20safeHTMLParser%28xhr.responseText%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20r%20%3D%20tmp.querySelector%28%27%23result_box%27%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28r%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%20var%20p%20%3D%20r.getElementsByTagName%28%27span%27%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%20for%28var%20i%20%3D%200%2C%20n%3B%20n%20%3D%20p%5Bi%5D%3B%20i++%29%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20n.setAttribute%28%27style%27%2C%20%27background-color%3Ainherit%3Bcolor%3Ainherit%3Bfont-size%3Ainherit%3Bfont-family%3Aserif%3B%27%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%7D%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%20result%20%3D%20r.innerHTML%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20sl%20%3D%20tmp.querySelector%28%27%23nc_sl%27%29%2C%20dl%20%3D%20tmp.querySelector%28%27%23nc_dl%27%29%2C%20tl%20%3D%20tmp.querySelector%28%27%23nc_tl%27%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%28sl%20%26%26%20dl%20%26%26%20tl%29%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%20status%20%3D%20%28%28dl.value%20%7C%7C%20sl.value%29+%27%20-%5Cu203A%20%27+tl.value%29.toUpperCase%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20createWindow%28result%2C%20status%2C%20%27%3Ca%20href%3D%22%27+url.replace%28/%26/g%2C%27%26amp%3B%27%29+%27%22%20target%3D%22_blank%22%20style%3D%22display%3Ainline%3Bpadding%3A0%3Bmargin%3A0%3Btext-decoration%3Anone%3Bborder%3Anone%3Bcolor%3A%23009%3Bfont%3A16px%20Times%20New%20Roman%3B%22%3EGoogle%20Translate%3C/a%3E%27%2C%20%27_gt%27%2C%20btn.lastClick%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%20%7D%20catch%20%28x%29%7B%7D%3B%0A%20%20%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%20%20%20%20xhr.send%28post%20%3F%20encTxt%20%3A%20null%29%3B%0A%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20win.open%28%27http%3A//translate.google.com/translate%3Fu%3D%27+escape%28win.location.href%29+%27%26hl%3D%27+lng+%27%26langpair%3D%27+dir+%27%26tbb%3D1%27%29%3B%0A%20%20%20%20%7D%3B%0A%7D%3B%0A%0A%0Abtn.onclick%20%3D%20function%28e%29%7Bif%28e.button%20%3D%3D%200%29ujs_google_translate%28%27auto%7Cru%27%29%7D%3B%0A%0Avar%20contextMenu%20%3D%20document.getElementById%28%22contentAreaContextMenu%22%29%3B%0Avar%20nextEleMenu%20%3D%20document.getElementById%28%22context-inspect%22%29%3B%0A%0Avar%20menuId%20%3D%20%22context-ext-google-translate%22%3B%0Avar%20menuItem%20%3D%20document.getElementById%28menuId%29%3B%0Aif%20%28menuItem%29%20%7B%0A%20%20%20%20contextMenu.removeChild%28menuItem.nextElementSibling%29%3B%0A%20%20%20%20contextMenu.removeChild%28menuItem.nextElementSibling%29%3B%0A%20%20%20%20contextMenu.removeChild%28menuItem%29%3B%0A%7D%3B%0A%0AmenuItem%20%3D%20document.createElement%28%22menuitem%22%29%3B%0AmenuItem.setAttribute%28%22id%22%2C%20menuId%29%3B%0AmenuItem.setAttribute%28%22label%22%2C%20%22%u041F%u0435%u0440%u0435%u0432%u0435%u0441%u0442%u0438%20%u043D%u0430%20%u0440%u0443%u0441%u0441%u043A%u0438%u0439%22%29%3B%0AmenuItem.setAttribute%28%22class%22%2C%20%22menuitem-iconic%22%29%3B%0AmenuItem.setAttribute%28%22image%22%2C%20%22data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAABnRSTlMAAAAAAABupgeRAAABBUlEQVR4Ac2RMU4DMRREB2MqihQpAkUaqnAduuQw4Sx03CGcJYIiDYqQ0lCsZ77535ZFcgAkRuPvV7zd/dLiz3N1PFb8hmRckrfELZrF9ONQ1B6Yz0MyM7S0O6zGkVprh/3+Kw/JzkHSpRpJKZkpr9fYbOx0cjVsCbWG31oHBM9mtt0q73ZcrdLhAMlYQKkUI22aqsNo8HKZAMQhvVaKSHWj2Q2aPU3mJQFY7nuHyvYFduP83WF3AJRfcPNYnr/Lp1G1uK4m9sno1LaUbnX/htf8BNzoneUD5NhjvLCMhURQSQ93QCZwXYjFwg3I0NZKrvoknQPMIHkt/jRAQKMeG2yX89/mB4EJbKbZxIhFAAAAAElFTkSuQmCC%22%29%3B%0AmenuItem.addEventListener%28%22command%22%2C%20function%28%29%7Bujs_google_translate%28%27auto%7Cru%27%29%7D%2C%20false%29%3B%0AcontextMenu.insertBefore%28menuItem%2C%20nextEleMenu%29%3B%0A%0AmenuItem%20%3D%20document.createElement%28%22menuitem%22%29%3B%0AmenuItem.setAttribute%28%22label%22%2C%20%22%u041F%u0435%u0440%u0435%u0432%u0435%u0441%u0442%u0438%20%u043D%u0430%20%u0430%u043D%u0433%u043B%u0438%u0439%u0441%u043A%u0438%u0439%22%29%3B%0AmenuItem.setAttribute%28%22class%22%2C%20%22menuitem-iconic%22%29%3B%0AmenuItem.setAttribute%28%22image%22%2C%20%22data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAABnRSTlMAAAAAAABupgeRAAAB5UlEQVR4AWOgPZg0c9+Oq2+qpx9LaQaiw4mNB27efbs2uXFNQh2Q4Zm9zSNth23MhqjGnXMC86vnHmUS4udxv7OvOd2yPE7PTlfCTk9GVVEoyJA7WI8dyPA0k3U1l+jJMV7CeThpTZeoKDdDUsvBPSff/V+6/P/Bvf///2+bdvU/EKRm/k9IBNIlfZe+LFrzvbsbyJ636pKkyQyQhoUb7tZNvPpw3/0/TfX/ISAm5n94BIiRm/n/xYsLd946ei4vajoiqDuRAejQf//+o4PQ0P9+fmhiQGVnrr1kXJNYG2zEzXDxDsPv3wy/fkFJoOTPn39+/fr/69e/37//AUX+/mXRkO458wWHDba2f8wswCyQ3N+/f//8/fP7z5+TV18w2Mdt6plzPiptx5Wr7/+/ffMzOR6kysjkt74hWMPfp06O+2dulZCeFZKwnkE4m8E8bN3i9aCQ+dxY96GrK6bkGJD9R1v3l6Y20NVW9kt+/v//ZdbcFwkxTVPPMQimM8XEqkb7a/zoqLxkH9v4zVyI5+///wyMmtKMmhJAnbLqQjHxaw5r2orOmZN5uj470Zahat6BKS7JzpmLBHXm8GhM5lCdcP7ai1ZpixZxk9NXXjKIFzOIFjAI54oY1vXuue5qmscw+AAAW0tKxtPoicEAAAAASUVORK5CYII%3D%22%29%3B%0AmenuItem.addEventListener%28%22command%22%2C%20function%28%29%7Bujs_google_translate%28%27auto%7Cen%27%29%7D%2C%20false%29%3B%0AcontextMenu.insertBefore%28menuItem%2C%20nextEleMenu%29%3B%0A%0AcontextMenu.insertBefore%28document.createElement%28%22menuseparator%22%29%2C%20nextEleMenu%29%3B%0A%0AaddEventListener%28%27keydown%27%2C%20function%20%28e%29%7B%0A%20if%28e.shiftKey%20%26%26%20%21e.ctrlKey%20%26%26%20e.altKey%20%26%26%20e.keyCode%20%3D%3D%2084%29ujs_google_translate%28%27auto%7Cru%27%29%3B%0A%7D%2C%20false%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*/

var btn = this;

btn.lastClick = {
    X: 0,
    Y: 0
};
addEventListener("mouseup", function(e) {
    if (e && e.button == 0 && e.view.top == content) {
        var lc = btn.lastClick;
        lc.X = e.clientX;
        lc.Y = e.clientY;
    }
}, false);

var safeHTMLParser = function(code) {
    var gUnescapeHTML = Cc["@mozilla.org/feed-unescapehtml;1"].getService(Ci.nsIScriptableUnescapeHTML);
    var doc = document.implementation.createDocument(xhtmlns, "html", null);
    var body = document.createElementNS(xhtmlns, "body");
    doc.documentElement.appendChild(body);
    body.appendChild(gUnescapeHTML.parseFragment(code, false, null, body));
    return doc;
};

var createWindow = function(text, status, title, id, pos, size){
    var win = document.commandDispatcher.focusedWindow.top == content ? document.commandDispatcher.focusedWindow : content;
    var doc = win.document, wId = 'ujs_window'+(id || ''), w = doc.getElementById(wId);
    var keyDown = function(e){if(!e.shiftKey && !e.ctrlKey && !e.altKey && e.keyCode == 27)doc.getElementById(wId).closeWin()};
    if(w)w.closeWin();
    w = doc.createElement('div');
    w.setAttribute('style', 'position:fixed;display:block;visibility:hidden;left:0;top:0;width:auto;height:auto;border:1px solid gray;padding:3px;margin:0;z-index:99999;overflow:hidden;cursor:move;'+(typeof w.style.borderRadius === 'string' ? 'background-color:#f3f5f7;padding-top:4px;border-radius:4px;box-shadow:0 0 12px rgba(0,0,0,.4);' : 'background:-o-skin("Window Skin");'));
    w.id = wId;
    w.closeWin = function(){
        doc.removeEventListener('keydown', keyDown, false);
        this.parentNode.removeChild(this);
    };
    w.addEle = function(str, style){
        var ele = doc.createElement('div');
        ele.setAttribute('style', style);
        if(str){
            ele.innerHTML = str;
            for(var el, all = ele.getElementsByTagName('*'), i = all.length; i--;){
                el = all[i];
                if(/^(script|frame|iframe|applet|embed|object)$/i.test(el.nodeName)){
                    el.parentNode.removeChild(el);
                }else{
                    for(var att = el.attributes, j = att.length; j--;){
                        if(/^on[a-z]+$/i.test(att[j].name))att[j].value = '';
                    }
                }
            }
        };
        return this.appendChild(ele);
    };
    var img = doc.createElement('div');
    img.setAttribute('style', 'display:block;float:right;width:18px;height:18px;padding:0;margin:0;border:none;cursor:pointer;background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAQAAAD8x0bcAAAAZElEQVR42mNgGNyAGQixsVGU/AdCXjCbHczmxKaMFywlAlWiw6DAwIZNmQhYGqJEDWoqFiAGVmKKTwk73CRJ/Ep0GIyhbsPpO4hbIG4TwKaMk0EZ7hYBBk1cvmNDEmbDrmSwAADE8h10+qICXwAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAAASUVORK5CYII=");background:-o-skin("Caption Close Button Skin");');
    img.title = (win.navigator.language.indexOf('ru') == 0) ? '\u0417\u0430\u043A\u0440\u044B\u0442\u044C' : 'Close';
    img.addEventListener('click', function(){this.parentNode.closeWin()}, false);
    w.appendChild(img);
    w.addEle(title, 'display:table;color:#000;font:16px Times New Roman;width:auto;height:auto;padding:0;margin:0 2px;cursor:text;');
    var cnt = w.addEle(text, 'display:block;border:1px solid #aaa;margin:2px 0 1px 0;padding:4px;background-color:#fafcfe;color:#000;font:14px Times New Roman;width:240px;height:120px;overflow:auto;cursor:text;');
    w.addEle(status, 'display:table;color:#555;font:10px Times New Roman;width:auto;height:auto;padding:0;margin:0 2px;cursor:text;');
    w.addEventListener('mousedown', function(e){
        if(e.target == w){
            e.preventDefault();
            var grabX = e.clientX, grabY = e.clientY, origX = parseInt(w.style.left), origY = parseInt(w.style.top);
            var mouseMove = function(ev){
                w.style.left = origX+ev.clientX-grabX+'px';
                w.style.top = origY+ev.clientY-grabY+'px';
            };
            doc.addEventListener('mousemove', mouseMove, false);
            doc.addEventListener('mouseup', function(){doc.removeEventListener('mousemove', mouseMove, false)}, false);
        }
    }, false);
    doc.documentElement.appendChild(w);

    if(size){
        cnt.style.height = size.height;
        cnt.style.width = size.width;
    }else{
        for(var i = 3; i < 10; i++){
            if(cnt.scrollHeight > cnt.offsetHeight || cnt.scrollWidth > cnt.offsetWidth){
                cnt.style.height = 50*i+'px';
                cnt.style.width = 100*i+'px';
            }else break;
        }
    };
    var docEle = doc.compatMode == 'CSS1Compat' ? doc.documentElement : doc.body;
    var mX = docEle.clientWidth-w.offsetWidth, mY = docEle.clientHeight-w.offsetHeight;
    if(mX < 0){cnt.style.width = parseInt(cnt.style.width)+mX+'px'; mX = 0};
    if(mY < 0){cnt.style.height = parseInt(cnt.style.height)+mY+'px'; mY =0};
    var hW = parseInt(w.offsetWidth/2);
    w.style.left = (pos && pos.X < mX+hW ? (pos.X > hW ? pos.X-hW : 0) : mX)+'px';
    w.style.top = (pos && pos.Y+10 < mY ? pos.Y+10 : mY)+'px';
    w.style.visibility = 'visible';
    doc.addEventListener('keydown', keyDown, false);
};

var getSel = function (w) {
    var s, d = w.document;
    if (d.selection) {
        var r = d.selection.createRange();
        s = r ? r.text : ''
    } else {
        s = d.getSelection().toString();
        if (!s) {
            var e, t = d.getElementsByTagName('textarea'), u = d.getElementsByTagName('input'), i = t.length;
            while(e = (i > 0) ? t[--i] : u[-i--])try{
                if (e.offsetHeight > 0 && (s = e.value.substring(e.selectionStart, e.selectionEnd))) break
            }catch(x){}
        }
    };
    if (!s) for (var j = 0, f; f = w.frames[j]; j++) {
        try {
            if (s = getSel(f)) break
        } catch(x) {}
    };
    return s
};

var ujs_google_translate = function (dir){
    var win = content, lng = win.navigator.language.slice(0, 2), txt = getSel(win);
    if (txt) { 
        var xhr = new XMLHttpRequest();
        var encTxt = 'text=' + encodeURIComponent(txt), post = encTxt.length > 1024, l = dir.split('|');
        var url = 'https://translate.google.com/?' + (post ? '' : encTxt + '&') + 'sl=' + l[0] + '&tl=' + l[1] + '&hl=' + lng + '&eotf=0&ujs=gtt';

        xhr.open(post ? 'POST' : 'GET', url, true);
        if(post)xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
        xhr.onreadystatechange = function() {
            try{
                if (xhr.readyState == 4 && xhr.status == 200) {
                    var result = '', status = '', tmp = safeHTMLParser(xhr.responseText);
                    var r = tmp.querySelector('#result_box');
                    if (r) {
                        var p = r.getElementsByTagName('span');
                        for(var i = 0, n; n = p[i]; i++){
                            n.setAttribute('style', 'background-color:inherit;color:inherit;font-size:inherit;font-family:serif;');
                        };
                        result = r.innerHTML;
                    };
                    var sl = tmp.querySelector('#nc_sl'), dl = tmp.querySelector('#nc_dl'), tl = tmp.querySelector('#nc_tl');
                    if(sl && dl && tl){
                        status = ((dl.value || sl.value)+' -\u203A '+tl.value).toUpperCase();
                    };
                    createWindow(result, status, '<a href="'+url.replace(/&/g,'&amp;')+'" target="_blank" style="display:inline;padding:0;margin:0;text-decoration:none;border:none;color:#009;font:16px Times New Roman;">Google Translate</a>', '_gt', btn.lastClick);
                }
            } catch (x){};
        };
        xhr.send(post ? encTxt : null);
    } else {
        win.open('http://translate.google.com/translate?u='+escape(win.location.href)+'&hl='+lng+'&langpair='+dir+'&tbb=1');
    };
};


btn.onclick = function(e){if(e.button == 0)ujs_google_translate('auto|ru')};

var contextMenu = document.getElementById("contentAreaContextMenu");
var nextEleMenu = document.getElementById("context-inspect");

var menuId = "context-ext-google-translate";
var menuItem = document.getElementById(menuId);
if (menuItem) {
    contextMenu.removeChild(menuItem.nextElementSibling);
    contextMenu.removeChild(menuItem.nextElementSibling);
    contextMenu.removeChild(menuItem);
};

menuItem = document.createElement("menuitem");
menuItem.setAttribute("id", menuId);
menuItem.setAttribute("label", "Перевести на русский");
menuItem.setAttribute("class", "menuitem-iconic");
menuItem.setAttribute("image", "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAABnRSTlMAAAAAAABupgeRAAABBUlEQVR4Ac2RMU4DMRREB2MqihQpAkUaqnAduuQw4Sx03CGcJYIiDYqQ0lCsZ77535ZFcgAkRuPvV7zd/dLiz3N1PFb8hmRckrfELZrF9ONQ1B6Yz0MyM7S0O6zGkVprh/3+Kw/JzkHSpRpJKZkpr9fYbOx0cjVsCbWG31oHBM9mtt0q73ZcrdLhAMlYQKkUI22aqsNo8HKZAMQhvVaKSHWj2Q2aPU3mJQFY7nuHyvYFduP83WF3AJRfcPNYnr/Lp1G1uK4m9sno1LaUbnX/htf8BNzoneUD5NhjvLCMhURQSQ93QCZwXYjFwg3I0NZKrvoknQPMIHkt/jRAQKMeG2yX89/mB4EJbKbZxIhFAAAAAElFTkSuQmCC");
menuItem.addEventListener("command", function(){ujs_google_translate('auto|ru')}, false);
contextMenu.insertBefore(menuItem, nextEleMenu);

menuItem = document.createElement("menuitem");
menuItem.setAttribute("label", "Перевести на английский");
menuItem.setAttribute("class", "menuitem-iconic");
menuItem.setAttribute("image", "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAABnRSTlMAAAAAAABupgeRAAAB5UlEQVR4AWOgPZg0c9+Oq2+qpx9LaQaiw4mNB27efbs2uXFNQh2Q4Zm9zSNth23MhqjGnXMC86vnHmUS4udxv7OvOd2yPE7PTlfCTk9GVVEoyJA7WI8dyPA0k3U1l+jJMV7CeThpTZeoKDdDUsvBPSff/V+6/P/Bvf///2+bdvU/EKRm/k9IBNIlfZe+LFrzvbsbyJ636pKkyQyQhoUb7tZNvPpw3/0/TfX/ISAm5n94BIiRm/n/xYsLd946ei4vajoiqDuRAejQf//+o4PQ0P9+fmhiQGVnrr1kXJNYG2zEzXDxDsPv3wy/fkFJoOTPn39+/fr/69e/37//AUX+/mXRkO458wWHDba2f8wswCyQ3N+/f//8/fP7z5+TV18w2Mdt6plzPiptx5Wr7/+/ffMzOR6kysjkt74hWMPfp06O+2dulZCeFZKwnkE4m8E8bN3i9aCQ+dxY96GrK6bkGJD9R1v3l6Y20NVW9kt+/v//ZdbcFwkxTVPPMQimM8XEqkb7a/zoqLxkH9v4zVyI5+///wyMmtKMmhJAnbLqQjHxaw5r2orOmZN5uj470Zahat6BKS7JzpmLBHXm8GhM5lCdcP7ai1ZpixZxk9NXXjKIFzOIFjAI54oY1vXuue5qmscw+AAAW0tKxtPoicEAAAAASUVORK5CYII=");
menuItem.addEventListener("command", function(){ujs_google_translate('auto|en')}, false);
contextMenu.insertBefore(menuItem, nextEleMenu);

contextMenu.insertBefore(document.createElement("menuseparator"), nextEleMenu);

addEventListener('keydown', function (e){
 if(e.shiftKey && !e.ctrlKey && e.altKey && e.keyCode == 84)ujs_google_translate('auto|ru');
}, false);


Обновлённая версия, т.к. при работе через POST, translate.google.com теперь требует хэш от строки да и результат выдаётся в подобии json.
скрытый текст

Выделить код

Код:

/*Initialization Code*/

var btn = this;

btn.lastClick = {
    X: 0,
    Y: 0
};
addEventListener("mouseup", function(e) {
    if (e && e.button == 0 && e.view.top == content) {
        var lc = btn.lastClick;
        lc.X = e.clientX;
        lc.Y = e.clientY;
    }
}, false);

var createWindow = function(text, status, title, id, pos, size){
    var win = document.commandDispatcher.focusedWindow.top == content ? document.commandDispatcher.focusedWindow : content;
    var doc = win.document, wId = 'ujs_window'+(id || ''), w = doc.getElementById(wId);
    var keyDown = function(e){if(!e.shiftKey && !e.ctrlKey && !e.altKey && e.keyCode == 27)doc.getElementById(wId).closeWin()};
    if(w)w.closeWin();
    w = doc.createElement('div');
    w.setAttribute('style', 'position:fixed;display:block;visibility:hidden;left:0;top:0;width:auto;height:auto;border:1px solid gray;padding:3px;margin:0;z-index:99999;overflow:hidden;cursor:move;'+(typeof w.style.borderRadius === 'string' ? 'background-color:#f3f5f7;padding-top:4px;border-radius:4px;box-shadow:0 0 12px rgba(0,0,0,.4);' : 'background:-o-skin("Window Skin");'));
    w.id = wId;
    w.closeWin = function(){
        doc.removeEventListener('keydown', keyDown, false);
        this.parentNode.removeChild(this);
    };
    w.addEle = function(str, style){
        var ele = doc.createElement('div');
        ele.setAttribute('style', style);
        if(str){
            ele.innerHTML = str;
            for(var el, all = ele.getElementsByTagName('*'), i = all.length; i--;){
                el = all[i];
                if(/^(script|frame|iframe|applet|embed|object)$/i.test(el.nodeName)){
                    el.parentNode.removeChild(el);
                }else{
                    for(var att = el.attributes, j = att.length; j--;){
                        if(/^on[a-z]+$/i.test(att[j].name))att[j].value = '';
                    }
                }
            }
        };
        return this.appendChild(ele);
    };
    var img = doc.createElement('div');
    img.setAttribute('style', 'display:block;float:right;width:18px;height:18px;padding:0;margin:0;border:none;cursor:pointer;background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAQAAAD8x0bcAAAAZElEQVR42mNgGNyAGQixsVGU/AdCXjCbHczmxKaMFywlAlWiw6DAwIZNmQhYGqJEDWoqFiAGVmKKTwk73CRJ/Ep0GIyhbsPpO4hbIG4TwKaMk0EZ7hYBBk1cvmNDEmbDrmSwAADE8h10+qICXwAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAAASUVORK5CYII=");background:-o-skin("Caption Close Button Skin");');
    img.title = (win.navigator.language.indexOf('ru') == 0) ? '\u0417\u0430\u043A\u0440\u044B\u0442\u044C' : 'Close';
    img.addEventListener('click', function(){this.parentNode.closeWin()}, false);
    w.appendChild(img);
    w.addEle(title, 'display:table;color:#000;font:16px Times New Roman;width:auto;height:auto;padding:0;margin:0 2px;cursor:text;');
    var cnt = w.addEle(text, 'display:block;border:1px solid #aaa;margin:2px 0 1px 0;padding:4px;background-color:#fafcfe;color:#000;font:14px Times New Roman;width:240px;height:120px;overflow:auto;cursor:text;');
    w.addEle(status, 'display:table;color:#555;font:10px Times New Roman;width:auto;height:auto;padding:0;margin:0 2px;cursor:text;');
    w.addEventListener('mousedown', function(e){
        if(e.target == w){
            e.preventDefault();
            var grabX = e.clientX, grabY = e.clientY, origX = parseInt(w.style.left), origY = parseInt(w.style.top);
            var mouseMove = function(ev){
                w.style.left = origX+ev.clientX-grabX+'px';
                w.style.top = origY+ev.clientY-grabY+'px';
            };
            doc.addEventListener('mousemove', mouseMove, false);
            doc.addEventListener('mouseup', function(){doc.removeEventListener('mousemove', mouseMove, false)}, false);
        }
    }, false);
    doc.documentElement.appendChild(w);

    if(size){
        cnt.style.height = size.height;
        cnt.style.width = size.width;
    }else{
        for(var i = 3; i < 10; i++){
            if(cnt.scrollHeight > cnt.offsetHeight || cnt.scrollWidth > cnt.offsetWidth){
                cnt.style.height = 50*i+'px';
                cnt.style.width = 100*i+'px';
            }else break;
        }
    };
    var docEle = doc.compatMode == 'CSS1Compat' ? doc.documentElement : doc.body;
    var mX = docEle.clientWidth-w.offsetWidth, mY = docEle.clientHeight-w.offsetHeight;
    if(mX < 0){cnt.style.width = parseInt(cnt.style.width)+mX+'px'; mX = 0};
    if(mY < 0){cnt.style.height = parseInt(cnt.style.height)+mY+'px'; mY =0};
    var hW = parseInt(w.offsetWidth/2);
    w.style.left = (pos && pos.X < mX+hW ? (pos.X > hW ? pos.X-hW : 0) : mX)+'px';
    w.style.top = (pos && pos.Y+10 < mY ? pos.Y+10 : mY)+'px';
    w.style.visibility = 'visible';
    doc.addEventListener('keydown', keyDown, false);
};

var getSel = function (w) {
    var s, d = w.document;
    if (d.selection) {
        var r = d.selection.createRange();
        s = r ? r.text : ''
    } else {
        s = d.getSelection().toString();
        if (!s) {
            var e, t = d.getElementsByTagName('textarea'), u = d.getElementsByTagName('input'), i = t.length;
            while(e = (i > 0) ? t[--i] : u[-i--])try{
                if (e.offsetHeight > 0 && (s = e.value.substring(e.selectionStart, e.selectionEnd))) break
            }catch(x){}
        }
    };
    if (!s) for (var j = 0, f; f = w.frames[j]; j++) {
        try {
            if (s = getSel(f)) break
        } catch(x) {}
    };
    return s
};

var getHash = function (txt) {
    TKK=eval('((function(){var a\x3d817046147;var b\x3d-335196159;return 410049+\x27.\x27+(a+b)})())');
    function sM(a) {
        var b;
        if (null !== yr)
            b = yr;
        else {
            b = wr(String.fromCharCode(84));
            var c = wr(String.fromCharCode(75));
            b = [b(), b()];
            b[1] = c();
            b = (yr = window[b.join(c())] || "") || ""
        }
        var d = wr(String.fromCharCode(116))
            , c = wr(String.fromCharCode(107))
            , d = [d(), d()];
        d[1] = c();
        c = "&" + d.join("") + "=";
        d = b.split(".");
        b = Number(d[0]) || 0;
        for (var e = [], f = 0, g = 0; g < a.length; g++) {
            var l = a.charCodeAt(g);
            128 > l ? e[f++] = l : (2048 > l ? e[f++] = l >> 6 | 192 : (55296 == (l & 64512) && g + 1 < a.length && 56320 == (a.charCodeAt(g + 1) & 64512) ? (l = 65536 + ((l & 1023) << 10) + (a.charCodeAt(++g) & 1023),
                e[f++] = l >> 18 | 240,
                e[f++] = l >> 12 & 63 | 128) : e[f++] = l >> 12 | 224,
                e[f++] = l >> 6 & 63 | 128),
                e[f++] = l & 63 | 128)
        }
        a = b;
        for (f = 0; f < e.length; f++)
            a += e[f],
                a = xr(a, "+-a^+6");
        a = xr(a, "+-3^+b+-f");
        a ^= Number(d[1]) || 0;
        0 > a && (a = (a & 2147483647) + 2147483648);
        a %= 1E6;
        return c + (a.toString() + "." + (a ^ b))
    }

    var yr = null;
    var wr = function(a) {
        return function() {
            return a
        }
    }
        , xr = function(a, b) {
        for (var c = 0; c < b.length - 2; c += 3) {
            var d = b.charAt(c + 2)
                , d = "a" <= d ? d.charCodeAt(0) - 87 : Number(d)
                , d = "+" == b.charAt(c + 1) ? a >>> d : a << d;
            a = "+" == b.charAt(c) ? a + d & 4294967295 : a ^ d
        }
        return a
    };

    return sM(txt);
};

var ujs_google_translate = function (dir){
    var win = content, lng = win.navigator.language.slice(0, 2), txt = getSel(win), l = dir.split('|');
    if (txt) {
        var xhr = new XMLHttpRequest();
        var url = 'https://translate.google.com/translate_a/single?client=t&sl=' + l[0] + '&tl=' + l[1] + '&hl=' + lng + '&eotf=0&dt=at&dt=bd&dt=ex&dt=ld&dt=md&dt=qca&dt=rw&dt=rm&dt=ss&dt=t' + getHash(txt);

        xhr.open('POST', url, true);
        xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded;charset=utf-8');
        xhr.onreadystatechange = function() {
            try{
                if (xhr.readyState == 4 && xhr.status == 200) {
                    var result = '', status = '', tmp = JSON.parse(xhr.responseText.replace(/\[(?=,)/g, '[0').replace(/,(?=,|\])/g, ',0'));
                    for(var i = 0, n; n = tmp[0][i]; i++){
                        if(n[0])result += n[0].toString();
                    };
                    result = '<span style="background-color:inherit;color:inherit;font-size:inherit;font-family:Times,serif;">' + result + '</span>';
                    status = tmp[8][0][0].toUpperCase() + ' -\u203A ' + l[1].toUpperCase();

                    createWindow(result, status, '<a href="'+url.replace(/&/g,'&amp;')+'" target="_blank" style="display:inline;padding:0;margin:0;text-decoration:none;border:none;color:#009;font:16px Times New Roman;">Google Translate</a>', '_gt', btn.lastClick);
                }
            } catch (x){LOG(x)};
        };
        xhr.send('q=' + encodeURIComponent(txt));
    } else {
        win.open('http://translate.google.com/translate?u='+escape(win.location.href)+'&hl='+lng+'&langpair='+dir+'&tbb=1');
    };
};


btn.onclick = function(e){if(e.button == 0)ujs_google_translate('auto|ru')};

var contextMenu = document.getElementById("contentAreaContextMenu");
var nextEleMenu = document.getElementById("context-inspect");

var menuId = "context-ext-google-translate";
var menuItem = document.getElementById(menuId);
if (menuItem) {
    contextMenu.removeChild(menuItem.nextElementSibling);
    contextMenu.removeChild(menuItem.nextElementSibling);
    contextMenu.removeChild(menuItem);
};

menuItem = document.createElement("menuitem");
menuItem.setAttribute("id", menuId);
menuItem.setAttribute("label", "Перевести на русский");
menuItem.setAttribute("class", "menuitem-iconic");
menuItem.setAttribute("image", "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAABnRSTlMAAAAAAABupgeRAAABBUlEQVR4Ac2RMU4DMRREB2MqihQpAkUaqnAduuQw4Sx03CGcJYIiDYqQ0lCsZ77535ZFcgAkRuPvV7zd/dLiz3N1PFb8hmRckrfELZrF9ONQ1B6Yz0MyM7S0O6zGkVprh/3+Kw/JzkHSpRpJKZkpr9fYbOx0cjVsCbWG31oHBM9mtt0q73ZcrdLhAMlYQKkUI22aqsNo8HKZAMQhvVaKSHWj2Q2aPU3mJQFY7nuHyvYFduP83WF3AJRfcPNYnr/Lp1G1uK4m9sno1LaUbnX/htf8BNzoneUD5NhjvLCMhURQSQ93QCZwXYjFwg3I0NZKrvoknQPMIHkt/jRAQKMeG2yX89/mB4EJbKbZxIhFAAAAAElFTkSuQmCC");
menuItem.addEventListener("command", function(){ujs_google_translate('auto|ru')}, false);
contextMenu.insertBefore(menuItem, nextEleMenu);

menuItem = document.createElement("menuitem");
menuItem.setAttribute("label", "Перевести на английский");
menuItem.setAttribute("class", "menuitem-iconic");
menuItem.setAttribute("image", "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAABnRSTlMAAAAAAABupgeRAAAB5UlEQVR4AWOgPZg0c9+Oq2+qpx9LaQaiw4mNB27efbs2uXFNQh2Q4Zm9zSNth23MhqjGnXMC86vnHmUS4udxv7OvOd2yPE7PTlfCTk9GVVEoyJA7WI8dyPA0k3U1l+jJMV7CeThpTZeoKDdDUsvBPSff/V+6/P/Bvf///2+bdvU/EKRm/k9IBNIlfZe+LFrzvbsbyJ636pKkyQyQhoUb7tZNvPpw3/0/TfX/ISAm5n94BIiRm/n/xYsLd946ei4vajoiqDuRAejQf//+o4PQ0P9+fmhiQGVnrr1kXJNYG2zEzXDxDsPv3wy/fkFJoOTPn39+/fr/69e/37//AUX+/mXRkO458wWHDba2f8wswCyQ3N+/f//8/fP7z5+TV18w2Mdt6plzPiptx5Wr7/+/ffMzOR6kysjkt74hWMPfp06O+2dulZCeFZKwnkE4m8E8bN3i9aCQ+dxY96GrK6bkGJD9R1v3l6Y20NVW9kt+/v//ZdbcFwkxTVPPMQimM8XEqkb7a/zoqLxkH9v4zVyI5+///wyMmtKMmhJAnbLqQjHxaw5r2orOmZN5uj470Zahat6BKS7JzpmLBHXm8GhM5lCdcP7ai1ZpixZxk9NXXjKIFzOIFjAI54oY1vXuue5qmscw+AAAW0tKxtPoicEAAAAASUVORK5CYII=");
menuItem.addEventListener("command", function(){ujs_google_translate('auto|en')}, false);
contextMenu.insertBefore(menuItem, nextEleMenu);

contextMenu.insertBefore(document.createElement("menuseparator"), nextEleMenu);

addEventListener('keydown', function (e){
 if(e.shiftKey && !e.ctrlKey && e.altKey && e.keyCode == 84)ujs_google_translate('auto|ru');
}, false);

Показать пароль на странице( Firefox17+ ) от 11.01.2014.
Кнопка дает возможность включить показ паролей в на страницах.

ЛКМ => включить / выключить показ пароля.

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

Выделить код

Код:

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%u043E%u043A%u0430%u0437%u0430%u0442%u044C%20%u043F%u0430%u0440%u043E%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%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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%5Bconst%20attr%20%3D%20%22Showpassword%22%3B%0A%0Afunction%20toggleImage%28%29%20%7B%0A%20%20%20var%20icon%20%3D%20self.ownerDocument.getAnonymousElementByAttribute%28%20self%2C%20%22class%22%2C%20%22toolbarbutton-icon%22%29%3B%0A%20%20%20icon.src%20%3D%20gBrowser.selectedTab.hasAttribute%28attr%29%0A%20%20%20%3F%20%22data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89+bN/rXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz/SMBAPh+PDwrIsAHvgABeNMLCADATZvAMByH/w/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf+bTAICd+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA/g88wAAKCRFRHgg/P9eM4Ors7ONo62Dl8t6r8G/yJiYuP+5c+rcEAAAOF0ftH+LC+zGoA7BoBt/qIl7gRoXgugdfeLZrIPQLUAoOnaV/Nw+H48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl/AV/1s+X48/Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H/LcL//wd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+AXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93/+8//UegJQCAZkmScQAAXkQkLlTKsz/HCAAARKCBKrBBG/TBGCzABhzBBdzBC/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD/phCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+Q8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI+ksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG+Qh8lsKnWJAcaT4U+IoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr+h0uhHdlR5Ol9BX0svpR+iX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q/pH5Z/YkGWcNMw09DpFGgsV/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY/R27iz2qqaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4/OBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up+6Ynr5egJ5Mb6feeb3n+hx9L/1U/W36p/VHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw+6TvZN9un2N/T0HDYfZDqsdWh1+c7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc+Lpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26/uNu5p7ofcn8w0nymeWTNz0MPIQ+BR5dE/C5+VMGvfrH5PQ0+BZ7XnIy9jL5FXrdewt6V3qvdh7xc+9j5yn+M+4zw33jLeWV/MN8C3yLfLT8Nvnl+F30N/I/9k/3r/0QCngCUBZwOJgUGBWwL7+Hp8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo+qi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt/87fOH4p3iC+N7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi/RNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a/zYnKOZarnivN7cyzytuQN5zvn//tEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1+1dT1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTPZtJm6ebeLZ5bDpaql+aXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO/PLi8ZafJzs07P1SkVPRU+lQ27tLdtWHX+G7R7ht7vPY07NXbW7z3/T7JvttVAVVN1WbVZftJ+7P3P66Jqun4lvttXa1ObXHtxwPSA/0HIw6217nU1R3SPVRSj9Yr60cOxx++/p3vdy0NNg1VjZzG4iNwRHnk6fcJ3/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w+0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb++6EHTh0kX/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8/pPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb/1tWeOT3dvfN6b/fF9/XfFt1+cif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR/cGhYPP/pH1jw9DBY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF/6i/suuFxYvfvjV69fO0ZjRoZfyl5O/bXyl/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98PT+R8IH8o/2j5sfVT0Kf7kxmTk/8EA5jz/GMzLdsAAAAEZ0FNQQAAsY58+1GTAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAK9SURBVHjadJM9iFxVGIaf794zuzNxJrNjMk5+SApZ0RQJC0FNGoUQRAULBSvBxmpREFRs1MpSSCdoYWUjErsUsRFRBFGIbhIk7kY0kd24mfuzmdm5M+ee75xjsYtISJ76fT++4nnlwatgIw/vb7RfHpiDhwQhEiP3QBCJRG659ZuFVl80E9aNDTxycs/SJ8v73jxzuHGUQCByzz6CkJDwV/0HH+fnnr4yu/a66afdV17rLZ85236eO77ERUWj7hYgAqkkNNI5CDuHjs0fZ9uPX/jwn/e/MT3pPdSSPVy3q2z7EQ/QYa/p0mq2SCShshX5dsZYxszPz0EUiiSjLXvpSfdA4tS5YX2bodvklt2gaxZYlMcY/liwdvFPOhsLnGyfov5bWdtYpfAZQ3eb3A3xGtR49RQuoylNyrqAXmTlhxXe/ugtzEB4YulJ3nv1A+SGYWXrMseeeZROo0NZ53ivGFWlsBlpTCnrkspXOBuw+yv6L/ap+ltMm1OGNzNWb6yycLrNtNOjqHO8eow6R25zQoiUtiAbD3nq8bO803oXWfScOLjE7HrN199dZLK4TVHn2OmMwuaoeoyqp7AZTmvKuqDSCcmc0B31qL+v+am4xIVvL/Cr+5kjxweUMWdcjSjrguA8Rp2nmBVM0xlbtkDm4LdfrvHGuWXsoQmmZeBwZN+JLvGoks2GJDFlomO8Cxivyp3ZFlVSUdocjYoo1P0pyXOO9qBJIgmh4ShDQZxEEkmxYYb3HuNdYBxHJJIw1hFZNsRfXsOpg3lLlQrRQdT4n0iCoChBg5jgfWMSJgCEJPLZpU+pr8D0wJhEFZ3URH+X03FH0xBCaqJnU3cTInA1/k44Da05iCk467nPNBBh3eD5XOAU8CzsFGnuJjyI536cB76ShS+ByBEiLwEDICL/e/XuQe6wjnAeYfPfAQD6z4IW9epAmAAAAABJRU5ErkJggg%3D%3D%22%0A%20%20%20%3A%20self.image%3B%0A%7D%3B%0AtoggleImage%28%29%3B%0AaddEventListener%28%22TabAttrModified%22%2C%20toggleImage%2C%20true%2C%20gBrowser.tabContainer%20%29%3B%0A%0Athis.onclick%20%3D%20function%28e%29%20%7B%0A%20%20%20%20if%20%28%20e.button%20%29%20return%3B%0A%0A%20%20%20%20var%20tab%20%3D%20gBrowser.selectedTab%3B%0A%20%20%20%20var%20input%20%3D%20gBrowser.contentDocument.getElementsByTagName%28%22input%22%29%3B%0A%20%20%20%20%0A%20%20%20%20Array.slice%28input%29.forEach%28function%28el%29%20%7B%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20if%20%28%20el.hasAttribute%28%22type%22%29%20%26%26%20el.getAttribute%28%22type%22%29.toLowerCase%28%29%20%3D%3D%20%22password%22%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20el.type%20%3D%20%22text%22%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20el.setAttribute%28%22typechanged%22%2C%20true%29%3B%20%20%20%20%20%20%20%20%20%20%20%20%20%20%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%20if%20%28%20tab.hasAttribute%28%20attr%20%29%20%26%26%20el.hasAttribute%28%22typechanged%22%29%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20el.type%20%3D%20%22password%22%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20el.removeAttribute%28%22typechanged%22%29%3B%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%7D%29%0A%20%20%20%0A%20%20%20tab.hasAttribute%28%20attr%20%29%20%3F%20tab.removeAttribute%28%20attr%20%29%20%3A%20tab.setAttribute%28%20attr%2C%20true%20%29%3B%0A%20%20%20toggleImage%28%29%3B%20%20%20%0A%7D%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

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

Выделить код

Код:

const attr = "Showpassword";

function toggleImage() {
   var icon = self.ownerDocument.getAnonymousElementByAttribute( self, "class", "toolbarbutton-icon");
   icon.src = gBrowser.selectedTab.hasAttribute(attr)
   ? "data:image/png;base64,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"
   : self.image;
};
toggleImage();
addEventListener("TabAttrModified", toggleImage, true, gBrowser.tabContainer );

this.onclick = function(e) {
    if ( e.button ) return;

    var tab = gBrowser.selectedTab;
    var input = gBrowser.contentDocument.getElementsByTagName("input");
    
    Array.slice(input).forEach(function(el) {        
         if ( el.hasAttribute("type") && el.getAttribute("type").toLowerCase() == "password" ) {
              el.type = "text";
              el.setAttribute("typechanged", true);              
              }
         if ( tab.hasAttribute( attr ) && el.hasAttribute("typechanged") ) {
              el.type = "password";
              el.removeAttribute("typechanged"); 
              }
   })
   
   tab.hasAttribute( attr ) ? tab.removeAttribute( attr ) : tab.setAttribute( attr, true );
   toggleImage();   
};

About:( Firefox24+ ) от 29.11.2017.
Открывает about:config в новой активной вкладке или меню с разными about:, меню легко изменить или дополнить.
Даёт возможность средним кликом открыть about:config с настройкой из буфера обмена или выделенную на странице и сразу искать.

ЛКМ => открыть about:config,
СКМ => открыть about:config с настройкой( выделенной или из буфера ),
ПКМ => открыть меню с разными about: + стандартное меню кнопки.

Скриншот about: меню
dbdc50657e07f20038f949b2f6bf4b5a.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%3EAbout%3A%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAsSAAALEgHS3X78AAAD2klEQVQ4jUWSXUxTVxzA/+fccz9oYa29QK0OKC4gHbAYoDUV0WxmURdjTIhbmBphMYubyTZefFoWMxdcso+HxfmB0y0q0WmyKVscHzqjEYIW6AbChJDhBUGwFPpB77W959yzBx/2e/89/X6IUnrw1MmTa1qOHTu8Mt+NY4m4RSkFURRBURTYvnUbUlWVq7nqJn8gcPilnJyqpaWllnQ6fbx/YAALzc3NUkV5+dkpTbPNzcx2FxcVSbF4jC1GoxAIBLAoEi5Jsr+6pvq2YRi+rq6ur6c17Ux0IZqtqq4UQQj1NjY1Ve/bs7d9d339WDKZPCdJkjgyMmouLi7heDxuBYPBdzfW1cldnZ1cEkXd4/G0JxLJy6mUfgLLsiyEw+HB/Y2NGyLPIp/LstyUTCZNt9stck6BCAhy8/NficViIMtKusbv/8pmt6+mlLZRSgFzzpkkScR4bkydPnmqdjm5fNThcDTJkmjqJtCE/tyFzFT1hfMXYXh4SPR6vcAoO+h0OuOqqgoEAIAxRgFAYJRqP5xu3dB04ECfJ28FHkGlZ8N67jnP/fSqTS/nZWYWEtfGHz0acqmuWcYYEEI40nUdfD4faJoGm4O1goAxQwBFDR8cauPzXIlc+qX67NpDuo12169MDXS83bAfr1ZdFuIcBEKAACAA4AAAkCp507I5coUF3dSG70xGjuRGdz1zzYFz+rv2eQN1FKQ02T0UBiEYzHBCOAYLCPwPZoqTW7YVCJD7t9lbbTv+ZrfNwrd2k8o//3jntX9GQx7J/q155nsk3LuBECEcZ9kAv3ARAgCOgeEcKe+q1j+zo6f2Izhf2hTu+7F1LH+dH7Ha17/pAbiVtNm9WcsJiyxGBBKLAgYECAAQAOayUnDh/t2FXY6iNZbLiSL3UM5OWNYb+js7TG9lBS32+98YSBj9EUsIEkFkFhYFzDlgzkzLFfzw+OhDoYHnqJmVq+zo6ePBvflZ5rzbnv2XRc2jPdevk+JAQK8IrHeFtOjvyQQvk5Y5w9SIM8/mjz9VivccokgwispWSU+nRptlUe96Mt4nhgRA2cxqScVi3b1XrtgKqqoMX02NK7wYv6gzbhd2vndkW+uNyCfE1EKF6+rKp8cenEjPdn8W6/0JLz4OsZtGGj00DMuZyfzqsKyaxMREWcnG2ucIUKGSyXChxLd+bdeDJ9uLfV7l39Cd8dTgl/vSE3ezkJmSJVmWiCBITwnJCgHQcdO8ZDLmUSYnA6VbtiSvTk19gSpfLYXJmON9xekth7mbP2PEFCA2+4suL/7AAGBxjgwAgwNEgpxvjWE8Pkzptf8ApubSUysIvccAAAAASUVORK5CYII%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................................%0Athis.onclick%20%3De%3D%3E%20%7B%0A%20%20%20if%20%28%20e.button%20%3D%3D%200%20%29%20gBrowser.selectedTab%20%3D%20gBrowser.addTab%28%22about%3Aconfig%22%29%3B%20%20%0A%20%20%20%20%20%0A%20%20%20if%20%28%20e.button%20%3D%3D%201%20%29%20%7B%20%0A%20%20%20%20%20%20%20%20//%20%u0437%u0430%u043F%u043E%u043C%u043D%u0438%u0442%u044C%20%u0442%u0435%u043A%u0441%u0442%20%u0438%u0437%20%u0431%u0443%u0444%u0435%u0440%u0430%20%u043E%u0431%u043C%u0435%u043D%u0430%20%u0438%20%u0441%u043A%u043E%u043F%u0438%u0440%u043E%u0432%u0430%u0442%u044C%20%u0442%u0435%u043A%u0441%u0442%20%u043D%u0430%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u0435%0A%20%20%20%20%20%20%20%20var%20clip%20%3D%20gClipboard.read%28%29%3B%0A%20%20%20%20%20%20%20%20window.content.focus%28%29%3B%0A%20%20%20%20%20%20%20%20goDoCommand%28%22cmd_copy%22%29%3B%20%20%20%20%20%20%20%20%20%20%20%20%0A%0A%20%20%20%20%20%20%20%20gBrowser.selectedTab%20%3D%20gBrowser.addTab%28%27about%3Aconfig%3Ffilter%3D%27%20+%20gClipboard.read%28%29%29%3B%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20clip%20%26%26%20%20gClipboard.write%28clip%29%3B%20//%20%u0432%u0435%u0440%u043D%u0443%u0442%u044C%20%u0442%u0435%u043A%u0441%u0442%20%u0432%20%u0431%u0443%u0444%u0435%u0440%20%u043E%u0431%u043C%u0435%u043D%u0430%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%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%20menu.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%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%20%0A//%20%u0421%u043E%u0437%u0434%u0430%u0442%u044C%20%u043C%u0435%u043D%u044E%20%u0434%u043B%u044F%20%u043A%u043D%u043E%u043F%u043A%u0438%20................................%0Avar%20array%20%3D%20%5B%0A%20%20%20%5B%20%27%u0412%u0441%u0435%20about%3A%27%2C%20%27about%3Aabout%27%20%5D%2C%0A%20%20%20%5B%20%27%u041E%20%u043F%u043B%u0430%u0433%u0438%u043D%u0430%u0445%27%2C%20%27value%3A%22about%3Aplugins%27%20%5D%2C%0A%20%20%20%5B%20%27%u041E%20%u0442%u0435%u043B%u0435%u043C%u0435%u0442%u0440%u0438%u0438%27%2C%20%27about%3Atelemetry%27%20%5D%2C%0A%20%20%20%5B%20%27%u041D%u043E%u0432%u0430%u044F%20%u0432%u043A%u043B%u0430%u0434%u043A%u0430%27%2C%20%27about%3Anewtab%27%20%5D%2C%0A%20%20%20%5B%20%27%u041D%u0430%u0441%u0442%u0440%u043E%u0439%u043A%u0438%20%u043A%u0430%u043A%20%u0442%u0430%u0431%27%2C%20%27about%3Apreferences%27%20%5D%2C%0A%20%20%20%5B%20%27%u0418%u043D%u0444%u043E%u0440%u043C%u0430%u0446%u0438%u044F%20%u043E%20%u043A%u044D%u0448%u0435%27%2C%20%27about%3Acache%27%20%5D%2C%0A%20%20%20%5B%20%27%u041D%u0430%u0447%u0430%u043B%u044C%u043D%u0430%u044F%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u0430%27%2C%20%27about%3Ahome%27%20%5D%2C%20%20%20%0A%20%20%20%5B%20%27%u0412%u043E%u0441%u0441%u0442%u0430%u043D%u043E%u0432%u043B%u0435%u043D%u0438%u0435%20%u0441%u0435%u0441%u0441%u0438%u0438%27%2C%20%27about%3Asessionrestore%27%20%5D%2C%0A%20%20%20%5B%20%27%u0423%u043F%u0440%u0430%u0432%u043B%u0435%u043D%u0438%u0435%20%u0440%u0430%u0437%u0440%u0435%u0448%u0435%u043D%u0438%u044F%u043C%u0438%27%2C%20%27about%3Apermissions%27%20%5D%2C%0A%20%20%20%5B%20%27%u0418%u043D%u0444%u043E%u0440%u043C%u0430%u0446%u0438%u044F%20%u0434%u043B%u044F%20%u0440%u0435%u0448%u0435%u043D%u0438%u044F%20%u043F%u0440%u043E%u0431%u043B%u0435%u043C%27%2C%20%27about%3Asupport%27%20%5D%2C%0A%20%20%20%5B%20%27%u041F%u043E%u043A%u0430%u0437%u0430%u0442%u044C%20%u0438%u0441%u043F%u043B%u044A%u0437%u043E%u0432%u0430%u043D%u0438%u0435%20%u043F%u0430%u043C%u044F%u0442%u0438%20%u043F%u043E%u0434%u0440%u043E%u0431%u043D%u043E%27%2C%20%27about%3Amemory%27%20%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%5D%3B%0Avar%20menu%20%3D%20self.appendChild%28document.createElement%28%22menupopup%22%29%29%3B%0Aarray.forEach%28m%3D%3E%20%7B%0A%20%20%20var%20mItem%20%3D%20menu.appendChild%28document.createElement%28%22menuitem%22%29%29%3B%0A%20%20%20mItem.setAttribute%28%22label%22%2C%20m%5B0%5D%29%3B%20%20%0A%20%20%20mItem.onclick%20%3D%28%29%3D%3E%20gBrowser.selectedTab%20%3D%20gBrowser.addTab%28m%5B1%5D%29%3B%20%0A%7D%29%3B%0Amenu.setAttribute%28%22onclick%22%2C%20%22event.stopPropagation%28%29%22%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%22%u041B%3A%20%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20%27about%3Aconfig%27%5Cn%u0421%3A%20%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20%27about%3Aconfig%27%20%u0441%20%u043D%u0430%u0441%u0442%u0440%u043E%u0439%u043A%u043E%u0439%20%28%20%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u043D%u043E%u0439%20%u0438%u043B%u0438%20%u0438%u0437%20%u0431%u0443%u0444%u0435%u0440%u0430%20%29%5Cn%u041F%3A%20%u041F%u043E%u043A%u0430%u0437%u0430%u0442%u044C%20%u0432%u0441%u0435%20about%3A%22%3B%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%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.onclick =e=> {
   if ( e.button == 0 ) gBrowser.selectedTab = gBrowser.addTab("about:config");  
     
   if ( e.button == 1 ) { 
        // запомнить текст из буфера обмена и скопировать текст на странице
        var clip = gClipboard.read();
        window.content.focus();
        goDoCommand("cmd_copy");            

        gBrowser.selectedTab = gBrowser.addTab('about:config?filter=' + gClipboard.read()); 
                   
        clip &&  gClipboard.write(clip); // вернуть текст в буфер обмена
        }
          
   if ( e.button == 2 && !e.ctrlKey && !e.shiftKey && !e.altKey && !e.metaKey ) { 
        e.preventDefault();  
        menu.showPopup(this, -1, -1, "popup", "bottomleft", "topleft");
        }        
};
this.oncontextmenu =e=> { e.button && !e.ctrlKey && e.preventDefault() };

 
// Создать меню для кнопки ................................
var array = [
   [ 'Все about:', 'about:about' ],
   [ 'О плагинах', 'value:"about:plugins' ],
   [ 'О телеметрии', 'about:telemetry' ],
   [ 'Новая вкладка', 'about:newtab' ],
   [ 'Настройки как таб', 'about:preferences' ],
   [ 'Информация о кэше', 'about:cache' ],
   [ 'Начальная страница', 'about:home' ],   
   [ 'Восстановление сессии', 'about:sessionrestore' ],
   [ 'Управление разрешениями', 'about:permissions' ],
   [ 'Информация для решения проблем', 'about:support' ],
   [ 'Показать исплъзование памяти подробно', 'about:memory' ]
            ];
var menu = self.appendChild(document.createElement("menupopup"));
array.forEach(m=> {
   var mItem = menu.appendChild(document.createElement("menuitem"));
   mItem.setAttribute("label", m[0]);  
   mItem.onclick =()=> gBrowser.selectedTab = gBrowser.addTab(m[1]); 
});
menu.setAttribute("onclick", "event.stopPropagation()");


// Подсказка кнопки ................................
this.tooltipText = "Л: Открыть 'about:config'\nС: Открыть 'about:config' с настройкой ( выделенной или из буфера )\nП: Показать все about:";

VT ( Firefox10+ )
Создаёт вертикальную панель слева на котором можно размещать кнопки как на обычном панели, вертикальная панель автоматически принимает такой же цвет как у других панелей, если поменять тему оформления или обои.  Вертикальная панель свёрнута но автоматически появляется над страницей при наведение курсора. Клик на кнопке или двойной левый клик на панели выключает и включает режим автоматического свёртывания. В начале кода инициализации кнопки есть разные настройки где можно установить расстояние от курсора и длительность нахождения курсора рядом с вертикальной панелью при котором она появляется или сворачивается и другие свойства панели.


ЛКМ => Выключить и включить режим автоматического свёртывания,
Двойной левый клик на панели => Выключить и включить режим автоматического свёртывания.

Скриншот вертикальной панели
945606b025dd7da5834a23f88bbb6fb0.png[/url]

Код кнопки для Firefox10-45

Выделить код

Код:

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%u0432%u0435%u0440%u0442%u0438%u043A%u0430%u043B%u044C%u043D%u0443%u044E%20%u043F%u0430%u043D%u0435%u043B%u044C%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/4AAEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/4AAKP+AAIX/gAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/4AAFf+AABUAAAAAAAAAAAAAAAAAAAAA/4AAJP+AAP//gAD//4AA//+AACQAAAAAAAAAAAAAAAAAAAAA/4AAEv+AAP//gAD//4AAEgAAAAAAAAAA/4AAIP+AAP//gAD//4AA//+AAP//gAD//4AAJgAAAAAAAAAAAAAAAP+AABH/gAD//4AA//+AABEAAAAAAAAAAP+AAP//gAD//4AA//+AADb/gAD//4AA//+AAP//gAAQAAAAAAAAAAD/gAAP/4AA//+AAP//gAAPAAAAAAAAAAD/gAD//4AA//+AACAAAAAA/4AAIP+AAP//gAD//4AAEQAAAAAAAAAA/4AAD/+AAP//gAD//4AADwAAAAAAAAAA/4AA//+AAP//gAAMAAAAAP+AAAz/gAD//4AA//+AAA8AAAAAAAAAAP+AAA//gAD//4AA//+AAA8AAAAAAAAAAP+AAP//gAD//4AADwAAAAD/gAAP/4AA//+AAP//gAAPAAAAAAAAAAD/gAAP/4AA//+AAP//gAAPAAAAAAAAAAD/gAD//4AA//+AAA8AAAAA/4AAD/+AAP//gAD//4AADAAAAAAAAAAA/4AACv+AAP//gAD//4AACgAAAAAAAAAA/4AA//+AAP//gAAPAAAAAP+AAA//gAD//4AA//+AAAv/gAAL/4AADP+AACH/gAD//4AA//+AACH/gAAK/4AAD/+AAP//gAD//4AAEQAAAAD/gAAR/4AA//+AAP//gAAm/4AA//+AAP//gAD//4AA//+AAP//gAD//4AA//+AAP//gAD//4AA//+AABIAAAAA/4AAEv+AAP//gAD//4AAJ/+AAP//gAD//4AA//+AAP//gAD//4AA//+AAP//gAD//4AAEf+AABIAAAAAAAAAAAAAAAD/gAAV/4AAEgAAAAD/gAAQ/4AAEf+AAA//gAAP/4AAD/+AAA//gAAP/4AADwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//+sQe//rEHH56xBg8OsQQHDrEEAw6xBEMOsQRDDrEEQw6xBEMOsQRAArEEQAKxBEACsQTkArEH//6xB//+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%5Bvar%20button%20%3D%20this%3B%0A%0Aconst%20sideBarAutoClose%20%3D%20false%3B%20//%20true%20%3D%3E%20%u0432%u043A%u043B%u044E%u0447%u0438%u0442%u044C%20%u0430%u0432%u0442%u043E%20%u0437%u0430%u043A%u0440%u044B%u0442%u0438%u0435%20%u0431%u043E%u043A%u043E%u0432%u043E%u0439%20%u043F%u0430%u043D%u0435%u043B%u0438%20%0Aconst%20autoCloseDelay%20%3D%20500%3B%20%20%20%20%20//%20ms%0A%0Aconst%20showDelay%20%3D%20250%3B%09%09//%20ms%0Aconst%20distanceShow%20%3D%202%3B%09%09//%20px%0Aconst%20distanceHide%20%3D%2064%3B%09//%20px%0Aconst%20vtWidthCorrection%20%3D%20-1%3B%09//%20px%20%28%20number%20%5B%20+%20or%20-%20%5D%20%29%0A%0Aconst%20toolbarId%20%3D%20%22vertical_toolbar%22%3B%0Aconst%20toolboxId%20%3D%20toolbarId%20+%20%22_toolbox%22%3B%0Aconst%20sep%20%3D%20%22%5Cu00A0%22%3B%0Aconst%20firstAttributes%20%3D%20%22%5C%0Aid%20%25id%25%20class%20chromeclass-toolbar%20fullscreentoolbar%20true%20context%20toolbar-context-menu%20_width%2020%20%5C%0Acustomizable%20true%20flex%201%20iconize%20large%20mode%20icons%20orient%20vertical%20widthcorr%200%22%0A.replace%28/%20/g%2C%20sep%29.replace%28/%25id%25/%2C%20toolbarId%29%3B%0A%0A//%20....................................................................................................%0A%0Aconst%20pn%20%3D%20%22custombutton.verticaltoolbar.attributes%22%3B%0Avar%20prefs%20%3D%20Application.prefs%3B%0Aif%20%28%21prefs.has%28pn%29%29%20prefs.setValue%28pn%2C%20firstAttributes%29%3B%0Avar%20pref%20%3D%20prefs.get%28pn%29%3B%0Afunction%20getAttr_pref%28%29%20%7B%0A%09return%20pref.value%0A%7D%0Afunction%20setAttr_pref%28%29%20%7B%0A%09pref.value%20%3D%20%22%22%3B%0A%09Array.slice%28document.getElementById%28toolbarId%29.attributes%29.forEach%28function%28attr%29%20%7B%0A%09%09pref.value%20+%3D%20%28attr.name%20+%20sep%20+%20attr.value%20+%20sep%29%3B%0A%09%7D%29%3B%0A%7D%0A//%20....................................................................................................%0A%0Avar%20browser%20%3D%20document.getElementById%28%22browser%22%29%3B%0Avar%20toolbar%20%3D%20document.getElementById%28toolbarId%29%3B%0Avar%20toolbox%20%3D%20document.getElementById%28toolboxId%29%3B%0A%0Aif%20%28%21toolbar%29%20%7B%0A%0A%09toolbox%20%3D%20document.createElement%28%22toolbox%22%29%3B%0A%09toolbox.id%20%3D%20toolboxId%3B%0A%09toolbox.palette%20%3D%20gNavToolbox.palette%3B%0A%09%0A%09toolbar%20%3D%20document.createElement%28%22toolbar%22%29%3B%0A%09toolbar.style.minWidth%20%3D%20%2220px%22%3B%0A%09%0A%09browser.insertBefore%28toolbox%2C%20browser.firstChild%29%3B%0A%09toolbox.appendChild%28toolbar%29%3B%0A%0A//%20....................................................................................................%0A//%20Thanks%20-%20http%3A//nanto.asablo.jp/blog/2007/04/22/1459018%0A%0A%09const%20style%20%3D%27%5C%0A%5C%0A%09toolbar%5Borient%3D%22vertical%22%5D%20%7B%5Cn%5C%0A%09%09-moz-appearance%3A%20none%3B%5Cn%5C%0A%09%09border-bottom%3A%200px%20none%3B%5Cn%5C%0A%09%09border-top%3A%200px%20none%3B%5Cn%5C%0A%09%09border-right%3A%201px%20solid%20rgb%28170%2C%20188%2C%20207%29%3B%5Cn%5C%0A%09%09background%3A%20none%20repeat%20scroll%200%25%200%25%20rgb%28207%2C%20219%2C%20236%29%3B%5Cn%5C%0A%09%09-image%3A%20-moz-linear-gradient%28rgba%28255%2C%20255%2C%20255%2C%20.5%29%2C%20rgba%28255%2C%20255%2C%20255%2C%200%29%2027px%29%20%21important%3B%5Cn%5C%0A%7D%5Cn%5C%0A%09toolbar%5Borient%3D%22vertical%22%5D%20%3E%20toolbarseparator%2C%5Cn%5C%0A%09toolbar%5Borient%3D%22vertical%22%5D%20%3E%20%5Bid%5E%3D%22wrapper-separator%22%5D%20%7B%5Cn%5C%0A%09%09-moz-appearance%3A%20none%20%21important%3B%5Cn%5C%0A%09%09margin%3A%200.2em%202px%3B%5Cn%5C%0A%09%09border-bottom%3A%201px%20solid%20ThreeDHighlight%3B%5Cn%5C%0A%09%09border-top%3A%201px%20solid%20ThreeDShadow%3B%5Cn%5C%0A%09%09height%3A%202px%3B%5Cn%5C%0A%09%09border-left%3A%20none%3B%5Cn%5C%0A%09%09border-right%3A%20none%3B%5Cn%5C%0A%7D%5Cn%5C%0A%09toolbar%5Borient%3D%22vertical%22%5D%20%3E%20toolbarspacer%2C%5Cn%5C%0A%09toolbar%5Borient%3D%22vertical%22%5D%20%3E%20%5Bid%5E%3D%22wrapper-spacer%22%5D%20%7B%20height%3A%2015px%3B%20%7D%27%0A%0A%09var%20sspi%20%3D%20document.createProcessingInstruction%28%27xml-stylesheet%27%2C%0A%09%09%20%20%27type%3D%22text/css%22%20href%3D%22data%3Atext/css%2C%27%20+%20encodeURI%28style%29%20+%20%27%22%27%29%3B%0A%09document.insertBefore%28sspi%2C%20document.documentElement%29%3B%0A%0A//%20....................................................................................................%0A%0A%09var%20attr%20%3D%20getAttr_pref%28%29.split%28sep%29%3B%0A%09for%20%28var%20i%3D0%3B%20i%3C%28attr.length-1%29%3B%20i+%3D2%29%20%7B%20toolbar.setAttribute%28attr%5Bi%5D%2C%20attr%5Bi+1%5D%29%3B%20%7D%0A%0A%09var%20currentSet%20%3D%20toolbar.getAttribute%28%22currentset%22%29.split%28%22%2C%22%29%3B%0A%09currentSet.forEach%28function%28id%29%7B%20toolbar.insertItem%28id%29%3B%20%7D%29%3B%0A%7D%0A//%20....................................................................................................%0A%0Avar%20et%20%3D%20gNavToolbox.externalToolbars%3B%0Avar%20already%20%3D%20false%3B%0Afor%20%28var%20i%3D0%3B%20i%3Cet.length%3B%20i++%29%20%7B%20if%20%28et%5Bi%5D%20%3D%3D%20toolbar%29%20%7B%20already%20%3D%20true%3B%20break%20%7D%20%7D%0Aif%20%28%21already%29%20et%5Bet.length%5D%20%3D%20toolbar%3B%0A%0Avar%20delta%20%3D%20toolbar.getAttribute%28%22widthcorr%22%29%20-%20vtWidthCorrection%3B%0Atoolbar.setAttribute%28%22widthcorr%22%2C%20vtWidthCorrection%29%3B%0Aif%20%28delta%29%20toolbar.setAttribute%28%22_width%22%2C%20toolbar.getAttribute%28%22_width%22%29%20-%20delta%29%3B%0A%0Afunction%20lock%28%29%20%7B%0A%0A%09var%20width%20%3D%20toolbar.getAttribute%28%22_width%22%29%3B%0A%09%0A%09toolbox.style.position%20%3D%20toolbar.hasAttribute%28%22autohide%22%29%20%3F%20%22%22%20%3A%20%22fixed%22%3B%0A%09toolbox.style.height%20%3D%0A%09toolbar.style.height%20%3D%20browser.boxObject.height%20+%20%22px%22%3B%0A%0A%09toolbar.style.maxWidth%20%3D%0A%09toolbar.style.minWidth%20%3D%0A%09toolbox.style.maxWidth%20%3D%0A%09toolbox.style.minWidth%20%3D%20width%20*%20%21toolbar.collapsed%20+%20%22px%22%3B%09%0A%7D%0Afunction%20beforeCustomize%28%29%20%7B%0A%0A%09toolbox.removeAttribute%28%22style%22%29%3B%0A%09toolbox.removeAttribute%28%22width%22%29%3B%0A%09toolbar.removeAttribute%28%22style%22%29%3B%0A%09toolbar.style.minWidth%20%3D%20%2220px%22%3B%0A%7D%0Afunction%20customizationChange%28%29%20%7B%0A%09window.setTimeout%28function%28%29%20%7B%0A%09%09toolbar.setAttribute%28%22_width%22%2C%20toolbar.boxObject.width%20+%20vtWidthCorrection%29%3B%0A%09%7D%2C%20640%29%3B%0A%7D%0Afunction%20afterCustomize%28%29%20%7B%0A%0A%09setAttr_pref%28%29%3B%0A%09removeListeners%28%29%3B%0A%09lock%28%29%3B%0A%7D%0Afunction%20collapser%28e%29%20%7B%0A%0A%09var%20distance%20%3D%20e.screenX%20-%20browser.boxObject.screenX%3B%0A%09if%20%28toolbar.waiting%29%20return%3B%0A%0A%09if%20%28%28distance%20%3C%3D%20distanceShow%29%20%26%26%20%28toolbar.collapsed%29%29%20%7B%0A%0A%09%09if%20%28showDelay%20%3C%201%29%20%7B%20toolbar.collapsed%20%3D%20false%3B%20lock%28%29%3B%20return%3B%20%7D%0A%0A%09%09toolbar.waiting%20%3D%20true%3B%0A%09%09window.setTimeout%28function%28%29%20%7B%0A%0A%09%09%09if%20%28distance%20%3E%3D%20distanceShow%29%20%7B%20toolbar.waiting%20%3D%20false%3B%20return%3B%20%7D%0A%09%09%09toolbar.collapsed%20%3D%20false%3B%0A%09%09%09lock%28%29%3B%0A%09%09%09toolbar.waiting%20%3D%20false%3B%0A%0A%09%09%7D%2C%20showDelay%29%3B%0A%09%7D%0A%09if%20%28%28distance%20%3E%3D%20distanceHide%29%20%26%26%20%28%21toolbar.collapsed%29%29%20%7B%0A%09%09toolbar.collapsed%20%3D%20true%3B%0A%09%09lock%28%29%3B%0A%09%7D%0A%7D%0Afunction%20removeListeners%28%29%20%7B%0A%0A%09gNavToolbox.removeEventListener%28%22beforecustomization%22%2C%20beforeCustomize%2C%20false%29%3B%0A%09gNavToolbox.removeEventListener%28%22customizationchange%22%2C%20customizationChange%2C%20false%29%3B%0A%09gNavToolbox.removeEventListener%28%22aftercustomization%22%2C%20afterCustomize%2C%20false%29%3B%0A%7D%0A%0Athis.onclick%20%3D%20function%28e%29%20%7B%20%0A%0A%09if%20%28e.button%29%20return%3B%0A%0A%09var%20autohide%20%3D%20toolbar.hasAttribute%28%22autohide%22%29%3B%0A%09toolbar.collapsed%20%3D%20autohide%3B%0A%0A%09if%20%28%21autohide%29%20%7B%0A%09%09browser.removeEventListener%28%22mousemove%22%2C%20collapser%2C%20false%29%3B%0A%09%09toolbar.setAttribute%28%22autohide%22%2C%20%22true%22%29%3B%0A%09%7D%0A%09else%20%7B%0A%09%09browser.addEventListener%28%22mousemove%22%2C%20collapser%2C%20false%29%3B%0A%09%09toolbar.removeAttribute%28%22autohide%22%29%3B%0A%09%7D%0A%09lock%28%29%3B%0A%7D%0A%0Atoolbar.ondblclick%20%3D%20function%28e%29%20%7B%0A%0A%09if%20%28%20e.button%20%7C%7C%20e.target.nodeName%20%3D%3D%20%22toolbarbutton%22%0A%09%20%20%09%20%20%20%20%20%20%7C%7C%20e.target.nodeName%20%3D%3D%20%22toolbaritem%22%20%29%20return%3B%0A%09button.click%28%29%3B%0A%7D%0A//%20....................................................................................................%0A%0Aif%20%28%21toolbar.hasAttribute%28%22autohide%22%29%29%20%7B%0A%09browser.addEventListener%28%22mousemove%22%2C%20collapser%2C%20false%29%3B%0A%7D%0Aelse%20toolbar.setAttribute%28%22autohide%22%2C%20%22true%22%29%3B%0A%0Alock%28%29%3B%0A%0AgNavToolbox.addEventListener%28%22beforecustomization%22%2C%20beforeCustomize%2C%20false%29%3B%0AgNavToolbox.addEventListener%28%22customizationchange%22%2C%20customizationChange%2C%20false%29%3B%0AgNavToolbox.addEventListener%28%22aftercustomization%22%2C%20afterCustomize%2C%20false%29%3B%0A%0A%0A%0A//%20....................................................................................................%0Avar%20observer%20%3D%20%7B%0A%20%20%20%20get%20obs%28%29%20%7B%0A%20%20%20%20%20%20%20%20return%20Cc%5B%22@mozilla.org/observer-service%3B1%22%5D.getService%28Ci.nsIObserverService%29%3B%0A%20%20%20%20%7D%2C%0A%20%20%20%20init%3A%20function%28%29%20%7B%0A%20%20%20%20%20%20%20%20this.obs.addObserver%28this%2C%20%22lightweight-theme-styling-update%22%2C%20false%29%3B%0A%20%20%20%20%20%20%20%20this.observe%28%29%3B%0A%20%20%20%20%7D%2C%0A%20%20%20%20destroy%3A%20function%28%29%20%7B%0A%20%20%20%20%20%20%20%20try%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20this.obs.removeObserver%28this%2C%20%22lightweight-theme-styling-update%22%29%3B%0A%20%20%20%20%20%20%20%20%7D%20catch%28ex%29%20%7B%7D%0A%20%20%20%20%7D%2C%0A%20%20%20%20observe%3A%20function%28subject%2C%20topc%2C%20data%29%20%7B%0A%20%20%20%20%20%20%20%20setTimeout%28function%28%29%20%7B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20var%20win%20%3D%20document.getElementById%28%22main-window%22%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20var%20bgi%20%3D%20window.getComputedStyle%28win%29.backgroundImage%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20%28bgi%20%3D%3D%20%22none%22%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20bgc%20%3D%20window.getComputedStyle%28win%29.backgroundColor%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20toolbar.style.backgroundColor%20%3D%20bgc%3B%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%20%20%20%20%20var%20brc%20%3D%20bgc%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20bgc.match%28/%5Cd+/g%29.forEach%28function%28color%2C%20i%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28i%20%3E%202%29%20return%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20brc%20%3D%20brc.replace%28color%2C%20Math.round%28color/1.5%29%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20toolbar.style.borderRightColor%20%3D%20brc%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%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%20var%20url%20%3D%20bgi.replace%28%27url%28%22%27%2C%20%22%22%29.replace%28%27%22%29%27%2C%20%22%22%29%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20const%20xhtml%20%3D%20%22http%3A//www.w3.org/1999/xhtml%22%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20var%20img%20%3D%20document.createElementNS%28xhtml%2C%20%22img%22%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20var%20canvas%20%3D%20document.createElementNS%28xhtml%2C%20%22canvas%22%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20img.src%20%3D%20url%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20img.onload%20%3D%20function%28%29%20%7B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20width%20%3D%20canvas.width%20%3D%20img.width%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20height%20%3D%20canvas.height%20%3D%20img.height%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20context%20%3D%20canvas.getContext%28%222d%22%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20context.drawImage%28img%2C%200%2C%200%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20arr%20%3D%20context.getImageData%280%2C%200%2C%20width%2C%20height%29.data%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20r%20%3D%200%2C%20g%20%3D%200%2C%20b%20%3D%200%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20len%20%3D%20arr.length%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20for%20%28var%20i%20%3D%200%3B%20i%20%3C%20len%3B%20i%20+%3D%204%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20r%20+%3D%20arr%5Bi%5D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20g%20+%3D%20arr%5Bi%20+%201%5D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20b%20+%3D%20arr%5Bi%20+%202%5D%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%20%20%20%20%20var%20colors%20%3D%20%5Br%2C%20g%2C%20b%5D%2C%20borderRightColors%20%3D%20%5B%5D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20colors.forEach%28function%28color%2C%20i%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20clr%20%3D%20Math.round%284%20*%20color%20/%20len%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20colors%5Bi%5D%20%3D%20clr%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20borderRightColors.push%28Math.round%28clr%20/1.5%29%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20rgb%20%3D%20%22rgb%28%22%20+%20colors.join%28%22%2C%20%22%29%20+%20%22%29%22%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20rgbBrc%20%3D%20%22rgb%28%22%20+%20borderRightColors.join%28%22%2C%20%22%29%20+%20%22%29%22%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20toolbar.style.backgroundColor%20%3D%20rgb%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20toolbar.style.borderRightColor%20%3D%20rgbBrc%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%2C%20200%29%3B%0A%20%20%20%20%7D%0A%7D%3B%0Aobserver.init%28%29%3B%0A%0A%0A%0Afunction%20n%28id%29%20document.getElementById%28id%29%3B%0Aconst%20page%20%3D%20n%28%22content%22%29%2C%20box%20%3D%20n%28%22sidebar-box%22%29%2C%20sidebar%20%3D%20n%28%22sidebar%22%29%3B%0Avar%20tvtc%2C%20timeout%3B%0A%0Afunction%20listenMO%28node%2C%20listen%29%20%7B%0A%20%20%20%20var%20func%20%3D%20node%20%3D%3D%20box%20%3F%20onBMO%20%3A%20onPMO%3B%0A%20%20%20%20%28listen%20%3F%20addEventListener%20%3A%20removeEventListener%29%0A%20%20%20%20.apply%28this%2C%20%5B%22mouseover%22%2C%20func%2C%20false%2C%20node%5D%29%3B%0A%7D%0Afunction%20onPMO%28%29%20%7B%0A%20%20%20%20listenMO%28page%2C%20false%29%3B%0A%20%20%20%20timeout%20%3D%20setTimeout%28hideSB%2C%20autoCloseDelay%20%29%3B%0A%20%20%20%20listenMO%28box%2C%20true%29%3B%0A%7D%0Afunction%20onBMO%28%29%20%7B%0A%20%20%20%20listenMO%28box%2C%20false%29%3B%0A%20%20%20%20clearTimeout%28timeout%29%3B%0A%20%20%20%20listenMO%28page%2C%20true%29%3B%0A%7D%0Afunction%20hideSB%28%29%20%7B%0A%20%20%20%20listenMO%28box%2C%20false%29%3B%0A%20%20%20%20if%20%28box.hidden%29%20return%3B%0A%20%20%20%20var%20id%20%3D%20box.getAttribute%28%22sidebarcommand%22%29%20%7C%7C%20%22viewBookmarksSidebar%22%3B%0A%20%20%20%20n%28id%29.setAttribute%28%22checked%22%2C%20true%29%3B%0A%20%20%20%20toggleSidebar%28id%29%3B%0A%7D%0Afunction%20onSBL%28%29%20%7B%0A%20%20%20%20var%20time%20%3D%20Date.now%28%29%3B%0A%20%20%20%20listenMO%28page%2C%20false%29%3B%0A%20%20%20%20if%20%28time%20-%20tvtc%20%3C%20800%29%20listenMO%28page%2C%20true%29%3B%0A%7D%0Afunction%20onVTC%28e%29%20%7B%0A%20%20%20%20var%20time%20%3D%20Date.now%28%29%3B%0A%20%20%20%20for%20%28var%20node%20%3D%20e.target%3B%20node%3B%20node%20%3D%20node.parentNode%29%20%7B%0A%20%20%20%20%20%20%20%20if%20%28node%20%21%3D%20toolbar%29%20continue%3B%0A%20%20%20%20%20%20%20%20tvtc%20%3D%20time%3B%0A%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%7D%0A%7D%0Afunction%20ael%28add%29%20%7B%0A%20%20%20%20%5B%20%20%20%20%5B%22DOMContentLoaded%22%2C%20onSBL%2C%20false%2C%20sidebar%5D%2C%0A%20%20%20%20%20%20%20%20%5B%22click%22%2C%20onVTC%2C%20false%2C%20window%5D%2C%0A%20%20%20%20%20%20%20%20%5B%22command%22%2C%20onVTC%2C%20false%2C%20window%5D%0A%20%20%20%20%5D.forEach%28function%28args%29%20%7B%0A%20%20%20%20%20%20%20%20%28add%20%3F%20addEventListener%20%3A%20removeEventListener%29.apply%28this%2C%20args%29%3B%0A%20%20%20%20%7D%29%3B%0A%7D%0Aif%20%28%20sideBarAutoClose%20%29%20ael%28true%29%3B%0A%0A%0A%0Athis.onDestroy%20%3D%20function%28reason%29%20%7B%0A%20%20%20%20%20%20%20%20observer.destroy%28%29%3B%0A%20%20%20%20%20%20%20%20%0A%09browser.removeEventListener%28%22mousemove%22%2C%20collapser%2C%20false%29%3B%0A%09if%20%28%21toolbar.hasAttribute%28%22customizing%22%29%29%20removeListeners%28%29%3B%0A%09if%20%28reason%20%3D%3D%20%22delete%22%29%20pref.reset%28%29%3B%0A%09if%20%28%21getAttr_pref%28%29%29%20return%3B%0A%09setAttr_pref%28%29%3B%0A%09%0A%09ael%28false%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


Код кнопки для Firefox45+

Выделить код

Код:

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%3EVT%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/4AAEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/4AAKP+AAIX/gAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/4AAFf+AABUAAAAAAAAAAAAAAAAAAAAA/4AAJP+AAP//gAD//4AA//+AACQAAAAAAAAAAAAAAAAAAAAA/4AAEv+AAP//gAD//4AAEgAAAAAAAAAA/4AAIP+AAP//gAD//4AA//+AAP//gAD//4AAJgAAAAAAAAAAAAAAAP+AABH/gAD//4AA//+AABEAAAAAAAAAAP+AAP//gAD//4AA//+AADb/gAD//4AA//+AAP//gAAQAAAAAAAAAAD/gAAP/4AA//+AAP//gAAPAAAAAAAAAAD/gAD//4AA//+AACAAAAAA/4AAIP+AAP//gAD//4AAEQAAAAAAAAAA/4AAD/+AAP//gAD//4AADwAAAAAAAAAA/4AA//+AAP//gAAMAAAAAP+AAAz/gAD//4AA//+AAA8AAAAAAAAAAP+AAA//gAD//4AA//+AAA8AAAAAAAAAAP+AAP//gAD//4AADwAAAAD/gAAP/4AA//+AAP//gAAPAAAAAAAAAAD/gAAP/4AA//+AAP//gAAPAAAAAAAAAAD/gAD//4AA//+AAA8AAAAA/4AAD/+AAP//gAD//4AADAAAAAAAAAAA/4AACv+AAP//gAD//4AACgAAAAAAAAAA/4AA//+AAP//gAAPAAAAAP+AAA//gAD//4AA//+AAAv/gAAL/4AADP+AACH/gAD//4AA//+AACH/gAAK/4AAD/+AAP//gAD//4AAEQAAAAD/gAAR/4AA//+AAP//gAAm/4AA//+AAP//gAD//4AA//+AAP//gAD//4AA//+AAP//gAD//4AA//+AABIAAAAA/4AAEv+AAP//gAD//4AAJ/+AAP//gAD//4AA//+AAP//gAD//4AA//+AAP//gAD//4AAEf+AABIAAAAAAAAAAAAAAAD/gAAV/4AAEgAAAAD/gAAQ/4AAEf+AAA//gAAP/4AAD/+AAA//gAAP/4AADwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//+sQe//rEHH56xBg8OsQQHDrEEAw6xBEMOsQRDDrEEQw6xBEMOsQRAArEEQAKxBEACsQTkArEH//6xB//+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%5Bvar%20vto%20%3D%20%7B%0A%20%20%20%20distanceShow%3A%202%2C%0A%20%20%20%20distanceHide%3A%2064%2C%0A%20%20%20%20showDelay%3A%20320%2C%0A%20%20%20%20color%3A%20%22lightblue%22%2C%0A%20%20%20%20fringe%3A%20%22black%22%2C%0A%20%20%20%20padding%3A%203%2C%0A%20%20%20%20name%3A%20%22VT%22%2C%0A%0A%20%20%20%20btn%3A%20this%2C%0A%20%20%20%20tcm%3A%20document.getElementById%28%22toolbar-context-menu%22%29%2C%0A%20%20%20%20ctm%3A%20document.getElementById%28%22customization-toolbar-menu%22%29%2C%0A%20%20%20%20deck%3A%20document.getElementById%28%22content-deck%22%29%2C%0A%20%20%20%20id%3A%20%22cb-vt%22%2C%0A%0A%20%20%20%20get%20cust%28%29%20gBrowser.currentURI.spec%20%3D%3D%20%22about%3Acustomizing%22%2C%0A%20%20%20%20get%20xs%28%29%20%7B%0A%20%20%20%20%20%20%20%20delete%20this.xs%3B%0A%20%20%20%20%20%20%20%20return%20this.xs%20%3D%20Cc%5B%22@mozilla.org/xul/xulstore%3B1%22%5D.getService%28Ci.nsIXULStore%29%3B%0A%20%20%20%20%7D%2C%0A%20%20%20%20init%3A%20function%28%29%20%7B%0A%20%20%20%20%20%20%20%20if%20%28this.cust%20%7C%7C%20this.btn._destructors.length%29%20return%3B%0A%0A%20%20%20%20%20%20%20%20var%20vt%20%3D%20this.initVT%28%29%3B%0A%20%20%20%20%20%20%20%20var%20vto%20%3D%20this%3B%0A%0A%20%20%20%20%20%20%20%20this.btn.onclick%20%3D%20function%28e%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20e.button%20%7C%7C%20vto.toggleVT%28%29%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20window.addEventListener%28%22popupshown%22%2C%20this%2C%20false%29%3B%0A%20%20%20%20%20%20%20%20window.addEventListener%28%22popuphidden%22%2C%20this%2C%20false%29%3B%0A%20%20%20%20%20%20%20%20window.addEventListener%28%22resize%22%2C%20this%2C%20false%29%3B%0A%20%20%20%20%20%20%20%20this.tcm.addEventListener%28%22command%22%2C%20this%2C%20false%29%3B%0A%20%20%20%20%20%20%20%20this.tcm.addEventListener%28%22popupshowing%22%2C%20this%2C%20false%29%3B%0A%0A%20%20%20%20%20%20%20%20vto.toggleVT%28vt.hasOwnProperty%28%22on%22%29%20%3F%20vt.on%0A%20%20%20%20%20%20%20%20%20%20%20%20%3A%20%21this.xs.hasValue%28location%2C%20vto.id%2C%20%22collapsed%22%29%0A%20%20%20%20%20%20%20%20%29%3B%0A%20%20%20%20%20%20%20%20this.resize%28%29%3B%0A%20%20%20%20%20%20%20%20vto.btn._destructors.push%28%7Bcontext%3A%20vto%2C%20destructor%3A%20vto.destroy%7D%29%3B%0A%20%20%20%20%7D%2C%0A%20%20%20%20destroy%3A%20function%28reason%29%20%7B%0A%20%20%20%20%20%20%20%20window.removeEventListener%28%22popupshown%22%2C%20this%2C%20false%29%3B%0A%20%20%20%20%20%20%20%20window.removeEventListener%28%22popuphidden%22%2C%20this%2C%20false%29%3B%0A%20%20%20%20%20%20%20%20window.removeEventListener%28%22resize%22%2C%20this%2C%20false%29%3B%0A%20%20%20%20%20%20%20%20this.tcm.removeEventListener%28%22command%22%2C%20this%2C%20false%29%3B%0A%20%20%20%20%20%20%20%20this.tcm.removeEventListener%28%22popupshowing%22%2C%20this%2C%20false%29%3B%0A%20%20%20%20%20%20%20%20this.setCollapser%28false%29%3B%0A%0A%20%20%20%20%20%20%20%20if%20%28reason%20%3D%3D%20%22destructor%22%20%26%26%20this.cust%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20var%20vto%20%3D%20this%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20vto.resize%28%29%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20gNavToolbox.addEventListener%28%22customizationready%22%2C%20vto%2C%20false%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20CustomizableUI.addListener%28vto%29%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20this.ctm.addEventListener%28%22command%22%2C%20vto%2C%20false%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20this.ctm.addEventListener%28%22popupshowing%22%2C%20vto%2C%20false%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20window.addEventListener%28%22resize%22%2C%20vto%2C%20false%29%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20gNavToolbox.addEventListener%28%22aftercustomization%22%2C%20function%20ac%28%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20gNavToolbox.removeEventListener%28%22aftercustomization%22%2C%20ac%2C%20false%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20gNavToolbox.removeEventListener%28%22customizationready%22%2C%20vto%2C%20false%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20CustomizableUI.removeListener%28vto%29%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20vto.ctm.removeEventListener%28%22command%22%2C%20vto%2C%20false%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20vto.ctm.removeEventListener%28%22popupshowing%22%2C%20vto%2C%20false%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20window.removeEventListener%28%22resize%22%2C%20vto%2C%20false%29%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20document.getElementById%28vto.btn.id%29%20%7C%7C%20vto.destroyVT%28%29%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%20false%29%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20if%20%28reason%20%3D%3D%20%22delete%22%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20CustomizableUI.removeWidgetFromArea%28this.btn.id%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20this.destroyVT%28%29%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%2C%0A%20%20%20%20handleEvent%3A%20function%28e%29%20this%5Be.type%5D%28e%29%2C%0A%0A%20%20%20%20command%3A%20function%28e%29%20%7B%0A%20%20%20%20%20%20%20%20if%20%28e.target.id%20%21%3D%20%22toggle_%22%20+%20this.id%29%20return%3B%0A%20%20%20%20%20%20%20%20e.preventDefault%28%29%3B%0A%20%20%20%20%20%20%20%20this.toggleVT%28%29%3B%0A%20%20%20%20%7D%2C%0A%20%20%20%20popupshowing%3A%20function%28e%29%20%7B%0A%20%20%20%20%20%20%20%20var%20menuitem%20%3D%20e.target.querySelector%28%22%23toggle_%22%20+%20this.id%29%3B%0A%20%20%20%20%20%20%20%20menuitem%20%26%26%20menuitem.setAttribute%28%22checked%22%2C%20this.vt.on%29%3B%0A%20%20%20%20%20%20%20%20if%20%28this.cust%20%7C%7C%20%21this.vt.contains%28e.target.triggerNode%29%29%20return%3B%0A%20%20%20%20%20%20%20%20for%28var%20selector%20of%20%5B%22.customize-context-moveToPanel%22%2C%20%22.customize-context-removeFromToolbar%22%5D%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20menuitem%20%3D%20e.target.querySelector%28selector%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20menuitem%20%26%26%20menuitem.removeAttribute%28%22disabled%22%29%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%2C%0A%20%20%20%20mousemove%3A%20function%20collapser%28e%29%20%7B%0A%20%20%20%20%20%20%20%20var%20distance%20%3D%20collapser.distance%20%3D%20e.screenX%20-%20document.documentElement.boxObject.screenX%3B%0A%20%20%20%20%20%20%20%20if%20%28collapser.waiting%29%20return%3B%0A%20%20%20%20%20%20%20%20if%20%28distance%20%3C%3D%20this.distanceShow%20%26%26%20this.vt.collapsed%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20%28this.showDelay%20%3C%201%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20this.vt.collapsed%20%3D%20false%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%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%20collapser.waiting%20%3D%20true%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20setTimeout%28function%28vto%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28collapser.distance%20%3E%3D%20vto.distanceShow%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20collapser.waiting%20%3D%20false%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%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%20%20%20%20%20vto.vt.collapsed%20%3D%20false%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20collapser.waiting%20%3D%20false%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%20this.showDelay%2C%20this%29%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20if%20%28distance%20%3E%3D%20this.distanceHide%20%26%26%20%21this.vt.collapsed%29%0A%20%20%20%20%20%20%20%20%20%20%20%20this.vt.collapsed%20%3D%20true%3B%0A%20%20%20%20%7D%2C%0A%20%20%20%20setCollapser%3A%20function%28set%29%20%7B%0A%20%20%20%20%20%20%20%20set%0A%20%20%20%20%20%20%20%20%3F%20this.cust%20%7C%7C%20window.addEventListener%28%22mousemove%22%2C%20this%2C%20false%29%0A%20%20%20%20%20%20%20%20%3A%20window.removeEventListener%28%22mousemove%22%2C%20this%2C%20false%29%3B%0A%20%20%20%20%7D%2C%0A%20%20%20%20callCollapser%3A%20function%28e%29%20%7B%0A%20%20%20%20%20%20%20%20this.mousemove%28%7BscreenX%3A%20document.documentElement.boxObject.screenX%20+%20MousePosTracker._x%7D%29%3B%0A%20%20%20%20%7D%2C%0A%20%20%20%20customizationready%3A%20function%28%29%20%7B%0A%20%20%20%20%20%20%20%20window.removeEventListener%28%22customizationready%22%2C%20this%2C%20false%29%3B%0A%20%20%20%20%20%20%20%20this.vt.on%20%26%26%20this.insertBox%28true%29%3B%0A%20%20%20%20%7D%2C%0A%20%20%20%20resize%3A%20function%28e%29%20%7B%0A%20%20%20%20%20%20%20%20this.vt.style.maxHeight%20%3D%20this.deck.boxObject.height%20+%201%20+%20%22px%22%3B%0A%20%20%20%20%7D%2C%0A%20%20%20%20popupshown%3A%20function%28e%29%20this.handlePopup%28e%29%2C%0A%20%20%20%20popuphidden%3A%20function%28e%29%20this.handlePopup%28e%29%2C%0A%0A%20%20%20%20handlePopup%3A%20function%28e%29%20%7B%0A%20%20%20%20%20%20%20%20if%20%28%0A%20%20%20%20%20%20%20%20%20%20%20%20this.vt.collapsed%20%7C%7C%20this.vt.on%0A%20%20%20%20%20%20%20%20%20%20%20%20%7C%7C%20%28e.target.localName%20%21%3D%20%22menupopup%22%20%26%26%20e.target.localName%20%21%3D%20%22panel%22%29%0A%20%20%20%20%20%20%20%20%29%20return%3B%0A%20%20%20%20%20%20%20%20setTimeout%28function%28vto%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20var%20hasPopup%20%3D%20Array.concat%28%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Array.slice%28document.getElementsByTagName%28%22menupopup%22%29%29%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Array.slice%28document.getElementsByTagName%28%22panel%22%29%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%29.some%28function%28popup%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22state%22%20in%20popup%20%26%26%20popup.state%20%3D%3D%20%22open%22%20%26%26%20%28%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20vto.vt.contains%28popup%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7C%7C%20%28%22triggerNode%22%20in%20popup%20%26%26%20vto.vt.contains%28popup.triggerNode%29%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7C%7C%20%28%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%22anchorNode%22%20in%20popup%20%26%26%20popup.anchorNode%20%26%26%20%28%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%20vto.vt.contains%28popup.anchorNode%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%7C%7C%20vto.vt.contains%28document.getBindingParent%28popup.anchorNode%29%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%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20vto.setCollapser%28%21hasPopup%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20hasPopup%20%7C%7C%20vto.callCollapser%28%29%3B%0A%20%20%20%20%20%20%20%20%7D%2C%20200%2C%20this%29%3B%0A%20%20%20%20%7D%2C%0A%20%20%20%20onWidgetAfterDOMChange%3A%20function%28...a%29%20%7B%0A%20%20%20%20%20%20%20%20if%20%28a%5B2%5D%20%3D%3D%20this.vt.box%29%20this.vt.hbox.style.minWidth%20%3D%20this.vt.boxObject.width%20+%20%22px%22%3B%0A%20%20%20%20%7D%2C%0A%20%20%20%20initVT%3A%20function%28%29%20%7B%0A%20%20%20%20%20%20%20%20var%20id%20%3D%20this.id%3B%0A%20%20%20%20%20%20%20%20var%20boxId%20%3D%20id%20+%20%22-customization-target%22%3B%0A%20%20%20%20%20%20%20%20var%20vt%20%3D%20this.vt%20%3D%0A%20%20%20%20%20%20%20%20%20%20%20%20document.getElementById%28id%29%20%7C%7C%0A%20%20%20%20%20%20%20%20%20%20%20%20document.createElement%28%22toolbar%22%29%3B%0A%20%20%20%20%20%20%20%20var%20attrs%20%3D%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20id%3A%20id%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20mode%3A%20%22icons%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20iconsize%3A%20%22small%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20orient%3A%20%22vertical%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20customizable%3A%20%22true%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20persist%3A%20%22collapsed%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20toolbarname%3A%20this.name%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20fullscreentoolbar%3A%20%22true%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20class%3A%20%22chromeclass-toolbar%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20context%3A%20%22toolbar-context-menu%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20style%3A%20%22-moz-appearance%3A%20none%3B%20display%3A%20-moz-box%3B%20height%3A%20100%25%3B%20position%3A%20fixed%3B%20min-width%3A%2020px%22%0A%20%20%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%20%20%20%20for%28var%20attr%20in%20attrs%29%20vt.setAttribute%28attr%2C%20attrs%5Battr%5D%29%3B%0A%20%20%20%20%20%20%20%20if%20%28%21vt.parentNode%29%20%7B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20var%20box%20%3D%20vt.box%20%3D%20document.createElement%28%22vbox%22%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20vt.appendChild%28box%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20box.id%20%3D%20boxId%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20box.style.cssText%20%3D%20%22height%3A%20100%25%3B%20width%3A%20100%25%3B%22%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20vt.customizationTarget%20%3D%20box%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20gNavToolbox.appendChild%28vt%29%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20%28CustomizableUI.areas.indexOf%28id%29%20%3D%3D%20-1%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20CustomizableUI.registerArea%28id%2C%20%7Blegacy%3A%20true%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%20box.removeAttribute%28%22class%22%29%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20box.__defineGetter__%28%22localName%22%2C%20function%28%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Components.stack.caller.toString%28%29.indexOf%28%22custombutton.buttonConstructor%22%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3D%3D%20-1%20%3F%20%22vbox%22%20%3A%20%22toolbar%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20vt.hbox%20%3D%20document.createElement%28%22hbox%22%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20vt.hbox.id%20%3D%20id%20+%20%22-hbox%22%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20vt.box.style.padding%20%3D%20%220%20%22%20+%20this.padding%20+%20%22px%22%3B%0A%20%20%20%20%20%20%20%20vt.style.backgroundColor%20%3D%20this.color%3B%0A%20%20%20%20%20%20%20%20vt.style.borderRight%20%3D%20%221px%20solid%20%22%20+%20this.fringe%3B%0A%20%20%20%20%20%20%20%20return%20vt%3B%0A%20%20%20%20%7D%2C%0A%20%20%20%20destroyVT%3A%20function%28reason%29%20%7B%0A%20%20%20%20%20%20%20%20var%20vt%20%3D%20this.vt%3B%0A%20%20%20%20%20%20%20%20CustomizableUI.unregisterArea%28vt.id%2C%20%7B%7D%29%3B%0A%20%20%20%20%20%20%20%20vt.hbox.parentNode%20%26%26%20vt.hbox.parentNode.removeChild%28vt.hbox%29%3B%0A%20%20%20%20%20%20%20%20vt.parentNode%20%26%26%20vt.parentNode.removeChild%28vt%29%3B%0A%0A%20%20%20%20%20%20%20%20this.xs.removeValue%28location%2C%20vto.id%2C%20%22collapsed%22%29%3B%0A%20%20%20%20%20%20%20%20this.xs.removeValue%28location%2C%20vto.id%2C%20%22currentset%22%29%3B%0A%20%20%20%20%7D%2C%0A%20%20%20%20insertBox%3A%20function%28ins%29%20%7B%0A%20%20%20%20%20%20%20%20var%20vt%20%3D%20this.vt%3B%0A%20%20%20%20%20%20%20%20var%20box%20%3D%20vt.hbox%3B%0A%20%20%20%20%20%20%20%20if%20%28%21ins%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20box.parentNode%20%26%26%20box.parentNode.removeChild%28box%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%7D%0A%20%20%20%20%20%20%20%20var%20id%20%3D%20this.cust%20%3F%20%22customization-palette-container%22%20%3A%20%22sidebar-box%22%3B%0A%20%20%20%20%20%20%20%20var%20point%20%3D%20document.getElementById%28id%29%3B%0A%20%20%20%20%20%20%20%20point.parentNode.insertBefore%28box%2C%20point%29%3B%0A%20%20%20%20%20%20%20%20var%20mw%20%3D%20function%28%29%20box.style.minWidth%20%3D%20vt.boxObject.width%20+%20%22px%22%3B%0A%20%20%20%20%20%20%20%20mw%28%29%3B%20setTimeout%28mw%2C%20100%29%3B%0A%20%20%20%20%7D%2C%0A%20%20%20%20toggleVT%3A%20function%28on%29%20%7B%0A%20%20%20%20%20%20%20%20var%20vt%20%3D%20this.vt%3B%0A%20%20%20%20%20%20%20%20if%20%28on%20%3D%3D%20undefined%29%20on%20%3D%20%21vt.on%3B%0A%20%20%20%20%20%20%20%20vt.on%20%3D%20on%3B%0A%20%20%20%20%20%20%20%20this.setCollapser%28%21on%29%3B%0A%20%20%20%20%20%20%20%20vt.collapsed%20%3D%20%21on%3B%0A%20%20%20%20%20%20%20%20this.insertBox%28on%29%3B%0A%20%20%20%20%7D%0A%7D%3B%0Avto.init%28%29%3B%0A%0A%0Afunction%20addBackground%28e%29%20%7B%0A%20%20%20setTimeout%28function%28%29%20%7B%0A%20%20%20%20%20%20var%20toolbar%20%3D%20document.getElementById%28%27cb-vt%27%29%3B%0A%20%20%20%20%20%20var%20win%20%3D%20document.getElementById%28%22main-window%22%29%3B%0A%20%20%20%20%20%20%0A%20%20%20%20%20%20var%20image%20%3D%20win.style.backgroundImage%3B%0A%20%20%20%20%20%20if%20%28%20image%20%3D%3D%20%27%27%20%29%20%7B%20%0A%20%20%20%20%20%20%20%20%20%20%20toolbar.style.background%20%3D%20%27%27%3B%0A%20%20%20%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20%20%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%20%20toolbar.style.background%20%3D%20image%3B%0A%20%20%20%20%20%20toolbar.style.backgroundSize%20%3D%20%27auto%20100%25%27%3B%0A%20%20%20%7D%2C%20500%29%3B%0A%7D%3B%0AaddBackground%28%29%3B%20%0AServices.obs.addObserver%28addBackground%2C%20%22lightweight-theme-styling-update%22%2C%20false%29%3B%0AaddDestructor%28%28%29%3D%3E%20Services.obs.removeObserver%28addBackground%2C%20%22lightweight-theme-styling-update%22%29%20%29%3B%20%0A%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B%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

Menuitem hider( Firefox24+ ) от 07.06.2016.
Даёт возможность быстро удалять пункты меню из главного меню и контекстного меню нажатием средней кнопки мыши на ненужном пункте, удалённые пункты останутся скрыты пока кнопка включена. Список удалённых пунктов меню сохраняется в кнопке вкладе Инициализация сверху и его можно вручную редактировать - удалить вообще или только отдельные пункты.
Некоторые пункты меню добавленные расширениями или Custom Buttons кодом или чем то подобным кнопка не сможет удалить.

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

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

Выделить код

Код:

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%3EMenuitem%20hider%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8fHz/fHx8/3t7e/97e3v/fHx8/3x8fP98fHz/fHx8/3x8fP98fHz/fHx8/3x8fP98fHz/fHx8/3x8fP98fHz/fHx8/6Gkyf9HWOP/OEas//f3+v////////////////////////////////////////////Ly8///////fHx8/3x8fP9ueNT/Rlzs/x810P+/xe///////////////////////////////////////9fX3f+Mjbb//////3x8fP98fHz/V2HM/0FZ5P8xRt3/P02w/3d6jv6FhYX+hYWF/oWFhf6FhYX+hYWF/oWFhf5HSZH/T1B6/oWFhf58fHz/fHx8/5me8v80TN3/HDfd/ztIu//IzfL///////////////////////////+6u87/NULL/+Dg5P//////fHx8/3x8fP/o6PX/VGPS/xYy2P8aMMv/ra3A///////////////////////o6Or/NUjT/3uCvP///////////3x8fP98fHz/hYWF/nd4k/4xRtb/Ei7a/yQwpv9ycXT+hYWF/oWFhf6AgYP+OUOb/yE1yf95eXz+hYWF/oWFhf58fHz/fHx8////////////e36v/x820P8QLd7/VVur//T09P//////cXjC/xs27v+qrMj/////////////////fHx8/3x8fP///////////42Njf+7vfX/ITjT/x444P9dZLD/YWq3/xUy8/9lb8P//////////////////////3x8fP98fHz/hYWF/oWFhf6FhYX+hYWF/nl7oP4aLbj/DSbT/w4r4f8sOrP/e3uC/oWFhf6FhYX+hYWF/oWFhf58fHz/fHx8////////////jY2N//T09v+ho9X/FCzS/wki2/8DHNP/OknJ/8fN9v//////////////////////fHx8/3x8fP///////////2xtf/9dZ7//GDPk/wcn6/8vQtH/ZnDX/wke0f8+S7n/ys7n/////////////////3x8fP98fHz/dXV7/mNolP9reeT/VGr5/0BX9f8yRMn/cHGG/oWFhf5rb7L+KkPy/zE8of9mZnT+hYWF/oWFhf58fHz/e3t8/2Vy0P+JmPj/h5b6/3qK9v9/idz/3Nzl/////////////////9na+P+Ik/j/Y27S/5CSrP/y8vP/fHx8/3x8fP+WpPn/coPp/4OP3/+ws9f/9vb6////////////////////////////+fn9/8XH+P+Mk+//ZWmq/3t7e/98fHz/fHx8/3x8fP98fHz/fHx8/3x8fP98fHz/fHx8/3x8fP98fHz/fHx8/3x8fP98fHz/fHx8/3x8fP98fHz/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%20ids%20%3D%20%5B%0A%0A%5D//menuitem%20hider%20mark%0A%0Avar%20button%20%3D%20this%3B%0Avar%20currentImage%20%3D%20%22data%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACFhYXthYWF7YWFhe2FhYXthYWF7YWFhe2FhYXthYWF7YWFhe2FhYXthYWF7YWFhe2FhYXthYWF7YWFhe2FhYXthYWF7f//////////jY2N////////////////////////////////////////////////////////////hYWF7YWFhe3//////////42Njf///////////////////////////////////////////////////////////4WFhe2FhYXthYWF7YWFhe2FhYXthYWF7YWFhe2FhYXthYWF7YWFhe2FhYXthYWF7YWFhe2FhYXthYWF7YWFhe2FhYX+hYWF7f//////////jY2N////////////////////////////////////////////////////////////hYWF7YWFhe3//////////42Njf///////////////////////////////////////////////////////////4WFhe2FhYXthYWF7YWFhe2FhYXthYWF7YWFhe2FhYXthYWF7YWFhe2FhYXthYWF7YWFhe2FhYXthYWF7YWFhe2FhYXthYWF7f//////////jY2N////////////////////////////////////////////////////////////hYWF7YWFhe3//////////42Njf///////////////////////////////////////////////////////////4WFhe2FhYXthYWF7YWFhe2FhYXthYWF7YWFhe2FhYXthYWF7YWFhe2FhYXthYWF7YWFhe2FhYXthYWF7YWFhe2FhYXthYWF7f//////////jY2N////////////////////////////////////////////////////////////hYWF7YWFhe3//////////42Njf///////////////////////////////////////////////////////////4WFhe2FhYX+hYWF7YWFhe2FhYXthYWF7YWFhe2FhYXthYWF7YWFhe2FhYXthYWF7YWFhe2FhYXthYWF7YWFhe2FhYXthYWF7f//////////jY2N////////////////////////////////////////////////////////////hYWF7YWFhe3//////////42Njf///////////////////////////////////////////////////////////4WFhe2FhYXthYWF7YWFhe2FhYXthYWF7YWFhe2FhYXthYWF7YWFhe2FhYXthYWF7YWFhe2FhYXthYWF7YWFhe2FhYXtAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQ%3D%3D%22%3B%0Avar%20imgFalse%20%3D%20%22data%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8fHz/fHx8/3t7e/97e3v/fHx8/3x8fP98fHz/fHx8/3x8fP98fHz/fHx8/3x8fP98fHz/fHx8/3x8fP98fHz/fHx8/6Gkyf9HWOP/OEas//f3+v////////////////////////////////////////////Ly8///////fHx8/3x8fP9ueNT/Rlzs/x810P+/xe///////////////////////////////////////9fX3f+Mjbb//////3x8fP98fHz/V2HM/0FZ5P8xRt3/P02w/3d6jv6FhYX+hYWF/oWFhf6FhYX+hYWF/oWFhf5HSZH/T1B6/oWFhf58fHz/fHx8/5me8v80TN3/HDfd/ztIu//IzfL///////////////////////////+6u87/NULL/+Dg5P//////fHx8/3x8fP/o6PX/VGPS/xYy2P8aMMv/ra3A///////////////////////o6Or/NUjT/3uCvP///////////3x8fP98fHz/hYWF/nd4k/4xRtb/Ei7a/yQwpv9ycXT+hYWF/oWFhf6AgYP+OUOb/yE1yf95eXz+hYWF/oWFhf58fHz/fHx8////////////e36v/x820P8QLd7/VVur//T09P//////cXjC/xs27v+qrMj/////////////////fHx8/3x8fP///////////42Njf+7vfX/ITjT/x444P9dZLD/YWq3/xUy8/9lb8P//////////////////////3x8fP98fHz/hYWF/oWFhf6FhYX+hYWF/nl7oP4aLbj/DSbT/w4r4f8sOrP/e3uC/oWFhf6FhYX+hYWF/oWFhf58fHz/fHx8////////////jY2N//T09v+ho9X/FCzS/wki2/8DHNP/OknJ/8fN9v//////////////////////fHx8/3x8fP///////////2xtf/9dZ7//GDPk/wcn6/8vQtH/ZnDX/wke0f8+S7n/ys7n/////////////////3x8fP98fHz/dXV7/mNolP9reeT/VGr5/0BX9f8yRMn/cHGG/oWFhf5rb7L+KkPy/zE8of9mZnT+hYWF/oWFhf58fHz/e3t8/2Vy0P+JmPj/h5b6/3qK9v9/idz/3Nzl/////////////////9na+P+Ik/j/Y27S/5CSrP/y8vP/fHx8/3x8fP+WpPn/coPp/4OP3/+ws9f/9vb6////////////////////////////+fn9/8XH+P+Mk+//ZWmq/3t7e/98fHz/fHx8/3x8fP98fHz/fHx8/3x8fP98fHz/fHx8/3x8fP98fHz/fHx8/3x8fP98fHz/fHx8/3x8fP98fHz/AACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQ%3D%3D%22%3B%0A%0Avar%20s%20%3D%20%27custombutton.menuitem_hider.active%27%3B%0Acbu.isPref%28s%2C%20true%29%3B%0A%0Avar%20ios%20%3D%20Cc%5B%27@mozilla.org/network/io-service%3B1%27%5D.getService%28Ci.nsIIOService%29%3B%0Avar%20sss%20%3D%20Cc%5B%22@mozilla.org/content/style-sheet-service%3B1%22%5D.getService%28Ci.nsIStyleSheetService%29%3B%0Avar%20us%20%3D%20sss.USER_SHEET%3B%0A%0Afunction%20makeCssURI%28%29%20%7B%0A%20%20%20%20%20%20%20%20cssStr%20%3D%20ids%20+%20%22%20%7B%20display%3A%20none%20%21important%20%7D%22%0A%20%20%20%20%20%20%20%20return%20ios.newURI%28%22data%3Atext/css%2C%22%20+%20encodeURIComponent%28cssStr%29%2C%20null%2C%20null%29%3B%0A%7D%0Avar%20currCssURI%20%3D%20makeCssURI%28%29%3B%0Aif%20%28%20cbu.getPrefs%28s%29%20%29%20regSheet%28%20currCssURI%2C%20true%20%29%3B%0A%0Afunction%20regSheet%28newCssURI%2C%20reg%29%20%7B%0A%0A%09if%20%28sss.sheetRegistered%28currCssURI%2C%20us%29%29%20sss.unregisterSheet%28currCssURI%2C%20us%29%3B%0A%09if%20%28%21reg%29%20return%3B%0A%09if%20%28%21sss.sheetRegistered%28newCssURI%2C%20us%29%29%20sss.loadAndRegisterSheet%28newCssURI%2C%20us%29%3B%0A%09currCssURI%20%3D%20newCssURI%3B%0A%7D%0Afunction%20onClick%28e%29%20%7B%0A%09if%20%28e.button%20%21%3D%201%29%20return%3B%0A%09var%20target%20%3D%20e.target%3B%0A%09var%20nn%20%3D%20target.nodeName%3B%0A%09if%20%28nn%20%21%3D%20%22menuitem%22%20%26%26%20nn%20%21%3D%20%22menu%22%20%26%26%20nn%20%21%3D%20%22menuseparator%22%29%20return%3B%0A%09var%20id%20%3D%20target.id%3B%0A%09if%20%28%21id%29%20return%3B%0A%09var%20label%20%3D%20target.label%20%7C%7C%20target.nodeName%3B%0A%0A%09var%20link%20%3D%20custombuttons.makeButtonLink%28%22edit%22%2C%20button.id%29%3B%0A%09var%20param%20%3D%20custombuttons.cbService.getButtonParameters%28link%29%3B%0A%09param%20%3D%20param.wrappedJSObject%20%7C%7C%20param%3B%0A%09var%20init%20%3D%20param.initCode%3B%0A%09var%20index%20%3D%20init.indexOf%28%22%5Cn%5D//menuitem%20hider%20mark%22%29%3B%0A%09var%20part1%20%3D%20init.substring%280%2C%20index%29%3B%0A%09var%20part2%20%3D%20init.substring%28index%2C%20init.length%29%3B%0A%09param.initCode%20%3D%20part1%20+%20%27%22%23%27%20+%20id%20+%20%27%22%2C%20/*%20%27%20+%20label%20+%20%27%5C*%5C/%27%20+%20%27%5Cn%27%20+%20part2%3B%0A%09custombuttons.cbService.installButton%28param%29%3B%09%0A%7D%0AaddEventListener%28%22click%22%2C%20onClick%2C%20false%29%3B%0A%0Athis.onDestroy%20%3D%20function%28reason%29%20%7B%0A%09removeEventListener%28%22click%22%2C%20onClick%2C%20false%29%3B%0A%09regSheet%28currCssURI%2C%20false%29%3B%0A%09if%20%28reason%20%3D%3D%20%22delete%22%29%20cbu.clearPrefs%28s%29%3B%0A%7D%0Abutton.onclick%20%3D%20function%28e%29%20%7B%0A%09if%20%28e.button%29%20return%3B%0A%09cbu.setPrefs%28s%2C%20%21cbu.getPrefs%28s%29%29%3B%0A%20%20%20%20%20%20%20%20button.image%20%3D%20cbu.getPrefs%28s%29%20%3F%20currentImage%20%3A%20imgFalse%3B%0A%09cbu.getPrefs%28s%29%20%3F%20button.init%28%29%20%3A%20button.onDestroy%28%29%3B%0A%09%0A%7D%0Abutton.image%20%3D%20cbu.getPrefs%28s%29%20%3F%20currentImage%20%3A%20imgFalse%3B%0Aif%20%28%20%21cbu.getPrefs%28s%29%20%29%20button.onDestroy%28%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

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

Выделить код

Код:

var ids = [

]//menuitem hider mark

var button = this;
var currentImage = "data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACFhYXthYWF7YWFhe2FhYXthYWF7YWFhe2FhYXthYWF7YWFhe2FhYXthYWF7YWFhe2FhYXthYWF7YWFhe2FhYXthYWF7f//////////jY2N////////////////////////////////////////////////////////////hYWF7YWFhe3//////////42Njf///////////////////////////////////////////////////////////4WFhe2FhYXthYWF7YWFhe2FhYXthYWF7YWFhe2FhYXthYWF7YWFhe2FhYXthYWF7YWFhe2FhYXthYWF7YWFhe2FhYX+hYWF7f//////////jY2N////////////////////////////////////////////////////////////hYWF7YWFhe3//////////42Njf///////////////////////////////////////////////////////////4WFhe2FhYXthYWF7YWFhe2FhYXthYWF7YWFhe2FhYXthYWF7YWFhe2FhYXthYWF7YWFhe2FhYXthYWF7YWFhe2FhYXthYWF7f//////////jY2N////////////////////////////////////////////////////////////hYWF7YWFhe3//////////42Njf///////////////////////////////////////////////////////////4WFhe2FhYXthYWF7YWFhe2FhYXthYWF7YWFhe2FhYXthYWF7YWFhe2FhYXthYWF7YWFhe2FhYXthYWF7YWFhe2FhYXthYWF7f//////////jY2N////////////////////////////////////////////////////////////hYWF7YWFhe3//////////42Njf///////////////////////////////////////////////////////////4WFhe2FhYX+hYWF7YWFhe2FhYXthYWF7YWFhe2FhYXthYWF7YWFhe2FhYXthYWF7YWFhe2FhYXthYWF7YWFhe2FhYXthYWF7f//////////jY2N////////////////////////////////////////////////////////////hYWF7YWFhe3//////////42Njf///////////////////////////////////////////////////////////4WFhe2FhYXthYWF7YWFhe2FhYXthYWF7YWFhe2FhYXthYWF7YWFhe2FhYXthYWF7YWFhe2FhYXthYWF7YWFhe2FhYXtAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQ==";
var imgFalse = "data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8fHz/fHx8/3t7e/97e3v/fHx8/3x8fP98fHz/fHx8/3x8fP98fHz/fHx8/3x8fP98fHz/fHx8/3x8fP98fHz/fHx8/6Gkyf9HWOP/OEas//f3+v////////////////////////////////////////////Ly8///////fHx8/3x8fP9ueNT/Rlzs/x810P+/xe///////////////////////////////////////9fX3f+Mjbb//////3x8fP98fHz/V2HM/0FZ5P8xRt3/P02w/3d6jv6FhYX+hYWF/oWFhf6FhYX+hYWF/oWFhf5HSZH/T1B6/oWFhf58fHz/fHx8/5me8v80TN3/HDfd/ztIu//IzfL///////////////////////////+6u87/NULL/+Dg5P//////fHx8/3x8fP/o6PX/VGPS/xYy2P8aMMv/ra3A///////////////////////o6Or/NUjT/3uCvP///////////3x8fP98fHz/hYWF/nd4k/4xRtb/Ei7a/yQwpv9ycXT+hYWF/oWFhf6AgYP+OUOb/yE1yf95eXz+hYWF/oWFhf58fHz/fHx8////////////e36v/x820P8QLd7/VVur//T09P//////cXjC/xs27v+qrMj/////////////////fHx8/3x8fP///////////42Njf+7vfX/ITjT/x444P9dZLD/YWq3/xUy8/9lb8P//////////////////////3x8fP98fHz/hYWF/oWFhf6FhYX+hYWF/nl7oP4aLbj/DSbT/w4r4f8sOrP/e3uC/oWFhf6FhYX+hYWF/oWFhf58fHz/fHx8////////////jY2N//T09v+ho9X/FCzS/wki2/8DHNP/OknJ/8fN9v//////////////////////fHx8/3x8fP///////////2xtf/9dZ7//GDPk/wcn6/8vQtH/ZnDX/wke0f8+S7n/ys7n/////////////////3x8fP98fHz/dXV7/mNolP9reeT/VGr5/0BX9f8yRMn/cHGG/oWFhf5rb7L+KkPy/zE8of9mZnT+hYWF/oWFhf58fHz/e3t8/2Vy0P+JmPj/h5b6/3qK9v9/idz/3Nzl/////////////////9na+P+Ik/j/Y27S/5CSrP/y8vP/fHx8/3x8fP+WpPn/coPp/4OP3/+ws9f/9vb6////////////////////////////+fn9/8XH+P+Mk+//ZWmq/3t7e/98fHz/fHx8/3x8fP98fHz/fHx8/3x8fP98fHz/fHx8/3x8fP98fHz/fHx8/3x8fP98fHz/fHx8/3x8fP98fHz/AACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQ==";

var s = 'custombutton.menuitem_hider.active';
cbu.isPref(s, true);

var ios = Cc['@mozilla.org/network/io-service;1'].getService(Ci.nsIIOService);
var sss = Cc["@mozilla.org/content/style-sheet-service;1"].getService(Ci.nsIStyleSheetService);
var us = sss.USER_SHEET;

function makeCssURI() {
        cssStr = ids + " { display: none !important }"
        return ios.newURI("data:text/css," + encodeURIComponent(cssStr), null, null);
}
var currCssURI = makeCssURI();
if ( cbu.getPrefs(s) ) regSheet( currCssURI, true );

function regSheet(newCssURI, reg) {

    if (sss.sheetRegistered(currCssURI, us)) sss.unregisterSheet(currCssURI, us);
    if (!reg) return;
    if (!sss.sheetRegistered(newCssURI, us)) sss.loadAndRegisterSheet(newCssURI, us);
    currCssURI = newCssURI;
}
function onClick(e) {
    if (e.button != 1) return;
    var target = e.target;
    var nn = target.nodeName;
    if (nn != "menuitem" && nn != "menu" && nn != "menuseparator") return;
    var id = target.id;
    if (!id) return;
    var label = target.label || target.nodeName;

    var link = custombuttons.makeButtonLink("edit", button.id);
    var param = custombuttons.cbService.getButtonParameters(link);
    param = param.wrappedJSObject || param;
    var init = param.initCode;
    var index = init.indexOf("\n]//menuitem hider mark");
    var part1 = init.substring(0, index);
    var part2 = init.substring(index, init.length);
    param.initCode = part1 + '"#' + id + '", /* ' + label + '\*\/' + '\n' + part2;
    custombuttons.cbService.installButton(param);    
}
addEventListener("click", onClick, false);

this.onDestroy = function(reason) {
    removeEventListener("click", onClick, false);
    regSheet(currCssURI, false);
    if (reason == "delete") cbu.clearPrefs(s);
}
button.onclick = function(e) {
    if (e.button) return;
    cbu.setPrefs(s, !cbu.getPrefs(s));
        button.image = cbu.getPrefs(s) ? currentImage : imgFalse;
    cbu.getPrefs(s) ? button.init() : button.onDestroy();
    
}
button.image = cbu.getPrefs(s) ? currentImage : imgFalse;
if ( !cbu.getPrefs(s) ) button.onDestroy();


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

Вставка символа в текстовое поле( Firefox24+ ) от 15.01.2015.
Открывает меню с разными символами и даёт возможность вставлять их в любые поля ввода. В коде меню легко добавить свои символы или удалить не нужные.

Можно менять величину шрифта меню:
В коде инициализации меняем или вообще удаляем не оставляя пустую строку:

Выделить код

Код:

menuItem.style.fontSize = "16px"; // размер шрифта


Скриншот меню кнопки
834add28bcb9b2c78007277330d54558.jpg

ЛКМ => Показать меню.
Код кнопки и инициализации:
Код кнопки:

Выделить код

Код:

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%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%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/x-icon%3Bbase64%2CAAABAAEADQ0AAAEAIAAAAwAAFgAAACgAAAANAAAAGgAAAAEAIAAAAAAA2AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAlAAAAVwAAACMAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAPAAAAEoAAAAMAAAAQgAAAOQAAACiAAAAAgAAABcAAABKAAAAVwAAADsAAAAHAAAAGwAAANcAAAC7AAAAFwAAAAsAAACHAAAA8QAAAJ0AAACeAAAA/QAAAP8AAADvAAAAhAAAAL8AAADrAAAAXwAAAAQAAAAAAAAABgAAAJMAAAD/AAAA7AAAAKUAAACHAAAAvQAAAPcAAAD/AAAAYQAAAAAAAAAAAAAAAwAAAAsAAACXAAAA9gAAAF8AAAAAAAAAAQAAAAwAAACOAAAA+QAAAGAAAAAAAAAAAwAAAAAAAAA1AAAA5gAAAK8AAAACAAAABgAAAA4AAAAAAAAAJQAAAOAAAAC1AAAADwAAAAAAAAAAAAAASwAAAPMAAACIAAAAAAAAAAkAAAAAAAAABgAAAAMAAAC8AAAAzgAAACQAAAAAAAAAAAAAAEAAAADuAAAAnAAAAAAAAAALAAAACgAAAAMAAAARAAAAzwAAAMEAAAAXAAAAAAAAAAAAAAAUAAAArwAAAOMAAAA8AAAAAAAAAAgAAAAAAAAAYQAAAP8AAAB+AAAAAgAAAAAAAAAEAAAAAQAAAHwAAAD/AAAAzAAAAG4AAABZAAAAggAAAOMAAAD/AAAASgAAAAAAAAAFAAAAAAAAAFIAAADlAAAAygAAAMYAAAD/AAAA+AAAAP8AAAC8AAAA3AAAAMoAAAApAAAAAAAAADoAAADjAAAAyQAAACEAAAAuAAAAeAAAAH8AAABqAAAAIQAAAD8AAADqAAAAvQAAAB4AAAA4AAAAhQAAADoAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAWQAAAIUAAAAiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%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.................%0Athis._handleClick%20%3D%28%29%3D%3E%20menuPopup.showPopup%28this%2C%20-1%2C%20-1%2C%20%22popup%22%2C%20%22bottomleft%22%2C%20%22topleft%22%29%3B%20%0A%0A%0A//%20%u0421%u043E%u0437%u0434%u0430%u0442%u044C%20%u043C%u0435%u043D%u044E%20.................%0Avar%20array%20%3D%20%5B%22%A4%22%2C%20%22%A6%22%2C%20%22%A7%22%2C%20%22@%22%2C%20%22%A9%22%2C%20%22%AB%22%2C%20%22%BB%22%2C%20%22%AC%22%2C%20%22%AE%22%2C%20%22%B0%22%2C%20%22%B1%22%2C%20%22%B5%22%2C%20%22%B6%22%2C%20%22%u2014%22%2C%20%22%u2018%22%2C%20%22%u2019%22%2C%20%22%u201C%22%2C%20%22%u201D%22%2C%20%22%u2022%22%2C%20%22%u2030%22%2C%20%22%u2039%22%2C%20%22%u203A%22%2C%20%22%u2122%22%5D%3B%20%0Avar%20menuPopup%20%3D%20self.appendChild%28document.createElement%28%22menupopup%22%29%29%3B%0Aarray.forEach%28%28symbol%29%3D%3E%20%7B%20%0A%20%20%20var%20mItem%20%3D%20document.createElement%28%22menuitem%22%29%3B%0A%20%20%20mItem.setAttribute%28%22label%22%2C%20symbol%29%3B%0A%20%20%20mItem.style.fontSize%20%3D%20%2216px%22%3B%20//%20%u0440%u0430%u0437%u043C%u0435%u0440%20%u0448%u0440%u0438%u0444%u0442%u0430%0A%20%20%20menuPopup.appendChild%28mItem%29%3B%0A%7D%29%3B%0A%20%20%20%0A%0A//%20%u0421%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.................%0AmenuPopup.addEventListener%28%22click%22%2C%20e%3D%3E%20%7B%0A%20%20%20var%20text%20%3D%20e.target.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%20var%20controller%20%3D%20controller.QueryInterface%28Ci.nsICommandController%29%3B%0A%20%20%20var%20params%20%3D%20Cc%5B%22@mozilla.org/embedcomp/command-params%3B1%22%5D.createInstance%28Ci.nsICommandParams%29%3B%0A%20%20%20params.setStringValue%28%22state_data%22%2C%20text%29%3B%0A%20%20%20controller.doCommandWithParams%28cmd%2C%20params%29%3B%20%0A%7D%2C%20false%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

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

Выделить код

Код:

// Настройка функций кликов мыши .................
this._handleClick =()=> menuPopup.showPopup(this, -1, -1, "popup", "bottomleft", "topleft"); 


// Создать меню .................
var array = ["¤", "¦", "§", "@", "©", "«", "»", "¬", "®", "°", "±", "µ", "¶", "—", "‘", "’", "“", "”", "•", "‰", "‹", "›", "™"]; 
var menuPopup = self.appendChild(document.createElement("menupopup"));
array.forEach((symbol)=> { 
   var mItem = document.createElement("menuitem");
   mItem.setAttribute("label", symbol);
   mItem.style.fontSize = "16px"; // размер шрифта
   menuPopup.appendChild(mItem);
});
   

// Ставить текст в текстовое поле .................
menuPopup.addEventListener("click", e=> {
   var text = e.target.label;
   var cmd = "cmd_insertText";
   var controller = document.commandDispatcher.getControllerForCommand(cmd);
   var controller = controller.QueryInterface(Ci.nsICommandController);
   var params = Cc["@mozilla.org/embedcomp/command-params;1"].createInstance(Ci.nsICommandParams);
   params.setStringValue("state_data", text);
   controller.doCommandWithParams(cmd, params); 
}, false);

Текстовые смайлы 2( Firefox20+ ) от 11.01.2015.
Текстовые смайлы(Азия) 2( Firefox20+ ) от 11.01.2015.
Открывает меню с разными текстовыми смайликами и даёт возможность вставлять их в любые поля ввода. В коде меню легко добавить свои символы или удалить не нужные.

Пример как добавлять или удалять смайлики:

Добавляем в меню новый пункт :-C  ошибка после :-)  улыбка
В коде инициализации добавляем под:

Выделить код

Код:

":-)  улыбка",

новую строку в которой между смайликом и текстом два пробела:

Выделить код

Код:

":-C  ошибка",

Если в смайлике обратный слэш \, пишите его как \\:

Удаляем из меню пункт :-)  улыбка
В коде инициализации удаляем не оставляя пустую строку:

Выделить код

Код:

":-)  улыбка",

Нажать Ok или Сохранить


Можно менять величину шрифта меню или подменю:
В коде инициализации меняем или вообще удаляем не оставляя пустую строку:

Выделить код

Код:

subMenuItem.style.fontSize = "14px"; // размер шрифта подменю
Выделить код

Код:

menu.style.fontSize = "12px"; // размер шрифта меню


Скриншот меню кнопки
c8434c83b2f474f79a11ec0cff23b2de.png

da05fa469ace5524ef002f869a23d41c.png


ЛКМ => Показать меню.
Текстовые смайлы 2 - kод кнопки:
Код кнопки:

Выделить код

Код:

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%u0422%u0435%u043A%u0441%u0442%u043E%u0432%u044B%u0435%20%u0441%u043C%u0430%u0439%u043B%u044B%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAACB0RVh0U29mdHdhcmUATWFjcm9tZWRpYSBGaXJld29ya3MgTVi7kSokAAAAFnRFWHRDcmVhdGlvbiBUaW1lADExLzA1LzA33bqJ2wAAAi9JREFUeJyVk8tLVHEUxz+/e2dGzWlCp2wxQykyiwQlw0JbhFJBEIEugqB90L5NLnr9A+3b1KZcxeiuxYTUoskQLc1ZJGXYSBk+ynnPvfecFlPqnaDHd3P48X2cc35wjKriw8KRHkzotmL3KXZc1UO9ShatTCOVm4HeT3O75cYXkDmaxNjDVJfB2wT1fhI2YsK4JoqqM95wbHnEH5C91kju2SLuWpzqR/4EhyiuNGVzbjzRNpAuWwBspcb+xQwQZB2bfDxsvR+rTZDpOw7yiuLMX827UXD2oyon7FtXWx/grHQiRR5OJrh+vx+Ano4Nn6GeMwgitFtqNXXhbQLwaDKxU8MnfQH1XMCq4IrpslQ19uu3Lw8t1uqFA9A84Auo54xRRCRm3Le9apdnd5TNA7Xu+RdQSPsXr+M2cnswzlx3NlDNxMDjf6Bq2MyHViy8fEZMeJtIzcaZSHf8ZphId3A32bP9rroWtnEzASE4KiZ6NqTfawGvY8wvRUm9SdB9OAvA/FIrH75E6O6sQuQcbD2hWDaIeKNGVanMHEpaWhwOsk6hHODe0/OkphzfBGf6G7hyqZ1me4XC58dUHRlvGZQRo6psTJ9ubNJ3izb5eMj6BqaBr84Qq4XaKgejQdqiQSgtUFx7TqlUyq6ua6LropZ9x1Scakuq6nDIyhOwKpjAXrAjqBqcSp5CIQd44y2DUndMu1B8ua9bhDsi2ueJxlUEY9ysQaYt492InJL53fofa8ocVmP9V6MAAAAASUVORK5CYII%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%u0412%u0435%u0440%u0441%u0438%u044F%3A%2011.01.2015.%20.................%0A%0A%0A//%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.................%0Athis._handleClick%20%3D%28%29%3D%3E%20menuPopup.showPopup%28this%2C%20-1%2C%20-1%2C%20%22popup%22%2C%20%22bottomleft%22%2C%20%22topleft%22%29%3B%20%0A%0A%0A//%20%u0421%u043E%u0437%u0434%u0430%u0442%u044C%20%u043C%u0435%u043D%u044E%20%u0441%20%u043F%u043E%u0434%u043C%u0435%u043D%u044E%20.................%0Avar%20array%20%3D%20%5B%20%0A%20%20%20%20%20%20%20%5B%20%0A%20%20%20%20%20%20%20%22%u042D%u043C%u043E%u0446%u0438%u044F%22%2C%0A%20%20%20%20%20%20%20%20%20%22%3A-%29%20%20%u0443%u043B%u044B%u0431%u043A%u0430%22%2C%0A%20%20%20%20%20%20%20%20%20%22%3A-%28%20%20%u0433%u0440%u0443%u0441%u0442%u044C%22%2C%0A%20%20%20%20%20%20%20%20%20%22%3A-%7C%20%20%u0437%u0430%u0434%u0443%u043C%u0447%u0438%u0432%u043E%u0441%u0442%u044C%22%2C%0A%20%20%20%20%20%20%20%20%20%22%3A-D%20%20%u0441%u043C%u0435%u0445%22%2C%0A%20%20%20%20%20%20%20%20%20%22X-D%20%20%u0441%u043C%u0435%u0445%20%u0441%20%u0437%u0430%u0436%u043C%u0443%u0440%u0435%u043D%u043D%u044B%u043C%u0438%20%u0433%u043B%u0430%u0437%u0430%u043C%u0438%22%2C%0A%20%20%20%20%20%20%20%20%20%22%3A-C%20%20%u0441%u0438%u043B%u044C%u043D%u043E%u0435%20%u043E%u0433%u043E%u0440%u0447%u0435%u043D%u0438%u0435%22%2C%0A%20%20%20%20%20%20%20%20%20%22%3A-/%20%20%u043D%u0435%u0434%u043E%u0432%u043E%u043B%u044C%u0441%u0442%u0432%u043E/%u043E%u0437%u0430%u0434%u0430%u0447%u0435%u043D%u043D%u043E%u0441%u0442%u044C%22%2C%0A%20%20%20%20%20%20%20%20%20%22%3A-%5C%5C%20%20%u043D%u0435%u0434%u043E%u0432%u043E%u043B%u044C%u0441%u0442%u0432%u043E/%u043E%u0437%u0430%u0434%u0430%u0447%u0435%u043D%u043D%u043E%u0441%u0442%u044C%22%2C%20%0A%20%20%20%20%20%20%20%20%20%22%3A-0%20%20%u0443%u0434%u0438%u0432%u043B%u0435%u043D%u0438%u0435%22%2C%20%0A%20%20%20%20%20%20%20%20%20%228-O%20%20%u0441%u0438%u043B%u044C%u043D%u043E%u0435%20%u0443%u0434%u0438%u0432%u043B%u0435%u043D%u0438%u0435%22%2C%20%0A%20%20%20%20%20%20%20%20%20%22%3D-O%20%20%u0441%u0438%u043B%u044C%u043D%u043E%u0435%20%u0443%u0434%u0438%u0432%u043B%u0435%u043D%u0438%u0435%22%2C%20%0A%20%20%20%20%20%20%20%20%20%22%3A-%5B%20%5D%20%20%u0441%u0438%u043B%u044C%u043D%u043E%u0435%20%u0443%u0434%u0438%u0432%u043B%u0435%u043D%u0438%u0435%22%2C%20%0A%20%20%20%20%20%20%20%20%20%22%3A-%5B%20%20%u0441%u043C%u0443%u0449%u0435%u043D%u0438%u0435%22%2C%0A%20%20%20%20%20%20%20%20%20%22%250%20%20%u0441%u0431%u0438%u0442%20%u0441%20%u0442%u043E%u043B%u043A%u0443%22%2C%20%0A%20%20%20%20%20%20%20%20%20%22%3E%3A-D%20%20%u0437%u043B%u043E%u0440%u0430%u0434%u043D%u044B%u0439%20%20%u0441%u043C%u0435%u0445%22%2C%20%0A%20%20%20%20%20%20%20%20%20%22%7D%3A-%3E%20%20%u043A%u043E%u0432%u0430%u0440%u043D%u0430%u044F%20%20%u0443%u043B%u044B%u0431%u043A%u0430%22%2C%20%0A%20%20%20%20%20%20%20%20%20%22%5D%3A-%3E%20%20%u043A%u043E%u0432%u0430%u0440%u043D%u0430%u044F%20%20%u0443%u043B%u044B%u0431%u043A%u0430%22%2C%20%0A%20%20%20%20%20%20%20%20%20%22%3A%27-%29%20%20%u0441%u0438%u043B%u044C%u043D%u044B%u0439%20%u0441%u043C%u0435%u0445%28%u0434%u043E%20%u0441%u043B%u0451%u0437%29%22%2C%20%0A%20%20%20%20%20%20%20%20%20%22%3A%27-D%20%20%u0441%u0438%u043B%u044C%u043D%u044B%u0439%20%u0441%u043C%u0435%u0445%28%u0434%u043E%20%u0441%u043B%u0451%u0437%29%22%2C%20%0A%20%20%20%20%20%20%20%20%20%22D-%3A%20%20%u0441%u0438%u043B%u044C%u043D%u0430%u044F%20%u0437%u043B%u043E%u0441%u0442%u044C%22%2C%20%0A%20%20%20%20%20%20%20%20%20%22/%3A-%28%20%20%AB%u0435%u0434%u0435%u0442%20%u043A%u0440%u044B%u0448%u0430%BB%22%2C%20%0A%20%20%20%20%20%20%20%20%20%22/%3A-%5D%20%20%AB%u0435%u0434%u0435%u0442%20%u043A%u0440%u044B%u0448%u0430%BB%22%0A%20%20%20%20%20%20%20%5D%2C%0A%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%5B%0A%20%20%20%20%20%20%20%22%u0414%u0435%u0439%u0441%u0442%u0432%u0438%u0435%22%2C%0A%20%20%20%20%20%20%20%20%20%22%3B-%29%20%20%u043F%u043E%u0434%u043C%u0438%u0433%u0438%u0432%u0430%u0442%u044C%22%2C%0A%20%20%20%20%20%20%20%20%20%22%3A-*%20%20%u0446%u0435%u043B%u043E%u0432%u0430%u0442%u044C%22%2C%0A%20%20%20%20%20%20%20%20%20%22%3A_%28%20%20%u043F%u043B%u0430%u043A%u0430%u0442%u044C%22%2C%0A%20%20%20%20%20%20%20%20%20%22%3A%7E%28%20%20%u043F%u043B%u0430%u043A%u0430%u0442%u044C%22%2C%0A%20%20%20%20%20%20%20%20%20%22%3A%27%28%20%20%u043F%u043B%u0430%u043A%u0430%u0442%u044C%22%2C%0A%20%20%20%20%20%20%20%20%20%22%3A*%28%20%20%u043F%u043B%u0430%u043A%u0430%u0442%u044C%22%2C%0A%20%20%20%20%20%20%20%20%20%22%3A-%7B%7D%20%20%u0441%u0442%u0440%u0430%u0441%u0442%u043D%u044B%u0439%20%u043F%u043E%u0446%u0435%u043B%u0443%u0439%22%2C%0A%20%20%20%20%20%20%20%20%20%22%3A-@%20%20%u043A%u0440%u0438%u0447%u0430%u0442%u044C%22%2C%0A%20%20%20%20%20%20%20%20%20%22%3A-X%20%20%u0440%u043E%u0442%20%u043D%u0430%20%u0437%u0430%u043C%u043A%u0435%22%2C%0A%20%20%20%20%20%20%20%20%20%22%3A-%21%20%20%u043E%u0442%u0432%u0440%u0430%u0449%u0435%u043D%u0438%u0435%22%2C%0A%20%20%20%20%20%20%20%20%20%22%3A-P%20%20%u043F%u043E%u043A%u0430%u0437%u044B%u0432%u0430%u0442%u044C%20%u044F%u0437%u044B%u043A%22%2C%0A%20%20%20%20%20%20%20%20%20%22%3A-p%20%20%u043F%u043E%u043A%u0430%u0437%u044B%u0432%u0430%u0442%u044C%20%u044F%u0437%u044B%u043A%22%2C%0A%20%20%20%20%20%20%20%20%20%22%3Alol%3A%20%20%u0433%u0440%u043E%u043C%u043A%u0438%u0439%20%u0441%u043C%u0435%u0445%22%2C%0A%20%20%20%20%20%20%20%5D%2C%0A%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%5B%0A%20%20%20%20%20%20%20%22%u041F%u0435%u0440%u0441%u043E%u043D%u0430%u0436%22%2C%0A%20%20%20%20%20%20%20%20%20%228-%29%20%20%u0447%u0435%u043B%u043E%u0432%u0435%u043A%20%u0432%20%u043E%u0447%u043A%u0430%u0445%22%2C%0A%20%20%20%20%20%20%20%20%20%22B-%29%20%20%u0447%u0435%u043B%u043E%u0432%u0435%u043A%20%u0432%20%u043E%u0447%u043A%u0430%u0445%22%2C%0A%20%20%20%20%20%20%20%20%20%22O%3A-%29%20%20%u0430%u043D%u0433%u0435%u043B%22%2C%0A%20%20%20%20%20%20%20%20%20%22%25%29%20%20%u0441%u0443%u043C%u0430%u0441%u0448%u0435%u0434%u0448%u0438%u0439%22%2C%0A%20%20%20%20%20%20%20%20%20%22%3A*%29%20%20%u043F%u044C%u044F%u043D%u044B%u0439%22%2C%0A%20%20%20%20%20%20%20%20%20%22/b/%20%20%u041C%u0435%u0434%u0432%u0435%u0434/%AB%u041F%u0440%u0435%u0432%u0435%u0434%21%22%2C%0A%20%20%20%20%20%20%20%20%20%22%5C%5Co/%20%20%u041C%u0435%u0434%u0432%u0435%u0434/%AB%u041F%u0440%u0435%u0432%u0435%u0434%21%BB%22%2C%0A%20%20%20%20%20%20%20%20%20%22%u0413%u0433Y%20%20%u041C%u0435%u0434%u0432%u0435%u0434/%AB%u041F%u0440%u0435%u0432%u0435%u0434%21%BB%22%2C%0A%20%20%20%20%20%20%20%20%20%22%7B%3A%u20AC%20%20%u041A%u0442%u0443%u043B%u0445%u0443%22%2C%0A%20%20%20%20%20%20%20%20%20%22%3AE%20%20%u041A%u0442%u0443%u043B%u0445%u0443%22%2C%0A%20%20%20%20%20%20%20%20%20%22%28%3B%2C%3B%29%20%20%u041A%u0442%u0443%u043B%u0445%u0443%22%2C%0A%20%20%20%20%20%20%20%20%20%22*%3AO%29%20%20%u043A%u043B%u043E%u0443%u043D%22%2C%0A%20%20%20%20%20%20%20%20%20%22%3A-E%20%20%u043E%u0441%u043A%u0430%u043B%u0435%u043D%u043D%u044B%u0439%20%20%u0432%u0430%u043C%u043F%u0438%u0440%22%2C%0A%20%20%20%20%20%20%20%20%20%22%3A-F%20%20%u0432%u0430%u043C%u043F%u0438%u0440%20%u0431%u0435%u0437%20%u043A%u043B%u044B%u043A%u0430%22%2C%0A%20%20%20%20%20%20%20%20%20%22%3A%3A-%29%20%20%u043C%u0443%u0442%u0430%u043D%u0442/%u043F%u0440%u0438%u0448%u0435%u043B%u0435%u0446%22%2C%0A%20%20%20%20%20%20%20%20%20%22%5B%3A%5D%20%20%u0440%u043E%u0431%u043E%u0442%22%2C%0A%20%20%20%20%20%20%20%20%20%22-%3D%3C%3A-%29%20%20%u0432%u043E%u043B%u0448%u0435%u0431%u043D%u0438%u043A%22%2C%0A%20%20%20%20%20%20%20%20%20%22%2C%u2019-/%20%20%u043A%u0438%u0442%u0430%u0435%u0446%22%2C%0A%20%20%20%20%20%20%20%20%20%22%3C%7C-%29%20%20%u043A%u0438%u0442%u0430%u0435%u0446%22%2C%0A%20%20%20%20%20%20%20%20%20%22%u043E-%29%20%20%u0446%u0438%u043A%u043B%u043E%u043F%22%2C%0A%20%20%20%20%20%20%20%20%20%22O-%29%20%20%u0446%u0438%u043A%u043B%u043E%u043F%22%2C%0A%20%20%20%20%20%20%20%20%20%22%3A-%5D%5B%20%20%u0447%u0435%u0440%u0435%u043F%22%2C%0A%20%20%20%20%20%20%20%20%20%22%3A-%3F%20%20%u043A%u0443%u0440%u044F%u0449%u0438%u0439%20%u0442%u0440%u0443%u0431%u043A%u0443%22%2C%0A%20%20%20%20%20%20%20%20%20%22%u042D%3A-%29%20%20%u043E%u043B%u0435%u043D%u044C%22%2C%0A%20%20%20%20%20%20%20%20%20%22%3C3%20%20%u0441%u0435%u0440%u0434%u0446%u0435%22%2C%0A%20%20%20%20%20%20%20%20%20%22@%7D-%3E--%20%20%u0440%u043E%u0437%u0430%22%2C%0A%20%20%20%20%20%20%20%20%20%22%5C%5Cm/%20%20%u043A%u043E%u0437%u0430%20%28%u0436%u0435%u0441%u0442%29%22%2C%0A%20%20%20%20%20%20%20%20%20%22%5C%5Cm/_%20%20%u043A%u043E%u0437%u0430%20%28%u0436%u0435%u0441%u0442%29%22%2C%0A%20%20%20%20%20%20%20%20%20%22%5B%3A%7C%7C%7C%3A%5D%20%20%u0431%u0430%u044F%u043D%22%2C%0A%20%20%20%20%20%20%20%20%20%22%5B%3A%5D/%5C%5C/%5C%5C/%5C%5C%5B%3A%5D%20%20%u0431%u0430%u044F%u043D%22%2C%0A%20%20%20%20%20%20%20%20%20%22%5B%3A%5D%7C%7C%7C%5B%3A%5D%20%20%u0431%u0430%u044F%u043D%22%2C%0A%20%20%20%20%20%20%20%20%20%22%28_%21_%29%20%20%u0437%u0430%u0434%u043D%u0438%u0446%u0430%22%2C%0A%20%20%20%20%20%20%20%20%20%22%28%29%28%29%20%20%u0437%u0430%u0434%u043D%u0438%u0446%u0430%22%2C%0A%20%20%20%20%20%20%20%5D%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%5D%3B%0Avar%20menuPopup%20%3D%20self.appendChild%28document.createElement%28%22menupopup%22%29%29%3B%0Aarray.forEach%28%28arr%29%3D%3E%20%7B%0A%20%20%20var%20menu%2C%20subMenu%2C%20subMenuItem%3B%20%20%0A%20%20%20menu%20%3D%20document.createElement%28%22menu%22%29%3B%0A%20%20%20subMenu%20%3D%20document.createElement%28%22menupopup%22%29%3B%0A%20%20%20%20%20%0A%20%20%20arr.forEach%28%28smile%2Ci%29%3D%3E%20%7B%0A%20%20%20%20%20%20if%20%28%20i%20%3D%3D%200%20%29%20return%3B%0A%20%20%20%20%20%20subMenuItem%20%3D%20document.createElement%28%22menuitem%22%29%3B%0A%20%20%20%20%20%20subMenuItem.setAttribute%28%22label%22%2C%20smile%29%3B%0A%20%20%20%20%20%20subMenuItem.style.fontSize%20%3D%20%2214px%22%3B%20//%20%u0440%u0430%u0437%u043C%u0435%u0440%20%u0448%u0440%u0438%u0444%u0442%u0430%20%u043F%u043E%u0434%u043C%u0435%u043D%u044E%0A%20%20%20%20%20%20subMenu.appendChild%28subMenuItem%29%3B%0A%20%20%20%7D%29%3B%0A%20%20%20%20%20%20%20%20%20%0A%20%20%20menu.appendChild%28subMenu%29%3B%0A%20%20%20menu.setAttribute%28%22label%22%2C%20arr%5B0%5D%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20menu.style.fontSize%20%3D%20%2212px%22%3B%20//%20%u0440%u0430%u0437%u043C%u0435%u0440%20%u0448%u0440%u0438%u0444%u0442%u0430%20%u043C%u0435%u043D%u044E%0A%20%20%20menuPopup.appendChild%28menu%29%3B%0A%7D%29%3B%0AmenuPopup.addEventListener%28%22click%22%2C%20e%3D%3E%20insertText%28e.target.label.split%28%22%20%20%22%29%5B0%5D%29%20%29%3B%0A%20%0A%0A//%20%u0421%u0442%u0430%u0432%u0438%u0442%u044C%20%u0441%u043C%u0430%u0439%u043B%u0438%u043A%20%u0432%20%u0442%u0435%u043A%u0441%u0442%u043E%u0432%u043E%u0435%20%u043F%u043E%u043B%u0435%20.................%0Afunction%20insertText%28smile%29%20%7B%20%20%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%20var%20controller%20%3D%20controller.QueryInterface%28Ci.nsICommandController%29%3B%0A%20%20%20var%20params%20%3D%20Cc%5B%22@mozilla.org/embedcomp/command-params%3B1%22%5D.createInstance%28Ci.nsICommandParams%29%3B%0A%20%20%20params.setStringValue%28%22state_data%22%2C%20smile%29%3B%0A%20%20%20controller.doCommandWithParams%28cmd%2C%20params%29%3B%20%20%20%20%20%20%20%20%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


ЛКМ => Показать меню.
Текстовые смайлы (Азия)2 - kод кнопки:
Код кнопки:

Выделить код

Код:

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%u0422%u0435%u043A%u0441%u0442%u043E%u0432%u044B%u0435%20%u0441%u043C%u0430%u0439%u043B%u044B%20%28%u0410%u0437%u0438%u044F%29%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAACB0RVh0U29mdHdhcmUATWFjcm9tZWRpYSBGaXJld29ya3MgTVi7kSokAAAAFnRFWHRDcmVhdGlvbiBUaW1lADExLzA1LzA33bqJ2wAAAi9JREFUeJyVk8tLVHEUxz+/e2dGzWlCp2wxQykyiwQlw0JbhFJBEIEugqB90L5NLnr9A+3b1KZcxeiuxYTUoskQLc1ZJGXYSBk+ynnPvfecFlPqnaDHd3P48X2cc35wjKriw8KRHkzotmL3KXZc1UO9ShatTCOVm4HeT3O75cYXkDmaxNjDVJfB2wT1fhI2YsK4JoqqM95wbHnEH5C91kju2SLuWpzqR/4EhyiuNGVzbjzRNpAuWwBspcb+xQwQZB2bfDxsvR+rTZDpOw7yiuLMX827UXD2oyon7FtXWx/grHQiRR5OJrh+vx+Ano4Nn6GeMwgitFtqNXXhbQLwaDKxU8MnfQH1XMCq4IrpslQ19uu3Lw8t1uqFA9A84Auo54xRRCRm3Le9apdnd5TNA7Xu+RdQSPsXr+M2cnswzlx3NlDNxMDjf6Bq2MyHViy8fEZMeJtIzcaZSHf8ZphId3A32bP9rroWtnEzASE4KiZ6NqTfawGvY8wvRUm9SdB9OAvA/FIrH75E6O6sQuQcbD2hWDaIeKNGVanMHEpaWhwOsk6hHODe0/OkphzfBGf6G7hyqZ1me4XC58dUHRlvGZQRo6psTJ9ubNJ3izb5eMj6BqaBr84Qq4XaKgejQdqiQSgtUFx7TqlUyq6ua6LropZ9x1Scakuq6nDIyhOwKpjAXrAjqBqcSp5CIQd44y2DUndMu1B8ua9bhDsi2ueJxlUEY9ysQaYt492InJL53fofa8ocVmP9V6MAAAAASUVORK5CYII%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%u0412%u0435%u0440%u0441%u0438%u044F%3A%2011.01.2015.%20.................%0A%0A%0A//%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.................%0Athis._handleClick%20%3D%28%29%3D%3E%20menuPopup.showPopup%28this%2C%20-1%2C%20-1%2C%20%22popup%22%2C%20%22bottomleft%22%2C%20%22topleft%22%29%3B%20%0A%0A%0A//%20%u0421%u043E%u0437%u0434%u0430%u0442%u044C%20%u043C%u0435%u043D%u044E%20%u0441%20%u043F%u043E%u0434%u043C%u0435%u043D%u044E%20.................%0Avar%20array%20%3D%20%5B%20%0A%20%20%20%20%20%20%20%5B%20%0A%20%20%20%20%20%20%20%22%u042D%u043C%u043E%u0446%u0438%u044F%22%2C%0A%20%20%20%20%20%20%20%20%20%22%28n_n%29%20%20%u0443%u043B%u044B%u0431%u043A%u0430%22%2C%0A%20%20%20%20%20%20%20%20%20%22%28%5E_%5E%29%20%20%u0440%u0430%u0434%u043E%u0441%u0442%u044C%22%2C%0A%20%20%20%20%20%20%20%20%20%22%28%3C_%3E%29%20%20%u0433%u0440%u0443%u0441%u0442%u044C%22%2C%0A%20%20%20%20%20%20%20%20%20%22%28v_v%29%20%20%u0433%u0440%u0443%u0441%u0442%u044C%22%2C%0A%20%20%20%20%20%20%20%20%20%22%28%5E%20%5E%29%20%20%u0443%u043B%u044B%u0431%u043A%u0430%20%u0447%u0435%u0440%u0435%u0437%20%u0441%u0438%u043B%u0443%22%2C%0A%20%20%20%20%20%20%20%20%20%22%28%3E_%3C%29%20%20%u0437%u043B%u043E%u0441%u0442%u044C/%u043A%u0430%u0442%u0435%u0433%u043E%u0440%u0438%u0447%u043D%u043E%u0441%u0442%u044C%22%2C%0A%20%20%20%20%20%20%20%20%20%22%28%3E_%3E%29%20%20%u0441%u043A%u0435%u043F%u0442%u0438%u0447%u043D%u043E%u0441%u0442%u044C%22%2C%0A%20%20%20%20%20%20%20%20%20%22%28%3C_%3C%29%20%20%u0441%u043A%u0435%u043F%u0442%u0438%u0447%u043D%u043E%u0441%u0442%u044C%22%2C%0A%20%20%20%20%20%20%20%20%20%22%28-_-%A8%29%20%20%u0441%u043A%u043E%u043D%u0444%u0443%u0436%u0435%u043D%u043D%u043E%u0441%u0442%u044C%22%2C%0A%20%20%20%20%20%20%20%20%20%22%5E_%5E%A8%20%20%u0441%u043C%u0443%u0449%u0451%u043D%u043D%u043E%u0441%u0442%u044C%22%2C%0A%20%20%20%20%20%20%20%20%20%22*%5E_%5E*%20%20%u0441%u043C%u0443%u0449%u0435%u043D%u043D%u043E%u0441%u0442%u044C%20%u0441%20%u043F%u043E%u043A%u0440%u0430%u0441%u043D%u0435%u043D%u0438%u0435%u043C%22%2C%20%0A%20%20%20%20%20%20%20%20%20%22%28-_-%23%29%20%20%u044F%u0440%u043E%u0441%u0442%u044C%22%2C%0A%20%20%20%20%20%20%20%20%20%22%28-_-%A4%29%20%20%u044F%u0440%u043E%u0441%u0442%u044C%22%2C%0A%20%20%20%20%20%20%20%20%20%22%28-_-+%29%20%20%u044F%u0440%u043E%u0441%u0442%u044C%22%2C%0A%20%20%20%20%20%20%20%20%20%22%28o_o%29%20%20%u0443%u0434%u0438%u0432%u043B%u0435%u043D%u0438%u0435%22%2C%0A%20%20%20%20%20%20%20%20%20%22%280_0%29%20%20%u0441%u0438%u043B%u044C%u043D%u043E%u0435%20%u0443%u0434%u0438%u0432%u043B%u0435%u043D%u0438%u0435%22%2C%0A%20%20%20%20%20%20%20%20%20%22%28O_o%29%20%20%u043E%u0447%u0435%u043D%u044C%20%u0441%u0438%u043B%u044C%u043D%u043E%u0435%20%u0443%u0434%u0438%u0432%u043B%u0435%u043D%u0438%u0435%22%2C%0A%20%20%20%20%20%20%20%20%20%22%28o_O%29%20%20%u043E%u0447%u0435%u043D%u044C%20%u0441%u0438%u043B%u044C%u043D%u043E%u0435%20%u0443%u0434%u0438%u0432%u043B%u0435%u043D%u0438%u0435%22%2C%0A%20%20%20%20%20%20%20%20%20%22%28V_v%29%20%20%u043D%u0435%u043F%u0440%u0438%u044F%u0442%u043D%u043E%u0435%20%u0443%u0434%u0438%u0432%u043B%u0435%u043D%u0438%u0435%22%2C%0A%20%20%20%20%20%20%20%20%20%22%28@_@%29%20%20%u043E%u0431%u0430%u043B%u0434%u0435%u043D%u0438%u0435%22%2C%0A%20%20%20%20%20%20%20%20%20%22%28%25_%25%29%20%20%u0443%u0441%u0442%u0430%u043B%u043E%u0441%u0442%u044C%20%u0433%u043B%u0430%u0437%22%2C%0A%20%20%20%20%20%20%20%20%20%22%28u_u%29%20%20%u0434%u0435%u043F%u0440%u0435%u0441%u0441%u0438%u044F%22%2C%0A%20%20%20%20%20%20%20%20%20%22%28%3Ex%3C%21%29%20%20%u0447%u0435%u0440%u0442%21%22%2C%0A%20%20%20%20%20%20%20%20%20%228%28%3E_%3C%29%20%20%u0432%u0440%u0435%u0432%u043D%u0438%u0432%u044B%u0439%22%2C%0A%20%20%20%20%20%20%20%20%20%22%28%3E%3E%29%20%20%u043A%u043E%u0441%u043E%u0439%20%u0432%u0437%u0433%u043B%u044F%u0434%2C%20%u043D%u0435%u0434%u043E%u0432%u0435%u0440%u0438%u0435%22%2C%0A%20%20%20%20%20%20%20%20%20%22%280_%3C%29%20%20%u043D%u0435%u0440%u0432%u043D%u044B%u0439%20%u0442%u0438%u043A%22%2C%0A%20%20%20%20%20%20%20%20%20%22%28*_*%29%20%20%u0444%u0430%u043D%u0430%u0442%u0435%u043D%u0438%u0435%22%2C%0A%20%20%20%20%20%20%20%20%20%22-__-%20%20%u0444%u043B%u0435%u0433%u043C%u0430%u0442%u0438%u0447%u043D%u043E%u0441%u0442%u044C/%AB%u043C%u0434%u0430-%u0430-%u0430%u2026%BB%22%2C%0A%20%20%20%20%20%20%20%20%20%22%289_9%29%20%20%u043D%u0435%20%u0441%u043F%u0430%u043B%20%u0432%u0441%u044E%20%u043D%u043E%u0447%u044C%22%2C%0A%20%20%20%20%20%20%20%20%20%22%3D__%3D%20%20%u0441%u043E%u043D%u043D%u044B%u0439%20%u0438%u043B%u0438%20%AB%u0434%u043E%u0441%u0442%u0430%u043B%u0438%u2026%BB%22%2C%0A%20%20%20%20%20%20%20%20%20%22%28-.-%29%20%20Zzz.%u0441%u043F%u044F%u0449%u0438%u0439%22%2C%0A%20%20%20%20%20%20%20%20%20%22%28-_-%29%20%20Zzz.%u0441%u043F%u044F%u0449%u0438%u0439%22%2C%0A%20%20%20%20%20%20%20%20%20%22%28-_-%3B%29%20%20%u0431%u043E%u043B%u0435%u0437%u043D%u0435%u043D%u043D%u043E%u0441%u0442%u044C%22%2C%0A%20%20%20%20%20%20%20%20%20%22%28%u0425_%u0445%29%20%20%u0442%u0440%u0443%u043F%22%2C%0A%20%20%20%20%20%20%20%20%20%22%28+_+%29%20%20%u0442%u0440%u0443%u043F%22%2C%0A%20%20%20%20%20%20%20%20%20%22%28%u0445_%u0445%29%20%20%u0442%u0440%u0443%u043F%22%0A%20%20%20%20%20%20%20%5D%2C%0A%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%5B%0A%20%20%20%20%20%20%20%22%u0414%u0435%u0439%u0441%u0442%u0432%u0438%u0435%22%2C%0A%20%20%20%20%20%20%20%20%20%22%28%5E_%7E%29%20%20%u043F%u043E%u0434%u043C%u0438%u0433%u0438%u0432%u0430%u0442%u044C%22%2C%0A%20%20%20%20%20%20%20%20%20%22%28%5E_-%29%20%20%u043F%u043E%u0434%u043C%u0438%u0433%u0438%u0432%u0430%u0442%u044C%22%2C%0A%20%20%20%20%20%20%20%20%20%22%28%3B_%3B%29%20%20%u043F%u043B%u0430%u043A%u0430%u0442%u044C%22%2C%0A%20%20%20%20%20%20%20%20%20%22%28T_T%29%20%20%u043F%u043B%u0430%u043A%u0430%u0442%u044C%22%2C%0A%20%20%20%20%20%20%20%20%20%22%28TT.TT%29%20%20%u043F%u043B%u0430%u043A%u0430%u0442%u044C%22%2C%0A%20%20%20%20%20%20%20%20%20%22%28ToT%29%20%20%u043F%u043B%u0430%u043A%u0430%u0442%u044C%22%2C%0A%20%20%20%20%20%20%20%20%20%22Q__Q%20%20%u043F%u043B%u0430%u043A%u0430%u0442%u044C%22%2C%0A%20%20%20%20%20%20%20%20%20%22%3DX%3D%20%20%u0440%u0443%u043A%u043E%u043F%u043E%u0436%u0430%u0442%u0438%u0435%22%2C%0A%20%20%20%20%20%20%20%20%20%22%5E%7D%7B%5E%20%20%u043B%u044E%u0431%u043E%u0432%u044C%22%2C%0A%20%20%20%20%20%20%20%20%20%22%28%5E3%5E%29%20%20%u043F%u043E%u0446%u0435%u043B%u0443%u0439%22%0A%20%20%20%20%20%20%20%5D%2C%0A%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%5B%0A%20%20%20%20%20%20%20%22%u041F%u0435%u0440%u0441%u043E%u043D%u0430%u0436%22%2C%0A%20%20%20%20%20%20%20%20%20%22%28%3D%5E.%5E%3D%29%20%20%u043A%u043E%u0448%u043A%u0430%28%u043D%u044F%29%22%2C%0A%20%20%20%20%20%20%20%20%20%22%3D%5E_%5E%3D%20%20%u043A%u043E%u0448%u043A%u0430%28%u043D%u044F%29%22%2C%0A%20%20%20%20%20%20%20%20%20%22%28O%2Co%29%20%20%u0441%u043E%u0432%u0430%22%2C%0A%20%20%20%20%20%20%20%20%20%22%5E..%5E%20%20%u0441%u0432%u0438%u043D%u044C%u044F%22%2C%0A%20%20%20%20%20%20%20%20%20%22///_%u0422%20%20%u044D%u043C%u043E-%u043A%u0438%u0434%22%2C%0A%20%20%20%20%20%20%20%20%20%22T_%5C%5C%5C%5C%5C%5C%20%20%u044D%u043C%u043E-%u043A%u0438%u0434%22%2C%0A%20%20%20%20%20%20%20%20%20%22///_%5E%20%20%u044D%u043C%u043E-%u043A%u0438%u0434%22%2C%0A%20%20%20%20%20%20%20%20%20%22%5E_%5C%5C%5C%5C%5C%5C%20%20%u044D%u043C%u043E-%u043A%u0438%u0434%22%2C%0A%20%20%20%20%20%20%20%20%20%22%28%A8%5C%5C%28%u043E_%u041E%29/%A8%29%20%20%u041C%u0435%u0434%u0432%u0435%u0434/%AB%u041F%u0440%u0435%u0432%u0435%u0434%21%BB%22%2C%0A%20%20%20%20%20%20%20%20%20%22%28jIj%29%20%20%u041A%u0442%u0443%u043B%u0445%u0443%22%2C%0A%20%20%20%20%20%20%20%20%20%22%28%3B%2C%3B%29%20%20%u041A%u0442%u0443%u043B%u0445%u0443%22%2C%0A%20%20%20%20%20%20%20%20%20%22%28o%2C.%2CO%29%20%20%u041A%u0442%u0443%u043B%u0445%u0443%22%2C%0A%20%20%20%20%20%20%20%20%20%22Y%28O%2C%2C%2C%2CO%29Y%20%20%u041A%u0442%u0443%u043B%u0445%u0443%22%2C%0A%20%20%20%20%20%20%20%20%20%22%28x%28x_%28x_x%28%u041E_%u043E%29x_x%29_x%29x%29%20%20%u0436%u0438%u0432%u043E%u0439%20%u0441%u0440%u0435%u0434%u0438%20%u0437%u043E%u043C%u0431%u0438%22%2C%0A%20%20%20%20%20%20%20%20%20%22%28-%28-_%28-_-%28%u041E_%u043E%29-_-%29_-%29-%29%20%20%u043F%u0440%u043E%u0441%u043D%u0443%u043B%u0441%u044F%20%u0432%20%u043C%u0435%u0442%u0440%u043E%22%2C%0A%20%20%20%20%20%20%20%20%20%22@-_-@%20%20%u043E%u0432%u0435%u043D%2C%20%u0431%u0430%u0440%u0430%u0448%u043A%u0430%22%0A%20%20%20%20%20%20%20%5D%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%5D%3B%0Avar%20menuPopup%20%3D%20self.appendChild%28document.createElement%28%22menupopup%22%29%29%3B%0Aarray.forEach%28%28arr%29%3D%3E%20%7B%0A%20%20%20var%20menu%2C%20subMenu%2C%20subMenuItem%3B%20%20%0A%20%20%20menu%20%3D%20document.createElement%28%22menu%22%29%3B%0A%20%20%20subMenu%20%3D%20document.createElement%28%22menupopup%22%29%3B%0A%20%20%20%20%20%0A%20%20%20arr.forEach%28%28smile%2Ci%29%3D%3E%20%7B%0A%20%20%20%20%20%20if%20%28%20i%20%3D%3D%200%20%29%20return%3B%0A%20%20%20%20%20%20subMenuItem%20%3D%20document.createElement%28%22menuitem%22%29%3B%0A%20%20%20%20%20%20subMenuItem.setAttribute%28%22label%22%2C%20smile%29%3B%0A%20%20%20%20%20%20subMenuItem.style.fontSize%20%3D%20%2214px%22%3B%20//%20%u0440%u0430%u0437%u043C%u0435%u0440%20%u0448%u0440%u0438%u0444%u0442%u0430%20%u043F%u043E%u0434%u043C%u0435%u043D%u044E%0A%20%20%20%20%20%20subMenu.appendChild%28subMenuItem%29%3B%0A%20%20%20%7D%29%3B%0A%20%20%20%20%20%20%20%20%20%0A%20%20%20menu.appendChild%28subMenu%29%3B%0A%20%20%20menu.setAttribute%28%22label%22%2C%20arr%5B0%5D%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20menu.style.fontSize%20%3D%20%2212px%22%3B%20//%20%u0440%u0430%u0437%u043C%u0435%u0440%20%u0448%u0440%u0438%u0444%u0442%u0430%20%u043C%u0435%u043D%u044E%0A%20%20%20menuPopup.appendChild%28menu%29%3B%0A%7D%29%3B%0AmenuPopup.addEventListener%28%22click%22%2C%20e%3D%3E%20insertText%28e.target.label.split%28%22%20%20%22%29%5B0%5D%29%20%29%3B%0A%20%0A%0A//%20%u0421%u0442%u0430%u0432%u0438%u0442%u044C%20%u0441%u043C%u0430%u0439%u043B%u0438%u043A%20%u0432%20%u0442%u0435%u043A%u0441%u0442%u043E%u0432%u043E%u0435%20%u043F%u043E%u043B%u0435%20.................%0Afunction%20insertText%28smile%29%20%7B%20%20%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%20var%20controller%20%3D%20controller.QueryInterface%28Ci.nsICommandController%29%3B%0A%20%20%20var%20params%20%3D%20Cc%5B%22@mozilla.org/embedcomp/command-params%3B1%22%5D.createInstance%28Ci.nsICommandParams%29%3B%0A%20%20%20params.setStringValue%28%22state_data%22%2C%20smile%29%3B%0A%20%20%20controller.doCommandWithParams%28cmd%2C%20params%29%3B%20%20%20%20%20%20%20%20%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


Тут другой аналогичный и действующих вариант этих кнопок 11-05-2013 13:28:43

BBCode( Firefox ) от 12.05.2013.
Открывает меню с разными BB кодами и даёт возможность вставлять их в любые поля ввода. В меню кнопки легко добавить свои коды, для этого надо редактировать в кнопке вкладку Справка.

Скриншот меню кнопки:
04d05629c31c8fbe82f175ba3439edde.png

ЛКМ => Открыть меню с BB кодами.
Код кнопки:
Код кнопки:

Выделить код

Код:

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%3EBBCode%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACS0lEQVR4XpWTS4iSURTHj2/F8oFP1JIWQyZmBm3STavZjIuhTdHKaVMMzMZNLWtRFNGmgWJaTJS0qoEpJEgMA8FVCydRfBvoQgJzhoFCEW//e8fvcyaYRQd+fF7O+6GC/k+UgOVypLqiIxNp6b7yGMMTkKDVar2s1WrP4q0BxuWrN96+e7X2eeGPYnOsp7uko/0jXkaj8XwikdhIp9PdarU6LpfLk+3t7VE8Hv/u9/uzS/FlVsi9YR/fr/+8uUQhuMw7iEQiq/l8fn88HrN+v8+KxSJKzTEEY6lUikHPePkGg4md9i985VWSFCEYDK5sbW1tmkwm6na7NBwOaXd3V2Y0GlEmk6FCoSDlWwUvAKnBmWQy+Wg6ndLOzs4Rx729PZlOp0OH5DZ4DX4rA4HAda/X6+TO7XabG0rIb7RDaIsUCoUAEgaLgJSQRW7YarUEzWaTf2UqlQo1Gg1ijNE/EhMBoDyVzWbljEA41Ot1Qa/Xo8lkQhARRK1Wk8FgIIgPCPmm0WiYx+NhPp+P2Ww2ptfrGUrlKWVUKhXDmpnL5RJ20G9IW3gG1ugYQYuk0+kIzgKz2Sy2UqvVbkH9kl/iB8DAfEhzR+GAqgQOh0N8sZVfMMlKt/0FrANZcL7Eb8Jut5PT6RSOKJ3QJg0GA76RJzBrSwG43AOfZn8CbizjdrsJayaLxSI2VCqVnsPsMZDFAELgEniIKf/gAw2HwywajbJYLMZCodAUrVShvwMuAAeQRQFOAg/wgotgBbN4AJ7OqrsGzgEnsAG15PwXcMcNgug5BPIAAAAASUVORK5CYII%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%u0412%u0435%u0440%u0441%u0438%u044F%3A%20%u043E%u0442%2012.05.2013.%20.................%20%0A%0Aconst%20data%20%3D%20this.Help.split%28%22%5Cn%22%29%3B%0A%0Aconst%20names%20%3D%20%5B%22menupopup%22%2C%20%22hbox%22%2C%20%22popupset%22%2C%20%22button%22%5D%3B%0Aconst%20btnAttrs%20%3D%20%5B%22label%22%2C%20%22tooltiptext%22%2C%20%22value1%22%2C%20%22value2%22%2C%20%22popup%22%2C%20%22image%22%5D%3B%0Aconst%20prefixId%20%3D%20%22CB-BBCode-node%22%3B%0Aconst%20button%20%3D%20this%3B%0A%0Afunction%20rep%28str%29%20%7B%20return%20str.replace%28/%25dot%25/g%2C%20%22.%22%29.replace%28/%25sym%25/g%2C%20%22%7C%22%29%3B%20%7D%0A%20%0Adata.forEach%28function%28str%29%20%7B%0A%09if%20%28%21str%29%20return%3B%0A%09var%20nm%20%3D%20str.split%28%22.%22%29.map%28rep%29%3B%0A%0A%09var%20name%20%3D%20names%5Bnm%5B0%5D%5D%3B%0A%09var%20id%20%3D%20parseInt%28nm%5B1%5D%29%20%26%26%20%28prefixId%20+%20nm%5B1%5D%29%3B%0A%09var%20parent%20%3D%20document.getElementById%28prefixId%20+%20nm%5B2%5D%29%20%7C%7C%20button%3B%0A%09var%20attrs%20%3D%20nm%5B3%5D%20%3F%20nm%5B3%5D.split%28%22%7C%22%29.map%28rep%29%20%3A%20%5B%5D%3B%0A%0A%09var%20node%20%3D%20document.createElement%28name%29%3B%0A%09if%20%28id%29%20node.id%20%3D%20id%3B%0A%09if%20%28name%20%3D%3D%20%22button%22%29%20%7B%0A%09%09btnAttrs.forEach%28function%28attr%2C%20i%29%20%7B%20attrs%5Bi%5D%20%26%26%20node.setAttribute%28attr%2C%20%28%28attr%20%3D%3D%20%22label%22%29%20%3F%20%22%20%22%20%3A%20%22%22%29%20+%20attrs%5Bi%5D%29%20%7D%29%3B%0A//%09%09node.setAttribute%28%22height%22%2C%20%228px%22%29%3B%0A%09%09var%20p%20%3D%20node.getAttribute%28%22popup%22%29%3B%0A%09%09p%20%26%26%20node.setAttribute%28%22popup%22%2C%20prefixId%20+%20p%29%3B%0A%09%7D%20else%20%7B%0A%09%09if%20%28name%20%3D%3D%20%22menupopup%22%29%20node.setAttribute%28%22style%22%2C%20%22-moz-appearance%3A%20none%3B%20border%3A%201px%20solid%20gray%22%29%3B%0A%09%09attrs.forEach%28function%28str%29%20%7B%0A%09%09%09var%20a%20%3D%20str.split%28%22%3D%22%29%3B%0A%09%09%09node.setAttribute%28a%5B0%5D%2C%20a%5B1%5D%29%3B%0A%09%09%7D%29%3B%0A%09%7D%0A%09parent.appendChild%28node%29%3B%0A%7D%29%3B%0Avar%20popup%20%3D%20document.getElementById%28prefixId%20+%201%29%3B%0Apopup.setAttribute%28%22oncommand%22%2C%20%27document.getElementById%28%22%27%20+%20button.id%20+%20%27%22%29.handleClick%28event%29%27%29%3B%0A%0Aconst%20btnIdPrefix%20%3D%20%22cb-bbcode-button-%22%3B%0Aconst%20mid%20%3D%20%22%20%3E%20.box-inherit.button-box%20%3E%20.button-icon%20%7B%20background-color%3A%20%22%3B%0Aconst%20sss%20%3D%20Cc%5B%22@mozilla.org/content/style-sheet-service%3B1%22%5D.getService%28Ci.nsIStyleSheetService%29%3B%0Aconst%20type%20%3D%20sss.USER_SHEET%3B%0Avar%20mp%20%3D%20document.getElementById%28prefixId%20+%207%29%3B%0Avar%20style%20%3D%20%22%22%3B%0AArray.slice%28mp.children%29.forEach%28function%28btn%29%20%7B%0A%09btn.setAttribute%28%22image%22%2C%20%22data%3Aimage/x-icon%3Bbase64%2CAAABAAEAIA4AAAEAIABgBwAAFgAAACgAAAAgAAAAHAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAAH////5////+f////n////5////+f////n////5////+f////n////5////+f////gAAAAA%3D%22%29%3B%0A%09btn.setAttribute%28%22value1%22%2C%20%22color%22%29%3B%0A%09var%20color%20%3D%20btn.getAttribute%28%22value2%22%29%3B%0A%09btn.id%20%3D%20btnIdPrefix%20+%20color.substring%281%29%3B%0A%09style%20+%3D%20%22%23%22%20+%20btn.id%20+%20mid%20+%20color%20+%20%22%20%21important%3B%20%7D%5Cn%22%0A%7D%29%3B%0Avar%20cssURI%3B%0AsetTimeout%28function%28%29%20%7B%0A%09cssURI%20%3D%20makeURI%28%22data%3Atext/css%2C%22%20+%20encodeURIComponent%28style%29%2C%20null%2C%20null%29%3B%0A%09if%20%28%21sss.sheetRegistered%28cssURI%2C%20type%29%29%20sss.loadAndRegisterSheet%28cssURI%2C%20type%29%3B%0A%7D%2C%201000%29%3B%0A%0Avar%20hbox%20%3D%20document.getElementById%28prefixId%20+%202%29%3B%0Athis.handleClick%20%3D%20function%28evt%29%20%7B%0A%0A%09var%20node%20%3D%20evt.target%3B%0A%09if%20%28node.nodeName%20%21%3D%20%22button%22%20%7C%7C%20node.parentNode%20%3D%3D%20hbox%29%20return%3B%0A%0A%09var%20v1%20%3D%20node.getAttribute%28%22value1%22%29%3B%0A%09var%20v2%20%3D%20node.getAttribute%28%22value2%22%29%3B%0A%09if%20%28v2%29%20v2%20%3D%20%22%3D%22%20+%20v2.replace%28%22%25clipboard%25%22%2C%20gClipboard.read%28%29%29%3B%0A%0A%09var%20bb1%20%3D%20%22%5B%22%20+%20v1%20+%20%28v2%20%7C%7C%20%22%22%29%20+%20%22%5D%22%3B%0A%09var%20bb2%20%3D%20%22%5B/%22%20+%20v1%20+%20%22%5D%22%3B%0A%0A%09var%20box%20%3D%20content.document.activeElement%3B%0A%09var%20txt%20%3D%20box.value%3B%0A%0A%09var%20s%20%3D%20box.selectionStart%3B%0A%09var%20e%20%3D%20box.selectionEnd%3B%0A%0A%09var%20bef%20%3D%20txt.substring%280%2C%20s%29%3B%0A%09var%20mid%20%3D%20txt.substring%28s%2C%20e%29%3B%0A%09var%20aft%20%3D%20txt.substring%28e%29%3B%0A%0A%09var%20ins%20%3D%20bb1.replace%28/%25copy%25%7C%25move%25/%2C%20mid%29%20+%20%28v2%20%3D%3D%20%22%3D%25move%25%22%20%3F%20%22%22%20%3A%20mid%29%20+%20bb2%3B%0A%09var%20val%20%3D%20bef%20+%20ins%20+%20aft%3B%0A%0A%09box.value%20%3D%20val%3B%0A%09box.selectionStart%20%3D%20s%3B%0A%09box.selectionEnd%20%3D%20s%20+%20ins.length%3B%0A//%09box.focus%28%29%3B%0A%7D%0Abutton.onclick%20%3D%20function%28e%29%20%7B%0A%09if%20%28%21e.button%29%20document.getElementById%28prefixId%20+%201%29.openPopup%28button%29%3B%0A%7D%3B%0Abutton.onDestroy%20%3D%20function%28reason%29%20%7B%0A%20%20%20%20if%20%28reason%20%3D%3D%20%22update%22%20%7C%7C%20reason%20%3D%3D%20%22delete%22%29%0A%20%20%20%20%20%20%20%20if%20%28cssURI%20%26%26%20sss.sheetRegistered%28cssURI%2C%20type%29%29%20sss.unregisterSheet%28cssURI%2C%20type%29%3B%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%5B0.1.0.position%3Dafter_start%7Concontextmenu%3Devent%25dot%25preventDefault%28%29%3B%0A1.2.1%0A%0A3.3.2.BBCode%7CSpaces%20to%20Add%7C%7C%7C5%7Cdata%3Aimage/x-icon%3Bbase64%2CAAABAAEACQkAAAEAIACQAQAAFgAAACgAAAAJAAAAEgAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/87W1v8AAAAAAAAA/wAAAP8AAAD/AAAAAAAAAAAAAAD/AAAA/wAAAP8AAAAAAAAA/wAAAP8AAAD/AAAAAAAAAAAAAAD/AAAA/wAAAP8AAAAAAAAA/wAAAP8AAAD/AAAAAAAAAAAAAAD/AAAA/wAAAP8AAAAAAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAAAAAAAAAAAA/wAAAP8AAAD/AAAAAAAAAAAAAAD/AAAA/wAAAP8AAAAAAAAA/wAAAP8AAAD/AAAAAAAAAAAAAAD/AAAA/wAAAP8AAAAAAAAA/wAAAP8AAAD/AAAAAAAAAAAAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAAAAAKxBjACsQYwArEGMAKxBgICsQYwArEGMAKxBjACsQQCArEE%3D%0A2.4.2%0A0.5.4.position%3Dafter_start%0A%0A3.0.2.Colors%7CColors%7C%7C%7C7%7Cdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAC4jAAAuIwF4pT92AAADzUlEQVR42jWTa0yTdxjF/yAXleDMmEYSN7PFLEv8MDYyTZaNgZrFhMzEZGbGLUFL71x6fdtSSi/0AkihdIAiFxUvWIcilw2l4FwkQxiZkC7MC0YYblBGdFkBkfZ9/2dvzfhwnufL83tyPpxDrFYrsVgshN/xdrudaLVakp+fnycU5PR/nSOYOiLTBb8SyCeEMolDrVYSk8nE35vj/2fIGhxjNpuJWq3+UCKR9ObJZYsKjZE7WVVO+zzKif5z314o1ZlGVGq931Zq22212gh/HxNlo3BcFJbLZMekUukyo1Gh2OLC4DUzZbtTKTqTn6H/jcBcfcKg6/NtSwcyMl/oGU2e3eGMPoklUdsqleoTHg4XGQywWi3hlrMXabjnA+D6erADr4MdiQNm3gV7Oy5szyDYuS0VKumxdFupnRCNRpMklUiGGYaB0+kM19V60dF1gy517qVo30Q5/0ZKR99i2ZlqjovcBIaTVyW7YrDnvXfk7io3IWKRqKSwIP8Fb4d6vV7advE87b15C5OjPYj0pAFXCaX+WGA8m0YWFzhuTsw9LSUvcw9mpzvKywmR5xUUqRl9yOV0oKWpkevu7sbw3SE8mJxG8K9pLP/qRNifDjqQAgQOcRj5mMUVwv5s2feZxlJBiCLn8GuM8Mh9l9tLmy/4WH9fHw2Mj2H2zxksLa0gtArMBufxePwGHtw20yftWeHQlU0IFqUI1LYaQo5mpekq920O3Tdm0K56J9d76yeMPZqmswvPsbK8xCuE2bkgxn97hF7/XTS1dkRqKh1w64XtCqY4jogP7b9jytyKsCIZtDCFzjPpdOq8BX+MDWL2eQjBhWd48ngSo6O/4Ifvu+iZlibO6aqghRoDpFKJkzCCw3eO79nOTgjXB2nNm4BiC4U4kbLyJPqv5yB+vzeEkXsBDPT3wefz0bq6OmqzWqhSUUhFIlErcZdojx/9dNdKTWbCEM7FP+VqtyBi2M5x6lRAvA6Lxe+jr/MafN+108aGBpSXlbEGvZ6VyWTLYrE4i1RVe0htmbkj++2NuPRl0hQuE4pWXmWERkoSAA2hAed+6jl1BhUuJ1dsNK7yXQEPe191gdFqY9su+3ZUmzUPD+xIxIm9CexDRxz3siGGopGXl9BJz25qKq1gi/Q6FPCwMDe3iw/eBpvNto7wI1Zv0BPe4tbrl5qvSrPTkJ+xGZVfJKLtG4IfmZ1ocBkgL1BCKhb/zVvXG41GstbiV4N/EqPTMeRkw2nCh+ij5lMn/PUebbDpdMk/dnflvEAkHRfmCpRKlWpDFOQVu1bn/wDzd1RKwhrzpQAAAABJRU5ErkJggg%3D%3D%0A2.6.2%0A0.7.6.position%3Dafter_start%7Cheight%3D350px%0A%0A3.0.2.Position%7C%u0420%u0430%u0437%u043C%u0435%u0440%20%u0448%u0440%u0438%u0444%u0442%u0430%20%u0438%20%u0432%u044B%u0440%u0430%u0432%u043D%u0438%u0432%u0430%u043D%u0438%u0435%7C%7C%7C9%7Cdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAC4jAAAuIwF4pT92AAAD2ElEQVR42l2Ra0xbdRiH/2PDS2b0g4l+nG4Rpw4ahYYs0xU/LJIZCBljczDHshnmZc4wJi3n3nPKpYUaNgOBArOlhRUmG90MAiqXcottBYGyMkYLLbJBNkAs0ts557XovrgPv/ze5E2ePG9exDH0DgVFIZNKlSBOOlfD87714LzbDwN93i4l/fIlJRWrZOmnaJaOfTJUdIc4mondAjSpVBJY8ISCy/Ow4RkH0drxyIrRL8gxBnEYjRiMQkqc+V84gkUoahAF0MikpBMivW3B1f5WeNR1FQLGb+7Xq8/Hf1GFJePVSilRUyxVVJPSwipMKq/CozMuvXD54ttRgyiAZpCRxCX+Bi7kq7wEM3npsJhzxMW0HtNUO4+CeeJc+IdZLe9Y7hYmV4aE3x7+wt9dHRHYcW4FcRQVq2CUyITLJQ/y0kMTh+Jh8tBuWMiSTWtNR0tv30kXOuyp4cYBGV9vTRN6prSCY/YaP+E2C+V21VIUQO6QK1lk/PqixJsqCU7nSkQfdUB8WJDquvLdEc300icwdjcbOsbSQWc9COU/74c222fQO05DyYhiDbFRAzmrQob8C5KF7MRND5nCLxsyeb8my4XVH8ar5k56jbbj9prBDJumJ81Od39gL+jLnFbb8zynB3PHUAlZuA3jKNT86WnJes4eWC3dD0L3MYDqw5sNpw68lKHPedbZEnfOY3lDPtu+r+CPm68r9NeS4z6sydt5vPbUTvQlrX8+r7T1ucrPi1+1pWcSfdkfEz25Z0lr2keFmiztiwSrexrGds+FfbsgMrIXoDMeVvTJKWxRCSrbeqPcNHWHvO6aO9v4+70T+glHfrPDobnZa2/ua7e1T1z36eoqCoPDe6wbzl38372vBQVLAu8xymRF0dczLLEdaW85A1e6p4CwjEJGnRUKWrqgud8Mo85K8C2WQ4uJ4wKd+/qD/W+Km5a9YdEsEb3GgzKMZBDLkDHI1Ov+85bDK3SM+sTavhnhvHlQYNssvOEnY6h1qEUwGMqYcOtb1kBTHGwa3onA7RPgbXo/BSdpxCqp7ejG8JLf5v5LGJlZ50c9fqHftSY0Drn5qu5fQ+ofHaC7WsHx379nDVnOQHigNAJj34LPJEvBiccArKQmkVLrkih1bRJZVpuk1OiSirUNSVxFXaKiTJ+sLi56JTKCjYv3OkV+tisM3g7R15Qiw3FqCxCDGApDNIkh5nG2ZoosirYCkQSByuivtgWdjdPgfwD8xgoPgUXwbZ2AE/8Z0IwyhonmyWYYJoagVTFqJv+ZwFDBsOg2r0VmTPfBdXnNp5e+ixPMvwb/AKyLUjULoolGAAAAAElFTkSuQmCC%0A2.8.2%0A0.9.8.position%3Dafter_start%0A%0A3.0.5.HypLink%7C%u0413%u0438%u043F%u0435%u0440%u0441%u0441%u044B%u043B%u043A%u0430%7Curl%7C%25move%25%7C%7Cdata%3Aimage/gif%3Bbase64%2CR0lGODlhEAAQAKIAAGZmZgAAAP///8zMzP///////////////yH5BAEAAAQALAAAAAAQABAAAAMxSLrc/jBKCYK16lpAqhBDaH3hEHimpoqBEJhkWJkpq17iXFZnaXK8S0bDmRiPyGQyAQA7%0A3.0.5.Seltxtlink%7C%u0422%u0435%u043A%u0441%u0442%20%u0413%u0438%u043F%u0435%u0440%u0441%u0441%u044B%u043B%u043A%u043E%u0439%7Curl%7C%25clipboard%25%7C%7Cdata%3Aimage/gif%3Bbase64%2CR0lGODlhEAAQAKIAAGZmZgAAAP///8zMzP///////////////yH5BAEAAAQALAAAAAAQABAAAAMxSLrc/jBKCYK16lpAqhBDaH3hEHimpoqBEJhkWJkpq17iXFZnaXK8S0bDmRiPyGQyAQA7%0A3.0.5.Post%20URL%7C%7Curl%7C%25copy%25%7C%7Cdata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAyAAAAMgAAADIAAAAyAAAAWpKGc/+Mhmb/ipFq/4qXbv+ekXb/oI9+/wAAAFoAAAAyAAAAMgAAADIAAAAyAAAAMgAAADIAAABaj35t/36CVv91l1z/d5lc/3ubX/+gnW//upx7/7aaff+ulnz/mYZy/wAAAFoAAAAyAAAAMgAAADIAAABaj3pl/519Wv+tkWf/r5dm/6+ZY/+4mmT/xJtq/8Kcbf/CnHL/t5pz/6WTcP+ZgWr/AAAAWgAAADIAAAAycDAgWpBrQ/+1jWH/wJRh/8aYXv/Jmlz/yptb/8KZWP9wj0D/gZJK/3mTTv94k1P/pYlm/5eBaf9wMCAycDAgMopoRP8AAP//AAD//wAA///LmlX/zZ1X/wAA///InFT/co02/wAA//9yizj/AAD//wAA//8AAP//AAD//83Btf8AAP//tYNI/8OPSP/Ll07/AAD//9KhWP8AAP//06NZ/9GgVf8AAP//upNG/wAA//+4jFP/pX9V/5eAaP+pmID/AAD//4aEMv/JlEr/0J9U/wAA///aq2H/AAD//4OXPv8AAP//1aVb/8+dU/8AAP//v41L/66CUf+FZUX/nYlq/wAA//9mgyj/zpxR/9eoXf8AAP//p6VR/wAA//8AAP//AAD//9yvZP/Vplv/AAD//8OORf+vgkr/hmM+/6aUef8AAP//hoo0/9OjWP/dsGX/AAD//2eXOv8AAP//6MN+/+a/dv8AAP//2q1i/wAA///GkUf/an4s/15iKv++sZ7/AAD//4qQPv/Wp1z/4bdt/wAA//9omkH/AAD//9jFg//qx4b/AAD//96zaP8AAP//x5JI/2d8K/9ZXyr/cDAgoQAA//+DnlX/2K1n/+S8c/8AAP//n7Nq/wAA//8AAP//AAD//+nFgf/htmv/AAD//56MO/9fdin/jnpg/3AwIDK7uKH/m7R+/8K5f//oxoj/7dKd/7HBhP92qmD/dKhd/7/Dhf/qy47/4rl0/9OlX/+sjEb/imQ3/3AwIDIAAAAAcDAgMsvDq//Wy6f/6dKn/6W+gv+Kt3j/i7l9/4q4ef+YuXr/zMWJ/8K2df+zpWT/rodY/5R/aP8AAAAAAAAAAAAAAABwMCAy4NG//+zav//Dz6b/pcaU/6DHlv+ew4//m72D/5e2eP+SrnH/pKJz/5J8Zf9wMCAyAAAAAAAAAAAAAAAAAAAAAHAwIDLWy77/59vH/9PXuP/B0Kj/tMia/7LDlP+3vZP/s6WJ/7Gklv9wMCAyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAwIDLPxrz/yr2w/8Kzo//BtKb/cDAgWgAAAAAAAAAAAAAAAAAAAAAAAAAAAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBgAGsQcABrEHgA6xB+B+sQQ%3D%3D%0A3.0.5.BBCode%7C%u041F%u043E%u043B%u0443%u0436%u0438%u0440%u043D%u044B%u0439%20%u0442%u0435%u043A%u0441%u0442%7Cb%7C%7C%7Cdata%3Aimage/gif%3Bbase64%2CR0lGODlhEAAQAPcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAEALAAAAAAQABAAAAg4AAMIHEiwoMGDCBMaBMCwIcOEDQVGPDhx4sKHASwWdKhxI8aOAytivAhA4kiCHEEqXMmypcuBAQEAOw%3D%3D%0A3.0.5.UnLiner%7C%u041F%u043E%u0434%u0447%u0451%u0440%u043A%u043D%u0443%u0442%u044B%u0439%20%u0442%u0435%u043A%u0441%u0442%7Cu%7C%7C%7Cdata%3Aimage/gif%3Bbase64%2CR0lGODlhEAAQAPcAAAAAAHt7ewAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAIALAAAAAAQABAAAAg+AAUIHEiwoMGDBwEoBCBgIcOEDxtGNKhwYEWEFyUi1CgwI8WIHgtmDElQYQABAUiWdLix5UeHC13KnElTYEAAOw%3D%3D%0A3.0.5.StrikTh%7C%u0417%u0430%u0447%u0451%u0440%u043A%u043D%u0443%u0442%u044B%u0439%20%u0442%u0435%u043A%u0441%u0442%7Cs%7C%7C%7Cdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAsTAAALEwEAmpwYAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAAaUlEQVR42ryTUQrAMAhD84r3v3L2Ndik63SF+SVS0jTPYls7NbRZkQfA2WZrSFJ2/OTAxdlUwOlWViJRfCqdEHmzfTtsW8AnlrbZxkjGcsE4C5YqRlXxRgFje5UzhaXgaHCnFOLvv/EYACqEIRcK3R/8AAAAAElFTkSuQmCC%0A3.0.5.Italic%7C%u041D%u0430%u043A%u043B%u043E%u043D%u043D%u044B%u0439%20%u0442%u0435%u043A%u0441%u0442%7Ci%7C%7C%7Cdata%3Aimage/gif%3Bbase64%2CR0lGODlhEAAQAPcAAAAAAHt7e4SEhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAMALAAAAAAQABAAAAgyAAcIHEiwoMGDCBMqBMCQoUKBDAU8HBDA4USGASZWBDBxAEaNFh9+XNgwZMeTKFMqDAgAOw%3D%3D%0A3.0.5.Quote%7C%u0426%u0438%u0442%u0430%u0442%u0430%7Cquote%7C%7C%7Cdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAsTAAALEwEAmpwYAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAACCklEQVR42mL8//8/AyUAIICYGCgEAAFEsQEAAUSxAQABxAIiurq6OM+cOZPPx8fHaWZm1rp8+fLEDx8+aGVmZrZKSEgwT5s2rRPIFwKyj/38+fPbmzdvvHh5eV/v27cvGiCAwAY8fPgwfvfu3Q3e3t5Vx48fD7hy5UonNzf3opcvX34FSiuePHkyEGgAj6ys7P9v3759fPv2rSsPD88nkF6AAAJ7YceOHbFSUlLb+fn5Jx09ejRORkbmkomJSVVtbe1XZmZmVmBMMYLUsbOzf/n37x9YDysr63cQDRBAYM6TJ09kfv/+fXbz5s18QNO1vn//fnHNmjVfQHKioqLP/fz85ggKCr4DGsAVEhKyXkND4yJQPTtIHiCAGKDp4BnQSYcUFBSagBoeA/k3gC5Ki42N5QXJL1y4kEdVVfWks7PzBhA/NTW1AqjuHYgNEECwWPj79etXWyYmpkigLT+AfHU2NrbYI0eO8IEkga7i//HjhxQQXwfxgeJqwAB9BWIDBBDMAHagZoa/f/8yAp3GBhL4/Pnz36CgoH8LFizgX7Vq1XSggQympqbLBQQEEq5fvx6hq6u7AqQOIIDAsQAMtBPAwBIGmvoAaAsH0GnvhYWFL8rJyf3g5OQUBrrun7q6egGQfQsY1VE6OjozgXITQXoBAoiR0rwAEEAUp0SAAKLYAIAAotgAgAADANuDzfQSUmlqAAAAAElFTkSuQmCC%0A3.0.5.Spoiler%7C%u0421%u043F%u043E%u0439%u043B%u0435%u0440%7Cspoiler%7C%7C%7Cdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAMklEQVQ4jWNgGKzgP7EKmSi1iWIDGJHY+JzNiEcOKxhCYTDwgNjQxRaojAwMwyIMKAYA3esECwxQ4k8AAAAASUVORK5CYII%3D%0A3.0.5.Code%7C%u041A%u043E%u0434%7Ccode%7C%7C%7Cdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAsTAAALEwEAmpwYAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAA60lEQVR42mL8//8/AyUAIICYGCgEAAFEsQEAAYQNKQHxfyieABWrRRJTQlYMEEBYNc9YtR2MoRoYsIjBDQEIIKyavTOb0RWC5ZJrJ2PIAQQQTs2g2EHH2AwBCCCQIIeNkweGzTgMwHAJQACBBLkUdC3BArqOgSDBSAaIE7AZADdk6dYD/+W0Tf8DBBAoGhk5GX+AZbx8A0DUMjwhDRK/C9TMsGzLYYZHV08zAAQQiqkgV5T3LcQV0nCbkb0KEEAYCnAYglMzQABhjUo0QxjwaQYIIEIpMQcqNgFXSgQIIEZKcyNAAFGcmQACDAB0jLqYK4uYbwAAAABJRU5ErkJggg%3D%3D%0A3.0.5.AnLink%7C%u0410%u043D%u043E%u043D%u0438%u043C%u043D%u0430%u044F%20%u0441%u0441%u044B%u043B%u043A%u0430%7Curl%7Chttp%3A//anonym%25dot%25to/%3F%25copy%25%7C%7Cdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAB50lEQVQ4jY2TS2tTURSFb7EJpS1KB7a2eSf3cR43UWKMN7nnxhdYsF4VkRadiAg6KVSwEkFDITqxKiqC+C+c+Ad0moFTcaYggoiIgtPPUSshSXWwRnvtj73PPsuK45gwDDHG9KkZRhxqRNQaLYJmNFAPw5A4jrGCIEBK2aesrfGV5EyzwEqUo1V1yNkaV6g+XxAEWMaY/mZXc+VYnvftCXgwBpsWv+/v4uWlWYSnccVfrzGmH1B0FYt1m1/3xvnZTdA9N8/qyRS9G5Pw1OLhhX2kS3o0YL6k2Tw/By8sOnGK3ZkKs3mfekXwYyPJh/YESortVQYAWVtzaynF2/VpTgc2Wcen5EkcIfh0O8nXuwmqvsDxRgCUlDieouAopCfY73sIKemeXYBHY7xZ3UPRUYhRK2zJERKlJK+vz/C5k4THFt+7CZZNgZyjRr/BloSQ2J7m3foUH+9M8PziXpYOF8nb/WccDZCSgqPo3ZzkyfIcU+kKBddHCfn/gLyjeXVthvapBdKl8oDnnwCtPY5WXeoVDyEGm3cEZG3N1RMZvnSS9NamOVh2B77xjoB0yWdtMQ3PLL5tjFMre9u3HwAMC5MrFM0DLpePZ1hp5dBSIoZMEAQB1rA4R8bQaEZUgyPUGi3C0IyM8x/V4agSvEQ6QAAAAABJRU5ErkJggg%3D%3D%0A3.0.5.Image%7C%u0412%u0441%u0442%u0430%u0432%u043A%u0430%20%u043A%u0430%u0440%u0442%u0438%u043D%u043A%u0438%7Cimg%7C%7C%7Cdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAABpUlEQVR42p2TP0gbURzHPxebwyEJVBw6aKZAxOUcbYYOpS0IRSgljVBMOLgxZA64SBY30RDp0HuEDraBQodChrQI/UNj3XRRoreYQfo3NF4kSo9ct4dHcsX4pvd77/v9/B7vva8CUKlU3E6nw7DDMAxFMU3TTSQSxGKxocyWZVGv1wkAvmYhBJqmoaoqmqYhhMBxHLrdrvTc8OsghODt6zXq7zZQ1RG6Z39YNPI4jkM6nZa6gB+gWCzy8sUGI73vXPz+SOB8j2crjyiVSh6dPIGqqn2Qm5P3aO0vyzoSHqXRaAwGAHxb0nFOmrKeKG8xNr3MZmmBubtTnNrnxONxf4Bz0uTv8ZFH8OnrLndmZ3j/ymD1+Wey2axnP/C/pyoUCuwc/gQgV/jCw8c5MpnM1QDlZpv780/40bLR8+tEo1F0Xe/T+QJ+PXjKwXELgPFbk9RqNarVap/OcwcT5S05317N8ebDvqz1/DrJZJJ2uz0YcDkLoVCI2zNTV/rSEuC6rly0bXuguNfrARAMBr0Ay7KuFaZIJIICYJqmO2yUw+EwqVRK+QdtIZCYwfQIRQAAAABJRU5ErkJggg%3D%3D%0A3.0.5.Hide%7C%u0421%u043A%u0440%u044B%u0442%u044B%u0439%20%u0442%u0435%u043A%u0441%u0442%7Chide%7C%7C%7Cdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAsSAAALEgHS3X78AAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAHpSURBVHjapJK9aipRFEbXOc6MM5EkiIX5KaYShJQ+gpVtIF1Kq4Av4RuIZao0AUkTiAi+gEUgSipjNQYcizRJBowDZ2Z2ConFLW5yb1a3i734PvZWIvIKuPwfMSIST6dTCYJAvgiCQCaTyXYOw1Du7+8lSRL5g1gDMhwOub29ZbFYAGCMIY5jAJbLJYPBgKurK9I0JYoiZrPZVwKxADzPo9frMR6Pqdfr+L7PYrEgDEP6/T5hGFKr1Xh+fqbT6WCMoVqtcnFxgQb4+Pjg9PSUdrvNaDQijmMeHx+5ubmh2+1yfn6O4zhcXl6SJAknJyfc3d0xn883Aq01+/v72LaNZVmICGmakqYpjuNQKBRIkoT393dc18X3fc7OziiVShtBPp/Htm2UUhQKBQB836fRaNBqtbi+vsayLJrNJqvVislkQhRFuK6LEpF1FEWu1hrP83h7e8PzPIwx7O3t8fDwgOd5HB0dUSwWeXp64uXlhUqlwuHhYaxEZP2bP7AAVqsVy+USpRRKqW+30jRld3eXg4MDLID1ek0QBIgIWutvBcYYjo+PKZfLG4HWGsdxfixQSpHL5QDQ/BIL2N49y7Kt+W8kSUKWZVuByuVy7Ozs/LiCbds4jrNpIyKvWZa5xph/iq61xrbt+HMA/wYFcDfOeqsAAAAASUVORK5CYII%3D%0A%0A3.0.7.%7CBlack%7C%7C%23000000%0A3.0.7.%7CDarkGrey%7C%7C%23424242%0A3.0.7.%7CMediumGrey%7C%7C%23666666%0A3.0.7.%7CGrey%7C%7C%23808080%0A3.0.7.%7CLight%20Grey%7C%7C%23d3d3d3%0A3.0.7.%7CWhite%7C%7C%23ffffff%0A3.0.7.%7CAqua%7C%7C%2302feff%0A3.0.7.%7CBaby-Blue%7C%7C%2376ebff%0A3.0.7.%7CSky-Blue%7C%7C%2300c0fe%0A3.0.7.%7CLight%20Blue%7C%7C%230080ff%0A3.0.7.%7CMedium%20Blue%7C%7C%230002f7%0A3.0.7.%7CDark%20Blue%7C%7C%2300008b%0A3.0.7.%7CIndigo%7C%7C%234b007f%0A3.0.7.%7CDarkPurple%7C%7C%235c246e%0A3.0.7.%7CMediumPurple%7C%7C%23670099%0A3.0.7.%7CPurple%7C%7C%23a020f0%0A3.0.7.%7CLightPurple%7C%7C%23c05eff%0A3.0.7.%7CPink-Purple%7C%7C%23de00ed%0A3.0.7.%7CFuschia%7C%7C%23eb00cb%0A3.0.7.%7CHot%20Pink%7C%7C%23ff40f3%0A3.0.7.%7CNeon%20Pink%7C%7C%23f46ffc%0A3.0.7.%7CPink%7C%7C%23fec0cb%0A3.0.7.%7CPeach%7C%7C%23fccec1%0A3.0.7.%7CFlesh%7C%7C%23fddeb0%0A3.0.7.%7CTan%7C%7C%23fdf1b5%0A3.0.7.%7CLightBrown%7C%7C%23b87332%0A3.0.7.%7CBrown%7C%7C%237e4102%0A3.0.7.%7CDark%20Red%7C%7C%238b0101%0A3.0.7.%7CMedium%20Red%7C%7C%23e3170e%0A3.0.7.%7CRed%7C%7C%23ff0000%0A3.0.7.%7COrange-Red%7C%7C%23fe2400%0A3.0.7.%7COrange%7C%7C%23ff803f%0A3.0.7.%7CYellow-Orange%7C%7C%23ffbe00%0A3.0.7.%7CGold%7C%7C%23fed602%0A3.0.7.%7CYellow%7C%7C%23ffff00%0A3.0.7.%7CGreen-yellow%7C%7C%23adff30%0A3.0.7.%7CNeon%20Green%7C%7C%235dfc0a%0A3.0.7.%7CLightGreen%7C%7C%2390ee90%0A3.0.7.%7CGreen%7C%7C%2356ad3c%0A3.0.7.%7CMediumGreen%7C%7C%23008000%0A3.0.7.%7CDarkGreen%7C%7C%23006400%0A%0A3.0.9.Font%2010%7C%u0420%u0430%u0437%u043C%u0435%u0440%20%u0448%u0440%u0438%u0444%u0442%u0430%2010%7Csize%7C10%7C%7Cdata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAD/AAAA/wAAAP8AAAD/AAAAAAAAAAAAAAAAAAAAAAAAAP8AAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAA/wAAAAAAAAAAAAAA/wAAAP8AAAAAAAAAAAAAAAAAAAD/AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAD/AAAA/wAAAAAAAAAAAAAAAAAAAP8AAAD/AAAAAAAAAAAAAAAAAAAA/wAAAP8AAAAAAAAAAAAAAAAAAAAAAAAA/wAAAP8AAAAAAAAAAAAAAAAAAAAAAAAA/wAAAP8AAAAAAAAAAAAAAP8AAAD/AAAAAAAAAAAAAAAAAAAAAAAAAP8AAAD/AAAAAAAAAAAAAAAAAAAAAAAAAP8AAAD/AAAAAAAAAAAAAAD/AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAD/AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAD/AAAA/wAAAAAAAAAAAAAA/wAAAP8AAAAAAAAAAAAAAAAAAAAAAAAA/wAAAP8AAAAAAAAAAAAAAAAAAAAAAAAA/wAAAP8AAAAAAAAAAAAAAP8AAAD/AAAAAAAAAAAAAAAAAAAAAAAAAP8AAAD/AAAAAAAAAAAAAAAAAAAAAAAAAP8AAAD/AAAAAAAAAAAAAAD/AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAD/AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAD/AAAA/wAAAAAAAAAAAAAA/wAAAP8AAAAAAAAAAAAAAAAAAAAAAAAA/wAAAP8AAAAAAAAAAAAAAAAAAAD/AAAA/wAAAAAAAAD/AAAA/wAAAP8AAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAA/wAAAAAAAAAAAAAA/wAAAP8AAAAAAAAAAAAAAAAAAAD/AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAD/AAAA/wAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//+sQf//rEEDw6xBz5msQc85rEHPPKxBzzysQc88rEHPPKxBzzysQc88rEHPOaxBD5msQc/DrEH//6xB//+sQQ%3D%3D%0A3.0.9.Font%2012%7C%u0420%u0430%u0437%u043C%u0435%u0440%20%u0448%u0440%u0438%u0444%u0442%u0430%2012%7Csize%7C12%7C%7Cdata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAAAAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAAAAAAAAAAAAAAAAAP8AAAD/AAAAAAAAAAAAAAAAAAAAAAAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAAAAAAAAAAAAAAAAAD/AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAP8AAAAAAAAAAAAAAAAAAAAAAAAA/wAAAAAAAAAAAAAA/wAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAD/AAAAAAAAAAAAAAAAAAAAAAAAAP8AAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAP8AAAAAAAAAAAAAAAAAAAD/AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAD/AAAAAAAAAAAAAAAAAAAA/wAAAP8AAAAAAAAAAAAAAAAAAAAAAAAA/wAAAAAAAAAAAAAAAAAAAAAAAAD/AAAA/wAAAAAAAAD/AAAA/wAAAP8AAAD/AAAAAAAAAAAAAAAAAAAAAAAAAP8AAAD/AAAAAAAAAAAAAAD/AAAA/wAAAP8AAAAAAAAAAAAAAAAAAAD/AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//+sQf//rEECAaxBzwGsQc+erEHPz6xBz+esQc/3rEHP86xBz/msQc/5rEHPeaxBDzGsQc+DrEH//6xB//+sQQ%3D%3D%0A3.0.9.Font%2014%7C%u0420%u0430%u0437%u043C%u0435%u0440%20%u0448%u0440%u0438%u0444%u0442%u0430%2014%7Csize%7C14%7C%7Cdata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAD/AAAAAAAAAAAAAAAAAAAAAAAAAP8AAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAD/AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAP8AAAAAAAAAAAAAAAAAAAAAAAAA/wAAAP8AAAAAAAAAAAAAAAAAAAAAAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAAAAAAAAAAAAP8AAAD/AAAAAAAAAAAAAAAAAAAAAAAAAP8AAAAAAAAAAAAAAAAAAAD/AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAD/AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAAAAAAAAAAAA/wAAAP8AAAAAAAAAAAAAAAAAAAAAAAAA/wAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAAAAAAAAAAAAP8AAAD/AAAAAAAAAAAAAAAAAAAAAAAAAP8AAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAAAAAAD/AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAD/AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAD/AAAA/wAAAP8AAAAAAAAAAAAAAAAAAAAAAAAA/wAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAP8AAAD/AAAAAAAAAAAAAAD/AAAA/wAAAP8AAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAD/AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//+sQf//rEED86xBz/OsQc/zrEHPAKxBz3OsQc+zrEHPs6xBz9OsQc/DrEHP46xBD/OsQc/zrEH//6xB//+sQQ%3D%3D%0A3.0.9.Font%2016%7C%u0420%u0430%u0437%u043C%u0435%u0440%20%u0448%u0440%u0438%u0444%u0442%u0430%2016%7Csize%7C16%7C%7Cdata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAD/AAAA/wAAAP8AAAD/AAAAAAAAAAAAAAAAAAAAAAAAAP8AAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAA/wAAAAAAAAAAAAAA/wAAAP8AAAAAAAAAAAAAAAAAAAD/AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAD/AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAD/AAAAAAAAAAAAAAAAAAAA/wAAAP8AAAAAAAAAAAAAAAAAAAAAAAAA/wAAAP8AAAAAAAAAAAAAAAAAAAAAAAAA/wAAAP8AAAAAAAAAAAAAAP8AAAD/AAAAAAAAAAAAAAAAAAAAAAAAAP8AAAD/AAAAAAAAAAAAAAAAAAAAAAAAAP8AAAD/AAAAAAAAAAAAAAD/AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAD/AAAA/wAAAAAAAAAAAAAAAAAAAP8AAAD/AAAA/wAAAAAAAAAAAAAA/wAAAP8AAAAAAAAAAAAAAAAAAAAAAAAA/wAAAP8AAAD/AAAAAAAAAAAAAAD/AAAA/wAAAAAAAAAAAAAAAAAAAP8AAAD/AAAAAAAAAAAAAAAAAAAAAAAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAD/AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAD/AAAA/wAAAP8AAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAP8AAAD/AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//+sQf//rEEDw6xBz5msQc89rEHPPKxBzzysQc84rEHPGaxBzwOsQc+frEHPz6xBD+esQc/wrEH//6xB//+sQQ%3D%3D%0A3.0.9.Font%2018%7C%u0420%u0430%u0437%u043C%u0435%u0440%20%u0448%u0440%u0438%u0444%u0442%u0430%2018%7Csize%7C18%7C%7Cdata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAD/AAAA/wAAAP8AAAD/AAAAAAAAAAAAAAAAAAAAAAAAAP8AAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAA/wAAAAAAAAAAAAAA/wAAAP8AAAAAAAAAAAAAAAAAAAD/AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAD/AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAD/AAAA/wAAAAAAAAAAAAAA/wAAAP8AAAAAAAAAAAAAAAAAAAAAAAAA/wAAAP8AAAAAAAAAAAAAAAAAAAAAAAAA/wAAAP8AAAAAAAAAAAAAAP8AAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAAAAAAAAAAAAAAAAAA/wAAAP8AAAAAAAAAAAAAAAAAAAD/AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAP8AAAAAAAAA/wAAAP8AAAD/AAAAAAAAAAAAAAAAAAAA/wAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAP8AAAD/AAAAAAAAAAAAAAAAAAAAAAAAAP8AAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAD/AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAP8AAAAAAAAAAAAAAP8AAAD/AAAAAAAAAAAAAAAAAAAA/wAAAP8AAAAAAAAAAAAAAAAAAAAAAAAA/wAAAP8AAAAAAAAAAAAAAAAAAAAAAAAA/wAAAAAAAAD/AAAA/wAAAP8AAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAA/wAAAAAAAAAAAAAA/wAAAP8AAAAAAAAAAAAAAAAAAAD/AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAD/AAAA/wAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//+sQf//rEEDw6xBz5msQc88rEHPPKxBz7msQc+RrEHP46xBz4OsQc+ZrEHPPaxBD5msQc/DrEH//6xB//+sQQ%3D%3D%0A3.0.9.Justify%7C%7Cjustify%7C%7C%7Cdata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAERERP8/Pz//Ozs7/zY2Nv8yMjL/LS0t/ygoKP8kJCT/Hx8f/xoaGv8WFhb/ERER/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATk5O/0pKSv9FRUX/QEBA/zw8PP83Nzf/MzMz/y4uLv8pKSn/JSUl/yAgIP8bGxv/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABYWFj/VFRU/09PT/9LS0v/RkZG/0FBQf89PT3/ODg4/zMzM/8vLy//Kioq/yYmJv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGJiYv9eXl7/WVlZ/1VVVf9QUFD/S0tL/0dHR/9CQkL/PT09/zk5Of80NDT/MDAw/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbGxs/2hoaP9jY2P/X19f/1paWv9VVVX/UVFR/0xMTP9HR0f/Q0ND/z4+Pv86Ojr/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2dnb/cnJy/21tbf9paWn/ZGRk/19fX/9bW1v/VlZW/1FRUf9NTU3/SEhI/0RERP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//+sQf//rEH//6xBwAOsQf//rEHAA6xB//+sQcADrEH//6xBwAOsQf//rEHAA6xB//+sQcADrEH//6xB//+sQQ%3D%3D%0A3.0.9.Left%7C%u0412%u044B%u0440%u0430%u0432%u043D%u0438%u0432%u0430%u043D%u0438%u0435%20%u043F%u043E%20%u043B%u0435%u0432%u043E%u043C%u0443%20%u043A%u0440%u0430%u044E%7Cleft%7C%7C%7Cdata%3Aimage/gif%3Bbase64%2CR0lGODlhEAAQAIABAAAAAP///yH5BAEKAAEALAAAAAAQABAAAAIbjI+pm+APIZshRoqr3Vlt2S0fEE7jVRqnkx4FADs%3D%0A3.0.9.Center%7C%u0412%u044B%u0440%u0430%u0432%u043D%u0438%u0432%u0430%u043D%u0438%u0435%20%u043F%u043E%20%u0446%u0435%u043D%u0442%u0440%u0443%7Ccenter%7C%7C%7Cdata%3Aimage/gif%3Bbase64%2CR0lGODlhEAAQAIABAAAAAP///yH5BAEKAAEALAAAAAAQABAAAAIajI+pm+APIZsnRkqtBnhu1zHfFSpjaY4PahQAOw%3D%3D%0A3.0.9.Right%7C%u0412%u044B%u0440%u0430%u0432%u043D%u0438%u0432%u0430%u043D%u0438%u0435%20%u043F%u043E%20%u043F%u0440%u0430%u0432%u043E%u043C%u0443%20%u043A%u0440%u0430%u044E%7Cright%7C%7C%7Cdata%3Aimage/gif%3Bbase64%2CR0lGODlhEAAQAIABAAAAAP///yH5BAEKAAEALAAAAAAQABAAAAIajI+pm+APIZsqSortxU1bPnkPSIkkIkanUQAAOw%3D%3D%0A%0A%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E


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

FFolders (Папки Firefox) (Windows) (Firefox 20)
Автор: Anton.
Кнопка содержит выпадающее меню, через которое можно открыть папку с текущим профилем и папку установки Firefox.

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

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3EFFolders%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAsTAAALEwEAmpwYAAAD3GlDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHja7ZZdTFNnGMf/5xxKW6CWjxap0vFaQQGxw+InCAJHEDK+0nasrQMpLZYC/fBwQAQCbhkytgluMToz5r4kWJ0yXYy6LOp0WRbGMp02tTFujCFxxDDmNjfDFnbBNsgull3MO/43z5P/8+b9v2/yu3gAsRUAaBpwOHlOuyWbGIwmIvQhCEpIEY1Qs6XeXajL1QOALocluSWbCWZFAQ+8oADgepIuh507+y+SWNwcD1AEwHprVb0FoAwAdlsdTitA3QTQbHVYrQCtB1DJGYwmgD4HQGab6YcAyCpn+mEAsp28mwfonwDIOL2WBRgRQIfY9FoWEMgAOqRSr2UBIQHoEIu5jgfESQBkjfaqnYA4E0AsX9XEAwDrcu/i7LZqnsRbEogmOTmF6MyO+ganjeTUVVl4zuW0W+oJ61InkQLeipl/AABi/zq4khSZ+QbOXEdYV52LIyWci6xSJ5N8thD/t+bkK//1oY9Ac7IFhBDyKDIMRtOf9za4gLQ3AOb1WU97Ajj9PLDMMOutUAFhfuBe66z3YwYoAFSk29LANf6N80xhIEQwwhAFggSsRhaKUAYndmM/PLiEm7hPSahEKp+yUy9SA9QNaoqOpYvpFtpD+5kgJp3hGA8zEhAdYAw4GOATKARlgrcF44EpgW2BnwkXCWuFF0QRohrRFbFS3Cz2B20I6g2mgm3BV0NSQ/olkZI9kocLnAvuSMul/tDSUG9YaZg/vDx8LMIVMSXrkivkxyI3RXoXOqJEUUcUrGJ0UefipMU3otuUCUrfY50xqTETpG9JuUqh8i09EGuIi477dtnx5Y3xbEJ4wmji2RXdSdtXZqqV6t8e/yr5o1X9mn0pzatta0rX5q3buF6zITE1Lk21cUn60ozlm9SZa7OysovZbZt35HTk9m45k3ct//snpAWawqeK2os9JV5tgG6NvvrJw6U+Q5ixyNS99WqZrHzrtiMVk5UZlh7ryPZ1tp7q72pya/scQmet68sdaVw/L2/oaPy1yblrrKWi9XZbWfvXz1ieHX+uvmO6s7sr5oXTL+Xt/aan9WXFK+f3P32AOug5pHsNvQOHzW/K3xp6Z09fdj919PKxjncLTsoHhk+dfL/9jPZs/Hl8cOvDcxdevdRyueLjvE80n5JB6RD1+YMvJq7dvX7HO+ob84/f+uH21LBoZOFo/Fj6Xf24417XxNHJwfsTP8t/yXhYM3Xo98Hp6XkW5lmYZ2GehX+yYOXtDgCYsxupZnYFgMk1H2c4k4m5eOoK+k+o8F5TEy5OmgDQfwBMZtCjN+4TcwAAACBjSFJNAABtqQAAc7QAAPq1AACAlQAAYy4AAOVvAAA3hQAAFbAnc1zwAAAC9ElEQVR42oyTu29bdRiGn9+5+Tjx8S1uajsQJ72AUkJoCl1AQpGQKlCLBKhiQVWHsjDAgJhYqi4V/0GFqiAkBoK6ICTEgIDUA23VirZpSRviOJETXxrbiVOf2Oficw5DsBS2Pts3vI8+fXo/EQQBffx6QV46fzQW/+Laexd+18jc+PZSd+wYG8NTuKZJu9UBn4sjhsu1ix/cVFW5orCP7tbW5IAh7v089yNhc4yzcp6l3DTHPzpDbXGVfH6Z8Mrt2TO7P/Hgq+/xfV75n2Du7VM3T59NMmP9woyqIilNVqpr7JRWiGQzKIkW75/c5M1Wk1phE8/yXpP64bvfHQpCEUcXEY0DR6LERxW86CAT977hyakpKrUGkhHmiZJm5N2ThA+mMHJDl6R+ePpckXhaR4tp+K6HVXdJZCYZnZog/PFnNKQUjgt3VjW2/AEyEwZex0a6cTUTTJ8rArOE4y6y6mHtONiJJCI7SMs2uZ+aYXW1xW65zPKGgtnukcwO4DkeezcwZ4EWstID16JRsfl7vs62UuJK7EOs3QLZ2jKPtiMMyW2GjQZ+x8Tr9f4TWDXWF28jjesUHYF+IsxYSiYe6Hyu3+eQ/CtdR/BH4mVeSlSwyg0eL+yA65p7ggZsLN0iefwdUtG3SKRVeicc3K6Mb7m0bcGCN8ppw2MqNsdgbIaH858S8uJ7G/h+HYDcGy/QvJWn+1QlbMgIVfDU9/EEHFP/YjjioG+u0bLn6QmF+IHoZQWgXHyArOlEskfZGtqlVimTSiromsDQJIwQENh4XSjXLQor/9CxHFrV0h0FoLm9TjSdI+iZPP9ijGbIpvmohB4ShDQBEgghcJ2AVqVN4WGJcdP6RNMQCkDXMhmffJ2eFyB1O6SeSyCCAN9xqC5WkAAPsLsB4fFXOaKkufr19T+r7aCoAAhJIjZyGB7f3aulDakEgMrwwdz+tjOf/43NxgY/rPkLACIIAq5fyQQ8I4V1uHC5Kvqz6L/z7JfPJtkfBvh3AFQgRt84GXxeAAAAAElFTkSuQmCC%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bvar%20menu%20%3D%20%27%3Cmenupopup%20xmlns%3D%22http%3A//www.mozilla.org/keymaster/gatekeeper/there.is.only.xul%22%5Cn%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20onclick%3D%22this.%20parentNode.%20handleClick%20%28event%29%3B%22%3E%5Cn%5C%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20label%3D%22%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20%u043F%u0430%u043F%u043A%u0443%20%u0442%u0435%u043A%u0443%u0449%u0435%u0433%u043E%20%u043F%u0440%u043E%u0444%u0438%u043B%u044F%22%5Cn%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20value%3D%22ProfD%22/%3E%5Cn%5C%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20label%3D%22%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20%u043F%u0430%u043F%u043A%u0443%20%u0443%u0441%u0442%u0430%u043D%u043E%u0432%u043A%u0438%20Firefox%22%5Cn%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20value%3D%22CurProcD%22/%3E%5Cn%5C%0A%20%20%20%20%20%20%3C/menupopup%3E%27%3B%0Athis.%20appendChild%20%28e4xConv_parseXULFromString%20%28menu%29%29%3B%0Athis.%20type%20%3D%20%22menu%22%3B%0Athis.%20orient%20%3D%20%22horizontal%22%3B%0A%20%0Athis.%20handleClick%20%3D%20function%20%28event%29%0A%7B%0A%20%20%20%20var%20menuitem%20%3D%20event.%20target%3B%0A%20%20%20%20var%20value%20%3D%20menuitem.%20getAttribute%20%28%22value%22%29%3B%0A%20%20%20%20if%20%28event.%20button%20%3D%3D%200%29%0A%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20var%20file%20%3D%20Cc%20%5B%22@mozilla.org/file/directory_service%3B1%22%5D.%20getService%20%28Ci.%20nsIProperties%29%3B%0A%20%20%20%20%20%20%20%20file%20%3D%20file.%20get%20%28value%2C%20Ci.%20nsIFile%29.%20QueryInterface%20%28Ci.%20nsILocalFile%29%3B%0A%20%20%20%20%20%20%20%20file.%20launch%20%28%29%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20this.%20open%20%3D%20false%3B%0A%7D%3B%0A%0Afunction%20e4xConv_parseXULFromString%28xul%29%20%7B%0A%09xul%20%3D%20xul.replace%28/%3E%5Cs+%3C/g%2C%20%22%3E%3C%22%29%3B%0A%09return%20new%20DOMParser%28%29.parseFromString%28xul%2C%20%22application/xml%22%29.documentElement%3B%0A%7D%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

Пиктограмма:

Выделить код

Код:

data:image/png;base64,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

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

Выделить код

Код:

var menu = '<menupopup xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"\n\
              onclick="this. parentNode. handleClick (event);">\n\
        <menuitem label="Открыть папку текущего профиля"\n\
              value="ProfD"/>\n\
        <menuitem label="Открыть папку установки Firefox"\n\
              value="CurProcD"/>\n\
      </menupopup>';
this. appendChild (e4xConv_parseXULFromString (menu));
this. type = "menu";
this. orient = "horizontal";
 
this. handleClick = function (event)
{
    var menuitem = event. target;
    var value = menuitem. getAttribute ("value");
    if (event. button == 0)
    {
        var file = Cc ["@mozilla.org/file/directory_service;1"]. getService (Ci. nsIProperties);
        file = file. get (value, Ci. nsIFile). QueryInterface (Ci. nsILocalFile);
        file. launch ();
        }
    this. open = false;
};

function e4xConv_parseXULFromString(xul) {
    xul = xul.replace(/>\s+</g, "><");
    return new DOMParser().parseFromString(xul, "application/xml").documentElement;
}


FFolders (Папки Firefox) (Linux + KDE) (Firefox 20)
Автор: Anton.
Та же кнопка для Linux (с KDE).
скрытый текст
Код кнопки:

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3EFFolders%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%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%5Bvar%20fmPath%20%3D%20%22/usr/bin/dolphin%22%3B%0A%0Avar%20menu%20%3D%20%27%3Cmenupopup%20xmlns%3D%22http%3A//www.mozilla.org/keymaster/gatekeeper/there.is.only.xul%22%5Cn%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20onclick%3D%22this.%20parentNode.%20handleClick%20%28event%29%3B%22%3E%5Cn%5C%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20label%3D%22%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20%u043F%u0430%u043F%u043A%u0443%20%u0442%u0435%u043A%u0443%u0449%u0435%u0433%u043E%20%u043F%u0440%u043E%u0444%u0438%u043B%u044F%22%5Cn%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20value%3D%22ProfD%22/%3E%5Cn%5C%0A%20%20%20%20%20%20%20%20%3Cmenuitem%20label%3D%22%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20%u043F%u0430%u043F%u043A%u0443%20%u0443%u0441%u0442%u0430%u043D%u043E%u0432%u043A%u0438%20Firefox%22%5Cn%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20value%3D%22CurProcD%22/%3E%5Cn%5C%0A%20%20%20%20%20%20%3C/menupopup%3E%27%3B%0Athis.%20appendChild%20%28e4xConv_parseXULFromString%20%28menu%29%29%3B%0Athis.%20type%20%3D%20%22menu%22%3B%0Athis.%20orient%20%3D%20%22horizontal%22%3B%0A%20%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%20%0Athis.%20handleClick%20%3D%20function%20%28event%29%0A%7B%0A%20%20%20%20var%20menuitem%20%3D%20event.%20target%3B%0A%20%20%20%20var%20value%20%3D%20menuitem.%20getAttribute%20%28%22value%22%29%3B%0A%20%20%20%20if%20%28event.%20button%20%3D%3D%200%29%0A%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20var%20file%20%3D%20Cc%20%5B%22@mozilla.org/file/directory_service%3B1%22%5D.%20getService%20%28Ci.%20nsIProperties%29%3B%0A%20%20%20%20%20%20%20%20file%20%3D%20file.%20get%20%28value%2C%20Ci.%20nsIFile%29.%20QueryInterface%20%28Ci.%20nsILocalFile%29%3B%0A%20%20%20%20%20%20%20%20startProcess%20%28fmPath%2C%20%5Bfile.%20path%5D%29%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20this.%20open%20%3D%20false%3B%0A%7D%3B%0A%0Afunction%20e4xConv_parseXULFromString%28xul%29%20%7B%0A%09xul%20%3D%20xul.replace%28/%3E%5Cs+%3C/g%2C%20%22%3E%3C%22%29%3B%0A%09return%20new%20DOMParser%28%29.parseFromString%28xul%2C%20%22application/xml%22%29.documentElement%3B%0A%7D%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

Пиктограмма:

Выделить код

Код:

data:image/png;base64,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

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

Выделить код

Код:

var fmPath = "/usr/bin/dolphin";

var menu = '<menupopup xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"\n\
              onclick="this. parentNode. handleClick (event);">\n\
        <menuitem label="Открыть папку текущего профиля"\n\
              value="ProfD"/>\n\
        <menuitem label="Открыть папку установки Firefox"\n\
              value="CurProcD"/>\n\
      </menupopup>';
this. appendChild (e4xConv_parseXULFromString (menu));
this. type = "menu";
this. orient = "horizontal";
 
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. handleClick = function (event)
{
    var menuitem = event. target;
    var value = menuitem. getAttribute ("value");
    if (event. button == 0)
    {
        var file = Cc ["@mozilla.org/file/directory_service;1"]. getService (Ci. nsIProperties);
        file = file. get (value, Ci. nsIFile). QueryInterface (Ci. nsILocalFile);
        startProcess (fmPath, [file. path]);
        }
    this. open = false;
};

function e4xConv_parseXULFromString(xul) {
    xul = xul.replace(/>\s+</g, "><");
    return new DOMParser().parseFromString(xul, "application/xml").documentElement;
}

18-05-2013 00:37:04
Вставка символа (Firefox 20)
Авторы: Anton, Infocatcher.
Позволяет выбирать различные специальные символы из выпадающего списка и вставлять их в любые поля ввода (обсуждение кнопки).

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

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3E%u0412%u0441%u0442%u0430%u0432%u043A%u0430%20%u0441%u0438%u043C%u0432%u043E%u043B%u0430%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAA80lEQVRIie3TPyuFYRjH8c/COVkQFot4B2RS2BQ2g0F5DzbehBcgnTOcMpmUTSxSijLIaOAVUCd/Bo7huYR60nPux+b5bdf9u/p977v7uqj0b9WLoQJ9E6mABq4w8EvPMl6xkAKYwgPOsYSTqO+xi1U84xA9KQCYQRsdvOASt1F3AlpPDYexANxg/Nv5Gt5wUCYctmQ3ncvxmnjHYBnATgD6c7yN8CbLADYjZD7Ha/mDF4zKJuVa9h+fWo/w/TLhMIsnX1N04ecUnaIvNXwajzjDIo6jvsM2VgJ6hFoKYE+xTW7L9qVr1TFcoG8kJbxSpe70AT7wNojTKWYHAAAAAElFTkSuQmCC%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bvar%20menu%20%3D%20%27%3Cmenupopup%20xmlns%3D%22http%3A//www.mozilla.org/keymaster/gatekeeper/there.is.only.xul%22%5Cn%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20oncommand%3D%22this.parentNode.handleMenuCommand%28event%29%22%3E%5Cn%5C%0A%20%20%20%20%3Ctoolbarbutton%20value%3D%22%A4%22/%3E%5Cn%5C%0A%20%20%20%20%3Ctoolbarbutton%20value%3D%22%A6%22/%3E%5Cn%5C%0A%20%20%20%20%3Ctoolbarbutton%20value%3D%22%A7%22/%3E%5Cn%5C%0A%20%20%20%20%3Ctoolbarbutton%20value%3D%22%A9%22/%3E%5Cn%5C%0A%20%20%20%20%3Ctoolbarbutton%20value%3D%22%AB%22/%3E%5Cn%5C%0A%20%20%20%20%3Ctoolbarbutton%20value%3D%22%BB%22/%3E%5Cn%5C%0A%20%20%20%20%3Ctoolbarbutton%20value%3D%22%AC%22/%3E%5Cn%5C%0A%20%20%20%20%3Ctoolbarbutton%20value%3D%22%AE%22/%3E%5Cn%5C%0A%20%20%20%20%3Ctoolbarbutton%20value%3D%22%B0%22/%3E%5Cn%5C%0A%20%20%20%20%3Ctoolbarbutton%20value%3D%22%B1%22/%3E%5Cn%5C%0A%20%20%20%20%3Ctoolbarbutton%20value%3D%22%B5%22/%3E%5Cn%5C%0A%20%20%20%20%3Ctoolbarbutton%20value%3D%22%B6%22/%3E%5Cn%5C%0A%20%20%20%20%3Ctoolbarbutton%20value%3D%22%u2014%22/%3E%5Cn%5C%0A%20%20%20%20%3Ctoolbarbutton%20value%3D%22%u2018%22/%3E%5Cn%5C%0A%20%20%20%20%3Ctoolbarbutton%20value%3D%22%u2019%22/%3E%5Cn%5C%0A%20%20%20%20%3Ctoolbarbutton%20value%3D%22%u201C%22/%3E%5Cn%5C%0A%20%20%20%20%3Ctoolbarbutton%20value%3D%22%u201D%22/%3E%5Cn%5C%0A%20%20%20%20%3Ctoolbarbutton%20value%3D%22%u2022%22/%3E%5Cn%5C%0A%20%20%20%20%3Ctoolbarbutton%20value%3D%22%u2030%22/%3E%5Cn%5C%0A%20%20%20%20%3Ctoolbarbutton%20value%3D%22%u2039%22/%3E%5Cn%5C%0A%20%20%20%20%3Ctoolbarbutton%20value%3D%22%u203A%22/%3E%5Cn%5C%0A%20%20%20%20%3Ctoolbarbutton%20value%3D%22%u2122%22/%3E%5Cn%5C%0A%3C/menupopup%3E%27%3B%0A%0Amenu%20%3D%20e4xConv_parseXULFromString%20%28menu%29%3B%0Athis.%20appendChild%20%28menu%29%3B%0Athis.%20value%20%3D%20menu.%20firstChild.%20getAttribute%20%28%22value%22%29%3B%0A%0Athis.%20makePNG%20%3D%20function%20%28text%2C%20height%29%0A%7B%0A%20%20%20%20var%20h%20%3D%20height%3B%0A%20%20%20%20var%20cw%20%3D%2024%2C%20ch%20%3D%2024%3B%0A%20%20%20%20var%20canvas%20%3D%20%27%3Ccanvas%20xmlns%3D%22http%3A//www.w3.org/1999/xhtml%22%20width%3D%22%27%20+%20e4xConv_encodeHTML%28cw%2C%20true%29%20+%20%27%22%20height%3D%22%27%20+%20e4xConv_encodeHTML%28ch%2C%20true%29%20+%20%27%22%20style%3D%22display%3Anone%3B%22%3E%3C/canvas%3E%27%3B%0A%20%20%20%20cw%20-%3D%202%3B%0A%20%20%20%20ch%20-%3D%202%3B%0A%20%20%20%20canvas%20%3D%20e4xConv_parseXULFromString%20%28canvas%29%3B%0A%20%20%20%20this.%20appendChild%20%28canvas%29%3B%0A%20%20%20%20var%20ctxt%20%3D%20canvas.%20getContext%20%28%222d%22%29%3B%0A%20%20%20%20ctxt.%20clearRect%20%280%2C%200%2C%20cw%2C%20ch%29%3B%0A%20%20%20%20ctxt.%20font%20%3D%20h%20+%20%22pt%20times%20bold%22%0A%20%20%20%20var%20m%20%3D%20ctxt.%20measureText%20%28text%29%3B%0A%20%20%20%20m%20%3D%20%28cw%20-%20m.%20width%29%20/%202.0%3B%0A%20%20%20%20h%20%3D%20ch%20-%20%28ch%20-%20h%29%20/%202.0%3B%0A%20%20%20%20ctxt.%20fillText%20%28text%2C%20m%2C%20h%29%3B%0A%20%20%20%20var%20uri%20%3D%20canvas.%20toDataURL%20%28%22image/png%22%2C%20%22%22%29%3B%0A%20%20%20%20this.%20removeChild%20%28canvas%29%3B%0A%20%20%20%20return%20uri%3B%0A%7D%3B%0A%0Athis.%20image%20%3D%20this.%20makePNG%20%28this.%20value%2C%2016%29%3B%0A%0Avar%20mi%2C%20val%3B%0Afor%20%28var%20i%20%3D%200%3B%20i%20%3C%20menu.%20childNodes.%20length%3B%20i++%29%0A%7B%0A%20%20%20%20mi%20%3D%20menu.%20childNodes%20%5Bi%5D%3B%0A%20%20%20%20val%20%3D%20mi.%20getAttribute%20%28%22value%22%29%3B%0A%20%20%20%20val%20%3D%20this.%20makePNG%20%28val%2C%2012%29%3B%0A%20%20%20%20mi.%20setAttribute%20%28%22image%22%2C%20val%29%3B%0A%7D%0A%0Athis.%20insertText%20%3D%20function%20%28text%29%0A%7B%0A%20%20%20%20var%20command%20%3D%20%22cmd_insertText%22%3B%0A%20%20%20%20var%20controller%20%3D%20document.%20commandDispatcher.%20getControllerForCommand%20%28command%29%3B%0A%20%20%20%20if%20%28controller%20%26%26%20controller.%20isCommandEnabled%20%28command%29%29%0A%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20controller%20%3D%20controller.%20QueryInterface%20%28Components.%20interfaces.%20nsICommandController%29%3B%0A%20%20%20%20%20%20%20%20var%20params%20%3D%20Components.%20classes%20%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%20createInstance%20%28Components.%20interfaces.%20nsICommandParams%29%3B%0A%20%20%20%20%20%20%20%20params.%20setStringValue%20%28%22state_data%22%2C%20text%29%3B%0A%20%20%20%20%20%20%20%20controller.%20doCommandWithParams%20%28command%2C%20params%29%3B%0A%20%20%20%20%7D%0A%7D%3B%0A%0Athis.%20handleMenuCommand%20%3D%20function%20%28event%29%0A%7B%0A%20%20%20%20event.%20stopPropagation%20%28%29%3B%0A%20%20%20%20var%20mi%20%3D%20event.%20originalTarget%3B%0A%20%20%20%20var%20text%20%3D%20mi.%20getAttribute%20%28%22value%22%29%3B%0A%20%20%20%20this.%20image%20%3D%20this.%20makePNG%20%28text%2C%2016%29%3B%0A%20%20%20%20this.%20value%20%3D%20text%3B%0A%20%20%20%20this.%20insertText%20%28text%29%3B%0A%7D%3B%0A%0Athis.%20type%20%3D%20%22menu-button%22%3B%0A%0Afunction%20e4xConv_parseXULFromString%28xul%29%20%7B%0A%09xul%20%3D%20xul.replace%28/%3E%5Cs+%3C/g%2C%20%22%3E%3C%22%29%3B%0A%09return%20new%20DOMParser%28%29.parseFromString%28xul%2C%20%22application/xml%22%29.documentElement%3B%0A%7D%0Afunction%20e4xConv_encodeHTML%28s%2C%20isAttr%29%20%7B%0A%09s%20%3D%20String%28s%29%0A%09%09.replace%28/%26/g%2C%20%22%26amp%3B%22%29%0A%09%09.replace%28/%3C/g%2C%20%22%26lt%3B%22%29%0A%09%09.replace%28/%3E/g%2C%20%22%26gt%3B%22%29%0A%09%09.replace%28/%22/g%2C%20%22%26quot%3B%22%29%3B%0A%09if%28isAttr%29%20%7B%0A%09%09s%20%3D%20s%0A%09%09%09.replace%28/%5Ct/g%2C%20%22%26%23x9%3B%22%29%0A%09%09%09.replace%28/%5Cn/g%2C%20%22%26%23xA%3B%22%29%0A%09%09%09.replace%28/%5Cr/g%2C%20%22%26%23xD%3B%22%29%3B%0A%09%7D%0A%09return%20s%3B%0A%7D%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5Bthis.%20insertText%20%28this.%20value%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

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

Выделить код

Код:

var menu = '<menupopup xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"\n\
              oncommand="this.parentNode.handleMenuCommand(event)">\n\
    <toolbarbutton value="¤"/>\n\
    <toolbarbutton value="¦"/>\n\
    <toolbarbutton value="§"/>\n\
    <toolbarbutton value="©"/>\n\
    <toolbarbutton value="«"/>\n\
    <toolbarbutton value="»"/>\n\
    <toolbarbutton value="¬"/>\n\
    <toolbarbutton value="®"/>\n\
    <toolbarbutton value="°"/>\n\
    <toolbarbutton value="±"/>\n\
    <toolbarbutton value="µ"/>\n\
    <toolbarbutton value="¶"/>\n\
    <toolbarbutton value="—"/>\n\
    <toolbarbutton value="‘"/>\n\
    <toolbarbutton value="’"/>\n\
    <toolbarbutton value="“"/>\n\
    <toolbarbutton value="”"/>\n\
    <toolbarbutton value="•"/>\n\
    <toolbarbutton value="‰"/>\n\
    <toolbarbutton value="‹"/>\n\
    <toolbarbutton value="›"/>\n\
    <toolbarbutton value="™"/>\n\
</menupopup>';

menu = e4xConv_parseXULFromString (menu);
this. appendChild (menu);
this. value = menu. firstChild. getAttribute ("value");

this. makePNG = function (text, height)
{
    var h = height;
    var cw = 24, ch = 24;
    var canvas = '<canvas xmlns="http://www.w3.org/1999/xhtml" width="' + e4xConv_encodeHTML(cw, true) + '" height="' + e4xConv_encodeHTML(ch, true) + '" style="display:none;"></canvas>';
    cw -= 2;
    ch -= 2;
    canvas = e4xConv_parseXULFromString (canvas);
    this. appendChild (canvas);
    var ctxt = canvas. getContext ("2d");
    ctxt. clearRect (0, 0, cw, ch);
    ctxt. font = h + "pt times bold"
    var m = ctxt. measureText (text);
    m = (cw - m. width) / 2.0;
    h = ch - (ch - h) / 2.0;
    ctxt. fillText (text, m, h);
    var uri = canvas. toDataURL ("image/png", "");
    this. removeChild (canvas);
    return uri;
};

this. image = this. makePNG (this. value, 16);

var mi, val;
for (var i = 0; i < menu. childNodes. length; i++)
{
    mi = menu. childNodes [i];
    val = mi. getAttribute ("value");
    val = this. makePNG (val, 12);
    mi. setAttribute ("image", val);
}

this. insertText = function (text)
{
    var command = "cmd_insertText";
    var controller = document. commandDispatcher. getControllerForCommand (command);
    if (controller && controller. isCommandEnabled (command))
    {
            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 (command, params);
    }
};

this. handleMenuCommand = function (event)
{
    event. stopPropagation ();
    var mi = event. originalTarget;
    var text = mi. getAttribute ("value");
    this. image = this. makePNG (text, 16);
    this. value = text;
    this. insertText (text);
};

this. type = "menu-button";

function e4xConv_parseXULFromString(xul) {
    xul = xul.replace(/>\s+</g, "><");
    return new DOMParser().parseFromString(xul, "application/xml").documentElement;
}
function e4xConv_encodeHTML(s, isAttr) {
    s = String(s)
        .replace(/&/g, "&amp;")
        .replace(/</g, "&lt;")
        .replace(/>/g, "&gt;")
        .replace(/"/g, "&quot;");
    if(isAttr) {
        s = s
            .replace(/\t/g, "&#x9;")
            .replace(/\n/g, "&#xA;")
            .replace(/\r/g, "&#xD;");
    }
    return s;
}

Код:

Выделить код

Код:

this. insertText (this. value);

Quote+ - Копирует выделенный текст, с сохранением форматирования в bbcode и тегами {quote}, в форму ответа или буфер обмена.

Код кнопки

Выделить код

Код:

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%3EQuote+%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAC4jAAAuIwF4pT92AAAAcElEQVR4nL2TUQoAIQhE+/JC3v/fW7U7C0JaisGiMFDWPCahISIDemtWpZ7Pp2Zb+Z6IZgCogQBg5nlMkEVfEwSAHxPYdWcCPwefqn8G/QkqoA0AoRkJl9W4mg0AwsFJMCGFN2+ATHjm+omuAQrxvQe3Gn9JVU+LzAAAAABJRU5ErkJggg%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%20win%20%3D%20document.commandDispatcher.focusedWindow.top%20%3D%3D%20content%20%3F%20document.commandDispatcher.focusedWindow%20%3A%20content%2C%20doc%20%3D%20win.document%3B%0A%0Avar%20addText%20%3D%20function%20%28el%2C%20start%2C%20end%29%20%7B%0A%20%20%20%20if%20%28el.firstChild%29%20%7B%0A%20%20%20%20%20%20%20%20el.insertBefore%28doc.createTextNode%28start%29%2C%20el.firstChild%29%3B%0A%20%20%20%20%20%20%20%20el.appendChild%28doc.createTextNode%28end%29%29%3B%0A%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20el.parentNode.insertBefore%28doc.createTextNode%28start%29%2C%20el%29%3B%0A%20%20%20%20%7D%0A%7D%3B%0A%0Avar%20s%20%3D%20win.getSelection%28%29%3B%0Aif%20%28s%20%21%3D%20%27%27%29%20%7B%0A%20%20%20%20var%20rng%20%3D%20s.getRangeAt%280%29%2C%20sel%20%3D%20doc.createElement%28%27div%27%29%3B%0A%20%20%20%20sel.appendChild%28rng.cloneContents%28%29%29%3B%0A%20%20%20%20var%20ele%20%3D%20sel.getElementsByTagName%28%27*%27%29%3B%0A%20%20%20%20for%20%28var%20i%20%3D%200%2C%20e%3B%20e%20%3D%20ele%5Bi%5D%3B%20i++%29%20%7B%0A%20%20%20%20%20%20%20%20switch%20%28e.nodeName.toUpperCase%28%29%29%20%7B%0A%20%20%20%20%20%20%20%20case%20%27A%27%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20addText%28e%2C%20%27%5Burl%3D%27%20+%20e.href%20+%20%27%5D%27%2C%20%27%5B/url%5D%27%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%20%20case%20%27FONT%27%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20%28e.color%29%20addText%28e%2C%20%27%5Bcolor%3D%27%20+%20e.color%20+%20%27%5D%27%2C%20%27%5B/color%5D%27%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%20%20case%20%27B%27%3A%0A%20%20%20%20%20%20%20%20case%20%27STRONG%27%3A%0A%20%20%20%20%20%20%20%20case%20%27H2%27%3A%0A%20%20%20%20%20%20%20%20case%20%27H3%27%3A%0A%20%20%20%20%20%20%20%20case%20%27H4%27%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20addText%28e%2C%20%27%5Bb%5D%27%2C%20%27%5B/b%5D%27%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%20%20case%20%27I%27%3A%0A%20%20%20%20%20%20%20%20case%20%27EM%27%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20addText%28e%2C%20%27%5Bi%5D%27%2C%20%27%5B/i%5D%27%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%20%20case%20%27U%27%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20addText%28e%2C%20%27%5Bu%5D%27%2C%20%27%5B/u%5D%27%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%20%20case%20%27PRE%27%3A%0A%20%20%20%20%20%20%20%20case%20%27CODE%27%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20addText%28e%2C%20%27%5Bcode%5D%27%2C%20%27%5B/code%5D%27%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%20%20case%20%27BLOCKQUOTE%27%3A%0A%20%20%20%20%20%20%20%20case%20%27Q%27%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20addText%28e%2C%20%27%5Bquote%5D%27%2C%20%27%5B/quote%5D%27%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%20%20case%20%27DIV%27%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20%28e.className%20%3D%3D%20%27code%27%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20addText%28e%2C%20%27%5Bcode%5D%27%2C%20%27%5B/code%5D%27%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%20else%20if%20%28e.className%20%3D%3D%20%27quote%27%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20addText%28e%2C%20%27%5Bquote%5D%27%2C%20%27%5B/quote%5D%27%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%20%20case%20%27IMG%27%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20e.removeAttribute%28%27alt%27%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20e.removeAttribute%28%27title%27%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20addText%28e%2C%20%27%5Bimg%5D%27%20+%20e.src%20+%20%27%5B/img%5D%27%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20break%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%3B%0A%0A%20%20%20%20var%20cnt%20%3D%20rng.commonAncestorContainer%3B%0A%20%20%20%20if%20%28cnt.nodeType%20%21%3D%201%29%20cnt%20%3D%20cnt.parentNode%3B%0A%20%20%20%20cnt.appendChild%28sel%29%3B%0A%20%20%20%20s.removeAllRanges%28%29%3B%0A%20%20%20%20rng%20%3D%20doc.createRange%28%29%3B%0A%20%20%20%20rng.selectNodeContents%28sel%29%3B%0A%20%20%20%20s.addRange%28rng%29%3B%0A%20%20%20%20var%20txt%20%3D%20s.toString%28%29%3B%0A%20%20%20%20s.removeAllRanges%28%29%3B%0A%20%20%20%20cnt.removeChild%28sel%29%3B%0A%0A%20%20%20%20var%20prequote%20%3D%20function%28v%2Cc%29%7Bvar%20n%3D%27%27%2Cu%3D%27%27%3Bif%28win.location.hostname%3D%3D%27forum.ru-board.com%27%29%7Bwhile%28c.className%21%3D%27tpc%27%26%26c.parentNode%29%7Bc%3Dc.parentNode%7D%3Bif%28c.className%21%3D%27tpc%27%29return%3Bvar%20tn%3Dc.parentNode.parentNode.childNodes%5B1%5D.childNodes%5B0%5D.childNodes%5B1%5D%3Bn%3D%27%5Bb%5D%27+c.parentNode.firstChild.getElementsByTagName%28%27b%27%29%5B0%5D.textContent+%27%5B/b%5D%20%27%3Bu%3D%27%5Burl%3D%27+tn.childNodes%5B5%5D.href+%27%5D%5Bcolor%3D%23007777%5D%5Bsize%3D1%5D%5Bu%5D%27+tn.childNodes%5B7%5D.textContent.replace%28/%5E%20+/%2C%27%27%29.replace%28/%20+%24/%2C%27%27%29+%27%5B/u%5D%5B/size%5D%5B/color%5D%5B/url%5D%20%27%7D%3Bif%28%28win.wrappedJSObject%7C%7Cwin%29.smf_theme_url%29%7Bwhile%28%28c.className%7C%7C%27%27%29.indexOf%28%27windowbg%27%29%3D%3D-1%26%26c.parentNode%29%7Bc%3Dc.parentNode%7D%3Bvar%20dv%3Dc.getElementsByTagName%28%27div%27%29%3Bfor%28var%20i%3D0%2Cdi%3Bdi%3Ddv%5Bi%5D%3Bi++%29%7Bif%28di.className%3D%3D%27post%27%29%7Bc%3Ddi%3Bbreak%7D%7D%3Bif%28c.className%21%3D%27post%27%29return%3Bn%3D%27%5Bb%5D%27+c.parentNode.parentNode.getElementsByTagName%28%27a%27%29%5B0%5D.textContent+%27%5B/b%5D%20%27%3Bu%3D%27%5Burl%3D%27+c.parentNode.getElementsByTagName%28%27a%27%29%5B0%5D.href+%27%5D%5Bsize%3D1%5D%5Bu%5D%5B%3F%5D%5B/u%5D%5B/size%5D%5B/url%5D%20%27%7D%3Bif%28v.indexOf%28n%29%21%3D-1%29n%3D%27%27%3Bif%28v.indexOf%28u%29%21%3D-1%29u%3D%27%27%3Breturn%20n+u%7D%3B%0A%0A%20%20%20%20var%20pre%2C%20t%2C%20ts%20%3D%20doc.getElementsByTagName%28%27textarea%27%29%3B%0A%20%20%20%20for%20%28var%20i%20%3D%20ts.length%3B%20i--%3B%29%20%7B%0A%20%20%20%20%20%20%20%20t%20%3D%20ts%5Bi%5D%3B%0A%20%20%20%20%20%20%20%20if%20%28t.rows%20%3E%204%20%26%26%20t.offsetHeight%20%3E%200%29%20break%0A%20%20%20%20%7D%3B%0A%20%20%20%20if%20%28%21t%20%7C%7C%20t.offsetHeight%20%3D%3D%200%29%20%7B%0A%20%20%20%20%20%20%20%20gClipboard.write%28txt%29%0A%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20if%20%28t.rows%20%3C%2015%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20var%20len%20%3D%20t.rows%20+%20txt.split%28%27%5Cn%27%29.length%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20t.rows%20%3D%20%28len%20%3C%3D%2015%29%20%3F%20len%20%3A%2015%0A%20%20%20%20%20%20%20%20%7D%3B%0A%0A%20%20%20%20%20%20%20%20try%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20pre%20%3D%20prequote%28t.value%2C%20cnt%29%20%7C%7C%20%27%27%0A%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%20pre%20%3D%20%27%27%0A%20%20%20%20%20%20%20%20%7D%3B%0A%0A%20%20%20%20%20%20%20%20var%20tEnd%20%3D%20t.selectionEnd%2C%20tLen%20%3D%20t.value.length%3B%0A%20%20%20%20%20%20%20%20t.value%20%3D%20t.value.substring%280%2C%20tEnd%29%20+%20pre%20+%20%27%5Bquote%5D%27%20+%20txt%20+%20%27%5B/quote%5D%5Cn%27%20+%20t.value.substring%28tEnd%2C%20tLen%29%3B%0A%20%20%20%20%20%20%20%20tEnd%20+%3D%20t.value.length%20-%20tLen%3B%0A%20%20%20%20%20%20%20%20t.setSelectionRange%28tEnd%2C%20tEnd%29%3B%0A%20%20%20%20%20%20%20%20t.focus%28%29%0A%20%20%20%20%7D%0A%7D%20else%20%7B%0A%09ujs_bbcode_tag%28%27%5Bquote%5D%27%29%3B%0A%7D%3B%0A%0Afunction%20ujs_bbcode_tag%28tag%29%7B%0A%09var%20ts%3Dwin.getSelection%28%29.toString%28%29%3B%0A%09var%20et%3Ddoc.activeElement%3B%0A%09var%20en%3Det%20%26%26%20et.nodeName.toLowerCase%28%29%3B%0A%09var%20ta%3D%28en%3D%3D%27textarea%27%20%7C%7C%20%28en%3D%3D%27input%27%20%26%26%20et.type%3D%3D%27text%27%29%29%20%3F%20et%20%3A%20null%3B%3B%0A%09if%28%21ta%29for%28var%20t%3Ddoc.getElementsByTagName%28%27textarea%27%29%2C%20i%3Dt.length%3B%20i--%3B%29%7Bta%3Dt%5Bi%5D%3B%20if%28ta.rows%3E4%20%26%26%20ta.offsetHeight%3E0%29break%7D%3B%0A%09if%28%21ta%20%7C%7C%20ta.offsetHeight%3D%3D0%29return%3B%0A%0A%09var%20s%2C%20e_tag%3B%0A%09var%20s_tag%3Dtag%3B%0A%09var%20nStart%3Dta.selectionStart%3B%0A%09var%20nEnd%3Dta.selectionEnd%3B%0A%09var%20txt%3Dta.value.substring%28nStart%2C%20nEnd%29%3B%0A%09var%20s_txt%3Dta.value.substring%280%2C%20nStart%29%3B%0A%09var%20e_txt%3Dta.value.substring%28nEnd%2C%20ta.value.length%29%3B%0A%0A%09var%20al%3Darguments.length%3B%0A%09if%28al%3D%3D0%29return%20ts%20%7C%7C%20txt%3B%0A%09if%28al%3D%3D1%20%26%26%20typeof%20arguments%5B0%5D%3D%3D%27function%27%29%7B%0A%09%09var%20sel%3D%7Btext%3A%20txt%2C%20start%3A%200%2C%20end%3A%20nEnd-nStart%7D%3B%0A%09%09arguments%5B0%5D%28sel%29%3B%0A%09%09ta.value%3Ds_txt+sel.text+e_txt%3B%0A%09%09var%20len%3Dta.value.length-s_txt.length-e_txt.length+1%3B%0A%09%09ta.setSelectionRange%28nStart+sel.start+%28sel.start%3C0%20%3F%20len%20%3A%200%29%2C%20nStart+sel.end+%28sel.end%3C0%20%3F%20len%20%3A%200%29%29%3B%0A%09%09ta.focus%28%29%3B%0A%09%09return%3B%0A%09%7D%3B%0A%09if%28al%3D%3D2%20%26%26%20arguments%5B1%5D%21%3D%27%27%29%7B%0A%09%09e_tag%3Darguments%5B1%5D%3B%0A%09%7D%0A%09else%7B%0A%09%09e_tag%3Dtag.replace%28/%28%5E.%29%28%5B%5E%3D%20%5D*%29%28.*%29%28.%24%29/%2C%20%27%241/%242%244%27%29%3B%0A%09%7D%3B%0A%0A%09var%20stl%3Ds_tag.length%3B%0A%09var%20etl%3De_tag.length%3B%0A%09var%20lt%3Dstl+etl%3B%0A%0A%09if%28txt.indexOf%28s_tag%29%3D%3D0%20%26%26%20txt.lastIndexOf%28e_tag%29%3D%3D%28txt.length-etl%29%29%7B%0A%09%09s%3Ds_txt+txt.slice%28stl%2C%20-etl%29+e_txt%3B%0A%09%09nEnd-%3Dlt%3B%0A%09%7D%0A%09else%7B%0A%09%09if%28nStart%3D%3DnEnd%20%26%26%20s_txt.lastIndexOf%28s_tag%29%3D%3Ds_txt.length-stl%20%26%26%20e_txt.indexOf%28e_tag%29%3D%3D0%29%7B%0A%09%09%09s%3Ds_txt.slice%280%2C%20-stl%29+e_txt.slice%28etl%29%3B%0A%09%09%09nStart-%3Dstl%3B%0A%09%09%09nEnd%3DnStart%3B%0A%09%09%7D%0A%09%09else%7B%0A%09%09%09if%28ts%20%26%26%20ta%21%3Det%29%7B%0A%09%09%09%09s%3Ds_txt+txt+s_tag+ts+e_tag+e_txt%3B%0A%09%09%09%09nStart%3DnEnd%3B%0A%09%09%09%09nEnd+%3Dts.length%3B%0A%09%09%09%09txt%3Dts%3B%0A%09%09%09%7D%0A%09%09%09else%7B%0A%09%09%09%09s%3Ds_txt+s_tag+txt+e_tag+e_txt%3B%0A%09%09%09%7D%3B%0A%0A%09%09%09if%28txt.length%3D%3D0%20%26%26%20s_tag%21%3D%27%27%29%7B%0A%09%09%09%09nStart+%3Dstl%3B%0A%09%09%09%09nEnd%3DnStart%3B%0A%09%09%09%7D%0A%09%09%09else%7B%0A%09%09%09%09if%28s_tag.slice%28-4%2C%20-1%29%3D%3D%27%3D%22%22%27%20%7C%7C%20s_tag.slice%28-2%2C%20-1%29%3D%3D%27%3D%27%20%26%26%20s_tag.slice%28-1%29%21%3D%27%22%27%29%7B%0A%09%09%09%09%09nStart%3DnStart+stl-%28s_tag.slice%28-3%2C%20-1%29%3D%3D%27%22%22%27%20%3F%202%20%3A%201%29%3B%0A%09%09%09%09%09nEnd%3DnStart%3B%0A%09%09%09%09%7D%0A%09%09%09%09else%7B%0A%09%09%09%09%09nEnd+%3Dlt%3B%0A%09%09%09%09%09if%28s_tag%3D%3D%27%27%20%7C%7C%20s_tag.slice%28-1%29%3D%3D%27%22%27%20%7C%7C%20%28al%3D%3D2%20%26%26%20arguments%5B1%5D%3D%3D%27%27%29%29nStart%3DnEnd%3B%0A%09%09%09%09%7D%0A%09%09%09%7D%0A%09%09%7D%0A%09%7D%3B%0A%0A%09ta.value%3Ds%3B%0A%09ta.setSelectionRange%28nStart%2C%20nEnd%29%3B%0A%09ta.focus%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%5B%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

Добавить закладку на Desktop (Firefox). Создаёт пункт в контекстном меню страницы/ссылки для добавления закладки в расширение Desktop (Рабочий стол).

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

Выделить код

Код:

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%u0414%u043E%u0431%u0430%u0432%u0438%u0442%u044C%20%u0437%u0430%u043A%u043B%u0430%u0434%u043A%u0443%20%u043D%u0430%20Desktop%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%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%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%22%u0414%u043E%u0431%u0430%u0432%u0438%u0442%u044C%20%u0437%u0430%u043A%u043B%u0430%u0434%u043A%u0443%20%u043D%u0430%20Desktop%22%20%u0432%20%u043A%u043E%u043D%u0442%u0435%u043A%u0441%u0442%u043D%u043E%u043C%20%u043C%u0435%u043D%u044E%20%u043D%u0430%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u0435%2C%20%u043E%u0442%2022.06.2013.%0A%28function%20%28%29%20%7B%20%0A%0A%20%20%20const%20alertsService%20%3D%20Components.classes%5B%22@mozilla.org/alerts-service%3B1%22%5D.getService%28Components.interfaces.nsIAlertsService%29%3B%0A%20%20%20var%20icon1%3D%22data%3Aimage/png%3Bbase64%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%3D%3D%22%3B%0A%0A%20%20%20var%20menuitem%20%3D%20document.createElement%28%22menuitem%22%29%3B%20%20%20%0A%20%20%20menuitem.setAttribute%28%22id%22%2C%20%22context-addBookmark%22%29%3B%0A%20%20%20menuitem.setAttribute%28%22label%22%2C%20%22%u0414%u043E%u0431%u0430%u0432%u0438%u0442%u044C%20%u0437%u0430%u043A%u043B%u0430%u0434%u043A%u0443%20%u043D%u0430%20%22%20+%20getFolderName%28%29%20%29%3B%20%20%0A%20%20%20menuitem.setAttribute%28%22class%22%2C%20%22menuitem-iconic%22%29%3B%0A%20%20%20menuitem.setAttribute%28%22image%22%2C%20icon1%29%3B%0A%0A%20%20%20const%20contextMenu%20%3D%20document.getElementById%28%22contentAreaContextMenu%22%29%3B%20%0A%20%20%20contextMenu.appendChild%28%20menuitem%20%29%3B%20%0A%20%20%20addDestructor%28function%28%20reason%20%29%20%7B%20contextMenu.removeChild%28%20menuitem%29%20%7D%29%3B%0A%0A%20%20%20addEventListener%28%22click%22%2C%20function%28e%29%20%7B%20%20%20%20%20%0A%0A%20%20%20%20%20%20if%20%28%20e.button%20%3D%3D%200%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20gContextMenu.onLink%20%0A%20%20%20%20%20%20%20%20%20%20%20%3F%20addBookmark%28%20gContextMenu.getLinkURI%28%29%2C%20gContextMenu.linkText%28%29%2C%20gContextMenu.onLink%20%29%0A%20%20%20%20%20%20%20%20%20%20%20%3A%20addBookmark%28%20gBrowser.selectedBrowser.webNavigation.currentURI%2C%20getDocTitle%28%29%20%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%7D%20%20%20%0A%20%20%20%7D%2C%20false%2C%20menuitem%20%29%3B%0A%0A%20%20%20function%20getDocTitle%28%29%20%7B%0A%20%20%20%20%20%20var%20docTitle%20%3D%20content.document.title%20%7C%7C%20gBrowser.mCurrentTab.label%3B%20%20%20%20%20%20%20%0A%20%20%20%20%20%20//%20%u0443%u0434%u0430%u043B%u0438%u0442%u044C%20%u043B%u0438%u0448%u043D%u0438%u0435%20%u0441%u0438%u043C%u0432%u043E%u043B%u044B%20%u0438%20%u043F%u0440%u043E%u0431%u0435%u043B%u044B%20%0A%20%20%20%20%20%20var%20docTitle%20%3D%20docTitle.replace%28/%5B%3A.%5C%5C%5C/%3C%3E%3F*%7C%22%5D+/g%2C%20%22%20%22%29%0A%20%20%20%20%20%20var%20docTitle%20%3D%20docTitle.replace%28/%5Cs%5Cs+/g%2C%20%22%20%22%29%3B%0A%0A%20%20%20%20%20%20return%20docTitle.substring%280%2C%2050%29%3B%0A%20%20%20%7D%3B%0A%0A%20%20%20function%20getFolderName%28%29%20%7B%0A%20%20%20%20%20%20var%20folder%20%3D%20Application.prefs.getValue%28%22CB.bookmarkFolderForSaving%22%2C%200%29%3B%20%0A%20%20%20%20%20%20return%20%28%20folder%20%3D%3D%200%20%29%20%3F%20%22Desktop%22%20%3A%20folder%3B%0A%20%20%20%7D%3B%0A%0A%20%20%20function%20getChildFolder%28%20parentId%2C%20title%20%29%20%7B%0A%20%20%20%20%20%20var%20res%20%3D%20null%3B%0A%20%20%20%20%20%20try%20%7B%0A%20%20%20%20%20%20%20%20%20%20var%20hs%20%3D%20Cc%20%5B%22@mozilla.org/browser/nav-history-service%3B1%22%5D.getService%28Ci.nsINavHistoryService%29%3B%0A%20%20%20%20%20%20%20%20%20%20var%20options%20%3D%20hs.getNewQueryOptions%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20options.excludeItems%20%3D%20true%3B%0A%20%20%20%20%20%20%20%20%20%20var%20query%20%3D%20hs.getNewQuery%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20query.setFolders%28%20%5BparentId%5D%2C%201%20%29%3B%0A%20%20%20%20%20%20%20%20%20%20var%20result%20%3D%20hs.executeQuery%28%20query%2C%20options%20%29%3B%0A%20%20%20%20%20%20%20%20%20%20var%20rn%20%3D%20result.root%3B%0A%20%20%20%20%20%20%20%20%20%20rn.containerOpen%20%3D%20true%3B%0A%20%20%20%20%20%20%20%20%20%20var%20i%2C%20node%3B%0A%20%20%20%20%20%20%20%20%20%20for%20%28%20i%20%3D%200%3B%20i%20%3C%20rn.childCount%3B%20i++%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20node%20%3D%20rn.getChild%28i%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%20node.title%20%3D%3D%20title%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20res%20%3D%20node.itemId%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%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%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20rn.containerOpen%20%3D%20false%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%20%0A%20%20%20catch%28e%29%20%7B%7D%0A%0A%20%20%20return%20res%3B%0A%20%20%20%7D%3B%20%0A%0A%20%20%20function%20addBookmark%28%20url%2C%20label%2C%20link%20%29%20%7B%0A%20%20%20%20%20%20var%20bmsvc%20%3D%20Components.classes%20%5B%22@mozilla.org/browser/nav-bookmarks-service%3B1%22%5D.getService%28Components.interfaces.nsINavBookmarksService%29%3B%0A%20%20%20%20%20%20var%20rootFolder%20%3D%20bmsvc.bookmarksMenuFolder%3B%0A%20%20%20%20%20%20var%20folderName%20%3D%20getFolderName%28%29%3B%0A%20%20%20%20%20%20var%20folder%20%3D%20getChildFolder%28%20rootFolder%2C%20folderName%20%29%3B%0A%20%20%20%20%20%20if%20%28%20%21folder%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20bmsvc.createFolder%28%20rootFolder%2C%20folderName%2C%20bmsvc.DEFAULT_INDEX%20%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20folder%20%3D%20getChildFolder%28%20rootFolder%2C%20folderName%20%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%7D%20%20%0A%20%20%20%20%20%20bmsvc.insertBookmark%28%20folder%2C%20url%2C%20bmsvc.DEFAULT_INDEX%2C%20label%20%29%3B%0A%20%20%20%0A%20%20%20%20%20%20var%20image%20%3D%20%21link%20%26%26%20gBrowser.mCurrentTab.image%20%3F%20gBrowser.mCurrentTab.image%20%3A%20%22chrome%3A//global/skin/icons/information-16.png%22%3B%0A%20%20%20%20%20%20alertsService.showAlertNotification%28%20image%2C%20label%2C%20%27%u0414%u043E%u0431%u0430%u0432%u0438%u043B%20%u0437%u0430%u043A%u043B%u0430%u0434%u043A%u0443%20%u043D%u0430%20%27%20+%20folderName%2C%20false%2C%20%22%22%2C%20null%2C%20%22%22%29%3B%0A%20%20%20%7D%3B%0A%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

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

Выделить код

Код:

// "Добавить закладку на Desktop" в контекстном меню на странице, от 22.06.2013.
(function () { 

   const alertsService = Components.classes["@mozilla.org/alerts-service;1"].getService(Components.interfaces.nsIAlertsService);
   var icon1="data:image/png;base64,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";

   var menuitem = document.createElement("menuitem");   
   menuitem.setAttribute("id", "context-addBookmark");
   menuitem.setAttribute("label", "Добавить закладку на " + getFolderName() );  
   menuitem.setAttribute("class", "menuitem-iconic");
   menuitem.setAttribute("image", icon1);

   const contextMenu = document.getElementById("contentAreaContextMenu"); 
   contextMenu.appendChild( menuitem ); 
   addDestructor(function( reason ) { contextMenu.removeChild( menuitem) });

   addEventListener("click", function(e) {     

      if ( e.button == 0 ) {
           gContextMenu.onLink 
           ? addBookmark( gContextMenu.getLinkURI(), gContextMenu.linkText(), gContextMenu.onLink )
           : addBookmark( gBrowser.selectedBrowser.webNavigation.currentURI, getDocTitle() );
           }   
   }, false, menuitem );

   function getDocTitle() {
      var docTitle = content.document.title || gBrowser.mCurrentTab.label;       
      // удалить лишние символы и пробелы 
      var docTitle = docTitle.replace(/[:.\\\/<>?*|"]+/g, " ")
      var docTitle = docTitle.replace(/\s\s+/g, " ");

      return docTitle.substring(0, 50);
   };

   function getFolderName() {
      var folder = Application.prefs.getValue("CB.bookmarkFolderForSaving", 0); 
      return ( folder == 0 ) ? "Desktop" : folder;
   };

   function getChildFolder( parentId, title ) {
      var res = null;
      try {
          var hs = Cc ["@mozilla.org/browser/nav-history-service;1"].getService(Ci.nsINavHistoryService);
          var options = hs.getNewQueryOptions();
          options.excludeItems = true;
          var query = hs.getNewQuery();
          query.setFolders( [parentId], 1 );
          var result = hs.executeQuery( query, options );
          var rn = result.root;
          rn.containerOpen = true;
          var i, node;
          for ( i = 0; i < rn.childCount; i++ ) {
                var node = rn.getChild(i);
                if ( node.title == title ) {
                     res = node.itemId;
                     break;
                     }
                }
          rn.containerOpen = false;
          } 
   catch(e) {}

   return res;
   }; 

   function addBookmark( url, label, link ) {
      var bmsvc = Components.classes ["@mozilla.org/browser/nav-bookmarks-service;1"].getService(Components.interfaces.nsINavBookmarksService);
      var rootFolder = bmsvc.bookmarksMenuFolder;
      var folderName = getFolderName();
      var folder = getChildFolder( rootFolder, folderName );
      if ( !folder ) {
           bmsvc.createFolder( rootFolder, folderName, bmsvc.DEFAULT_INDEX );
           folder = getChildFolder( rootFolder, folderName );
           }  
      bmsvc.insertBookmark( folder, url, bmsvc.DEFAULT_INDEX, label );
   
      var image = !link && gBrowser.mCurrentTab.image ? gBrowser.mCurrentTab.image : "chrome://global/skin/icons/information-16.png";
      alertsService.showAlertNotification( image, label, 'Добавил закладку на ' + folderName, false, "", null, "");
   };

})();


Мод кнопки "Добавить закладку в папку" в контекстном меню на странице by bunda1.

Clipboard(Firefox 53 - идёт ремонт)
Сканирование и запоминание буфера обмена по стандартным действиям, выделить и нажать - Ctrl+C or Ctrl+X or Shift+Ins или мышкой через контекстное меню.
Основные настоечные переменные:

Выделить код

Код:

this.MAX_ENTRIES = 16;    //Максимальное число записей 16 (размер буфера)
this.CHECK_INTERVAL = 1000;    //Время опроса буфера 1000 миллисекунд

Массив описан как

Выделить код

Код:

// Блок инициализации глоб. переменных и функций
// срок существования - один сеанс браузера

для вставки BBCode - не нужное можно убрать, только аккуратно.
Всё комментировано - промахнуться сложно.

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

Выделить код

Код:

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%3EClipboard%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHvSURBVDjLjZI/aFNRFMZ/Ly+GlCYlaMF/1D+4FQRJREigk7OiIAguHSwUkrkgLhVcpIurQjdBcLAITi4FETpIAw46CGIHJ0tFamlt3rvnfA7Ji2kTwQOXe4b7/c73HW4kCYCnc+engU8M1/b88kaFf1T05O65KvAAuFY6epw79xfZ3XoPwPjkFZ4t3uP37i+A58DK/PLGy0FAHli5euPmmbFSmfTrByRhnV0AJDFzcYrcyQtIuvXm1evrwBDg7FhpgmRnk+CBjRePQQLEltoIsb/5jeLk6QJQOBwhD4AbCoFc5QRuAckP5tzfI9neG7mDPIDc8RDwtIOnnZ6D/6seIOCW9ie7Ij7+mGDfYlB3F4oKfD8yTavVWnJ3zAwz+9wDGB5SsICbkYQc8dgkt+cekiTJ4aELkojjOG02m0t9ACFF5ig4bsLN6XQ6rK2toYFIWV+v1wkh8NeBOR4cD4ZbhJkBUK1WDwizXtIgwPHUUHAUDLcc3hO02+2+eBBSr9cxsy6gO70L8CwChqSRDrLqO8CEp97bgSGL8CgAsL6+PiSURKPR6Dt4lybJzPipKeRC7uRTiH+WkUStVhsSZ3cGePR2dbUMXMoeGXl2KpcpFotEUTTyA8VxjJkRjco2OzubM7MFMzvW+zD94+6D58sfRXpka4kRkDcAAAAASUVORK5CYII%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//%20%u0411%u043B%u043E%u043A%20%u0438%u043D%u0438%u0446%u0438%u0430%u043B%u0438%u0437%u0430%u0446%u0438%u0438%20%u0433%u043B%u043E%u0431.%20%u043F%u0435%u0440%u0435%u043C%u0435%u043D%u043D%u044B%u0445%20%u0438%20%u0444%u0443%u043D%u043A%u0446%u0438%u0439%0A//%20%u0441%u0440%u043E%u043A%20%u0441%u0443%u0449%u0435%u0441%u0442%u0432%u043E%u0432%u0430%u043D%u0438%u044F%20-%20%u043E%u0434%u0438%u043D%20%u0441%u0435%u0430%u043D%u0441%20%u0431%u0440%u0430%u0443%u0437%u0435%u0440%u0430%0A//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++%0A//%0AbbBBCodeStat%3Dtrue%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20//%20%u0440%u0430%u0437%u0440%u0435%u0448%u0438%u0442%u044C/%u0432%u043A%u043B%u044E%u0447%u0438%u0442%u044C%20BBCode%0Awindow.arycb_BBCodeClipboardStrings%20%3D%20this.clipboardStrings%20%3D%20%5B%5D%3B%20%20%20//%20%u041C%u0430%u0441%u0441%u0438%u0432%20%u0431%u0443%u0444%u0435%u0440%u0430%20%u043E%u0431%u043C%u0435%u043D%u0430%0A%0A//%0A//********************************************************%0A//--------%u041E%u0431%u0449%u0438%u0435%20%u0444%u0443%u043D%u043A%u0446%u0438%u0438%20%u0434%u043B%u044F%20%u0432%u0441%u0442%u0430%u0432%u043A%u0438%20BBCode----------------%0A//*********************************************************%0A%0A//++++++++++++++++++BEGIN%20DEF++++++++++++++++++++++++++++++%0A//--------------------------------------------------------%0A//%20%u0424%u0443%u043D%u043A%u0446%u0438%u044F%20lb_BBCodePrim%20%0A//%20%5BbbCode%5D%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u043D%u044B%u0439%5B/bbCode%5D%0A//%20%20%u043F%u043E%20%u0443%u043C%u043E%u043B%u0447%u0430%u043D%u0438%u044E%20%u043E%u0442%20%u041B%u041A%u041C%29%0Alb_BBCodePrim%20%3D%20function%20%28open%2Cclose%29%7B%0Avar%20theBox%20%3D%20document.commandDispatcher.focusedElement%3B%0Avar%20startPos%20%3D%20theBox.selectionStart%3B%0Avar%20endPos%20%3D%20theBox.selectionEnd%3B%0Avar%20oPosition%20%3D%20theBox.scrollTop%3B%0Avar%20oHeight%20%3D%20theBox.scrollHeight%3B%0Avar%20text%3DtheBox.value.substring%280%2CstartPos%29%3B%0Atext%20+%3Dopen+theBox.value.substring%28startPos%2C%20endPos%29+close%3B%0Atext%20+%3DtheBox.value.substring%28endPos%2C%20theBox.value.length%29%3B%0AtheBox.value%20%3D%20text%3B%0Avar%20nHeight%20%3D%20theBox.scrollHeight%20-%20oHeight%3B%0AtheBox.scrollTop%20%3D%20oPosition%20+%20nHeight%3B%0A%7D%3B%0A%0A//---------------------------------------------------------%0A//%20%u0424%u0443%u043D%u043A%u0446%u0438%u044F%20mb_BBCodePrim%20%0A//%20%u0420%u0435%u0437%u0435%u0440%u0432%0A//%20%u043F%u043E%20%u0443%u043C%u043E%u043B%u0447%u0430%u043D%u0438%u044E%20%u043E%u0442%20C%u041A%u041C%0Amb_BBCodePrim%20%3D%20function%20%28open%2Cclose%29%20%7B%7D%3B%0A%0A//%20-------------------------------------------------------%0A//%20%u0424%u0443%u043D%u043A%u0446%u0438%u044F%20rb_BBCodePrim%20%0A//%20%5BbbCode%5D%u043F%u0430%u0440%u0430%u043C%u0435%u0442%u0440%20PASTE%20%u043F%u043E%20%u0443%u043C%u043E%u043B%u0447%u0430%u043D%u0438%u044E%20%u0438%u0437%20%u0431%u0443%u0444%u0435%u0440%20%u043E%u0431%u043C%u0435%u043D%u0430%5B/bbCode%5D%0A//%20%u043F%u043E%20%u0443%u043C%u043E%u043B%u0447%u0430%u043D%u0438%u044E%20%u043E%u0442%20%u041F%u041A%u041C%0Arb_BBCodePrim%20%3D%20function%20%28open%2Cclose%2Cpaste%29%7B%0Aif%20%28paste%20%3D%3D%20undefined%29%20%20%7B%20open%20+%3Dclose%3B%7D%20//%u0431%u0443%u0444%u0435%u0440%20%u043E%u0431%u043C%u0435%u043D%u0430%20%u043F%u0443%u0441%u0442%0A%20%20%20else%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%20open%20+%3Dpaste+close%3B%7D%0A%20%20%20%0Avar%20theBox%20%3D%20document.commandDispatcher.focusedElement%3B%0Avar%20startPos%20%3D%20theBox.selectionStart%3B%0Avar%20endPos%20%3D%20theBox.selectionEnd%3B%0Avar%20selectionLen%20%3D%20endPos%20-%20startPos%0Avar%20oPosition%20%3D%20theBox.scrollTop%3B%0Avar%20oHeight%20%3D%20theBox.scrollHeight%3B%0Avar%20text%3DtheBox.value.substring%280%2CstartPos%29%3B%20%0Avar%20nHeight%20%3D%20theBox.scrollHeight%20-%20oHeight%3B%0Atext%20+%3Dopen%3B%0Atext%20+%3DtheBox.value.substring%28endPos%2C%20theBox.value.length%29%3B%0AtheBox.value%20%3D%20text%3B%20%0AtheBox.selectionStart%20%3D%20endPos%20+%20open.length%3B%0AtheBox.selectionEnd%20%3D%20endPos%20+%20open.length%20-%20selectionLen%3B%0AtheBox.scrollTop%20%3D%20oPosition%20+%20nHeight%3B%0A%7D%3B%0A%0A//%20-------------------------------------------------------%0A//%20%u0424%u0443%u043D%u043A%u0446%u0438%u044F%20fHLD_Get_ListClipboardPrim%20%0A//%20%u043F%u043E%u043B%u0443%u0447%u0438%u0442%u044C%20%u0441%u043F%u0438%u0441%u043E%u043A%20%u0441%u043E%u0445%u0440%u0430%u043D%u0451%u043D%u043E%u0433%u043E%20%u0431%u0443%u0444%u0435%u0440%u0430%20%u043E%u0431%u043C%u0435%u043D%u0430%0A//%0AfnHLD_Get_ListClipboardPrim%20%3D%20function%20%28%29%7B%0Avar%20cs%20%3D%20arycb_BBCodeClipboardStrings%3B%20%0Areturn%20%28cs.slice%280%29%29%3B%20%0A%7D%3B%20%0A%0A%0A//++++++++++++++++++END%20DEF+++++++++++++++++++++++++++++++++++%0A%0A//%u0421%u043F%u0438%u0441%u043E%u043A%20%u0441%u043E%u0445%u0440%u0430%u043D%u0451%u043D%u043E%u0433%u043E%20%u0431%u0443%u0444%u0435%u0440%u0430%20%u043E%u0431%u043C%u0435%u043D%u0430%0A//%u041D%u0435%20%u0432%u044B%u0437%u044B%u0432%u0430%u0435%u043C%20%u044D%u0442%u043E%2C%20%u043E%u0431%u0440%u0430%u0431%u043E%u0442%u043A%u0430%20%u043F%u043E%20%u0442%u0430%u0439%u043C%u0435%u0440%u0443%20%u0438%u043B%u0438%20%u043F%u043E%20%u0441%u043E%u0431%u044B%u0442%u0438%u044E%20%u041B%u041A%u041C%0A//-----%u041E%u0431%u0440%u0430%u0431%u043E%u0442%u0447%u0438%u043A%u0438%20%u0431%u0443%u0444%u0435%u0440%u0430%20%u043E%u0431%u043C%u0435%u043D%u0430%0A%0Athis.MAX_ENTRIES%20%3D%2016%3B%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20//%u041C%u0430%u043A%u0441%u0438%u043C%u0430%u043B%u044C%u043D%u043E%u0435%20%u0447%u0438%u0441%u043B%u043E%20%u0437%u0430%u043F%u0438%u0441%u0435%u0439%2016%0Athis.CHECK_INTERVAL%20%3D%201000%3B%20%20%20%20%20%20//%u0412%u0440%u0435%u043C%u044F%20%u043E%u043F%u0440%u043E%u0441%u0430%20%u0431%u0443%u0444%u0435%u0440%u0430%201000%20%u043C%u0438%u043B%u043B%u0438%u0441%u0435%u043A%u0443%u043D%u0434%0Athis.type%20%3D%20%22menu%22%3B%0Athis.orient%20%3D%20%22horizontal%22%3B%0Athis._menupopup%20%3D%20this.appendChild%28document.createElement%28%22menupopup%22%29%29%3B%0Athis._menupopup.setAttribute%28%22oncommand%22%2C%20%22this.parentNode.handleCommand%28event.target%29%3B%22%29%3B%0A%0A%0A%0Athis.checkClipboard%20%3D%20function%28%29%20%7B%0A%20%20%20%20var%20clipStr%20%3D%20readFromClipboard%28%29%3B%0A%20%20%20%20if%28clipStr%20%26%26%20this.clipboardStrings.indexOf%28clipStr%29%20%3D%3D%20-1%29%0A%20%20%20%20%20%20%20%20this.storeString%28clipStr%29%3B%0A%7D%3B%0A%0A%0Athis.storeString%20%3D%20function%28str%29%20%7B%0A%20%20%20%20var%20cs%20%3D%20this.clipboardStrings%3B%0A%20%20%20%20cs.push%28str%29%3B%0A%20%20%20%20while%28cs.length%20%3E%20this.MAX_ENTRIES%29%0A%20%20%20%20%20%20%20%20cs.shift%28%29%3B%20%0A%0A%20%20%20%20var%20mi%20%3D%20document.createElement%28%22menuitem%22%29%3B%0A%20%20%20%20mi.setAttribute%28%22label%22%2C%20str%29%3B%0A%20%20%20%0A%20%20%20%20%0A%20%20%20%20this._menupopup.appendChild%28mi%29%3B%0A%20%20%20%20while%28this._menupopup.childNodes.length%20%3E%20this.MAX_ENTRIES%29%0A%20%20%20%20%20%20%20%20this._menupopup.removeChild%28this._menupopup.firstChild%29%3B%0A%7D%3B%0A%0A%0Athis.handleCommand%20%3D%20function%28mi%29%20%7B%0A%20%20%20%20var%20indx%20%3D%20Array.indexOf%28mi.parentNode.childNodes%2C%20mi%29%3B%0A%20%20%20%20if%28indx%20%21%3D%20-1%29%0A%20%20%20%20%20%20%20%20this.insertText%28this.clipboardStrings%5Bindx%5D%29%3B%0A%7D%3B%0A%0Athis.insertText%20%3D%20function%28str%29%20%7B%0A%20%20%20%20var%20cmd%20%3D%20%22cmd_insertText%22%3B%0A%20%20%20%20var%20controller%20%3D%20document.commandDispatcher.getControllerForCommand%28cmd%29%3B%0A%20%20%20%20if%28controller%20%26%26%20controller.isCommandEnabled%28cmd%29%29%20%7B%0A%20%20%20%20%20%20%20%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%0A%20%20%20%20%20%20%20%20%20%20%20%20.createInstance%28Components.interfaces.nsICommandParams%29%3B%0A%20%20%20%20%20%20%20%20params.setStringValue%28%22state_data%22%2C%20str%29%3B%0A%20%20%20%20%20%20%20%20controller.doCommandWithParams%28cmd%2C%20params%29%3B%0A%20%20%20%20%7D%0A%7D%3B%0A%0AsetInterval%28function%28button%29%20%7B%0A%20%20%20%20button.checkClipboard%28%29%3B%0A%7D%2C%20this.CHECK_INTERVAL%2C%20this%29%3B%0A%0Athis.setAttribute%28%22onpopupshowing%22%2C%20%22this.checkClipboard%28%29%3B%22%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*/
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Блок инициализации глоб. переменных и функций
// срок существования - один сеанс браузера
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//
bbBBCodeStat=true                                                   // разрешить/включить BBCode
window.arycb_BBCodeClipboardStrings = this.clipboardStrings = [];   // Массив буфера обмена

//
//********************************************************
//--------Общие функции для вставки BBCode----------------
//*********************************************************

//++++++++++++++++++BEGIN DEF++++++++++++++++++++++++++++++
//--------------------------------------------------------
// Функция lb_BBCodePrim 
// [bbCode]выделенный[/bbCode]
//  по умолчанию от ЛКМ)
lb_BBCodePrim = function (open,close){
var theBox = document.commandDispatcher.focusedElement;
var startPos = theBox.selectionStart;
var endPos = theBox.selectionEnd;
var oPosition = theBox.scrollTop;
var oHeight = theBox.scrollHeight;
var text=theBox.value.substring(0,startPos);
text +=open+theBox.value.substring(startPos, endPos)+close;
text +=theBox.value.substring(endPos, theBox.value.length);
theBox.value = text;
var nHeight = theBox.scrollHeight - oHeight;
theBox.scrollTop = oPosition + nHeight;
};

//---------------------------------------------------------
// Функция mb_BBCodePrim 
// Резерв
// по умолчанию от CКМ
mb_BBCodePrim = function (open,close) {};

// -------------------------------------------------------
// Функция rb_BBCodePrim 
// [bbCode]параметр PASTE по умолчанию из буфер обмена[/bbCode]
// по умолчанию от ПКМ
rb_BBCodePrim = function (open,close,paste){
if (paste == undefined)  { open +=close;} //буфер обмена пуст
   else                 { open +=paste+close;}
   
var theBox = document.commandDispatcher.focusedElement;
var startPos = theBox.selectionStart;
var endPos = theBox.selectionEnd;
var selectionLen = endPos - startPos
var oPosition = theBox.scrollTop;
var oHeight = theBox.scrollHeight;
var text=theBox.value.substring(0,startPos); 
var nHeight = theBox.scrollHeight - oHeight;
text +=open;
text +=theBox.value.substring(endPos, theBox.value.length);
theBox.value = text; 
theBox.selectionStart = endPos + open.length;
theBox.selectionEnd = endPos + open.length - selectionLen;
theBox.scrollTop = oPosition + nHeight;
};

// -------------------------------------------------------
// Функция fHLD_Get_ListClipboardPrim 
// получить список сохранёного буфера обмена
//
fnHLD_Get_ListClipboardPrim = function (){
var cs = arycb_BBCodeClipboardStrings; 
return (cs.slice(0)); 
}; 


//++++++++++++++++++END DEF+++++++++++++++++++++++++++++++++++

//Список сохранёного буфера обмена
//Не вызываем это, обработка по таймеру или по событию ЛКМ
//-----Обработчики буфера обмена

this.MAX_ENTRIES = 16;               //Максимальное число записей 16
this.CHECK_INTERVAL = 1000;      //Время опроса буфера 1000 миллисекунд
this.type = "menu";
this.orient = "horizontal";
this._menupopup = this.appendChild(document.createElement("menupopup"));
this._menupopup.setAttribute("oncommand", "this.parentNode.handleCommand(event.target);");



this.checkClipboard = function() {
    var clipStr = readFromClipboard();
    if(clipStr && this.clipboardStrings.indexOf(clipStr) == -1)
        this.storeString(clipStr);
};


this.storeString = function(str) {
    var cs = this.clipboardStrings;
    cs.push(str);
    while(cs.length > this.MAX_ENTRIES)
        cs.shift(); 

    var mi = document.createElement("menuitem");
    mi.setAttribute("label", str);
   
    
    this._menupopup.appendChild(mi);
    while(this._menupopup.childNodes.length > this.MAX_ENTRIES)
        this._menupopup.removeChild(this._menupopup.firstChild);
};


this.handleCommand = function(mi) {
    var indx = Array.indexOf(mi.parentNode.childNodes, mi);
    if(indx != -1)
        this.insertText(this.clipboardStrings[indx]);
};

this.insertText = function(str) {
    var cmd = "cmd_insertText";
    var controller = document.commandDispatcher.getControllerForCommand(cmd);
    if(controller && controller.isCommandEnabled(cmd)) {
        controller = controller.QueryInterface(Components.interfaces.nsICommandController);
        var params = Components.classes["@mozilla.org/embedcomp/command-params;1"]
            .createInstance(Components.interfaces.nsICommandParams);
        params.setStringValue("state_data", str);
        controller.doCommandWithParams(cmd, params);
    }
};

setInterval(function(button) {
    button.checkClipboard();
}, this.CHECK_INTERVAL, this);

this.setAttribute("onpopupshowing", "this.checkClipboard();");


Пример  скрипта для тега [ b][ /b] на базе использования Clipboard
скрытый текст
Инициализация:

Выделить код

Код:

/*Initialization Code*/

function lbMouse(){
var open="[b]", close="[/b]";
lb_BBCodePrim (open,close);
};

function rbMouse(){
var open="[b]", close="[/b]";
var cm = fnHLD_Get_ListClipboardPrim (), cs = cm.reverse();
if (cs.length==0) cs.unshift("Буфер обмена пуст!");
var selected = {};

var x = custombuttons. selectBox ("Текст из буфера обмена", "Выберите ТЕКСТ:", cs, selected);
  if (x [0]) rb_BBCodePrim (open,close,cs [x [1]. value]);
};

//----------------------------------------
this.onclick = function(event) {
    if(event.button == 0) {
// Действие при клике ЛКМ
lbMouse();
    }
    else if(event.button == 1) {
        // Действие при клике СКМ
    }
    else if(event.button == 2 && !event.ctrlKey && !event.shiftKey && !event.altKey && !event.metaKey) {
        // Действие при клике ПКМ без модификаторов
        rbMouse();
    }
};
this.oncontextmenu = function(event) {
    if(event.button == 2 && !event.ctrlKey && !event.shiftKey && !event.altKey && !event.metaKey) {
        // Блокируем контекстное меню при клике ПКМ без модификаторов
        event.preventDefault();
        event.stopPropagation();
    }
};

Block Site Button 2( Firefox ) от 13.02.2016. для дополнения BlockSite :: Дополнения Firefox
Кнопка добавляет текущую страницу в список BlockSite. Можно добавлять ссылку или текстовую ссылку перетаскиванием на кнопку в список BlockSite. Кнопка меняет иконку на зелёную если в BlockSite включен белый список.

ЛКМ => Добавить текущую страницу в список BlockSite.

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

Выделить код

Код:

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%3EBlock%20Site%20Button%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAACXBIWXMAAAsRAAALEQF/ZF+RAAAAGHRFWHRTb2Z0d2FyZQBQYWludC5ORVQgdjMuMzap5+IlAAACu0lEQVQ4T21Ta0hTYRg+23GbOm+TdFZejrk5L6hked3QJkIr9YdYQRA2QrcpZqbRn6SICEN/RBT9EIJWoNSPLiKUIizDa1OPHqeZIGhBRqKzpsVZ1tPZEYdzO/D+ON/3Ps/zPe9FQOz5egOj9U7h1vl/gj/HAsESTuFfYklMEKxw6x13br76DY/3Yvj/YUkC1e8fR9vOVmGj8xl+FxbBLpRgjZTgl4DEF7EAHeEE7kQRNBeUB8m4KJEaizxsX3/+Gmut9zEWfQQjKjXGj5+BVXcKlpRsDAbIsEKKwATwJHYPElqkoje7e7FyrQW0shA3CAKcgkdY8ovQJ5WBO9whoflX2MgU/deaZqzfbAOjPOYFdBFNGi9hOK8Qm0ISPUEhnC1yx46emCFTLM5HZtjkWT6VGWMDRnO1YA1G9EXsx1tNAfqlUnCFdVmxEPMx3GVdA2yKIi91m+EyxnKKeHC/Kg1WUx2f8zQslLdyV87ZXDyQCwensFBR60EwW92IidxiOGtqMZCYjnHTRfd9T2kJlv22bRCLwalwhB/EfPE5d8JcdRMm83RgG5swnJQJ2ljvQd5TdhKrpHCb4COpAisQYVqh5ZPmq65gOr8EbPN1DMWmYoor4N6OPJGF8Ba4GoBgyGSLQyjFnCQOTFYpZtRlYG/dxgiVgWlDgxfY1eJBWSiWAsjtIk75Jek/SSj8lMdhVqUBq78Aa0w6ZgyNPlv66lA8HFx0yEUuAj0/C1axkv4emwxotZjYlwRrjs6ncleCEguZmWCSKX6k3eM8KlZQA/7x9uWjGjjKT4NJU4NbKozqKjB0ohwvgyPwIU+DjcpKMAVZ3qPsYnrvT1F9gdH0iCIdKwYT0N6O1ZY2/HjwEDCb8bnehI6MGN/LtHuzuoOi9C9CIiydYTK8UeegqyAb9yJFaI0SWNyedwH+A+D1pJXWZfRiAAAAAElFTkSuQmCC%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B//%20Block%20Site%20Button%20%u043E%u0442%2013.02.2016.%0A%0A//%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%20BlockSite.AddPage%28window.content.location.href%29%3B%20showTooltip%28%29%3B%20%7D%3B%0A%0A%0A//%20%u0414%u043E%u0431%u0430%u0432%u0438%u0442%u044C%20%u0430%u0434%u0440%u0435%u0441%20%u0441%u0441%u044B%u043B%u043A%u0438%20%u0432%20%u0441%u043F%u0438%u0441%u043E%u043A%20BlockSite%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%20%20var%20url%20%3D%20e.dataTransfer.mozGetDataAt%28%22text/x-moz-url-data%22%2C%200%29%3B%0A%20%20%20%20if%20%28%20%21url%20%29%20%7B%0A%09%20var%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%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%20%20else%20%0A%20%20%20%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%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%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%20%20%20%7D%0A%20%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%20%7D%0A%20%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%20%20BlockSite.AddPage%28%20url%20%29%3B%20%0A%20%20%20%20showTooltip%28%29%3B%20%20%20%0A%7D%3B%0Athis.ondragover%20%3De%3D%3E%20%7B%20e.preventDefault%28%29%20%7D%3B%0A%0A%0A//%20%u041F%u043E%u043A%u0430%u0437%u0430%u0442%u044C%20%u043F%u043E%u0434%u0441%u043A%u0430%u0437%u043A%u0443%20%u0443%20%u043A%u043D%u043E%u043F%u043A%u0438%20%u043F%u0440%u0438%20%u0434%u043E%u0431%u0430%u0432%u043B%u0435%u043D%u0438%u0438%20%u0430%u0434%u0440%u0435%u0441%u0430%20%u0432%20%u0441%u043F%u0438%u0441%u043E%u043A%20BlockSite%20..........%20%20%20%20%20%20%20%20%0Afunction%20showTooltip%28%29%20%7B%0A%20%20%20var%20tooltip%20%3D%20self.lastChild%3B%0A%20%20%20if%20%28%20%21tooltip%20%29%20%7B%0A%20%20%20%20%20%20%20%20tooltip%20%3D%20self.appendChild%28document.createElement%28%22tooltip%22%29%29%3B%0A%20%20%20%20%20%20%20%20tooltip.style.cssText%20%3D%20%22font-weight%3A%20bold%20%21important%3B%20color%3A%20red%20%21important%3B%20font-size%3A%2014px%20%21important%3B%22%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20self.tooltipText%20%3D%20%22%22%20%20%20%20%20%0A%20%20%20tooltip.label%20%3D%20%22%u0414%u043E%u0431%u0430%u0432%u0438%u043B%20%u0432%20%22%20+%20%28custombuttons.getPrefs%28%22extensions.BlockSite.listtype%22%29%5B0%5D%20%3D%3D%20%22b%22%20%3F%20%22%u0447%u0451%u0440%u043D%22%20%3A%20%22%u0431%u0435%u043B%22%29%20+%20%22%u044B%u0439%20%u0441%u043F%u0438%u0441%u043E%u043A%22%3B%0A%20%20%20tooltip.showPopup%28%20self%2C%20-1%2C%20-1%2C%20%22popup%22%2C%20%22topleft%22%2C%20%22topright%22%29%3B%0A%20%20%20self.onmouseleave%20%3D%28%29%3D%3E%20%7B%20tooltip.hidePopup%28%20self.onmouseleave%20%3D%20null%20%29%3B%20self.tooltipText%20%3D%20self.label%20%7D%3B%0A%7D%3B%0A%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%20BlockSite%20..........%0Avar%20s%20%3D%20%22extensions.BlockSite.listtype%22%3B%0Afunction%20toggleImage%28%29%20%7B%0A%20%20%20var%20icon%20%3D%20self.ownerDocument.getAnonymousElementByAttribute%28self%2C%20%22class%22%2C%20%22toolbarbutton-icon%22%29%3B%0A%20%20%20icon.src%20%3D%20custombuttons.getPrefs%28s%29%5B0%5D%20%3D%3D%20%22b%22%0A%20%20%20%3F%20self.image%0A%20%20%20%3A%20%22data%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADLQYYA6uFb8QpxH/O7c3/z6yNv8WkQX/GIoBvxiIAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIwiAgCrwczyTILv9m62j/mv+a/4fti/+U8Zb/of+h/27iaP8vph3/GIgAzxiIACAAAAAAAAAAAAAAAAAGySQgCMQh7zTnPP9R81X/LdI7/wq6HP9IyVP/ScZR/w2vFf85yjz/XvRe/z7SNf8YiADvGIgAIAAAAAAAAAAABsslzx7qKf9B/0H/FM4o/zfLSP8AAAD/AAAA/wAAAP8AAAD/AH8A/yOyJf8y3TL/KdIg/xiIAM8AAAAABNEoYAfZIP8X8h//J9Y8/2D5Yv8dyy7/ZtVy/wAAAP8AAAD/AAAA/wAAAP8AAAD/IrAh/yLzIf8XpgX/GIgAYAPSKb8C8wv/B9gf/zXSTP871U3/g/mF/yDIL/9m03D/AAAA/wAAAP8AAAD/AAAA/wB/AP8RxQ//CeED/xiIAL8D1yf/AfkF/yTTQf8AAAD/ZNp0/zrTS/98+X7/HsYr/2fRb/8AAAD/AAAA/wAAAP8AAAD/EaIO/wD/AP8YiAD/DeAr/xLzG/9E2lz/AAAA/wAAAP9l2HP/OdBI/3L5c/8oxzL/Z89u/wAAAP8AAAD/AAAA/025Sv8D7QL/EqYA/xrgOP8480H/U91q/wAAAP8AAAD/AAAA/2XWcv84zkT/afpq/ybELv9ozW3/AAAA/wAAAP9MuUv/BOcD/xKmAP8d2kH/bPlw/yTUQv8AAAD/AAAA/wAAAP8AAAD/ZtRx/zfMQv9m+Wf/J8Et/2jLbP8AAAD/EKMP/wD/AP8XjwD/A9Uqv536of8X1DX/AH8A/wAAAP8AAAD/AAAA/wAAAP9n0nD/OMlB/2b5Z/8VvBn/PLg+/wvBC/8G4QD/GIgAvwPUKmBp5nz/gfCL/yXSQP8AAAD/AAAA/wAAAP8AAAD/AAAA/2fQb/85xz//AvUD/wy5Dv8D7gP/EqYA/xiIAGAAAAAABc8nz7T1uv9764f/Jc8//wB/AP8AAAD/AAAA/wAAAP8AAAD/Or9C/wu8Ef8A/wD/CdIA/xiIAM8AAAAAAAAAAAXNJiAWzDHvqvCx/4ruk/8czDP/J8g7/0fNVv9Iy1T/Kr82/wnFEf8D6wX/CdIA/xiIAO8YiAAgAAAAAAAAAAAAAAAAB8cjIAjBH89Z1GT/p/Sp/z/3Qv8C7wf/A+4H/wH2A/8G4wH/EqYA/xiIAM8YiAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACrocYAy0GL8NshP/DLwM/w62Cf8Ulwn/FpAFvxiKAWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%3D%3D%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%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

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

Выделить код

Код:

// Block Site Button от 13.02.2016.

// Настройка функций кликов мыши для кнопки ..........
this._handleClick =()=> { BlockSite.AddPage(window.content.location.href); showTooltip(); };


// Добавить адрес ссылки в список BlockSite при перетаскивании ссылки на кнопку ..........
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;

    BlockSite.AddPage( url ); 
    showTooltip();   
};
this.ondragover =e=> { e.preventDefault() };


// Показать подсказку у кнопки при добавлении адреса в список BlockSite ..........        
function showTooltip() {
   var tooltip = self.lastChild;
   if ( !tooltip ) {
        tooltip = self.appendChild(document.createElement("tooltip"));
        tooltip.style.cssText = "font-weight: bold !important; color: red !important; font-size: 14px !important;";
        }
   self.tooltipText = ""     
   tooltip.label = "Добавил в " + (custombuttons.getPrefs("extensions.BlockSite.listtype")[0] == "b" ? "чёрн" : "бел") + "ый список";
   tooltip.showPopup( self, -1, -1, "popup", "topleft", "topright");
   self.onmouseleave =()=> { tooltip.hidePopup( self.onmouseleave = null ); self.tooltipText = self.label };
};


// Установить нужную иконку кнопки при старте браузера или при изменениях настроек BlockSite ..........
var s = "extensions.BlockSite.listtype";
function toggleImage() {
   var icon = self.ownerDocument.getAnonymousElementByAttribute(self, "class", "toolbarbutton-icon");
   icon.src = custombuttons.getPrefs(s)[0] == "b"
   ? self.image
   : "data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADLQYYA6uFb8QpxH/O7c3/z6yNv8WkQX/GIoBvxiIAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIwiAgCrwczyTILv9m62j/mv+a/4fti/+U8Zb/of+h/27iaP8vph3/GIgAzxiIACAAAAAAAAAAAAAAAAAGySQgCMQh7zTnPP9R81X/LdI7/wq6HP9IyVP/ScZR/w2vFf85yjz/XvRe/z7SNf8YiADvGIgAIAAAAAAAAAAABsslzx7qKf9B/0H/FM4o/zfLSP8AAAD/AAAA/wAAAP8AAAD/AH8A/yOyJf8y3TL/KdIg/xiIAM8AAAAABNEoYAfZIP8X8h//J9Y8/2D5Yv8dyy7/ZtVy/wAAAP8AAAD/AAAA/wAAAP8AAAD/IrAh/yLzIf8XpgX/GIgAYAPSKb8C8wv/B9gf/zXSTP871U3/g/mF/yDIL/9m03D/AAAA/wAAAP8AAAD/AAAA/wB/AP8RxQ//CeED/xiIAL8D1yf/AfkF/yTTQf8AAAD/ZNp0/zrTS/98+X7/HsYr/2fRb/8AAAD/AAAA/wAAAP8AAAD/EaIO/wD/AP8YiAD/DeAr/xLzG/9E2lz/AAAA/wAAAP9l2HP/OdBI/3L5c/8oxzL/Z89u/wAAAP8AAAD/AAAA/025Sv8D7QL/EqYA/xrgOP8480H/U91q/wAAAP8AAAD/AAAA/2XWcv84zkT/afpq/ybELv9ozW3/AAAA/wAAAP9MuUv/BOcD/xKmAP8d2kH/bPlw/yTUQv8AAAD/AAAA/wAAAP8AAAD/ZtRx/zfMQv9m+Wf/J8Et/2jLbP8AAAD/EKMP/wD/AP8XjwD/A9Uqv536of8X1DX/AH8A/wAAAP8AAAD/AAAA/wAAAP9n0nD/OMlB/2b5Z/8VvBn/PLg+/wvBC/8G4QD/GIgAvwPUKmBp5nz/gfCL/yXSQP8AAAD/AAAA/wAAAP8AAAD/AAAA/2fQb/85xz//AvUD/wy5Dv8D7gP/EqYA/xiIAGAAAAAABc8nz7T1uv9764f/Jc8//wB/AP8AAAD/AAAA/wAAAP8AAAD/Or9C/wu8Ef8A/wD/CdIA/xiIAM8AAAAAAAAAAAXNJiAWzDHvqvCx/4ruk/8czDP/J8g7/0fNVv9Iy1T/Kr82/wnFEf8D6wX/CdIA/xiIAO8YiAAgAAAAAAAAAAAAAAAAB8cjIAjBH89Z1GT/p/Sp/z/3Qv8C7wf/A+4H/wH2A/8G4wH/EqYA/xiIAM8YiAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACrocYAy0GL8NshP/DLwM/w62Cf8Ulwn/FpAFvxiKAWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==";  
};
toggleImage();
gPrefService.addObserver(s, toggleImage, false);
addDestructor(()=> gPrefService.removeObserver(s, toggleImage) );


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

Создать кнопку ярлык для сайта( Firefox17+ ) от 11.01.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%u0421%u043E%u0437%u0434%u0430%u0442%u044C%20%u043A%u043D%u043E%u043F%u043A%u0443%20%u044F%u0440%u043B%u044B%u043A%20%u0434%u043B%u044F%20%u0441%u0430%u0439%u0442%u0430%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAAAAAvIhAAMSQSASYZBgBWRTU7hndqdEo3JCccDwAAKx8OASofDQEdDwAATDkmKoZ3anRSQzI3JhkHADEkEgEvIhAAMSQSAicbCQBVRTU5xefw96Hx//+63ujvl4uAjT4rGBpALRocmY+Ekbrf6vCh8f//xeTs81FAMDMoHAkAMSQSAjIlFAQgEwAAgXNlcJbu//9p1Pn6cN7+/pPx///C2uHqwdzi65Hx//9x3f7+aNT5+prv//98bV5oIBQBADIlFAQxJRMDIhYEAGxZSFCj7P//WNP8/WzX/P5c0vr8Vdf+/1TX//9c0vr8bNf8/ljT/P6l6v//Z1NCSSMXBQAxJBMDMCMRAigdCwBRPCgqq+Hy+UXQ//9X0vz+SND9/4DZ+P6C0O3+R836/1bT/f5G0f//rd/u9kw3JCUpHgwAMCMRAjEkEgIrIQ8ANB8LE7nW3ehB0v//N8r7/n/f//+MrHD/g6Fb/4HQ8f81x/j9R9b//7nR1+MvHAcOLSIQADAjEQIuIhAAIxQBAaaZjpub6f//Ncn8/XDV+f+NtG7/Mn0A/y59AP+KrmL/fczu/yPD+v2W6f//pZSHlSATAAAvIxEBJxgFAqSbkp+k9f//WtP7/VnV//+n3+b/XI8M/4u7b/+bxIP/MoUA/4y2YP90yOP/HML5/Zvy//+nl4uZJBcEAIuCdoK19v//etr6+4Te/f9s2P3/adr//6zg3/9n1fL/a9z//5zGe/8/jQD/r8yd/0rP//4awff7ne///4t8b3qmp6Kun/L//5fj/PyF3v39d9n7+27X/P5e1///Rc77/yXG/P9m2Pz/p9Gv/lnM6/sbw/79F8D7/F/i//+tpZunVUc3PcPU2OK67f7/s/H//p7x//913f3+c9n8/2rY/v9e1P3/Pcr8/1DX//515///len//qjo/v/B0dTfUUMyNycaCAA2JRISWEUzN2tcTVSOfG58vODo73Xe//952/3+atf9/ljW//++3uPtlHtrenFeTFNcRTI2NiQRECcaCAAxJBIBLSEPACYaCAAkGQcDEgQAAJSKf4yf8f//htz6+2/W+vuT7f//koV4hRADAAAjGQcDJRoIAC0hDwExJBIBLyIQAC8iEAExJBICMyYUBSwhDwBDMB4iwOPp8Yfj//964f//vt/l7UAsGh0tIhAAMiYUBTAkEgIvIhABLyIQAC8iEAAvIhAALyIQAC8iEAAyJRQDIhQBAId9cn+/9P//wPP//4J3a3giFQIAMiUUAy8iEAAvIhAALyIQAC8iEAAvIhAALyIQAC8iEAAvIhAALyIQADAjEQAoGwgDZVNDS2NRQUgnGggCMCMRAC8iEAAvIhAALyIQAC8iEAAvIhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%3D%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B/*Initialization%20Code*/%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B//%20%u0421%u043E%u0437%u0434%u0430%u0442%u044C%20%u043A%u043D%u043E%u043F%u043A%u0443%20%u044F%u0440%u043B%u044B%u043A%20%u0434%u043B%u044F%20%u0441%u0430%u0439%u0442%u0430%2C%20%u043E%u0442%2011.01.2015.%0A%0A%0A//%20%u0418%u043A%u043E%u043D%u043A%u0430%20%u0434%u043B%u044F%20%u0441%u043E%u0437%u0434%u0430%u043D%u0438%u044F%20%u043A%u043D%u043E%u043F%u043A%u0438%20%u044F%u0440%u043B%u044B%u043A%u0430%20%u0431%u0435%u0437%20%u0437%u043D%u0430%u0447%u043A%u0430%20%u0432%u0435%u0431-%u0441%u0430%u0439%u0442%u0430%20.................%0Avar%20defaultFavicon%20%3D%20%22chrome%3A//custombuttons/skin/stdicons/gbutton.png%22%3B%0A%0A%0A//%20%u041F%u043E%u043B%u0443%u0447%u0438%u0442%u044C%20%u0438%u043A%u043E%u043D%u043A%u0443%20%u0441%u0430%u0439%u0442%u0430%20%u0438%20%u0437%u0430%u043F%u0443%u0441%u0442%u0438%u0442%u044C%20%u0441%u043E%u0437%u0434%u0430%u043D%u0438%u0435%20%u043A%u043D%u043E%u043F%u043A%u0438%20%u044F%u0440%u043B%u044B%u043A%u0430%20.................%0APlacesUtils.favicons.getFaviconDataForPage%28%0A%20%20%20%20%20%20gBrowser.currentURI%2C%0A%20%20%20%20%20%20function%28%20uri%2C%20len%2C%20arr%2C%20mmt%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20if%20%28%20%21len%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20createButton%28defaultFavicon%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20//%20%u0441%u043E%u0437%u0434%u0430%u0442%u044C%20%u043A%u043D%u043E%u043F%u043A%u0443%20%u044F%u0440%u043B%u044B%u043A%20%u0441%20%u0437%u043D%u0430%u0447%u043A%u043E%u043C%20%u0432%u0435%u0431-%u0441%u0430%u0439%u0442%u0430%28%20%u0432%20base64%20%29%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20var%20base64%20%3D%20%22data%3A%22%20+%20mmt%20+%20%22%3Bbase64%2C%22%20+%20btoa%28String.fromCharCode.apply%28null%2C%20arr%29%29%3B%0A%20%20%20%20%20%20%20%20%20createButton%28base64%29%3B%0A%20%20%20%20%20%20%7D%20%20%20%0A%29%3B%0A%0A%0A%0A//%20%u0414%u0443%u0431%u043B%u0438%u0440%u043E%u0432%u0430%u0442%u044C%20%u043A%u043D%u043E%u043F%u043A%u0443%20%u0438%20%u0443%u0441%u0442%u0430%u043D%u043E%u0432%u0438%u0442%u044C%20%u0434%u043B%u044F%20%u043D%u043E%u0432%u044B%u0439%20%u043A%u043D%u043E%u043F%u043A%u0438%20%u0438%u043A%u043E%u043D%u043A%u0443%2C%20%u043D%u0430%u0437%u0432%u0430%u043D%u0438%u0435%20%u0438%20%u043A%u043E%u0434%20.................%0Afunction%20createButton%28favicon%29%20%7B%20%20%0A%20%20%20custombuttons.cloneButton%28self%29%3B%0A%20%20%20%0A%20%20%20var%20newButtonLink%20%3D%20custombuttons.makeButtonLink%28%22update%22%2C%20self.nextSibling.id%20%7C%7C%20_id%29%3B%0A%20%20%20var%20params%20%3D%20custombuttons.cbService.getButtonParameters%28newButtonLink%29.wrappedJSObject%3B%0A%20%20%20%0A%20%20%20params.image%20%3D%20favicon%3B%0A%20%20%20params.name%20%3D%20%28content.document.title%29.substring%280%2C%2075%29%3B%0A%20%20%20params.code%20%3D%20%22gBrowser.selectedTab%20%3D%20gBrowser.addTab%28%27%22%20+%20content.location%20+%20%22%27%29%3B%22%3B%0A%20%20%20%0A%20%20%20params.wrappedJSObject%20%3D%20params%3B%0A%20%20%20custombuttons.cbService.installButton%28params%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%5B%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

вкладка Код:

Выделить код

Код:

// Создать кнопку ярлык для сайта, от 11.01.2015.


// Иконка для создания кнопки ярлыка без значка веб-сайта .................
var defaultFavicon = "chrome://custombuttons/skin/stdicons/gbutton.png";


// Получить иконку сайта и запустить создание кнопки ярлыка .................
PlacesUtils.favicons.getFaviconDataForPage(
      gBrowser.currentURI,
      function( uri, len, arr, mmt ) {
         if ( !len ) {
              createButton(defaultFavicon);
              return;
              }        
             
         // создать кнопку ярлык с значком веб-сайта( в base64 )     
         var base64 = "data:" + mmt + ";base64," + btoa(String.fromCharCode.apply(null, arr));
         createButton(base64);
      }   
);



// Дублировать кнопку и установить для новый кнопки иконку, название и код .................
function createButton(favicon) {  
   custombuttons.cloneButton(self);
   
   var newButtonLink = custombuttons.makeButtonLink("update", self.nextSibling.id || _id);
   var params = custombuttons.cbService.getButtonParameters(newButtonLink).wrappedJSObject;
   
   params.image = favicon;
   params.name = (content.document.title).substring(0, 75);
   params.code = "gBrowser.selectedTab = gBrowser.addTab('" + content.location + "');";
   
   params.wrappedJSObject = params;
   custombuttons.cbService.installButton(params);
};

Переключить JavaScript( Firefox17+ ) от 12.06.2016.
Выключает или включает JavaScript для браузера и обновляет текущую страницу, изменения вступают в силу в новых страницах или после обновления уже открытых страниц. После переключения JavaScript соответственно меняется иконка кнопки.

ЛКМ => Выключить или включить 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%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAAAACQWzEUkFsxhJBbMaOQWzG2kFsxyZBbMdqQWzHrkFsx+pVhOf+aaUH/o3RP/62CX/+QWzHZkFsxNP///wD///8AlF8zaLiQbf/WuqP/38az/+fUw//u39P/9eri//v07//9+vb///79//vr3//77+b/wZ2A/5RfM2////8A////AJlkNonHpIX////////////////////////+/P/++/f//vfx//728f/krob/+ujb/86vlf+ZZDaL////AP///wCeaTlXnmk59rSFWf/ZpXv/2J5v/9ebav/YlmP/1pJd/9SPWf/Tjlf/4p1p//rj0f/Yu6L/nmk5nv///wD///8ApG88FKRvPKvVroz//fDl//fHov/3z63/+dW1//javf/43sL/+uHG//rkzP/99ez/4s66/6RvPLP///8A////AP///wCqdUAot4ZW//7+/f/63sL/+ty///nbwP/528D/+d3B//rbwP/63MP//eve/+zczf+qdUDK////AP///wD///8AsXtDHrmGUv/+/Pn/+dy///jbv//43MD/+dvC//ncwf/53cL/+t3D//vn1P/17eL/sXtD5P///wD///8A////ALeCRwm5hUv//vv3//ncwf/43L//+Ny///jbwP/53cD/+d3A//ndw//74sv//Pn1/7eCR/u3gkcB////AP///wD///8AvYhL+fz28P/538f/+dy9//rcv//628H/+t3D//rdwv/53cT/++DJ///8+v/BjVP/vYhLD////wD///8A////AMSOTtr159j/+uXS//navP/527z/+tu///rdwf/63cH/+d3E//vhyP///fv/yJRX/8SOThL///8A////AP///wDKlFK78NnB//vt4f/52sD/+dzC//nexf/64Mf/+uLK//rizf/65dD///79/8uPWv/KlFLxypRSRf///wD///8A0JpVpO3Qsv//9vD/+uHK//vjzP/749D/++bT//vp1f/86dj//Orb/////f/SnXH/7tnB/9CaVeX///8A////ANWfWJLryqX///37//3p1f/969j//erb//3t3//98OL//fHk//zw5P//////4KBw///7+f/fuIf/////AP///wDapFuE68aa///////87+L//fDn//3x6//99e7//fjx//369////Pr///////779//02sD/2qRb6v///wD///8A3qhdberAjP///////////////////////fn0//vz6v/469n/+ObT//Xfxv/py6b/3qhd7d6oXV3///8A////AOKsXzbirF/G6ryB/+i3d//msm3/5LBo/+KsX/DirF/j4qxfz+KsX8zirF+74qxfqOKsX0virF8FAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%3D%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bthis._handleClick%20%3D%28%29%3D%3E%20BrowserReload%28cbu.setPrefs%28s%2C%20%21cbu.getPrefs%28s%29%29%20%29%3B%0A%20%20%0Avar%20s%20%3D%20%27javascript.enabled%27%3B%0Afunction%20toggleImage%28%29%20%7B%0A%20%20%20document.getAnonymousNodes%28self%29%5B0%5D.src%20%3D%20cbu.getPrefs%28s%29%0A%20%20%20%3F%20self.image%0A%20%20%20%3A%20%22data%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFQUAABUhAAAVKMAAFS2AABUyQAAVNoAAFTrAABU+gAAWv8AAGL/AABu/wAAfP8AAFTZAABUNP///wD///8AAABXaAAAif8AALb/AADD/wAA0P8AAN3/AADo/wAA8/8AAPn/AAD9/wAA6f8AAO3/AACY/wAAV2////8A////AAAAXIkAAJ7/AAD//wAA//8AAP//AAD//wAA/f8AAPr/AAD1/wAA9f8AAKf/AADm/wAAqv8AAFyL////AP///wAAAGBXAABg9gAAfP8AAJ7/AACW/wAAkv8AAI3/AACJ/wAAhv8AAIX/AACU/wAA4P8AALb/AABgnv///wD///8AAABlFAAAZasAAKj/AADu/wAAwf8AAMn/AADP/wAA1P8AANj/AADb/wAA3/8AAPP/AADK/wAAZbP///8A////AP///wAAAGooAAB8/wAA/f8AANj/AADW/wAA1v8AANb/AADX/wAA1v8AANf/AADp/wAA2f8AAGrK////AP///wD///8AAABwHgAAfP8AAPv/AADW/wAA1f8AANb/AADW/wAA1/8AANf/AADY/wAA4/8AAOr/AABw5P///wD///8A////AAAAdgkAAHn/AAD6/wAA1/8AANb/AADW/wAA1v8AANf/AADX/wAA2P8AAN3/AAD4/wAAdvsAAHYB////AP///wD///8AAAB7+QAA9P8AANr/AADV/wAA1v8AANb/AADY/wAA2P8AANj/AADc/wAA+/8AAIH/AAB7D////wD///8A////AAAAgNoAAOT/AADh/wAA1P8AANX/AADW/wAA1/8AANf/AADY/wAA3P8AAPz/AACH/wAAgBL///8A////AP///wAAAIa7AADU/wAA6v8AANX/AADX/wAA2f8AANv/AADd/wAA3v8AAOH/AAD9/wAAhf8AAIbxAACGRf///wD///8AAACLpAAAyv8AAPX/AADc/wAA3v8AAN//AADi/wAA5P8AAOX/AADn/wAA/v8AAJX/AADU/wAAi+X///8A////AAAAj5IAAML/AAD8/wAA5f8AAOf/AADn/wAA6v8AAO3/AADu/wAA7f8AAP//AACY/wAA+v8AAK3/////AP///wAAAJSEAAC8/wAA//8AAOz/AADu/wAA8P8AAPP/AAD2/wAA+f8AAPv/AAD//wAA+v8AANX/AACU6v///wD///8AAACXbQAAtf8AAP//AAD//wAA//8AAP//AAD3/wAA8f8AAOf/AADi/wAA2f8AAMP/AACX7QAAl13///8A////AAAAmjYAAJrGAACv/wAAqf8AAKP/AACg/wAAmvAAAJrjAACazwAAmswAAJq7AACaqAAAmksAAJoFAAOsQQADrEEAA6xBAAOsQQADrEGAA6xBgAOsQYABrEHAAaxBwAGsQcAArEHAAKxBwACsQcAArEHAAKxBwACsQQ%3D%3D%22%3B%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%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

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

Выделить код

Код:

this._handleClick =()=> BrowserReload(cbu.setPrefs(s, !cbu.getPrefs(s)) );
  
var s = 'javascript.enabled';
function toggleImage() {
   document.getAnonymousNodes(self)[0].src = cbu.getPrefs(s)
   ? self.image
   : "data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFQUAABUhAAAVKMAAFS2AABUyQAAVNoAAFTrAABU+gAAWv8AAGL/AABu/wAAfP8AAFTZAABUNP///wD///8AAABXaAAAif8AALb/AADD/wAA0P8AAN3/AADo/wAA8/8AAPn/AAD9/wAA6f8AAO3/AACY/wAAV2////8A////AAAAXIkAAJ7/AAD//wAA//8AAP//AAD//wAA/f8AAPr/AAD1/wAA9f8AAKf/AADm/wAAqv8AAFyL////AP///wAAAGBXAABg9gAAfP8AAJ7/AACW/wAAkv8AAI3/AACJ/wAAhv8AAIX/AACU/wAA4P8AALb/AABgnv///wD///8AAABlFAAAZasAAKj/AADu/wAAwf8AAMn/AADP/wAA1P8AANj/AADb/wAA3/8AAPP/AADK/wAAZbP///8A////AP///wAAAGooAAB8/wAA/f8AANj/AADW/wAA1v8AANb/AADX/wAA1v8AANf/AADp/wAA2f8AAGrK////AP///wD///8AAABwHgAAfP8AAPv/AADW/wAA1f8AANb/AADW/wAA1/8AANf/AADY/wAA4/8AAOr/AABw5P///wD///8A////AAAAdgkAAHn/AAD6/wAA1/8AANb/AADW/wAA1v8AANf/AADX/wAA2P8AAN3/AAD4/wAAdvsAAHYB////AP///wD///8AAAB7+QAA9P8AANr/AADV/wAA1v8AANb/AADY/wAA2P8AANj/AADc/wAA+/8AAIH/AAB7D////wD///8A////AAAAgNoAAOT/AADh/wAA1P8AANX/AADW/wAA1/8AANf/AADY/wAA3P8AAPz/AACH/wAAgBL///8A////AP///wAAAIa7AADU/wAA6v8AANX/AADX/wAA2f8AANv/AADd/wAA3v8AAOH/AAD9/wAAhf8AAIbxAACGRf///wD///8AAACLpAAAyv8AAPX/AADc/wAA3v8AAN//AADi/wAA5P8AAOX/AADn/wAA/v8AAJX/AADU/wAAi+X///8A////AAAAj5IAAML/AAD8/wAA5f8AAOf/AADn/wAA6v8AAO3/AADu/wAA7f8AAP//AACY/wAA+v8AAK3/////AP///wAAAJSEAAC8/wAA//8AAOz/AADu/wAA8P8AAPP/AAD2/wAA+f8AAPv/AAD//wAA+v8AANX/AACU6v///wD///8AAACXbQAAtf8AAP//AAD//wAA//8AAP//AAD3/wAA8f8AAOf/AADi/wAA2f8AAMP/AACX7QAAl13///8A////AAAAmjYAAJrGAACv/wAAqf8AAKP/AACg/wAAmvAAAJrjAACazwAAmswAAJq7AACaqAAAmksAAJoFAAOsQQADrEEAA6xBAAOsQQADrEGAA6xBgAOsQYABrEHAAaxBwAGsQcAArEHAAKxBwACsQcAArEHAAKxBwACsQQ==";
};
toggleImage();
gPrefService.addObserver(s, toggleImage, false);
addDestructor(()=> gPrefService.removeObserver(s, toggleImage));

Загружать изображения на страницах( Firefox17+ )  от 11.01.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%u0417%u0430%u0433%u0440%u0443%u0436%u0430%u0442%u044C%20%u0438%u0437%u043E%u0431%u0440%u0430%u0436%u0435%u043D%u0438%u044F%20%u043D%u0430%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u0430%u0445%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAFo9M/3AAAACXBIWXMAAAsSAAALEgHS3X78AAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAACp0lEQVR42mL4//8/g3zm6f8AAcQAYvz4uuc/QACBeSAOQAAx/P75/X/ukY//AQIILHXhz///lZe//wfJAgQQWOBui9D/P78t/6ftffcfIIAYYKbA9AIEEIjDWnPtx3+YIEAAMXz7/P7/75+v/mcADQQJAAQQ0HTt/y9nqv73W/caLAAQQDAzWC8CbWq89et//fWf/5HNBAgguIJzIKdc+v6/7Py3/8Wnv/wvPPkZrAgggMAKfv+c8P/f+8r//x+mAZ03/X/g5nf/sw68BysACCCIH78p///zSeb/n4ci/39d4P+/4+f//0d//QcrAAggFH8gY5A4CAMEEFxB0+1f/xtu/vxfc+X7f5CDYYoAAgiuoP7Gz//VV378r7j4HdkkVoAAgisA6Sy/8O1/ydmvYB+c+g02hRUggBgaw6T+g4Iegq//B/Fzj376fwLiSFaAAAIr+HI17f//l4X//9+JAyvIPPjh/3GoAoAAAit4MEns/71Gof+f1hmCFaQCownqTVaAAAIr+PNb4f+fFxL//9wUACsAScIUAAQQA8y/IA7IsSAvgvAFKD4PxdjCCIQBAgjDgAvQSK0DRmrtNWDQXAUFzTewxjNAn5/8/R/FIIAAwjAAZFsdMEFVAcMUFPkgzaAEUAoKvlOfkYMQ7AWAAAJrBvmLEC4Aasw/DsTHPiG7ghUggOAG/PkFTCG/p/3//6P///+PLf//vwamrsc5///+WQc2IHLX+//Zhz/+zz4EjwKwAQABBDfg90/d/w+mSvx/DEztPy+G//9/K/r//6vBwBhoBhvgv/HN//T97/9n7Hv//xiSAQABhDDgl8b/B33C/++3C/6/38T//34d7//7Vdz//0Kjzm/dq/9pe979T939Fp6UQQYABBDRYSAZdghrkgcIMAD5xMj+kGsEXgAAAABJRU5ErkJggg%3D%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bthis._handleClick%20%3D%28%29%3D%3E%20BrowserReload%28%20custombuttons.setPrefs%28s%2C%20custombuttons.getPrefs%28s%29%20%3D%3D%201%20%3F%202%20%3A%201%29%20%29%3B%0A%0Avar%20s%20%3D%20%27permissions.default.image%27%3B%0Afunction%20toggleImage%28%29%20%7B%20%0A%20%20%20var%20icon%20%3D%20self.ownerDocument.getAnonymousElementByAttribute%28self%2C%20%22class%22%2C%20%22toolbarbutton-icon%22%29%3B%0A%20%20%20icon.src%20%3D%20custombuttons.getPrefs%28s%29%20%3D%3D%201%20%20%0A%20%20%20%3F%20self.image%20%0A%20%20%20%3A%20%27data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAA3NCSVQICAjb4U/gAAAAD1BMVEUfact50/fF+v/M//////8mt18DAAAABXRSTlP/////APu2DlMAAAAJcEhZcwAACvAAAArwAUKsNJgAAAAgdEVYdFNvZnR3YXJlAE1hY3JvbWVkaWEgRmlyZXdvcmtzIE1Yu5EqJAAAADhJREFUeJxjcHFgAAIXFwYXB2NjYwYWEMNQUJCZAcYwYIEwGBigDEFhDIYQ+QygpUZKIAbIGQwsANX+EGaBLn8yAAAAAElFTkSuQmCC%27%3B%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%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 =()=> BrowserReload( custombuttons.setPrefs(s, custombuttons.getPrefs(s) == 1 ? 2 : 1) );

var s = 'permissions.default.image';
function toggleImage() { 
   var icon = self.ownerDocument.getAnonymousElementByAttribute(self, "class", "toolbarbutton-icon");
   icon.src = custombuttons.getPrefs(s) == 1  
   ? self.image 
   : 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAA3NCSVQICAjb4U/gAAAAD1BMVEUfact50/fF+v/M//////8mt18DAAAABXRSTlP/////APu2DlMAAAAJcEhZcwAACvAAAArwAUKsNJgAAAAgdEVYdFNvZnR3YXJlAE1hY3JvbWVkaWEgRmlyZXdvcmtzIE1Yu5EqJAAAADhJREFUeJxjcHFgAAIXFwYXB2NjYwYWEMNQUJCZAcYwYIEwGBigDEFhDIYQ+QygpUZKIAbIGQwsANX+EGaBLn8yAAAAAElFTkSuQmCC';
};
toggleImage();
gPrefService.addObserver(s, toggleImage, false);
addDestructor(()=> gPrefService.removeObserver(s, toggleImage) );

Виртуальная клавиатура на translit.ru( Firefox ) от 28.01.2016.
Открывает виртуальную клавиатуру на сайте translit.ru с текстом из буфера или выделенным текстом. Блокирует сообщение: Вы уверены, что хотите уйти с этой страницы? которое появляется на translit.ru если закрывать виртуальную клавиатуру с текстом.

ЛКМ => Открыть translit.ru,
СКМ => Открыть translit.ru с текстом из буфера или выделенным текстом.

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

Выделить код

Код:

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%u0412%u0438%u0440%u0442%u0443%u0430%u043B%u044C%u043D%u0430%u044F%20%u043A%u043B%u0430%u0432%u0438%u0430%u0442%u0443%u0440%u0430%20%u043D%u0430%20translit.ru%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAAAAACAgIDAAAAAC0tLU5FRESrMzMykUFBQYlJSUmFT09Ph09PT4dKSkqFQUJCiTMzM5FGRUWrLS0tTgAAAAACAgIDAgICBAAAAAAkJCRMODg3llxcW8Z9e3v/V1ZW/TExMf8vLy//V1ZV/YKAf/9fXl3GOzs7liQkJEwAAAAAAgICBAAAAAAAAAAAAAAAAAAAAAAFBgcDCwsMAUNCQ7MYGBn/FBUW/0FAQbMMCwwBBgYHAwAAAAAAAAAAAAAAAAAAAAANDQwODQwGDg4NBxAQDgkTDgwHEwAAAABGRUGAOjcx/y4sJv9EQj+AAAAAAA0LBhMPDQgTDQsGEA0KBg4NDQwOWVtg8Tc/WfE9RWDxPERf8TxEX/I+R2LyNT5Z+hcgO/8UHTj/Nj5Z+mFrhPJmcInyZm+J8Wp1jvFKVm3xVVdd8TVBYf8AIM7/ASXh/wAk3P8AJN3/ACTd/wEl3f8GK+L/Byzj/wIn3v8ILeP/CS7l/wku5f8ILun/ACXS/zVBYv85RWb+ACDU/gEk5v4AI+H+ACPi/gAk4v4AIOT+ABji/wAY4P8AHOX+ABni/gAY3/4AGeD+ASHl/gAf0/46Rmj+OERl/wAdx/8BINf/AB/T/wEg0/8AG9f/HDTB/1RgpP9VYaj/PU2m/0lXp/9WYqf/TVql/wckzP8AHMr/OkVm/zhEZP8AHcD/ASDP/wAfy/8DIcv/ABTO/0xdvP/h3cr/4d7X/6Wmp//Fw73/4uDV/8zKw/8VL7//ABnD/ztGZf84RGT/AB27/wEgyf8AH8b/AyLG/wAVyf9LXcH/1dLP/9nc5P+iqLj/uLzF/9rb4P/JydP/FS+//wAZv/87RmX/OEVk/wAfv/8FIs3/BCHK/wUjyv8AFcj/Pk+1/7OxrP+/t7v/k4qc/6WaoP+8trv/qKu0/xEsu/8AG77/OkZl/zhFZf8ALcf/ATTW/wAx1P8LOMn/b3mg/4CHnf+FgY3/lmZx/6aDh/+qfoD/kmh4/4GGlf+CiKH/U2KX/zhEY/84RmX/AD/T/wJI5P8AROP/Ek7Q/9HR0//q7O3/zsPH/7mYnf/j7/T/3Nvf/72YnP/Z19z/8e/r/52kuv82QV7/Okhn/wBT5v8DYPn/AFv4/xZj5P+/v8H/1dXT/87Bwf+4lZb/y9XU/9bT1P++lpn/ysXF/+Th3f+ZoLf/OERh/zRCYP8AUNr/Al7u/wBa6/8LXd//fIyr/46asP+Di6n/iWWC/6GFkv+ngpD/hGiJ/4CQrP+Wn7P/XnWk/zI/Xv9cX2b/NEJg/zpIaP85R2b/OEdm/zdGZP84RmP/NkVj/zxCYP9CP1f/QT5V/zpCXv84RWH/OkVg/zI/W/9dXmb/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%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%u0412%u0438%u0440%u0442%u0443%u0430%u043B%u044C%u043D%u0430%u044F%20%u043A%u043B%u0430%u0432%u0438%u0430%u0442%u0443%u0440%u0430%20%u043D%u0430%20translit.ru%2C%20%u043E%u0442%2007.06.2014.%0A%0A%0A//%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%3D%20function%28e%29%20%7B%0A%20%20%20if%20%28%20e.button%20%3D%3D%200%20%29%20gBrowser.selectedTab%20%3D%20gBrowser.addTab%28%22http%3A//translit.ru/keyboard/%22%29%3B%20%20%20%20%0A%20%20%20%20%20%0A%20%20%20if%20%28%20e.button%20%3D%3D%201%20%29%20%7B%20%20%0A%20%20%20%20%20%20%20%20//%20%u0441%u043A%u043E%u043F%u0438%u0440%u043E%u0432%u0430%u0442%u044C%20%u0442%u0435%u043A%u0441%u0442%20%u043D%u0430%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u0435%20%u0438%20%u0437%u0430%u043F%u043E%u043C%u043D%u0438%u0442%u044C%20%u0442%u0435%u043A%u0441%u0442%20%u0438%u0437%20%u0431%u0443%u0444%u0435%u0440%u0430%20%u043E%u0431%u043C%u0435%u043D%u0430%0A%20%20%20%20%20%20%20%20var%20clip%20%3D%20gClipboard.read%28%29%3B%0A%20%20%20%20%20%20%20%20window.content.focus%28%29%3B%0A%20%20%20%20%20%20%20%20goDoCommand%28%22cmd_copy%22%29%3B%20%20%20%20%20%20%20%20%20%20%20%20%0A%0A%20%20%20%20%20%20%20%20var%20translit%20%3D%20gBrowser.getBrowserForTab%28%20gBrowser.selectedTab%20%3D%20gBrowser.addTab%28%22http%3A//translit.ru/keyboard/%22%29%20%29%3B%20%0A%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20//%20o%u0431%u0440%u0430%u0431%u043E%u0442%u0447%u0438%u043A%20%u0436%u0434%u0435%u0442%20%u043F%u043E%u043A%u0430%20%u043E%u0442%u043A%u0440%u043E%u0435%u0442%u0441%u044F%20%22translit.ru%22%2C%20%u0443%u0434%u0430%u043B%u044F%u0435%u0442%20%u0441%u0435%u0431%u044F%20%u0438%20%u0432%u0441%u0442%u0430%u0432%u044F%u0435%u0442%20%u0442%u0435%u043A%u0441%u0442%20%u0438%u0437%20%u0431%u0443%u0444%u0435%u0440%u0430%20%u043E%u0431%u043C%u0435%u043D%u0430%20%0A%20%20%20%20%20%20%20%20translit.addEventListener%28%22pageshow%22%2C%20function%20c%28e%29%20%7B%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20this.removeEventListener%28e.type%2C%20c%29%3B%20%20%20%20%20%20%20%20%20%20%20%0A%0A%20%20%20%20%20%20%20%20%20%20%20setTimeout%28%28%29%3D%3E%20%7B%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20content.document.getElementsByTagName%28%22textarea%22%29%5B0%5D.value%20%3D%20gClipboard.read%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20clip%20%26%26%20gClipboard.write%28clip%29%3B%20//%20%u0432%u0435%u0440%u043D%u0443%u0442%u044C%20%u0442%u0435%u043A%u0441%u0442%20%u0432%20%u0431%u0443%u0444%u0435%u0440%20%u043E%u0431%u043C%u0435%u043D%u0430%20%0A%20%20%20%20%20%20%20%20%20%20%20%7D%2C%2050%29%3B%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%7D%29%3B%0A%20%20%20%20%20%20%20%20%7D%0A%7D%3B%0A%0A%0A//%20%u041F%u043E%u0434%u0441%u043A%u0430%u0437%u043A%u0430%20%u0443%20%u043A%u043D%u043E%u043F%u043A%u0438%20................................%0Athis.tooltipText%20%3D%20%22%u0412%u0438%u0440%u0442%u0443%u0430%u043B%u044C%u043D%u0430%u044F%20%u043A%u043B%u0430%u0432%u0438%u0430%u0442%u0443%u0440%u0430%20%u043D%u0430%20translit.ru%3B%20%5Cn%u041B%3A%20%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20translit%20%5Cn%u0421%3A%20%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20translit%20%u0441%20%u0442%u0435%u043A%u0441%u0442%u043E%u043C%20%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u043D%u044B%u043C%20%u0438%u043B%u0438%20%u0438%u0437%20%u0431%u0443%u0444%u0435%u0440%u0430%20%5Cn%u041F%3A%20CB%20%u043C%u0435%u043D%u044E%22%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

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

Выделить код

Код:

// Виртуальная клавиатура на translit.ru, от 07.06.2014.


// Настройка функций кликов мыши для кнопки ................................
this.onclick = function(e) {
   if ( e.button == 0 ) gBrowser.selectedTab = gBrowser.addTab("http://translit.ru/keyboard/");    
     
   if ( e.button == 1 ) {  
        // скопировать текст на странице и запомнить текст из буфера обмена
        var clip = gClipboard.read();
        window.content.focus();
        goDoCommand("cmd_copy");            

        var translit = gBrowser.getBrowserForTab( gBrowser.selectedTab = gBrowser.addTab("http://translit.ru/keyboard/") ); 
          
        // oбработчик ждет пока откроется "translit.ru", удаляет себя и вставяет текст из буфера обмена 
        translit.addEventListener("pageshow", function c(e) {      
           this.removeEventListener(e.type, c);           

           setTimeout(()=> {              
              content.document.getElementsByTagName("textarea")[0].value = gClipboard.read();
              clip && gClipboard.write(clip); // вернуть текст в буфер обмена 
           }, 50);      
        });
        }
};


// Подсказка у кнопки ................................
this.tooltipText = "Виртуальная клавиатура на translit.ru; \nЛ: Открыть translit \nС: Открыть translit с текстом выделенным или из буфера \nП: CB меню";

Консоль браузера в вкладке / боковой панели( Firefox24+ ) от 04.01.2017.
Открывает Консоль браузера в вкладке или в боковой панели.
Тут более новые версии: Custom Buttons • View topic - Browser Console in Sidebar/Tab

ЛКМ => Открыть или закрыть Консоль браузера в боковой панели,
СКМ => Открыть Консоль браузера в вкладке или переключится на её если такая вкладка уже открыта,
ПКМ => Открыть контекстно меню кнопки.

Код кнопки для Firefox24-38:
Код кнопки:

Выделить код

Код:

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%3EOpen%20Browser%20Console%20in%20Sidebar/Tab%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAicKQXAAAAABWK2v8DjOn/A4vp/xSK2/8AAAAAAAAAAAAAAAAAAAAAMTDL/y0t0v8tLdP/MTDM/wAAAAAAAAAAAAAAAAGL6v8DkfP/BZb5/wWW+f8DkfP/AYvq/wAAAAAAAAAAMjLU/1NT6f9wcPv/cHD7/1NT6f8yMtT/AAAAAAqG3P8IlPP/EJz7/xCc+/8QnPv/EJz7/wiT8/8Lhtv/OzrL/01N6f9paf//aWn//2lp//9paf//TEzp/zw7zP8Bi+n/GJ75/xug+/8boPv/G6D7/xug+/8Ynvn/Aorp/y4u0/9XV/v/XFz//1xc//9cXP//XFz//1dX+v8vL9P/Aovp/yKi+f8mpfv/JqX7/yal+/8mpfv/IqP5/wKL6f8uLtL/S0v6/09P//9PT///T0///09P//9MTPr/Li7T/xKJ2v8am/P/Mar7/zGq+/8xqvv/Mar7/xqa8/8Tidn/NDPL/zg46f9DQ///Q0P//0ND//9DQ///ODjp/zU0yv8AAAAABo3p/yCd8/81qvj/Nar4/yCd8/8Gjen/AAAAAAAAAAAtLdT/MjLp/zQ0+f80NPn/MjLp/y0t1P8AAAAAAAAAAAAAAAAIhdr/AYrp/wGK6f8Jhdv/AAAAAAAAAAAAAAAAAAAAAD8+y/8yMtT/MjLU/z8+zP8AAAAAAAAAAAAAAAAAAAAAkpGQ/5SUlP+UlJT/k5KR/wAAAAAAAAAAAAAAAAAAAADGnyD/zqMc/86jHP/HnyD/AAAAAAAAAAAAAAAAk5OT/6CgoP+pqan/qamp/6CgoP+Tk5P/AAAAAAAAAADOoxr/360P/+21Bf/ttQX/360P/86jGv8AAAAAkZCP/6Ghof+tra3/ra2t/62trf+tra3/oKCg/5GQj//Inhv/364T//C5C//wuQv/8LkL//C5C//frhP/xp0a/5OTk/+tra3/sLCw/7CwsP+wsLD/sLCw/62trf+Tk5P/zaMb/+24E//xuxL/8bsS//G7Ev/xuxL/7bkT/86jG/+UlJT/r6+v/7Kysv+ysrL/srKy/7Kysv+urq7/k5OT/86jG//tuxr/8b0a//G9Gv/xvRr/8b0a/+26Gv/Ooxv/kpGQ/6Wlpf+1tbX/tbW1/7W1tf+1tbX/pKSk/5KQj//Gnh//4LEe//K/If/yvyH/8r8h//K/If/gsR7/xp4f/wAAAACVlZX/pqam/7Ozs/+zs7P/pqam/5WVlf8AAAAAAAAAAM+kHf/gsiP/7r4n/+6+J//gsiP/z6Qd/wAAAAAAAAAAAAAAAJCPjv+UlJT/lJSU/5GQj/8AAAAAAAAAAAAAAAAAAAAAxpwY/86jGv/Ooxr/x50Y/wAAAAAAAAAAQ8OsQYGBrEEAAKxBAACsQQAArEEAAKxBgYGsQcPDrEHDw6xBgYGsQQAArEEAAKxBAACsQQAArEGBgaxBw8OsQQ%3D%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bthis.onload%20%3D%20function%28%29%20%7B%0Athis.onclick%20%3D%20function%28e%29%20%7B%0A%20%20%20%20%20if%20%28%20e.button%20%3D%3D%200%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20for%20%28%20var%20tab%20of%20gBrowser.visibleTabs%20%29%20%7B%0A%20%20%20%20%20%20%20%20if%20%28%20tab.linkedBrowser.currentURI.spec%20%3D%3D%20url%20%29%20break%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20tab%20%3D%20null%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20gBrowser.selectedTab%20%3D%20tab%20%7C%7C%20gBrowser.addTab%28%20url%20%29%3B%20%20%0A%20%20%20%20%20%20%20%20%20%20%7D%3B%20%20%20%20%20%20%20%20%20%20%0A%0A%20%20%20%20%20if%20%28%20e.button%20%3D%3D%201%20%29%20%7B%20%0A%20%20%20%20%20%20gShowPopup%28this%29%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%3B%0A%20%20%20%0A%20%20%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%20%20%20e.preventDefault%28%29%3B%20%20%0A%20%20%20%20%20%20%20%20%20%20toggleSidebar%28id%29%3B%0A%20%20%20%20%20%20%20%20%20%20sbt.value%20%3D%20title%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%7D%3B%0A%0A%0Aconst%0A%20%20%20%7B%20devtools%20%7D%20%3D%20Cu.import%28%22resource%3A//gre/modules/devtools/Loader.jsm%22%2C%20%7B%7D%29%2C%0A%20%20%20%7B%20DebuggerServer%20%7D%20%3D%20Cu.import%28%22resource%3A//gre/modules/devtools/dbg-server.jsm%22%2C%20%7B%7D%29%2C%0A%20%20%20%7B%20DebuggerClient%20%7D%20%3D%20Cu.import%28%22resource%3A//gre/modules/devtools/dbg-client.jsm%22%2C%20%7B%7D%29%2C%0A%20%20%20HUDService%20%3D%20window.HUDService%20%7C%7C%20Cu.import%28%22resource%3A///modules/HUDService.jsm%22%2C%20%7B%7D%29.HUDService%2C%0A%0A%20%20%20sb%20%3D%20document.getElementById%28%22sidebar%22%29%2C%0A%20%20%20sbt%20%3D%20document.getElementById%28%22sidebar-title%22%29%2C%0A%20%20%20title%20%3D%20%22Browser%20Console%22%2C%0A%20%20%20id%20%3D%20%22cbViewBrowserConsoleInSidebar%22%2C%0A%20%20%20url%20%3D%20devtools.Tools.webConsole.url%3B%0A%0A%0Afunction%20onLoad%28e%29%20%7B%0A%20%20%20var%20doc%20%3D%20e.target%3B%0A%20%20%20if%20%28%20doc.location%20%21%3D%20url%20%29%20return%3B%0A%20%20%20doc.title%20%3D%20title%3B%0A%20%20%20var%20win%20%3D%20doc.defaultView%3B%0A%0A%20%20%20if%20%28%20%21DebuggerServer.initialized%20%29%20%7B%0A%20%20%20%20DebuggerServer.init%28%29%3B%0A%20%20%20%20DebuggerServer.addBrowserActors%28%29%3B%0A%20%20%20%20%7D%0A%20%20%20var%20client%20%3D%20new%20DebuggerClient%28DebuggerServer.connectPipe%28%29%29%3B%0A%20%20%20client.connect%28function%28%29%20%7B%0A%20%20%20%20%20%20client.listTabs%28function%28response%29%20%7B%0A%20%20%20%20%20%20%20%20%20var%20globals%20%3D%20JSON.parse%28JSON.stringify%28response%29%29%3B%0A%20%20%20%20%20%20%20%20%20delete%20globals.tabs%3B%0A%20%20%20%20%20%20%20%20%20delete%20globals.selected%3B%0A%20%20%20%20%20%20%20%20%20var%20options%20%3D%20%7B%20form%3A%20globals%2C%20client%3A%20client%2C%20chrome%3A%20true%20%7D%3B%0A%20%20%20%20%20%20%20%20%20var%20promise%20%3D%20devtools.TargetFactory.forRemoteTab%28options%29%3B%0A%20%20%20%20%20%20%20%20%20promise.then%28function%28target%29%20HUDService.openBrowserConsole%28target%2C%20win%2C%20win%29%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.then%28function%28hud%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20win.onbeforeunload%20%3D%20function%28e%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%20e.returnValue%20%3D%20%22%22%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20hud.chromeWindow%20%3D%20%7B%20close%3A%20Function%28%29%2C%20document%3A%20doc%20%7D%3B%0A%20%20%20%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%20%20%20%20%20%7D%29%3B%0A%20%20%20%20%20%20%20%20%20%7D%29%3B%0A%20%20%20%7D%29%3B%0A%7D%0A%5BgBrowser%2C%20sb%5D.forEach%28function%28node%29%20addEventListener%28%22load%22%2C%20onLoad%2C%20true%2C%20node%29%29%3B%0A%0Avar%20bc%20%3D%20document.getElementById%28%20id%20%29%3B%0Aif%20%28%20%21bc%20%29%20%7B%0A%20%20%20%20%20bc%20%3D%20document.getElementById%28%22mainBroadcasterSet%22%29.appendChild%28document.createElement%28%22broadcaster%22%29%29%3B%0A%20%20%20%20%20bc.setAttribute%28%22id%22%2C%20id%29%3B%0A%20%20%20%20%20bc.setAttribute%28%22sidebarurl%22%2C%20url%29%3B%0A%20%20%20%20%20bc.setAttribute%28%22group%22%2C%20%22sidebar%22%29%3B%0A%7D%0AaddDestructor%28function%28reason%29%20reason%20%3D%3D%20%22delete%22%20%26%26%20bc.parentNode.removeChild%28bc%29%20%29%3B%0A%7D%0A%0Avar%20uri%20%3D%20makeURI%28%27data%3Atext/css%2C%27+%20encodeURIComponent%28%27%5C%0A.tabbrowser-tab%5Blabel%3D%22Browser%20Console%22%5D%20.tab-icon-image%20%7B%5C%0Alist-style-image%3Aurl%28%22chrome%3A//global/skin/icons/error-16.png%22%29%21important%3B%20-moz-image-region%3A%20auto%20%21important%3B%5C%0A%7D%27%29%29%3B%0Aconst%20sss%20%3D%20Cc%5B%22@mozilla.org/content/style-sheet-service%3B1%22%5D.getService%28Ci.nsIStyleSheetService%29%3B%0Asss.loadAndRegisterSheet%28uri%2C%20sss.AGENT_SHEET%29%3B%20%0AaddDestructor%28function%28%29%20%7B%20sss.unregisterSheet%28uri%2C%20sss.AGENT_SHEET%29%20%7D%29%3B%20%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


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

Выделить код

Код:

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%3EBrowser%20Console%20in%20Sidebar-Tab%20-%20For%20Firefox%2048%20or%20higher%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACZklEQVQ4jWXRv08aYRgH8EOCsXWwkTYlhz9Qkzod6hUTUhsdHMU4MLD4DziVf0IToS0c7+FQBc8ekGByqBCSWlO7YVPtmQhLtQmsrwmm9hbPG74dMDRveZLP9H3yDM+X4x7mfSwOWZYhyzJicQncf+PaqoBXdfCqDlfqhM2TySRyuRxKpRJKpRJyuRySyWR7aTBzjrFiA+PHNxg/vsFYsYHBzHkrj0sJZLNZlMtlRiaTQSyewHC6gqGDBka+/mEMHTQwnK6Ak2UZe3t7KBaLjEKhAEII3KoO/qgJ/sst63MTblUHRwiBpmnY399naJr2cOAHnJ+a6D+6ZTgPHw7E4hJ2dnagaRpDURTE4hLc6W9wFuroPfzNcBbq4FOV1h8IIVAUBfl8Hvl8HoqigBDSfiKv6ujT6nCUm3CUm+jT6uBVnW0iLiXaNUoJ0lGjZ7uCAVXHgKrDs33SkXOXqz2gERtoxIar1UcdC6ezc6iJImqiiLPZOTan77phpDy4253G3e40jJQH9F13e6kmCKCiCNPng+nzgYoiaoLQyi/X+2Fs8rB2pxjGBx4/1504fekD9fuB+XkG9fvx3TcNjka7YH4chZV9wTDVUdBoFy68XtwvLABLS4z7QABVrxccjdpgpl2wFDfDTLtAI12oer2wQiFgeZlxHwqhOjEB7tfaYxhyD6ytJwyD9OBqrRenr2ZAFxeBlRUGDQRwNvO69YfrqA2GZIe54YC54YAh2XEdtf17oiiCBoOwwmFY4TBoMIiaKLbyzTcjzzmO4y4jz0Df2kGjdlxFnnbWODmFC0FAVRBwNjnVzv8Cnb4oOBnoKkcAAAAASUVORK5CYII%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bif%20%28%21%28%22Services%22%20in%20window%29%29%0A%09Cu.import%28%22resource%3A//gre/modules/Services.jsm%22%29%3B%0A%0Avar%20_UID%20%3D%20%22__browser_console_sidebar_tab%22%20+%20self.id.slice%2820%29%3B%0Avar%20PREF_BRANCH%20%3D%20%22CB.BrowserConsoleOnSidebarTabBar.ID%22%20+%20self.id.slice%2820%29%20+%20%22.%22%3B%0Avar%20USE_CSS_PREF%20%3D%20PREF_BRANCH%20+%20%22StyleSheetEnabled%22%3B%0Avar%20STATE_PREF%20%3D%20PREF_BRANCH%20+%20%22State%22%3B%0Avar%20CHECKED_STATE_PREF%20%3D%20PREF_BRANCH%20+%20%22UseCheckedState%22%3B%0Avar%20URL%20%3D%20%22chrome%3A//devtools/content/webconsole/webconsole.xul%22%3B%0Avar%20broadcasterID%20%3D%20%22viewBrowserConsoleSidebar%22%20+%20_UID%3B%0Avar%20isOSX%20%3D%20Services.appinfo.OS.toLowerCase%28%29.startsWith%28%22darwin%22%29%3B%0A%0A//%20Preferences%20initialization%0Acustombuttons.isPref%28USE_CSS_PREF%2C%20true%29%3B%0Acustombuttons.isPref%28STATE_PREF%2C%20false%29%3B%0Acustombuttons.isPref%28CHECKED_STATE_PREF%2C%20false%29%3B%0A%0Aif%20%28%21%28_UID%20in%20window%29%29%20%7B%0A%09window%5B_UID%5D%20%3D%20%7B%0A%09%09%22MainListener%22%3A%20false%2C%0A%09%09%22BroadcasterCreated%22%3A%20false%2C%0A%09%09%22StyleSheet%22%3A%20false%0A%09%7D%3B%0A%7D%0A%0A%28tmp%20%3D%3E%20%7B%0A%09var%20modules%20%3D%20%22resource%3A//gre/modules/%22%3B%0A%09var%20%7B%0A%09%09Promise%0A%09%7D%20%3D%20Cu.import%28modules%20+%20%22Promise.jsm%22%2C%20tmp%29%3B%0A%09var%20%7B%0A%09%09devtools%0A%09%7D%20%3D%20Cu.import%28%22resource%3A//devtools/shared/Loader.jsm%22%2C%20tmp%29%3B%0A%09var%20%7B%0A%09%09DebuggerServer%0A%09%7D%20%3D%20devtools.require%28%22devtools/server/main%22%2C%20tmp%29%3B%0A%09var%20%7B%0A%09%09DebuggerClient%0A%09%7D%20%3D%20devtools.require%28%22devtools/shared/client/main%22%2C%20tmp%29%3B%0A%0A%09var%20hud%20%3D%20devtools.require%28%22devtools/client/webconsole/hudservice%22%29%3B%0A%0A%09var%20link%20%3D%20document.createElementNS%28xhtmlns%2C%20%22link%22%29%3B%0A%09link.setAttribute%28%22rel%22%2C%20%22shortcut%20icon%22%29%3B%0A%09link.setAttribute%28%22href%22%2C%20self.image%29%3B%0A%0A%09function%20connect%28%29%20%7B%0A%09%09var%20deferred%20%3D%20Promise.defer%28%29%3B%0A%09%09if%20%28%21DebuggerServer.initialized%29%20%7B%0A%09%09%09DebuggerServer.init%28%29%3B%0A%09%09%09DebuggerServer.addBrowserActors%28%29%3B%0A%09%09%7D%0A%09%09DebuggerServer.allowChromeProcess%20%3D%20true%3B%0A%0A%09%09var%20client%20%3D%20new%20DebuggerClient%28DebuggerServer.connectPipe%28%29%29%3B%0A%09%09client.connect%28%28%29%20%3D%3E%20%7B%0A%09%09%09client.getProcess%28%29.then%28response%20%3D%3E%20%7B%0A%09%09%09%09deferred.resolve%28%7B%0A%09%09%09%09%09form%3A%20response.form%2C%0A%09%09%09%09%09client%3A%20client%2C%0A%09%09%09%09%09chrome%3A%20false%0A%09%09%09%09%7D%29%3B%0A%09%09%09%7D%2C%20deferred.reject%29%3B%0A%09%09%7D%29%3B%0A%09%09return%20deferred.promise%3B%0A%09%7D%0A%0A%09if%20%28%21window%5B_UID%5D%5B%22MainListener%22%5D%29%20%7B%0A%09%09window%5B_UID%5D%5B%22MainListener%22%5D%20%3D%20true%3B%0A%09%09document.getElementById%28%22browser%22%29.addEventListener%28%22DOMContentLoaded%22%2C%20e%20%3D%3E%20%7B%0A%09%09%09var%20win%20%3D%20e.target.defaultView%2C%0A%09%09%09%09loc%20%3D%20win.location%3B%0A%09%09%09if%20%28%21loc%20%7C%7C%20loc.href%20%21%3D%3D%20URL%29%0A%09%09%09%09return%3B%0A%09%09%09connect%28%29%0A%09%09%09%09.then%28connection%20%3D%3E%20devtools.TargetFactory.forRemoteTab%28connection%29%29%0A%09%09%09%09.then%28target%20%3D%3E%20%7B%0A%09%09%09%09%09hud.openBrowserConsole%28target%2C%20win%2C%20win%29.then%28browserConsole%20%3D%3E%20%7B%0A%09%09%09%09%09%09win.onbeforeunload%20%3D%20e%20%3D%3E%20%7B%0A%09%09%09%09%09%09%09e.returnValue%20%3D%20%22%22%3B%0A%09%09%09%09%09%09%09browserConsole.chromeWindow%20%3D%20%7B%0A%09%09%09%09%09%09%09%09close%3A%20%28%29%20%3D%3E%20%7B%7D%2C%0A%09%09%09%09%09%09%09%09document%3A%20win.document%0A%09%09%09%09%09%09%09%7D%3B%0A%09%09%09%09%09%09%7D%3B%0A%09%09%09%09%09%09var%20root%20%3D%20win.document.documentElement%3B%0A%09%09%09%09%09%09root.setAttribute%28%22title%22%2C%20%22Browser%20Console%22%29%3B%0A%09%09%09%09%09%09root.appendChild%28link.cloneNode%28false%29%29%3B%0A%09%09%09%09%09%7D%2C%20Cu.reportError%29%3B%0A%09%09%09%09%7D%2C%20Cu.reportError%29%3B%0A%09%09%7D%2C%20false%29%3B%0A%09%7D%0A%0A%09self.onclick%20%3D%20function%28aE%29%20%7B%0A%09%09if%20%28aE.button%20%21%3D%3D%202%29%0A%09%09%09aE.preventDefault%28%29%3B%0A%09%09if%20%28aE.button%20%3D%3D%3D%200%20%26%26%20%21aE.shiftKey%20%26%26%20%21accel%28aE%29%20%26%26%20%21aE.altKey%29%20%7B%0A%09%09%09try%20%7B%0A%09%09%09%09toggleSidebar%28broadcasterID%29%3B%0A%09%09%09%7D%20catch%20%28aErr%29%20%7B%0A%09%09%09%09SidebarUI.toggle%28broadcasterID%29%3B%0A%09%09%09%7D%0A%09%09%7D%20else%20if%20%28aE.button%20%3D%3D%3D%201%20%26%26%20%21aE.shiftKey%20%26%26%20%21accel%28aE%29%20%26%26%20%21aE.altKey%29%20%7B%0A%09%09%09var%20tab%20%3D%20gBrowser.visibleTabs.find%28tab%20%3D%3E%20tab.linkedBrowser.currentURI.spec%20%3D%3D%3D%20URL%29%3B%0A%09%09%09gBrowser.selectedTab%20%3D%20tab%20%7C%7C%20gBrowser.addTab%28URL%29%3B%0A%09%09%7D%20else%20if%20%28aE.button%20%3D%3D%3D%200%20%26%26%20%21aE.shiftKey%20%26%26%20accel%28aE%29%20%26%26%20%21aE.altKey%29%20%7B%0A%09%09%09custombuttons.setPrefs%28USE_CSS_PREF%2C%20%21custombuttons.getPrefs%28USE_CSS_PREF%29%29%3B%0A%09%09%09setTimeout%28function%28%29%20%7B%0A%09%09%09%09handleCSS%28%29%3B%0A%09%09%09%7D%2C%20100%29%3B%0A%09%09%7D%20else%20if%20%28aE.button%20%3D%3D%3D%200%20%26%26%20aE.shiftKey%20%26%26%20%21accel%28aE%29%20%26%26%20%21aE.altKey%29%20%7B%0A%09%09%09custombuttons.setPrefs%28CHECKED_STATE_PREF%2C%20%21custombuttons.getPrefs%28CHECKED_STATE_PREF%29%29%3B%0A%09%09%09setTimeout%28function%28%29%20%7B%0A%09%09%09%09self.init%28%29%3B%0A%09%09%09%7D%2C%20100%29%3B%0A%09%09%7D%0A%09%09aE.stopPropagation%28%29%3B%0A%09%7D%3B%0A%7D%29%28%7B%7D%29%3B%0A%0Aif%20%28%21window%5B_UID%5D%5B%22BroadcasterCreated%22%5D%29%20%7B%0A%09window%5B_UID%5D%5B%22BroadcasterCreated%22%5D%20%3D%20true%3B%0A%09var%20mainB%20%3D%20document.getElementById%28%22mainBroadcasterSet%22%29%3B%0A%09var%20thisB%20%3D%20document.getElementById%28broadcasterID%29%3B%0A%09if%20%28mainB%20%26%26%20%21thisB%29%20%7B%0A%09%09thisB%20%3D%20document.createElementNS%28xulns%2C%20%22broadcaster%22%29%3B%0A%09%09thisB.setAttribute%28%22id%22%2C%20broadcasterID%29%3B%0A%09%09thisB.setAttribute%28%22cb_id%22%2C%20_UID%29%3B%0A%09%09thisB.setAttribute%28%22autoCheck%22%2C%20false%29%3B%0A%09%09thisB.setAttribute%28%22label%22%2C%20%22Browser%20Console%20in%20Sidebar%22%29%3B%0A%09%09thisB.setAttribute%28%22type%22%2C%20%22checkbox%22%29%3B%0A%09%09thisB.setAttribute%28%22group%22%2C%20%22sidebar%22%29%3B%0A%09%09thisB.setAttribute%28%22sidebarurl%22%2C%20URL%29%3B%0A%09%09thisB.setAttribute%28%22oncommand%22%2C%20%22SidebarUI.toggle%28this.id%29%3B%22%29%3B%0A%09%09mainB.appendChild%28thisB%29%3B%0A%09%7D%0A%7D%0A%0Aif%20%28custombuttons.getPrefs%28CHECKED_STATE_PREF%29%29%20%7B%0A%09var%20obsEl%20%3D%20document.createElementNS%28xulns%2C%20%22observes%22%29%3B%0A%09obsEl.setAttribute%28%22element%22%2C%20broadcasterID%29%3B%0A%09obsEl.setAttribute%28%22attribute%22%2C%20%22checked%22%29%3B%0A%09self.appendChild%28obsEl%29%3B%0A%7D%20else%20%7B%0A%09let%20obs%20%3D%20self.getElementsByTagName%28%22observes%22%29%5B0%5D%3B%0A%09obs%20%26%26%20obs.parentNode.removeChild%28obs%29%3B%0A%09self.removeAttribute%28%22checked%22%29%3B%0A%7D%0A%0Afunction%20getHelp%28aPlaceholder%29%20%7B%20//%20Get%20specific%20data%2C%20surrounded%20by%20%22placeholders%22%2C%20from%20the%20Help%20tab.%0A%09return%20document.getElementById%28self.id%29.getAttribute%28%22Help%22%29.split%28%22%3C%21--%22%20+%20aPlaceholder%20+%20%22--%3E%22%29%5B1%5D%3B%0A%7D%0A%0A//START//%20Load%20style%20sheets%0Avar%20css%20%3D%20getHelp%28%22StyleSheet%22%29%3B%0A%0Afunction%20styleSheet%28aCSS%2C%20aRemFlag%29%20%7B%0A%09var%20sss%20%3D%20Cc%5B%22@mozilla.org/content/style-sheet-service%3B1%22%5D%0A%09%09.getService%28Ci.nsIStyleSheetService%29%3B%0A%09var%20ios%20%3D%20Cc%5B%22@mozilla.org/network/io-service%3B1%22%5D%0A%09%09.getService%28Ci.nsIIOService%29%3B%0A%09var%20uri%20%3D%20ios.newURI%28%22data%3Atext/css%2C%22%20+%20encodeURIComponent%28aCSS%29%2C%20null%2C%20null%29%3B%0A%09if%20%28sss.sheetRegistered%28uri%2C%20sss.USER_SHEET%29%29%0A%09%09sss.unregisterSheet%28uri%2C%20sss.USER_SHEET%29%3B%0A%09if%20%28aRemFlag%29%0A%09%09return%3B%0A%09sss.loadAndRegisterSheet%28uri%2C%20sss.USER_SHEET%29%3B%0A%09window%5B_UID%5D%5B%22StyleSheet%22%5D%20%3D%20aCSS%3B%0A%7D%0A%0Afunction%20deleteCSS%28%29%20%7B%0A%09if%20%28window%5B_UID%5D%5B%22StyleSheet%22%5D%29%20%7B%0A%09%09styleSheet%28window%5B_UID%5D%5B%22StyleSheet%22%5D%2C%20true%29%3B%0A%09%09delete%20window%5B_UID%5D%5B%22StyleSheet%22%5D%3B%0A%09%7D%0A%7D%0A%0Afunction%20handleCSS%28%29%20%7B%0A%09if%20%28custombuttons.getPrefs%28USE_CSS_PREF%29%29%20%7B%0A%09%09if%20%28%21%28window%5B_UID%5D%5B%22StyleSheet%22%5D%29%29%0A%09%09%09styleSheet%28css%29%3B%0A%09%09else%20if%20%28window%5B_UID%5D%5B%22StyleSheet%22%5D%20%21%3D%3D%20css%29%20%7B%0A%09%09%09styleSheet%28window%5B_UID%5D%5B%22StyleSheet%22%5D%2C%20true%29%3B%0A%09%09%09setTimeout%28function%28%29%20%7B%0A%09%09%09%09styleSheet%28css%29%3B%0A%09%09%09%7D%2C%20500%29%3B%0A%09%09%7D%0A%09%7D%20else%20%7B%0A%09%09deleteCSS%28%29%3B%0A%09%7D%0A%7D%0A//END//%20Load%20style%20sheets%0A%0AaddDestructor%28function%28aReason%29%20%7B%0A%09if%20%28aReason%20%3D%3D%3D%20%22delete%22%20%7C%7C%20aReason%20%3D%3D%3D%20%22update%22%29%20%7B%0A%09%09deleteCSS%28%29%3B%0A%09%7D%0A%09if%20%28aReason%20%3D%3D%3D%20%22delete%22%29%20%7B%0A%09%09%28Services.prefs.getBranch%28PREF_BRANCH%29%29.deleteBranch%28%22%22%29%3B%0A%09%09let%20selfEls%20%3D%20document.getElementsByAttribute%28%22cb_id%22%2C%20_UID%29%3B%0A%09%09Array.prototype.slice.call%28selfEls%29.forEach%28function%28aEl%29%20%7B%20//%20Delete%20all%20elements%20created%20by%20this%20button.%0A%09%09%09aEl%20%26%26%20aEl.parentNode.removeChild%28aEl%29%3B%0A%09%09%7D%29%3B%0A%09%7D%0A%7D%29%3B%0A%0Afunction%20accel%28aE%29%20%7B%0A%09if%20%28aE%29%0A%09%09return%20isOSX%20%3F%20aE.metaKey%20%3A%20aE.ctrlKey%3B%0A%09return%20isOSX%20%3F%20%22%uD835%uDDD6%uD835%uDDFC%uD835%uDDFA%uD835%uDDFA%uD835%uDDEE%uD835%uDDFB%uD835%uDDF1%22%20%3A%20%22%uD835%uDDD6%uD835%uDDFC%uD835%uDDFB%uD835%uDE01%uD835%uDDFF%uD835%uDDFC%uD835%uDDF9%22%3B%0A%7D%0A%0Athis.tooltipText%20%3D%20self.name%20+%20%22%5Cn%5Ct%uD835%uDDDF%uD835%uDDF2%uD835%uDDF3%uD835%uDE01%20%uD835%uDDF0%uD835%uDDF9%uD835%uDDF6%uD835%uDDF0%uD835%uDDF8%3A%20Browser%20Console%20On%20Sidebar%20%5Cn%22%20+%0A%09%22%5Ct%uD835%uDDE0%uD835%uDDF6%uD835%uDDF1%uD835%uDDF1%uD835%uDDF9%uD835%uDDF2%20%uD835%uDDF0%uD835%uDDF9%uD835%uDDF6%uD835%uDDF0%uD835%uDDF8%3A%20Browser%20Console%20On%20New%20Tab%5Cn%22%20+%0A%09%22%5Ct%22%20+%20accel%28%29%20+%20%22%20+%20%uD835%uDDDF%uD835%uDDF2%uD835%uDDF3%uD835%uDE01%20%uD835%uDDF0%uD835%uDDF9%uD835%uDDF6%uD835%uDDF0%uD835%uDDF8%3A%20Toggle%20Style%20Sheet%5Cn%22%20+%0A%09%22%5Ct%uD835%uDDE6%uD835%uDDF5%uD835%uDDF6%uD835%uDDF3%uD835%uDE01%20+%20%uD835%uDDDF%uD835%uDDF2%uD835%uDDF3%uD835%uDE01%20%uD835%uDDF0%uD835%uDDF9%uD835%uDDF6%uD835%uDDF0%uD835%uDDF8%3A%20Toggle%20the%20use%20of%20checked%20state%22%3B%0A%0AhandleCSS%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%uD835%uDDDC%uD835%uDDFA%uD835%uDDFD%uD835%uDDFC%uD835%uDDFF%uD835%uDE01%uD835%uDDEE%uD835%uDDFB%uD835%uDE01%20%uD835%uDDFB%uD835%uDDFC%uD835%uDE01%uD835%uDDF2%uD835%uDE00%0A%u26AB%20%uD835%uDDD7%uD835%uDDE2%20%uD835%uDDE1%uD835%uDDE2%uD835%uDDE7%20%uD835%uDDF6%uD835%uDDFB%uD835%uDE00%uD835%uDE01%uD835%uDDEE%uD835%uDDF9%uD835%uDDF9%20%uD835%uDDFA%uD835%uDDFC%uD835%uDDFF%uD835%uDDF2%20%uD835%uDE01%uD835%uDDF5%uD835%uDDEE%uD835%uDDFB%20%uD835%uDDFC%uD835%uDDFB%uD835%uDDF2%20%uD835%uDE03%uD835%uDDF2%uD835%uDDFF%uD835%uDE00%uD835%uDDF6%uD835%uDDFC%uD835%uDDFB%20%uD835%uDDFC%uD835%uDDF3%20%uD835%uDE01%uD835%uDDF5%uD835%uDDF6%uD835%uDE00%20%uD835%uDDEF%uD835%uDE02%uD835%uDE01%uD835%uDE01%uD835%uDDFC%uD835%uDDFB%20%uD835%uDDEE%uD835%uDE01%20%uD835%uDE01%uD835%uDDF5%uD835%uDDF2%20%uD835%uDE00%uD835%uDDEE%uD835%uDDFA%uD835%uDDF2%20%uD835%uDE01%uD835%uDDF6%uD835%uDDFA%uD835%uDDF2%u2757%u2757%u2757%0A%u26AB%20%uD835%uDDD7%uD835%uDDE2%20%uD835%uDDE1%uD835%uDDE2%uD835%uDDE7%20%uD835%uDDF0%uD835%uDDF9%uD835%uDDFC%uD835%uDDFB%uD835%uDDF2%20%uD835%uDE01%uD835%uDDF5%uD835%uDDF6%uD835%uDE00%20%uD835%uDDEF%uD835%uDE02%uD835%uDE01%uD835%uDE01%uD835%uDDFC%uD835%uDDFB%u2757%u2757%u2757%0A%u26AB%20If%20you%20did%20any%20of%20the%20previous%20actions%2C%20delete%20all%20extra%20buttons%20leaving%20only%20one%20version%20of%20%uD835%uDDE0%uD835%uDE02%uD835%uDDF9%uD835%uDE01%uD835%uDDF6%20%uD835%uDDE7%uD835%uDDFF%uD835%uDDEE%uD835%uDDFB%uD835%uDE00%uD835%uDDF9%uD835%uDDEE%uD835%uDE01%uD835%uDDFC%uD835%uDDFF%20and%20restart%20your%20application.%0A%0AInside%20the%20Help%20tab%20of%20this%20button%20you%20will%20find%20the%20style%20sheet%20to%20customize%20the%20console.%0A%0A%5B%2C%5D%0A%3C%21--StyleSheet--%3E%0A@-moz-document%20%20url%28chrome%3A//devtools/content/shared/widgets/VariablesView.xul%29%7B%0A%09%23variables%20%7B%0A%09%09font-family%3A%20%22Noto%20Sans%22%2C%22Open%20Sans%22%2CHelvetica%2CArial%2Csans-serif%20%21important%3B%0A%09%09font-size%3A%2012px%20%21important%3B%0A%09%09font-weight%3A%20600%20%21important%3B%0A%09%7D%0A%7D%0A@-moz-document%20%20url%28chrome%3A//devtools/content/webconsole/webconsole.xul%29%7B%0A%09/*%20Console%20fonts%20*/%0A%09.devtools-monospace%20%7B%0A%09%09font-family%3A%20%22Noto%20Sans%22%2C%22Open%20Sans%22%2CHelvetica%2CArial%2Csans-serif%20%21important%3B%0A%09%09font-size%3A%2010px%20%21important%3B%0A%09%09font-weight%3A%20bold%20%21important%3B%0A%09%7D%0A%09/*%20Console%20fonts%20*/%0A%0A%09/*%20Text%20colors%20*/%0A%09/*%20Text%20color%20for%20light%20theme%20*/%0A%09.theme-light%20.message-body-wrapper.message-body.devtools-monospace%20%7B%0A%09%09color%3A%20%23000%20%21important%3B%0A%09%7D%0A%09/*%20Text%20color%20for%20dark%20theme%20*/%0A%09.theme-dark%20.message-body-wrapper.message-body.devtools-monospace%20%7B%0A%09%09color%3A%20%23FFF%20%21important%3B%0A%09%7D%0A%09/*%20Text%20colors%20*/%0A%0A%09/*%20Message%20colors%20*/%0A%09.message%5Bcategory%3D%22exception%22%5D%5Bseverity%3D%22warn%22%5D%5Bfilter%3D%22jswarn%22%5D%20%7B%0A%09%09background%3A%20rgba%28251%2C%20149%2C%200%2C%20.2%29%20%21important%3B%0A%09%09border-bottom%3A%201px%20solid%20rgba%280%2C%200%2C%200%2C%20.5%29%20%21important%3B%0A%09%09border-top%3A%201px%20solid%20rgba%280%2C%200%2C%200%2C%20.5%29%20%21important%3B%0A%09%7D%0A%09.message%5Bcategory%3D%22cssparser%22%5D%5Bseverity%3D%22warn%22%5D%5Bfilter%3D%22cssparser%22%5D%20%7B%0A%09%09background%3A%20rgba%280%2C%20182%2C%20240%2C%20.2%29%20%21important%3B%0A%09%09border-bottom%3A%201px%20solid%20rgba%280%2C%200%2C%200%2C%20.5%29%20%21important%3B%0A%09%09border-top%3A%201px%20solid%20rgba%280%2C%200%2C%200%2C%20.5%29%20%21important%3B%0A%09%7D%0A%09.message%5Bcategory%3D%22exception%22%5D%5Bseverity%3D%22error%22%5D%5Bfilter%3D%22exception%22%5D%20%7B%0A%09%09background%3A%20rgba%28255%2C%200%2C%200%2C%20.2%29%20%21important%3B%0A%09%09border-bottom%3A%201px%20solid%20rgba%280%2C%200%2C%200%2C%20.5%29%20%21important%3B%0A%09%09border-top%3A%201px%20solid%20rgba%280%2C%200%2C%200%2C%20.5%29%20%21important%3B%0A%09%7D%0A%09.message.cm-s-mozilla%5Bcategory%3D%22console%22%5D%20%7B%0A%09%09background%3A%20rgba%28203%2C%20203%2C%20203%2C%20.2%29%20%21important%3B%0A%09%09border-bottom%3A%201px%20solid%20rgba%280%2C%200%2C%200%2C%20.5%29%20%21important%3B%0A%09%09border-top%3A%201px%20solid%20rgba%280%2C%200%2C%200%2C%20.5%29%20%21important%3B%0A%09%7D%0A%09/*%20Message%20colors%20*/%0A%0A%09/*%20Message%20colors%20on%20hover%20*/%0A%09.theme-light%20.message%3Ahover%2C%0A%09.theme-light%20.message%5Bcategory%3D%22exception%22%5D%5Bseverity%3D%22warn%22%5D%5Bfilter%3D%22jswarn%22%5D%3Ahover%2C%0A%09.theme-light%20.message%5Bcategory%3D%22cssparser%22%5D%5Bseverity%3D%22warn%22%5D%5Bfilter%3D%22cssparser%22%5D%3Ahover%2C%0A%09.theme-light%20.message%5Bcategory%3D%22exception%22%5D%5Bseverity%3D%22error%22%5D%5Bfilter%3D%22exception%22%5D%3Ahover%20%7B%0A%09%09background-color%3A%20rgba%2876%2C%20158%2C%20217%2C%200.23%29%20%21important%3B%0A%09%7D%0A%09.theme-dark%20.message%3Ahover%2C%0A%09.theme-dark%20.message%5Bcategory%3D%22exception%22%5D%5Bseverity%3D%22warn%22%5D%5Bfilter%3D%22jswarn%22%5D%3Ahover%2C%0A%09.theme-dark%20.message%5Bcategory%3D%22cssparser%22%5D%5Bseverity%3D%22warn%22%5D%5Bfilter%3D%22cssparser%22%5D%3Ahover%2C%0A%09.theme-dark%20.message%5Bcategory%3D%22exception%22%5D%5Bseverity%3D%22error%22%5D%5Bfilter%3D%22exception%22%5D%3Ahover%20%7B%0A%09%09background-color%3A%20rgba%2829%2C%2079%2C%20115%2C%200.5%29%20%21important%3B%0A%09%7D%0A%09/*%20Message%20colors%20on%20hover%20*/%0A%0A%09/*%20Hide%20original%20icons%20*/%0A%09.message%20%3E%20.icon%3A%3Abefore%20%7B%0A%09%09background-image%3A%20none%20%21important%3B%0A%09%7D%0A%09/*%20Hide%20original%20icons%20*/%0A%0A%09/*%20Assign%20new%20icons%20*/%0A%09.message%5Bseverity%3Derror%5D%20%3E%20.icon%20%7B%0A%09%09background-image%3A%20url%28%22data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAYAAABWdVznAAAB00lEQVQokX3DTUhTAQDA8Xd9uMNruIeryWQsNgidiL1DCJ0Glk4YeQyhkzpo4E5qt4EQWRKIh6FEhAWaeDBBnB2ch2hzG4rS2kD21Qdvz33Ipm87/Tt2KX/wE048Dv93b5+WGe0nM3r3P/tJe/u0E4/DLxx7XNr5+CC1yQfXPh8f5Njj0oSY24nq7UUd6aY0MYS2tkw1dkA1doC2tkxpYgh1pBvV20vM7UTYH7BTHHahLs2h1+tUUikuy2Uuy2UqqRR6vY66NEdx2MX+gB1hR+kiNzVGq6zRurgg7vOR9PtJ+v3EfT6atRqtskZuaowdpQths8dCfiHIVaNBU9dRo1G2rVa2rVbUaJSmrnPVaJBfCLLZY0FYdZpJTD5GKxaolkocBgLsKgq7isJhIEC1VEL7+YPk0yesOs0IKzaZiOLgy6vn/M7lOA2FKMTjFBIJTkMhfp2d8XXpNRHFyYpNRli0GInYO/jsuk0+myWbTpM5OuJbLErk7Rs2HnkI37ERsXewaDEizMsS4c529h662Xv5gg/37/HObOT9TSNbt9oJd/49L0sIQclQWTdJbMgSH00SW/INPv3jukkiKBkqwowoTs+2idVnBpHrzraJ1RlRnP4DeQFoOf9yusQAAAAASUVORK5CYII%3D%22%29%20%21important%3B%0A%09%09background-repeat%3A%20no-repeat%20%21important%3B%0A%09%7D%0A%09.message%5Bseverity%3Dwarn%5D%20%3E%20.icon%20%7B%0A%09%09background-image%3A%20url%28%22data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAYAAABWdVznAAABz0lEQVQokX3JT0hTcQDA8XfVLl6WULmLeBA65EkPFrtKB5VCoZPSRUKmIYgXL5FgoU3EuZi4GnrRdXAFy2geGpNcD4Q20bnc5rZnOl/bfPvz/O0x+HYQugQePocvXym21m1NbPSrxx+fcJ3ERr8aW+u2StH1XrW0PcJl6Pm1StsjHK73qtLeShflrT7K/keUg8NcRD+gKTKaInNx4KEcHL56W33srXQh7S5ZKG32UAw7EELHqFYpZmSKGRnDMBBCpxh2UNrsYXfJgrSz0EEhMIZRyVGr1agZVeLuTuLuB1ddq2FUchQCY+wsdCAFZtooyDZ0vYwQgku9zNH7TuLu+wghEEKg6xUK8hyBmTYk/1QryU/P+HOWQdM0NE0jr0TIK5F/ncuekPJZ8U+1Ivkmm0m62gl/nuU8m0VVz0kH50kH51FVlezZbyJfF0m62vFNNiN5x5s4dbaQdN4jnUpynIhxdPCTWOQHoS9uAo7HxN/e5dTZgne8Cckz2ohiNxNzPyTkneXbGwvfX9xCfnmbX7Y7KHYzJ3Yzit2MZ7QRaXWoIb8/beLwtYnoKxMp203Sc//bnzaxOtSQl5YH6iZcg/WFd09vcB3XYH1heaBu4i9fuaqY22u7CwAAAABJRU5ErkJggg%3D%3D%22%29%20%21important%3B%0A%09%09background-repeat%3A%20no-repeat%20%21important%3B%0A%09%7D%0A%09.message%5Bseverity%3Dinfo%5D%20%3E%20.icon%20%7B%0A%09%09background-image%3A%20url%28%22data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAYAAABWdVznAAABxUlEQVQokX3HzUuacQDA8ed/KOjQwdYiIghGg7r0hmyHeWknD9U8xJgYSwITHUIbLIjNdKBQB3HE415C2YvKCiMQbDZyF0dM0LmaU1b2i+Khcg8Pwnc3LwMPn8NHcu8MWX17erHy9TbN+Pb0wr0zZJW8qRERPpjk3e97TZgIH0ziTY0IaWl7kGBeTyA/ynpxgkxFpih2KYpdMhWZ9eIEgfwowbyepe1BpIV4P6v7YyRLXlS1hqZplEWBsiigaRqqWiNZ8rK6P8ZCvB/JEekjnJvh4u8p9Xqder3OVvYliWyw8Qv1lHBuBkekD2ku1Eui8Jyr2iWqqqKqKp6YCU/M1PhV7ZKtH27mQr1IlkA3wbSZo5MyiqKgKAp2eRi7PNz4saiw9uUhlkA30rS/k8ebA0RSHqonVYQQfEj7eZ/2IYTgqPqHj59XeLI5wLS/E2lqWYdzowdX/Ca/Sof8PCyQy38j+z1DLBni6Rsjj6I3cG70MLWsQzIutmOLdvHs013eJl7gWLvF/UAHD4LXsIavY4t2NRgX25HGXW1nZlmH5bUOyysds+EOZiP/M8s6xl1tZ5LB1uK8M996brC30tR867nB1uL8B0UajjUem+zaAAAAAElFTkSuQmCC%22%29%20%21important%3B%0A%09%09background-repeat%3A%20no-repeat%20%21important%3B%0A%09%7D%0A%09/*%20Assign%20new%20icons%20*/%0A%0A%09/*%20Reposition%20new%20icons%20*/%0A%09.message%20%3E%20.icon%20%7B%0A%09%09margin%3A%204px%200%200%204px%20%21important%3B%0A%09%7D%0A%09/*%20Reposition%20new%20icons%20*/%0A%7D%0A%0A/*%20Style%20for%20Browser%20Console%20On%20Tab%20*/%0A.tabbrowser-tab%5Btitle%3D%22Browser%20Console%22%5D%20.tab-icon-image%20%7B%0A%09list-style-image%3Aurl%28%22data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACkElEQVQ4jZXKT0iTcRzH8d8tM8VtOttWj7OpTGcsJBBBCCwU/9IfOkR1EA0ED1GHDsaEIjx4ETsJghaElGaDnP0RO0QmmVo+h8fU2CR0a3smLXsYjMEz3h2kwS6hhxd8v3zeQmlx1q22ur6utlRyIK2ur0qLs07Iza6V7c56tN4O4vdu7IvW28F2Zz1ys2tFLDWUE+tq4tflKn5dOrU/l6uIdTWx1FCOmKsrI3LeTaTtJJG2k0TbzxIdH2bnyyd2wyF2wyF2vnwiOj5MtP1suoucdzNXV4aYrS1hu9HFdqOL8MP7JOJxkskkcVUlmUxm3Il4nPDD++l+trYE4asuZvOck6Cnm5Suk0ql2BgYYNpuRwsE0AIBpu12NgYGSKVSpHSdoKebzXNOfNXFiMkqiY0zpfxcmEPXdXRd54/fz7TdnuGP35/efy7MsXGmlMkqCTFWaUOpcfA7EiaRSKQFZ2aYEIIJIQjOzGRsu2oEpcbBWKUNMeK0sHLajuydQNM0NE1DVRSmJCmDqijpXXk7zcppOyNOC2LIUciiW+LVlTZ2IhFisRhyXx9TkkRIlgnJMlOShNzXRywWYyeq4rt6gUW3xJCjEDFYlM98hY0P5TbGLjYT2tpCVVVC37+jqmrGveX3M95xnQ/lNuYrbAwW5SP6rUbel1j2VBbzIxAgGAzybWmRteVlVj8v8HHiGV5PD6MVJ3jnsKT7fqsR8cCcx2yRmdkiM+/brzHvfcHT2zd5dNzMqNXEY5uJ58fyeSOZ090/D8x5CI8xB5/VxGuribGjBp4UGpiy7P3/47Oa8BhzEHdzj6wNGnLxFhh4uU/eAgODhlzu5h5ZEz3Zh1rvHM5av5WdxUHcOZy13pN9qPUv/viAZlYRB0kAAAAASUVORK5CYII%3D%22%29%21important%3B%0A%09-moz-image-region%3A%20auto%20%21important%3B%0A%7D%0A/*%20Style%20for%20Browser%20Console%20On%20Tab%20*/%0A%0A/*%20Remove%20maximum/minimum%20%20width%20restriction%20of%20sidebar%20*/%0A%23sidebar%20%7B%0A%09max-width%3A%20none%20%21important%3B%0A%09min-width%3A%200px%20%21important%3B%0A%7D%0A/*%20Remove%20maximum/minimum%20%20width%20restriction%20of%20sidebar%20*/%0A%3C%21--StyleSheet--%3E%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

Save screenshot - Сохраняет скриншот видимой/всей страницы по нажатию/зажатию.

Код кнопки

Выделить код

Код:

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%3ESave%20screenshot%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAADZklEQVR42u2Ua0hTYRjH/+c4NV1RrnkdKtHFrRwu3aarbFhQLbVh5kzTLJGiouhC4ZciIqxMysyIJKkPanSzO0WWklpRUK2srCgKy8ry0kalc9s5ved4jBFH8Et96oE/55znfZ7f87znvVD4S0b9B/9b8H1raxZ51Awn8fmzFlAUDdXkKYOubL1GdUIUXH2ujq05fgTq6CnQaeOQZk4ZCKIoMAwDt9sNl8sNLy8a/U4nHI5++Pr48DFPXr7FdK2aEgVfbbjnbrx5ldbrtAgKlEOlUsLR7+LH+hwO9Pb1QREajMKtRTh9/goqy3dBFjAGoSEheP/F1pNkmCoTBd9ofsBGTwzHSKkUXzs7ceueFZ877QBNw0ciQaJeDUVIIJIs65CYtRHzgtqhVEaRJgLx7PV7EPCQHbOGWBWZMoOzF68hIUGHiLBgfqytvQMnL9RhenwMRvnS6OruQmR4OJLN6fyv2n/wMCwps8TBtdcaWZNRh4ctrRjhJ8Wr5y0oLj2Ezx/eYVdRESLHK3G5rhHp842w93RBo1EjVj8D2hg10nIKsDzDJA6uqr3OLjbPxoPHLxA1IRLzzJkYrcmFs/cTWq+UoampCTv2lGFZjgU/7d2ImxqDuIREHmxatBSrcs3i4IqaS2y+xYSGu1ZEKoKxekMhNOZ1CIiORXn6JLSSLbZ2y3YsXpRGitmg18ZCa5jJg+cuzMGavDRxcGnlGbYg04Snr96RBfRHc1MjiveWICgsAutX5SNIMQ6HKo4hNysDrj4bDPFa6AxGHmxMtmDTikxxcFF5FZufMQcMcdfffkQSlJCNHsUv5os3bThw+CjCwsfBGB8NQsYMQzx00wbA2qQF2LY+Txy8taSSzU5NRKBcTrZZD+rvWNH28Qu8JV78QsqDFVCOj0CoXArG7eLjxsoCBha+7j52bi4QB6/Ysptdm2eGk5wqGUn4/sOBrm92tHd0w2azw9eb288MaIrlTyFDZsJtNc6arW9RUVwoDk7NWplNAquHc1f8aSP8/Jecqtz3+57583bjvr2IuAvAl8hPeJcIY4PxrCA3kYOolzv1RE7Bxw4Gcon+gryJaMEnEQpRHoVZj0YYIpcA5Ar8IPrJ+QYTxhJJhQ5pAeYJHMpYDzgjdM3BOz079hPgnl0OB+wJ/93xLyKXMSb9Lwg+AAAAAElFTkSuQmCC%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bvar%20btn%20%3D%20this%3B%0A%0Avar%20opt%20%3D%20%7B%0A%09delay%3A%20500%2C%0A%09timerId%3A%200%2C%0A%09isPressed%3A%20false%2C%0A%09longClick%3A%20function%28%29%7B%0A%09%09saveScreenshot%28true%29%3B%0A%09%7D%2C%0A%09stdClick%3A%20function%28%29%7B%0A%09%09saveScreenshot%28false%29%3B%0A%09%7D%0A%7D%3B%0A%0Afunction%20mouseDown%28e%29%7B%0A%09if%28e.button%20%3D%3D%200%29%7B%0A%09%09opt.isPressed%20%3D%20true%3B%0A%09%09opt.timerId%20%3D%20setTimeout%28function%28%29%7B%0A%09%09%09if%28opt.isPressed%29%7B%0A%09%09%09%09opt.isPressed%20%3D%20false%3B%0A%09%09%09%09var%20k%20%3D%20%22_transitionTimer%22%3B%0A%09%09%09%09if%28k%20in%20btn%29clearInterval%28btn%5Bk%5D%29%3B%0A%09%09%09%09var%20stl%20%3D%20btn.style%3B%0A%09%09%09%09stl.setProperty%28%22transition%22%2C%20%22opacity%20150ms%20ease-in-out%22%2C%20%22important%22%29%3B%0A%09%09%09%09btn%5Bk%5D%20%3D%20setTimeout%28function%28%29%20%7B%0A%09%09%09%09%09stl.setProperty%28%22opacity%22%2C%20%220.5%22%2C%20%22important%22%29%3B%0A%09%09%09%09%09btn%5Bk%5D%20%3D%20setTimeout%28function%28%29%20%7B%0A%09%09%09%09%09%09stl.opacity%20%3D%20%22%22%3B%0A%09%09%09%09%09%09btn%5Bk%5D%20%3D%20setTimeout%28function%28%29%20%7B%0A%09%09%09%09%09%09%09stl.transition%20%3D%20%22%22%3B%0A%09%09%09%09%09%09%09delete%20btn%5Bk%5D%3B%0A%09%09%09%09%09%09%7D%2C%20150%29%3B%0A%09%09%09%09%09%7D%2C%20150%29%3B%0A%09%09%09%09%7D%2C%200%29%3B%0A%09%09%09%09opt.longClick%28%29%3B%0A%09%09%09%7D%0A%09%09%7D%2C%20opt.delay%29%3B%0A%09%7D%0A%7D%3B%0A%0Afunction%20mouseUp%28e%29%7B%0A%09if%28e.button%20%3D%3D%200%29%7B%0A%09%09clearTimeout%28opt.timerId%29%3B%0A%09%09if%28opt.isPressed%29%7B%0A%09%09%09opt.isPressed%20%3D%20false%3B%0A%09%09%09opt.stdClick%28%29%3B%0A%09%09%7D%0A%09%7D%0A%7D%3B%0A%0Afunction%20mouseOut%28e%29%7B%0A%09if%28e.button%20%3D%3D%200%29%7B%0A%09%09opt.isPressed%20%3D%20false%3B%0A%09%7D%0A%7D%3B%0A%0Abtn.addEventListener%28%27mousedown%27%2C%20mouseDown%2C%20false%29%3B%0Abtn.addEventListener%28%27mouseup%27%2C%20mouseUp%2C%20false%29%3B%0Abtn.addEventListener%28%27mouseout%27%2C%20mouseOut%2C%20false%29%3B%0A%0Abtn.onDestroy%20%3D%20function%28%29%7B%0A%20%20%20%20btn.removeEventListener%28%27mousedown%27%2C%20mouseDown%2C%20false%29%3B%0A%09btn.removeEventListener%28%27mouseup%27%2C%20mouseUp%2C%20false%29%3B%0A%09btn.removeEventListener%28%27mouseout%27%2C%20mouseOut%2C%20false%29%3B%0A%7D%3B%0A%0A%0Afunction%20saveScreenshot%28all%29%7B%0A%09var%20win%20%3D%20content%2C%20doc%20%3D%20win.document%2C%20docEle%20%3D%20%28doc.compatMode%20%3D%3D%20%22CSS1Compat%22%29%20%3F%20doc.documentElement%20%3A%20doc.body%3B%0A%09var%20canvas%20%3D%20document.createElementNS%28%22http%3A//www.w3.org/1999/xhtml%22%2C%20%22canvas%22%29%3B%0A%09canvas.width%20%3D%20Math.min%28%28all%20%26%26%20docEle.scrollWidth%20%3E%20docEle.clientWidth%29%20%3F%20docEle.scrollWidth%20%3A%20docEle.clientWidth%2C%2016383%29%3B%0A%09canvas.height%20%3D%20Math.min%28%28all%20%26%26%20docEle.scrollHeight%20%3E%20docEle.clientHeight%29%20%3F%20docEle.scrollHeight%20%3A%20docEle.clientHeight%2C%2016383%29%3B%0A%09var%20context%20%3D%20canvas.getContext%28%222d%22%29%3B%0A%09context.drawWindow%28win%2C%200%2C%200%2C%20canvas.width%2C%20canvas.height%2C%20%22white%22%29%3B%0A%09var%20uri%20%3D%20makeURI%28canvas.toDataURL%28%22image/png%22%29%29%3B%0A%0A%09var%20fileName%20%3D%20doc.title%20%3F%20doc.title%20%3A%20win.location.pathname.split%28%27/%27%29.pop%28%29%3B%0A%09fileName%20%3D%20fileName.replace%28/%5B%3A%5C%5C%5C/%3C%3E%3F*%7C%22%5D+/g%2C%20%27_%27%29.replace%28/%5Cs+/g%2C%20%27%20%27%29.slice%280%2C%20100%29.replace%28/%5E%5Cs+%7C%5Cs+%24/g%2C%20%27%27%29%3B%0A%09fileName%20+%3D%20%28function%20%28%29%20%7B%0A%09%09var%20d%20%3D%20new%20Date%28%29%2C%20z%20%3D%20function%20%28n%29%20%7B%0A%09%09%09return%20%27_%27%20+%20%28n%20%3C%2010%20%3F%20%270%27%20%3A%20%27%27%29%20+%20n%0A%09%09%7D%3B%0A%09%09return%20z%28d.getHours%28%29%29%20+%20z%28d.getMinutes%28%29%29%20+%20z%28d.getSeconds%28%29%29%3B%0A%09%7D%29%28%29%3B%0A%0A%09var%20fp%20%3D%20Cc%5B%27@mozilla.org/filepicker%3B1%27%5D.createInstance%28Ci.nsIFilePicker%29%3B%0A%09fp.init%28window%2C%20%22Save%20Screenshot%20As%22%2C%20fp.modeSave%29%3B%0A%09fp.appendFilter%28%22%22%2C%20%22*.png%22%29%3B%0A%09fp.appendFilters%28fp.filterImages%20%7C%20fp.filterAll%29%3B%0A%09fp.defaultExtension%20%3D%20%22png%22%3B%0A%09fp.defaultString%20%3D%20fileName%20+%20%22.png%22%3B%0A%09if%20%28fp.show%28%29%20%3D%3D%20fp.returnCancel%20%7C%7C%20%21fp.file%29%20return%3B%0A%0A%09var%20persist%20%3D%20Cc%5B%27@mozilla.org/embedding/browser/nsWebBrowserPersist%3B1%27%5D.createInstance%28Ci.nsIWebBrowserPersist%29%3B%0A%20%20%20%20%20%20%20%20parseInt%28Application.version%29%20%3C%2036%0A%20%20%20%20%20%20%20%20%3F%20persist.saveURI%28uri%2C%20null%2C%20null%2C%20null%2C%20null%2C%20fp.file%2C%20null%29%0A%20%20%20%20%20%20%20%20%3A%20persist.saveURI%28uri%2C%20null%2C%20null%2C%20null%2C%20null%2C%20null%2C%20fp.file%2C%20null%29%3B%20//%20%u0435%u0441%u043B%u0438%20FF36+%0A%7D%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

Go and paste (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%3EGo%20and%20paste%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/gif%3Bbase64%2CR0lGODlhEAAQALMJAMzMmZmZmWZmZmZmmZmZzDMzM//M/////8zM/////wAAAAAAAAAAAAAAAAAAAAAAACH5BAHoAwkALAAAAAAQABAAAARRMMlJq60gCHGlFkEiDOH0AQIRFCAwbSHbXlvBBnieS2k4GLhE4BDiCEHCnc4oPDif0ANzGI1OqwjoFMHteqUmREIslpCnFe4Ewdy43+5S5xIBADs%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bthis.pasteURL%20%3D%20function%28aEvent%2C%20go%29%20%7B%0A%20%20var%20paste%20%3D%20readFromClipboard%28%29%3B%0A%20%20if%28%21paste%29%20return%3B%0A%20%20if%28%21go%29%20%7B%0A%20%20%20%20gURLBar.value%20%3D%20paste%3B%0A%20%20%7D%20else%20%7B%0A%20%20%20%20openUILink%28paste%2C%20aEvent%2C%20false%2C%20true%29%3B%0A%20%20%7D%0A%7D%0Athis.midclick%20%3D%20function%28%29%20%7B%0Avar%20paste%20%3D%20readFromClipboard%28%29%3B%0A%09getBrowser%20%28%29.%20selectedTab%20%3D%20getBrowser%20%28%29.%20addTab%20%28%20paste%20%29%3B%0A%7D%3B%0Athis.rightclick%20%3D%20function%20%28event%29%20%7B%0A%20%20gURLBar.select%28%29%3B%0A%20%20goDoCommand%28%22cmd_paste%22%29%3B%0A%20%20gURLBar.handleCommand%28%29%3B%0A%7D%0Athis.leftclick%20%3D%20function%20%28event%29%20%7B%0A%20%20gURLBar.select%28%29%3B%0A%20%20gURLBar.handleCommand%28%29%3B%0A%7D%0A%0Athis.setAttribute%28%22onclick%22%2C%20%22custombuttons.gQuot.mHandler%28event%2C%20this%29%22%29%3B%0Athis.setAttribute%28%22onmouseover%22%2C%20%22this.tooltipText%20%3D%20readFromClipboard%28%29%20%3F%20readFromClipboard%28%29%20%3A%20this.label%3B%22%29%3B%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B%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.pasteURL = function(aEvent, go) {
  var paste = readFromClipboard();
  if(!paste) return;
  if(!go) {
    gURLBar.value = paste;
  } else {
    openUILink(paste, aEvent, false, true);
  }
}
this.midclick = function() {
var paste = readFromClipboard();
    getBrowser (). selectedTab = getBrowser (). addTab ( paste );
};
this.rightclick = function (event) {
  gURLBar.select();
  goDoCommand("cmd_paste");
  gURLBar.handleCommand();
}
this.leftclick = function (event) {
  gURLBar.select();
  gURLBar.handleCommand();
}

this.setAttribute("onclick", "custombuttons.gQuot.mHandler(event, this)");
this.setAttribute("onmouseover", "this.tooltipText = readFromClipboard() ? readFromClipboard() : this.label;");

Переключить 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 за помощь с кнопкой.

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);

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

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

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)');

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);
        }
};

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%2CiVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGOfPtRkwAAACBjSFJNAACHDwAAjA8AAP1SAACBQAAAfXkAAOmLAAA85QAAGcxzPIV3AAAKOWlDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAEjHnZZ3VFTXFofPvXd6oc0wAlKG3rvAANJ7k15FYZgZYCgDDjM0sSGiAhFFRJoiSFDEgNFQJFZEsRAUVLAHJAgoMRhFVCxvRtaLrqy89/Ly++Osb+2z97n77L3PWhcAkqcvl5cGSwGQyhPwgzyc6RGRUXTsAIABHmCAKQBMVka6X7B7CBDJy82FniFyAl8EAfB6WLwCcNPQM4BOB/+fpFnpfIHomAARm7M5GSwRF4g4JUuQLrbPipgalyxmGCVmvihBEcuJOWGRDT77LLKjmNmpPLaIxTmns1PZYu4V8bZMIUfEiK+ICzO5nCwR3xKxRoowlSviN+LYVA4zAwAUSWwXcFiJIjYRMYkfEuQi4uUA4EgJX3HcVyzgZAvEl3JJS8/hcxMSBXQdli7d1NqaQffkZKVwBALDACYrmcln013SUtOZvBwAFu/8WTLi2tJFRbY0tba0NDQzMv2qUP91829K3NtFehn4uWcQrf+L7a/80hoAYMyJarPziy2uCoDOLQDI3fti0zgAgKSobx3Xv7oPTTwviQJBuo2xcVZWlhGXwzISF/QP/U+Hv6GvvmckPu6P8tBdOfFMYYqALq4bKy0lTcinZ6QzWRy64Z+H+B8H/nUeBkGceA6fwxNFhImmjMtLELWbx+YKuGk8Opf3n5r4D8P+pMW5FonS+BFQY4yA1HUqQH7tBygKESDR+8Vd/6NvvvgwIH554SqTi3P/7zf9Z8Gl4iWDm/A5ziUohM4S8jMX98TPEqABAUgCKpAHykAd6ABDYAasgC1wBG7AG/iDEBAJVgMWSASpgA+yQB7YBApBMdgJ9oBqUAcaQTNoBcdBJzgFzoNL4Bq4AW6D+2AUTIBnYBa8BgsQBGEhMkSB5CEVSBPSh8wgBmQPuUG+UBAUCcVCCRAPEkJ50GaoGCqDqqF6qBn6HjoJnYeuQIPQXWgMmoZ+h97BCEyCqbASrAUbwwzYCfaBQ+BVcAK8Bs6FC+AdcCXcAB+FO+Dz8DX4NjwKP4PnEIAQERqiihgiDMQF8UeikHiEj6xHipAKpAFpRbqRPuQmMorMIG9RGBQFRUcZomxRnqhQFAu1BrUeVYKqRh1GdaB6UTdRY6hZ1Ec0Ga2I1kfboL3QEegEdBa6EF2BbkK3oy+ib6Mn0K8xGAwNo42xwnhiIjFJmLWYEsw+TBvmHGYQM46Zw2Kx8lh9rB3WH8vECrCF2CrsUexZ7BB2AvsGR8Sp4Mxw7rgoHA+Xj6vAHcGdwQ3hJnELeCm8Jt4G749n43PwpfhGfDf+On4Cv0CQJmgT7AghhCTCJkIloZVwkfCA8JJIJKoRrYmBRC5xI7GSeIx4mThGfEuSIemRXEjRJCFpB+kQ6RzpLuklmUzWIjuSo8gC8g5yM/kC+RH5jQRFwkjCS4ItsUGiRqJDYkjiuSReUlPSSXK1ZK5kheQJyeuSM1J4KS0pFymm1HqpGqmTUiNSc9IUaVNpf+lU6RLpI9JXpKdksDJaMm4ybJkCmYMyF2TGKQhFneJCYVE2UxopFykTVAxVm+pFTaIWU7+jDlBnZWVkl8mGyWbL1sielh2lITQtmhcthVZKO04bpr1borTEaQlnyfYlrUuGlszLLZVzlOPIFcm1yd2WeydPl3eTT5bfJd8p/1ABpaCnEKiQpbBf4aLCzFLqUtulrKVFS48vvacIK+opBimuVTyo2K84p6Ss5KGUrlSldEFpRpmm7KicpFyufEZ5WoWiYq/CVSlXOavylC5Ld6Kn0CvpvfRZVUVVT1Whar3qgOqCmrZaqFq+WpvaQ3WCOkM9Xr1cvUd9VkNFw08jT6NF454mXpOhmai5V7NPc15LWytca6tWp9aUtpy2l3audov2Ax2yjoPOGp0GnVu6GF2GbrLuPt0berCehV6iXo3edX1Y31Kfq79Pf9AAbWBtwDNoMBgxJBk6GWYathiOGdGMfI3yjTqNnhtrGEcZ7zLuM/5oYmGSYtJoct9UxtTbNN+02/R3Mz0zllmN2S1zsrm7+QbzLvMXy/SXcZbtX3bHgmLhZ7HVosfig6WVJd+y1XLaSsMq1qrWaoRBZQQwShiXrdHWztYbrE9Zv7WxtBHYHLf5zdbQNtn2iO3Ucu3lnOWNy8ft1OyYdvV2o/Z0+1j7A/ajDqoOTIcGh8eO6o5sxybHSSddpySno07PnU2c+c7tzvMuNi7rXM65Iq4erkWuA24ybqFu1W6P3NXcE9xb3Gc9LDzWepzzRHv6eO7yHPFS8mJ5NXvNelt5r/Pu9SH5BPtU+zz21fPl+3b7wX7efrv9HqzQXMFb0ekP/L38d/s/DNAOWBPwYyAmMCCwJvBJkGlQXlBfMCU4JvhI8OsQ55DSkPuhOqHC0J4wybDosOaw+XDX8LLw0QjjiHUR1yIVIrmRXVHYqLCopqi5lW4r96yciLaILoweXqW9KnvVldUKq1NWn46RjGHGnIhFx4bHHol9z/RnNjDn4rziauNmWS6svaxnbEd2OXuaY8cp40zG28WXxU8l2CXsTphOdEisSJzhunCruS+SPJPqkuaT/ZMPJX9KCU9pS8Wlxqae5Mnwknm9acpp2WmD6frphemja2zW7Fkzy/fhN2VAGasyugRU0c9Uv1BHuEU4lmmfWZP5Jiss60S2dDYvuz9HL2d7zmSue+63a1FrWWt78lTzNuWNrXNaV78eWh+3vmeD+oaCDRMbPTYe3kTYlLzpp3yT/LL8V5vDN3cXKBVsLBjf4rGlpVCikF84stV2a9021DbutoHt5turtn8sYhddLTYprih+X8IqufqN6TeV33zaEb9joNSydP9OzE7ezuFdDrsOl0mX5ZaN7/bb3VFOLy8qf7UnZs+VimUVdXsJe4V7Ryt9K7uqNKp2Vr2vTqy+XeNc01arWLu9dn4fe9/Qfsf9rXVKdcV17w5wD9yp96jvaNBqqDiIOZh58EljWGPft4xvm5sUmoqbPhziHRo9HHS4t9mqufmI4pHSFrhF2DJ9NProje9cv+tqNWytb6O1FR8Dx4THnn4f+/3wcZ/jPScYJ1p/0Pyhtp3SXtQBdeR0zHYmdo52RXYNnvQ+2dNt293+o9GPh06pnqo5LXu69AzhTMGZT2dzz86dSz83cz7h/HhPTM/9CxEXbvUG9g5c9Ll4+ZL7pQt9Tn1nL9tdPnXF5srJq4yrndcsr3X0W/S3/2TxU/uA5UDHdavrXTesb3QPLh88M+QwdP6m681Lt7xuXbu94vbgcOjwnZHokdE77DtTd1PuvriXeW/h/sYH6AdFD6UeVjxSfNTws+7PbaOWo6fHXMf6Hwc/vj/OGn/2S8Yv7ycKnpCfVEyqTDZPmU2dmnafvvF05dOJZ+nPFmYKf5X+tfa5zvMffnP8rX82YnbiBf/Fp99LXsq/PPRq2aueuYC5R69TXy/MF72Rf3P4LeNt37vwd5MLWe+x7ys/6H7o/ujz8cGn1E+f/gUDmPP8usTo0wAAAAlwSFlzAAALEgAACxIB0t1+/AAAABp0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjUuMTFH80I3AAAHgklEQVRYR+WX6VMb9x3GbYQuhFb36gJJYG7MpRsQIC5zHwIhbEhSJ049JrFdUjsOTZw4ECcg2QYbGx9JqJ1Mkk4y06bTmbYzfdHpTN/mL8pY8/RZaR2Y2tL4dfudeWZhd3+/5/M9dkd75H8pjhbRy0UoFCoJh4KaZ4pGwhqT0aApVZQ8k7aAyhQlJTqqXFFyVC+r3FtZqWtubtK2t7VqgwG/tKdStno+eFFsjAz+VNmVeOrpnst6YwtZb+8ij6mstyeV9ciS/pbk6z2QdK8nNp+t7JqjEnl1JrKe7nmeT2Y9XflrVZ1TPwfD0R+DwaAg2x5EMBS5pO1dgXrgMnRj1yBMbcI4k4Fx9gaVgSmRgXk2DXMiDUtiKyfr3Cass5/BPH0dpql1GMc/gnH0KgyjH8Aw9iEM4+sQJj6BfvxjaIfXoIyvorpr+mk4HJ6VbQ/CH46uaeIXefM6zXZgTT2AePIR9RDi4n3YU3twpO5Sd+DM6TZcCztwJG/CQRiRELaJa5i5so/0N//E1rf/Qvq7f8Oa2Cb0NgxMSILwdCeykUhkUbY9CH8oulY2dBmG6TRsNHcsPYZz+QlcS/twnXoE1+Ie3Au7qEjuULfgnr9JZeBmBZzM3jF+FeKJ95D56h84HOL8HYjJPVZsG+WshJetejEAK6DjBqbZm8z4EZyn9uFe+hLuU5/DvfiA5ndpuANX4gZcM1twTV2Hc3IDTpbdPvI+RMLb+leRefw32Tof9tlbsCfvsV23oWc7fD3JwgDlBDDPpCEu3INTMk3dz4v/u5K7NN+GkxVycCP7KI1PSMbvwTZwCTb219p3Een/Bphme+bY0sQtGCbWiwPoh9+FafozLtiGa549lo6SEjdpvAUnN8hlO/AOZlfvIvPk78z4r79o5uJtWGIrORDb4LuEvArH5HXYmZSVMoxfI0CRFpQPX4Jpch0iS+zkAuf0p3lNSaX+EPbhyxD7zsMSPY30F3+SczyIzP5fYI2dZTUusDIEGCEA+26f+hRWtkwYu1p8BsqHfgvz2EcQpd4SxMlHyclFztH34aC5Pf42bF2vw+xPYuvh97LtQWS+/DNs3W9CjJ+HnTPhGPkdHFxvn/gYVkpg9byxuSItGPwNzFwkjn2QW+ykqYNVcQysMvMVmp+GJZCC8fg4Nve+kW0PIsOqiN1nCHoejiGuO3GF+6zBTggr9xSGr8BXFKD/Akw0tUnZ0tTe9xbE3nMQY2/CGn0V5uACTK2TMDQMYPPeV7LtQWS++CMh38itcwyu5iGkvTjcVsII/N8nvQfC4RcDCPEVmAYuwsoMbD1nYe18DdbIEizBFMwdszC1jMHQOAihphsTyxewubuPzbuPsXXva6QffIeZcxsE+BWhz8Le/xaTuJCTOPgOLGyvgRX2dc9m+SYsUAEuNDJjS+wMjZdh8c8j/egHpB/+AVv3v8XW3tc0fELj3+fNZQBT0zDMrIyVFRKjr7Bir8MuQfSdo1Yg9r8NC6sr9J8nwEwBAL4J9T1nYOh+A2aamzsSMDaPyMUtHhKARQIILMAWXoLIyokcVpF7STNhI4yZiQnxc/B1TRcBiJ2Ggb02BZI0H4Whrle2KB4mtsXSOgGbfw5iaBFi5FS+EhKI1EbpyeEcCb2/hq9zsjBAederEMKLMLRNwVDfD6E6LFsUD92xGIRGtoHrrIE52KRWEMSW00m28xWYul6DwNZ4Oyey4VCoAEDnMoTAPAzHR3ODVlbRKlsUj7KqKHQ1fSivH4K+iYPaMglz+wxnaI5A85yNFEwcZoEQ3uhElj98CrQgchJ6TruhaQg6bwhqe6NsUTy0vLesmsC1cejqBqGrH0Z5wwj0jWM5SSDGUAr66DJ8kbHCAOUsv8Ay6uvjUFd0QCXWyxbFQ1MZgNYXJUQMZTVxgvSjrG6AIBIMq9I8BiNbI4RPwlsMQB9KQmgdh4bZqF1tLw/gbofWwypUdeYhjvVQfdDK0tQOcN9J6INJ+MIjhQAia/rgHHTNJ6DyRaBytb40gMrRDLW7DZoKP6sRgsYTZlui0FZ1Ud3QSCANw9CzCr7wcJa/CQsBJKDm9Ku8YRmgARuZXWykb2Nja0fWdv4onUvfwSc3dqGyN0AtQbhaWA0JpCPXFg2rovFEoCaEivNR1j4FX6gIgM4/g1LeqPSyAiyrlJmSmytttVBaj0FpqUappQql1mqeq4FSrIPS0QiVszkPTHNpdtSVfqgIoCKAmtVQ+Tqh5FOi5CwUBAgQQNU2DQUHp5QzoGQVlJUdUFa0o5Sbl7qO5+WUj8xW6W7NXVd6/FSQa0L5dVICHEpJSs6FknNRWtePkuZxeAKDhQDCl5QtE7mbShqGoKjtg4LDpOBLRkEgRXWXrM788Zgknq/h9RreV9tLxaGoO6z+vBoGUdI0iqMtU6hs731KgOd/lksfJg2B7p/cHfGnVNbd3pd1t/VmXa09WWdOsayzhZKOv6gn62qTxPteoNwe0l6yvB29P/uDoR/5Kn7+w0QKPh4lwUBAE/D7cwoFAxqjwcBPL8UzlR3S4fOHxU+4vPhZxs+x0GEV/jT7P40jR/4DkpWrmw3S7OkAAAAASUVORK5CYII%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. Надоело нажимать на панель...  кнопка написана из за лени, как и всё в этом мире ;)

Ночной режим( 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Л: Переключить черный фон страниц";

Остановить - Перезагрузить( 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

Переключить стиль на странице( 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();

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

скрытый текст
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 и работают.

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 с передачей ссылки при перетаскивании ссылки на кнопку";

Открыть видео в 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;

Добавлять новые СВ кнопки справа от этой кнопки( 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) );

Объекты: перебор свойств( 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

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

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

Запуск 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();
};

Автоматически добавлять выделенный текст в 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 можно менять как вам удобней.

Запуск программы( 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();
};

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) );
})();

Переключить панель навигации( 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');

Быстрое переключение параметров 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, которым большое от меня спасибо.

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.

Раскукоживатель коротких ссылок(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 и всем в чьи кнопки подглядывал при создании.

Сайты в боковой панели(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 - за идею кнопки.

Tab Sound Control(Firefox 42+ (для контроля звука во вкладках с флеш-контентом - требуется плагин Flash версии 20+)), от 02.09.2016
Позволяет включать/отключать и регулировать громкость звука во вкладке/всех вкладках.
Дополнительно можно задать дефолтный уровень громкости (только в ФФ 49+) и автозапуск воспроизведения для html5 медиа-контента (параметры about:config).

Клики на кнопке:
ЛКМ: Показать меню кнопки
СКМ: Отключить звук во всех вкладках
Ctrl + СКМ: Включить звук во всех вкладках
ПКМ: Переключить звук в активной вкладке
ПКМ + Клавиши Модификаторы: Показать стандартное CB меню кнопки
Колесико Мыши: Регулировать уровень громкости во всех вкладках
Ctrl + Колесико Мыши (только в FF49+): Регулировать дефолтный уровень громкости для медиа

Shift + Колесико мыши над вкладкой: Регулировать громкость звука во вкладке

Горячие клавиши (вне зависимости от текущей языковой раскладки):
Alt + Shift + S - Переключить звук в активной вкладке в активном окне
Alt + Shift + M - Отключить звук во всех вкладках во всех окнах
Alt + Shift + U - Включить звук во всех вкладках во всех окнах
Сочетания можно заменить на свои. См. комментарии в коде.

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

Код кнопки:

Выделить код

Код:

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%3ETab%20Sound%20Control%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/svg+xml%3Bbase64%2CPHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIGhlaWdodD0nMTZweCcgd2lkdGg9JzE2cHgnPjxnPjxwYXRoIGQ9J00gOS43OSwxNCBDIDE1LjYsMTIuMSAxNS42LDMuOTcgOS43OSwyLjAyIEwgOS43OSwwLjEyOCBDIDE4LDIuMTEgMTgsMTMuOSA5Ljc5LDE1LjkgWiBNIDMuNTgsMTAuOCAwLDEwLjggMCw1LjI1IDMuNTgsNS4yNSA3Ljk0LDAuODk2IDcuOTQsMTUuMSBaIE0gOS43OSw0LjQyIEMgMTIuNyw1LjgyIDEyLjcsMTAuMiA5Ljc5LDExLjYgWicgc3R5bGU9J2ZpbGw6cmdiKDEyMSwxMjQsMTI4KScvPjwvZz48L3N2Zz4%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B//%20Tab%20Sound%20Control%20%u043E%u0442%2002.09.2016%0Athis.onclick%20%3D%20e%20%3D%3E%20%7B%0A%20%20%20%20if%20%28e.button%20%3D%3D%200%29%20%7B%0A%20%20%20%20%20%20%20%20tltp.hidePopup%28%29%3B%20popup.openPopup%28this%2C%20%22after_start%22%29%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20if%20%28e.button%20%3D%3D%201%29%0A%20%20%20%20%20%20%20%20%21e.ctrlKey%20%3F%20muteAllTabs%28%29%20%3A%20unMuteAllTabs%28%29%3B%0A%0A%20%20%20%20if%20%28e.button%20%3D%3D%202%20%26%26%20%21e.altKey%20%26%26%20%21e.shiftKey%20%26%26%20%21e.ctrlKey%20%26%26%20%21e.metaKey%29%20%7B%0A%20%20%20%20%20%20%20%20e.preventDefault%28%29%3B%20e.stopPropagation%28%29%3B%0A%20%20%20%20%20%20%20%20muteTab%28%29%3B%0A%20%20%20%20%7D%0A%7D%0A%0Avar%20popup%20%3D%20self.appendChild%28document.createElement%28%22menupopup%22%29%29%3B%0Avar%20tltp%20%3D%20self.appendChild%28document.createElement%28%22tooltip%22%29%29%3B%0Avar%20tabVolTltp%20%3D%20self.appendChild%28document.createElement%28%27tooltip%27%29%29%0Avar%20pref%20%3D%20%22media.default_volume%22%3B%0Avar%20isPref%20%3D%20%21%21cbu.isPref%28pref%29%3B%0Avar%20du%20%3D%20Cc%5B%22@mozilla.org/inspector/dom-utils%3B1%22%5D.getService%28Ci.inIDOMUtils%29%3B%0Avar%20o%20%3D%20%7B//%20https%3A//github.com/Infocatcher/Private_Tab/issues/228%23issuecomment-238963363%0A%20%20%20%20get%20windows%28%29%20%7B%0A%20%20%20%20%20%20%20%20return%20%28function*%28%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20var%20ws%20%3D%20Services.wm.getEnumerator%28%22navigator%3Abrowser%22%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20while%28ws.hasMoreElements%28%29%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20yield%20ws.getNext%28%29%3B%0A%20%20%20%20%20%20%20%20%7D%29%28%29%3B%0A%20%20%20%20%7D%0A%7D%0A%0Athis.tooltipText%20%3D%20%27%27%3B%0A%0Athis.onmouseover%20%3D%20e%20%3D%3E%20%7B%0A%20%20%20%20if%20%28e.target%20%21%3D%20this%29%20return%3B%0A%20%20%20%20tltp.label%20%3D%20%27%u041B%u041A%u041C%3A%20%u041F%u043E%u043A%u0430%u0437%u0430%u0442%u044C%20%u043C%u0435%u043D%u044E%20%u043A%u043D%u043E%u043F%u043A%u0438%27%20+%0A%20%20%20%20%20%20%20%20%27%5Cn%u0421%u041A%u041C%3A%20%u041E%u0442%u043A%u043B%u044E%u0447%u0438%u0442%u044C%20%u0437%u0432%u0443%u043A%20%u0432%u043E%20%u0432%u0441%u0435%u0445%20%u0432%u043A%u043B%u0430%u0434%u043A%u0430%u0445%27%20+%0A%20%20%20%20%20%20%20%20%27%5CnCtrl%20+%20%u0421%u041A%u041C%3A%20%u0412%u043A%u043B%u044E%u0447%u0438%u0442%u044C%20%u0437%u0432%u0443%u043A%20%u0432%u043E%20%u0432%u0441%u0435%u0445%20%u0432%u043A%u043B%u0430%u0434%u043A%u0430%u0445%27%20+%0A%20%20%20%20%20%20%20%20%27%5Cn%u041F%u041A%u041C%3A%20%u041F%u0435%u0440%u0435%u043A%u043B%u044E%u0447%u0438%u0442%u044C%20%u0437%u0432%u0443%u043A%20%u0432%20%u0430%u043A%u0442%u0438%u0432%u043D%u043E%u0439%20%u0432%u043A%u043B%u0430%u0434%u043A%u0435%27%20+%0A%20%20%20%20%20%20%20%20%27%5Cn%u041F%u041A%u041C%20+%20%u041A%u043B%u0430%u0432%u0438%u0448%u0438%20%u041C%u043E%u0434%u0438%u0444%u0438%u043A%u0430%u0442%u043E%u0440%u044B%3A%20%u041F%u043E%u043A%u0430%u0437%u0430%u0442%u044C%20%u0441%u0442%u0430%u043D%u0434%u0430%u0440%u0442%u043D%u043E%u0435%20CB%20%u043C%u0435%u043D%u044E%27%20+%0A%20%20%20%20%20%20%20%20%27%5Cn%u041A%u043E%u043B%u0435%u0441%u0438%u043A%u043E%20%u041C%u044B%u0448%u0438%3A%20%u0420%u0435%u0433%u0443%u043B%u0438%u0440%u043E%u0432%u0430%u0442%u044C%20%u0443%u0440%u043E%u0432%u0435%u043D%u044C%20%u0433%u0440%u043E%u043C%u043A%u043E%u0441%u0442%u0438%20%u0432%u043E%20%u0432%u0441%u0435%u0445%20%u0432%u043A%u043B%u0430%u0434%u043A%u0430%u0445%27%20+%0A%20%20%20%20%20%20%20%20%28isPref%20%3F%20%27%5CnCtrl%20+%20%u041A%u043E%u043B%u0435%u0441%u0438%u043A%u043E%20%u041C%u044B%u0448%u0438%3A%20%u0420%u0435%u0433%u0443%u043B%u0438%u0440%u043E%u0432%u0430%u0442%u044C%20%u0434%u0435%u0444%u043E%u043B%u0442%u043D%u044B%u0439%20%u0443%u0440%u043E%u0432%u0435%u043D%u044C%20%u0433%u0440%u043E%u043C%u043A%u043E%u0441%u0442%u0438%20%u0434%u043B%u044F%20%u043C%u0435%u0434%u0438%u0430%27%20+%0A%20%20%20%20%20%20%20%20%20%27%5Cn%28%u0442%u0435%u043A%u0443%u0449%u0438%u0439%20%u0443%u0440%u043E%u0432%u0435%u043D%u044C%3A%20%27%20+%20cbu.getPrefs%28pref%29%20*%20100%20+%20%27%25%29%27%20%3A%20%27%27%29%3B%0A%0A%20%20%20%20tltp.openPopup%28this%2C%20%22after_start%22%29%3B%0A%7D%0Athis.onmouseleave%20%3D%20%28%29%20%3D%3E%20tltp.hidePopup%28%29%3B%0A%0Athis.onwheel%20%3D%20e%20%3D%3E%20%7B%0A%20%20%20%20if%20%28e.ctrlKey%20%26%26%20isPref%29%20%7B//%20FF49+%3A%20https%3A//bugzilla.mozilla.org/show_bug.cgi%3Fid%3D1274622%0A%0A%20%20%20%20%20%20%20%20var%20step%20%3D%20.1%3B%0A%20%20%20%20%20%20%20%20var%20val%20%3D%20parseFloat%28Services.prefs.getCharPref%28pref%29%29%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20val%20%3D%20e.deltaY%20%3C%200%20%3F%20Math.min%281%2C%20val%20+%20step%29%20%3A%20Math.max%280%2C%20val%20-%20step%29%3B%0A%0A%20%20%20%20%20%20%20%20Services.prefs.setCharPref%28pref%2C%20%28val%29.toFixed%281%29%29%3B%0A%0A%20%20%20%20%20%20%20%20tltp.label%20%3D%20%27%u0434%u0435%u0444%u043E%u043B%u0442%u043D%u044B%u0439%20%u0443%u0440%u043E%u0432%u0435%u043D%u044C%20%u0433%u0440%u043E%u043C%u043A%u043E%u0441%u0442%u0438%20%u0434%u043B%u044F%20%u043C%u0435%u0434%u0438%u0430%3A%20%27%20+%20%28val%29.toFixed%281%29%20*%20100%20+%20%27%25%27%3B%0A%0A%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20var%20step%20%3D%20.05%3B%0A%0A%20%20%20%20for%28var%20w%20of%20o.windows%29%20for%28var%20%7BcontentWindow%3A%20win%7D%20of%20w.gBrowser.browsers%29%20%7B%0A%20%20%20%20%20%20%20%20var%20dwu%20%3D%20win.QueryInterface%28Ci.nsIInterfaceRequestor%29.getInterface%28Ci.nsIDOMWindowUtils%29%3B%0A%20%20%20%20%20%20%20%20dwu.audioVolume%20%3D%20e.deltaY%20%3C%200%20%3F%20Math.min%281%2C%20dwu.audioVolume%20+%20step%29%20%3A%20Math.max%280%2C%20dwu.audioVolume%20-%20step%29%3B%0A%20%20%20%20%7D%0A%7D%0A%0A%5B%0A%20%20%20%20%7Blbl%3A%20%27%u0412%u043A%u043B.%5C%5C%u0412%u044B%u043A%u043B.%20%u0437%u0432%u0443%u043A%20%u0432%20%u0430%u043A%u0442%u0438%u0432%u043D%u043E%u0439%20%u0432%u043A%u043B%u0430%u0434%u043A%u0435%27%2C%20cmd%3A%20%27muteTab%28%29%3B%27%7D%2C%0A%20%20%20%20%7Blbl%3A%20%27%u041E%u0442%u043A%u043B%u044E%u0447%u0438%u0442%u044C%20%u0437%u0432%u0443%u043A%20%u0432%u043E%20%u0432%u0441%u0435%u0445%20%u0432%u043A%u043B%u0430%u0434%u043A%u0430%u0445%27%2C%20cmd%3A%20%27muteAllTabs%28%29%3B%27%7D%2C%2C%0A%20%20%20%20%7Blbl%3A%20%27%u0412%u043A%u043B%u044E%u0447%u0438%u0442%u044C%20%u0437%u0432%u0443%u043A%20%u0432%u043E%20%u0432%u0441%u0435%u0445%20%u0432%u043A%u043B%u0430%u0434%u043A%u0430%u0445%27%2C%20cmd%3A%20%27unMuteAllTabs%28%29%3B%27%7D%2C%0A%20%20%20%20%7Blbl%3A%20%27%u0417%u0430%u0434%u0430%u0442%u044C%20%u0443%u0440%u043E%u0432%u0435%u043D%u044C%20%u0433%u0440%u043E%u043C%u043A%u043E%u0441%u0442%u0438%20%u0432%u043E%20%u0432%u0441%u0435%u0445%20%u0432%u043A%u043B%u0430%u0434%u043A%u0430%u0445%27%2C%20cmd%3A%20%27setVolume%28%29%3B%27%7D%2C%0A%20%20%20%20%7Bpref%3A%20%27media.default_volume%27%2C%20lbl%3A%20%27%u0417%u0430%u0434%u0430%u0442%u044C%20%u0434%u0435%u0444%u043E%u043B%u0442%u043D%u044B%u0439%20%u0443%u0440%u043E%u0432%u0435%u043D%u044C%20%u0433%u0440%u043E%u043C%u043A%u043E%u0441%u0442%u0438%27%2C%20cmd%3A%20%27promptDialog%28m.pref%29%3B%27%7D%2C%0A%20%20%20%20%7Bpref%3A%20%27media.autoplay.enabled%27%2C%20lbl%3A%20%27%u041F%u0435%u0440%u0435%u043A%u043B%u044E%u0447%u0438%u0442%u044C%20%u0430%u0432%u0442%u043E%u0432%u043E%u0441%u043F%u0440%u043E%u0438%u0437%u0432%u0435%u0434%u0435%u043D%u0438%u0435%20%u043C%u0435%u0434%u0438%u0430%27%2C%20cmd%3A%20%27cbu.setPrefs%28m.pref%2C%20%21cbu.getPrefs%28m.pref%29%29%3B%27%7D%0A%5D.forEach%28m%20%3D%3E%20%7B%0A%20%20%20%20if%20%28m.pref%20%26%26%20%21cbu.isPref%28m.pref%29%29%20return%3B%0A%0A%20%20%20%20var%20mItem%20%3D%20popup.appendChild%28document.createElement%28%22menuitem%22%29%29%3B%0A%0A%20%20%20%20mItem.onclick%20%3D%20%28%29%20%3D%3E%20eval%28m.cmd%29%3B%0A%20%20%20%20mItem.setAttribute%28%27label%27%2C%20m.pref%20%3F%20%28m.lbl%20+%20%27%20%28about%3Aconfig%29%27%29%20%3A%20m.lbl%29%3B%0A%20%20%20%20m.pref%20%26%26%20%28mItem.onmouseover%20%3D%20%28%29%20%3D%3E%20mItem.tooltipText%20%3D%20%27%u0422%u0435%u043A%u0443%u0449%u0435%u0435%20%u0437%u043D%u0430%u0447%u0435%u043D%u0438%u0435%3A%20%27%20+%20cbu.getPrefs%28m.pref%29%29%3B%0A%7D%29%0A%0Afunction%20muteTab%28%29%20window.gBrowser.selectedTab.toggleMuteAudio%28%29%3B%0A%0Afunction%20muteAllTabs%28%29%20%7B%0A%20%20%20%20for%28var%20w%20of%20o.windows%29%0A%20%20%20%20%20%20%20%20%5B...w.gBrowser.tabs%5D.filter%28tab%20%3D%3E%20tab.hasAttribute%28%22soundplaying%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%20%20%26%26%20%21tab.hasAttribute%28%22muted%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%20%20%26%26%20tab.toggleMuteAudio%28%29%29%3B%0A%7D%0A%0Afunction%20unMuteAllTabs%28%29%20%7B%0A%20%20%20%20for%28var%20w%20of%20o.windows%29%0A%20%20%20%20%20%20%20%20%5B...w.gBrowser.tabs%5D.filter%28tab%20%3D%3E%20tab.hasAttribute%28%22soundplaying%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%20%20%26%26%20tab.hasAttribute%28%22muted%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%20%20%26%26%20tab.toggleMuteAudio%28%29%29%3B%0A%7D%0A%0Afunction%20setVolume%28%29%20%7B%0A%20%20%20%20var%20input%20%3D%20%7Bvalue%3A%201%7D%3B%0A%20%20%20%20var%20prompt%20%3D%20Services.prompt.prompt%28null%2C%20%22%u0417%u0430%u0434%u0430%u0442%u044C%20%u0443%u0440%u043E%u0432%u0435%u043D%u044C%20%u0433%u0440%u043E%u043C%u043A%u043E%u0441%u0442%u0438%20%u0432%u043E%20%u0432%u0441%u0435%u0445%20%u0432%u043A%u043B%u0430%u0434%u043A%u0430%u0445%22%2C%20%22%u043E%u0442%200%20%u0434%u043E%201%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%0A%20%20%20%20if%20%28prompt%29%0A%20%20%20%20%20%20%20%20for%28var%20w%20of%20o.windows%29%20for%28var%20%7BcontentWindow%3A%20win%7D%20of%20w.gBrowser.browsers%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20var%20dwu%20%3D%20win.QueryInterface%28Ci.nsIInterfaceRequestor%29.getInterface%28Ci.nsIDOMWindowUtils%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20dwu.audioVolume%20%3D%20input.value%3B%0A%20%20%20%20%20%20%20%20%7D%0A%7D%0A%0Afunction%20promptDialog%28pref%29%20%7B%0A%20%20%20%20var%20input%20%3D%20%7Bvalue%3A%20cbu.getPrefs%28pref%29%7D%3B%0A%20%20%20%20var%20prompt%20%3D%20Services.prompt.prompt%28null%2C%20%22%u0417%u0430%u0434%u0430%u0442%u044C%20%u0434%u0435%u0444%u043E%u043B%u0442%u043D%u044B%u0439%20%u0443%u0440%u043E%u0432%u0435%u043D%u044C%20%u0433%u0440%u043E%u043C%u043A%u043E%u0441%u0442%u0438%22%2C%20%22%u043E%u0442%200.0%20%u0434%u043E%201.0%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%0A%20%20%20%20if%20%28prompt%29%0A%20%20%20%20%20%20%20%20cbu.setPrefs%28pref%2C%20input.value%29%3B%0A%7D%0A%0Afunction%20hotKeys%28e%29%20%7B%0A%20%20%20%20//%20Alt%20+%20Shift%20+%20S%20-%20%u041F%u0435%u0440%u0435%u043A%u043B%u044E%u0447%u0438%u0442%u044C%20%u0437%u0432%u0443%u043A%20%u0432%20%u0430%u043A%u0442%u0438%u0432%u043D%u043E%u0439%20%u0432%u043A%u043B%u0430%u0434%u043A%u0435%20%u0432%20%u0430%u043A%u0442%u0438%u0432%u043D%u043E%u043C%20%u043E%u043A%u043D%u0435%0A%20%20%20%20//%20Alt%20+%20Shift%20+%20M%20-%20%u041E%u0442%u043A%u043B%u044E%u0447%u0438%u0442%u044C%20%u0437%u0432%u0443%u043A%20%u0432%u043E%20%u0432%u0441%u0435%u0445%20%u0432%u043A%u043B%u0430%u0434%u043A%u0430%u0445%20%u0432%u043E%20%u0432%u0441%u0435%u0445%20%u043E%u043A%u043D%u0430%u0445%0A%20%20%20%20//%20Alt%20+%20Shift%20+%20U%20-%20%u0412%u043A%u043B%u044E%u0447%u0438%u0442%u044C%20%u0437%u0432%u0443%u043A%20%u0432%u043E%20%u0432%u0441%u0435%u0445%20%u0432%u043A%u043B%u0430%u0434%u043A%u0430%u0445%20%u0432%u043E%20%u0432%u0441%u0435%u0445%20%u043E%u043A%u043D%u0430%u0445%0A%20%20%20%20//%20%u0421%u043C%3A%20https%3A//developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/keyCode%23Constants_for_keyCode_value%0A%20%20%20%20if%20%28e.altKey%20%26%26%20e.shiftKey%20%26%26%20%21e.ctrlKey%20%26%26%20%21e.metaKey%29%20%7B%0A%0A%20%20%20%20%20%20%20%20switch%20%28e.keyCode%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20case%2077%3A%20muteAllTabs%28%29%3B%20break%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20case%2083%3A%20muteTab%28%29%3B%20break%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20case%2085%3A%20unMuteAllTabs%28%29%3B%20break%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20default%3A%20return%3B%0A%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20e.preventDefault%28%29%3B%20e.stopPropagation%28%29%3B%0A%20%20%20%20%7D%0A%7D%0A%0Afunction%20tabVolume%28e%29%20%7B%0A%20%20%20%20let%20tab%20%3D%20e.originalTarget%3B%0A%20%20%20%20while%20%28tab%20%26%26%20tab.localName%20%21%3D%20%27tab%27%29%20tab%20%3D%20tab.parentNode%3B%0A%0A%20%20%20%20if%20%28%21tab%20%7C%7C%20%21e.shiftKey%29%20return%3B%0A%0A%20%20%20%20e.preventDefault%28%29%3B%20e.stopPropagation%28%29%3B%0A%0A%20%20%20%20var%20step%20%3D%20.05%2C%0A%20%20%20%20%20%20%20%20dwu%20%3D%20tab.linkedBrowser.contentWindow.QueryInterface%28Ci.nsIInterfaceRequestor%29.getInterface%28Ci.nsIDOMWindowUtils%29%3B%0A%0A%20%20%20%20dwu.audioVolume%20%3D%20e.deltaY%20%3C%200%20%3F%20Math.min%281%2C%20dwu.audioVolume%20+%20step%29%20%3A%20Math.max%280%2C%20dwu.audioVolume%20-%20step%29%3B%0A%0A%20%20%20%20document.getElementById%28%27tabbrowser-tab-tooltip%27%29.hidePopup%28%29%3B%0A%20%20%20%20tabVolTltp.openPopup%28tab%2C%20%22after_start%22%29%3B%0A%20%20%20%20tabVolTltp.label%20%3D%20%27Volume%3A%20%27%20+%20%28dwu.audioVolume%20*%20100%29.toFixed%28%29%3B%0A%20%20%20%20tab.onmouseleave%20%3D%20%28%29%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20tabVolTltp.hidePopup%28%29%3B%0A%20%20%20%20%20%20%20%20tab.onmouseleave%20%3D%20null%3B%0A%20%20%20%20%7D%0A%7D%0A%0AaddEventListener%28%22keydown%22%2C%20hotKeys%2C%20false%2C%20window%29%3B%0AaddEventListener%28%22wheel%22%2C%20tabVolume%2C%20true%2C%20window.gBrowser.tabContainer%29%3B%0AaddDestructor%28%28%29%3D%3E%20%7B%0A%20%20%20%20removeEventListener%28%22keydown%22%2C%20hotKeys%2C%20false%2C%20window%29%3B%0A%20%20%20%20removeEventListener%28%22wheel%22%2C%20tabVolume%2C%20true%2C%20window.gBrowser.tabContainer%29%3B%0A%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%u041A%u043D%u043E%u043F%u043A%u0430%3A%0A%20%20%20%20%u041B%u041A%u041C%3A%20%u041F%u043E%u043A%u0430%u0437%u0430%u0442%u044C%20%u043C%u0435%u043D%u044E%20%u043A%u043D%u043E%u043F%u043A%u0438%0A%20%20%20%20%u0421%u041A%u041C%3A%20%u041E%u0442%u043A%u043B%u044E%u0447%u0438%u0442%u044C%20%u0437%u0432%u0443%u043A%20%u0432%u043E%20%u0432%u0441%u0435%u0445%20%u0432%u043A%u043B%u0430%u0434%u043A%u0430%u0445%0A%20%20%20%20Ctrl%20+%20%u0421%u041A%u041C%3A%20%u0412%u043A%u043B%u044E%u0447%u0438%u0442%u044C%20%u0437%u0432%u0443%u043A%20%u0432%u043E%20%u0432%u0441%u0435%u0445%20%u0432%u043A%u043B%u0430%u0434%u043A%u0430%u0445%0A%20%20%20%20%u041F%u041A%u041C%3A%20%u041F%u0435%u0440%u0435%u043A%u043B%u044E%u0447%u0438%u0442%u044C%20%u0437%u0432%u0443%u043A%20%u0432%20%u0430%u043A%u0442%u0438%u0432%u043D%u043E%u0439%20%u0432%u043A%u043B%u0430%u0434%u043A%u0435%0A%20%20%20%20%u041F%u041A%u041C%20+%20%u041A%u043B%u0430%u0432%u0438%u0448%u0438%20%u041C%u043E%u0434%u0438%u0444%u0438%u043A%u0430%u0442%u043E%u0440%u044B%3A%20%u041F%u043E%u043A%u0430%u0437%u0430%u0442%u044C%20%u0441%u0442%u0430%u043D%u0434%u0430%u0440%u0442%u043D%u043E%u0435%20CB%20%u043C%u0435%u043D%u044E%0A%20%20%20%20%u041A%u043E%u043B%u0435%u0441%u0438%u043A%u043E%20%u041C%u044B%u0448%u0438%3A%20%u0420%u0435%u0433%u0443%u043B%u0438%u0440%u043E%u0432%u0430%u0442%u044C%20%u0443%u0440%u043E%u0432%u0435%u043D%u044C%20%u0433%u0440%u043E%u043C%u043A%u043E%u0441%u0442%u0438%20%u0432%u043E%20%u0432%u0441%u0435%u0445%20%u0432%u043A%u043B%u0430%u0434%u043A%u0430%u0445%0A%20%20%20%20Ctrl%20+%20%u041A%u043E%u043B%u0435%u0441%u0438%u043A%u043E%20%u041C%u044B%u0448%u0438%20%28%u0442%u043E%u043B%u044C%u043A%u043E%20%u0432%20FF49+%29%3A%20%u0420%u0435%u0433%u0443%u043B%u0438%u0440%u043E%u0432%u0430%u0442%u044C%20%u0434%u0435%u0444%u043E%u043B%u0442%u043D%u044B%u0439%20%u0443%u0440%u043E%u0432%u0435%u043D%u044C%20%u0433%u0440%u043E%u043C%u043A%u043E%u0441%u0442%u0438%20%u0434%u043B%u044F%20%u043C%u0435%u0434%u0438%u0430%0A%0A%u0413%u043E%u0440%u044F%u0447%u0438%u0435%20%u043A%u043B%u0430%u0432%u0438%u0448%u0438%3A%0A%20%20%20%20Alt%20+%20Shift%20+%20S%20-%20%u041F%u0435%u0440%u0435%u043A%u043B%u044E%u0447%u0438%u0442%u044C%20%u0437%u0432%u0443%u043A%20%u0432%20%u0430%u043A%u0442%u0438%u0432%u043D%u043E%u0439%20%u0432%u043A%u043B%u0430%u0434%u043A%u0435%20%u0432%20%u0430%u043A%u0442%u0438%u0432%u043D%u043E%u043C%20%u043E%u043A%u043D%u0435%0A%20%20%20%20Alt%20+%20Shift%20+%20M%20-%20%u041E%u0442%u043A%u043B%u044E%u0447%u0438%u0442%u044C%20%u0437%u0432%u0443%u043A%20%u0432%u043E%20%u0432%u0441%u0435%u0445%20%u0432%u043A%u043B%u0430%u0434%u043A%u0430%u0445%20%u0432%u043E%20%u0432%u0441%u0435%u0445%20%u043E%u043A%u043D%u0430%u0445%0A%20%20%20%20Alt%20+%20Shift%20+%20U%20-%20%u0412%u043A%u043B%u044E%u0447%u0438%u0442%u044C%20%u0437%u0432%u0443%u043A%20%u0432%u043E%20%u0432%u0441%u0435%u0445%20%u0432%u043A%u043B%u0430%u0434%u043A%u0430%u0445%20%u0432%u043E%20%u0432%u0441%u0435%u0445%20%u043E%u043A%u043D%u0430%u0445%0A%0AShift%20+%20%u041A%u043E%u043B%u0435%u0441%u0438%u043A%u043E%20%u043C%u044B%u0448%u0438%20%u043D%u0430%u0434%20%u0432%u043A%u043B%u0430%u0434%u043A%u043E%u0439%3A%0A%20%20%20%20%u0420%u0435%u0433%u0443%u043B%u0438%u0440%u043E%u0432%u0430%u0442%u044C%20%u0433%u0440%u043E%u043C%u043A%u043E%u0441%u0442%u044C%20%u0437%u0432%u0443%u043A%u0430%20%u0432%u043E%20%u0432%u043A%u043B%u0430%u0434%u043A%u0435%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

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

Выделить код

Код:

// Tab Sound Control от 02.09.2016
this.onclick = e => {
    if (e.button == 0) {
        tltp.hidePopup(); popup.openPopup(this, "after_start");
    }

    if (e.button == 1)
        !e.ctrlKey ? muteAllTabs() : unMuteAllTabs();

    if (e.button == 2 && !e.altKey && !e.shiftKey && !e.ctrlKey && !e.metaKey) {
        e.preventDefault(); e.stopPropagation();
        muteTab();
    }
}

var popup = self.appendChild(document.createElement("menupopup"));
var tltp = self.appendChild(document.createElement("tooltip"));
var tabVolTltp = self.appendChild(document.createElement('tooltip'))
var pref = "media.default_volume";
var isPref = !!cbu.isPref(pref);
var du = Cc["@mozilla.org/inspector/dom-utils;1"].getService(Ci.inIDOMUtils);
var o = {// https://github.com/Infocatcher/Private_Tab/issues/228#issuecomment-238963363
    get windows() {
        return (function*() {
            var ws = Services.wm.getEnumerator("navigator:browser");
            while(ws.hasMoreElements())
                yield ws.getNext();
        })();
    }
}

this.tooltipText = '';

this.onmouseover = e => {
    if (e.target != this) return;
    tltp.label = 'ЛКМ: Показать меню кнопки' +
        '\nСКМ: Отключить звук во всех вкладках' +
        '\nCtrl + СКМ: Включить звук во всех вкладках' +
        '\nПКМ: Переключить звук в активной вкладке' +
        '\nПКМ + Клавиши Модификаторы: Показать стандартное CB меню' +
        '\nКолесико Мыши: Регулировать уровень громкости во всех вкладках' +
        (isPref ? '\nCtrl + Колесико Мыши: Регулировать дефолтный уровень громкости для медиа' +
         '\n(текущий уровень: ' + cbu.getPrefs(pref) * 100 + '%)' : '');

    tltp.openPopup(this, "after_start");
}
this.onmouseleave = () => tltp.hidePopup();

this.onwheel = e => {
    if (e.ctrlKey && isPref) {// FF49+: https://bugzilla.mozilla.org/show_bug.cgi?id=1274622

        var step = .1;
        var val = parseFloat(Services.prefs.getCharPref(pref)),
            val = e.deltaY < 0 ? Math.min(1, val + step) : Math.max(0, val - step);

        Services.prefs.setCharPref(pref, (val).toFixed(1));

        tltp.label = 'дефолтный уровень громкости для медиа: ' + (val).toFixed(1) * 100 + '%';

        return;
    }

    var step = .05;

    for(var w of o.windows) for(var {contentWindow: win} of w.gBrowser.browsers) {
        var dwu = win.QueryInterface(Ci.nsIInterfaceRequestor).getInterface(Ci.nsIDOMWindowUtils);
        dwu.audioVolume = e.deltaY < 0 ? Math.min(1, dwu.audioVolume + step) : Math.max(0, dwu.audioVolume - step);
    }
}

[
    {lbl: 'Вкл.\\Выкл. звук в активной вкладке', cmd: 'muteTab();'},
    {lbl: 'Отключить звук во всех вкладках', cmd: 'muteAllTabs();'},,
    {lbl: 'Включить звук во всех вкладках', cmd: 'unMuteAllTabs();'},
    {lbl: 'Задать уровень громкости во всех вкладках', cmd: 'setVolume();'},
    {pref: 'media.default_volume', lbl: 'Задать дефолтный уровень громкости', cmd: 'promptDialog(m.pref);'},
    {pref: 'media.autoplay.enabled', lbl: 'Переключить автовоспроизведение медиа', cmd: 'cbu.setPrefs(m.pref, !cbu.getPrefs(m.pref));'}
].forEach(m => {
    if (m.pref && !cbu.isPref(m.pref)) return;

    var mItem = popup.appendChild(document.createElement("menuitem"));

    mItem.onclick = () => eval(m.cmd);
    mItem.setAttribute('label', m.pref ? (m.lbl + ' (about:config)') : m.lbl);
    m.pref && (mItem.onmouseover = () => mItem.tooltipText = 'Текущее значение: ' + cbu.getPrefs(m.pref));
})

function muteTab() window.gBrowser.selectedTab.toggleMuteAudio();

function muteAllTabs() {
    for(var w of o.windows)
        [...w.gBrowser.tabs].filter(tab => tab.hasAttribute("soundplaying")
                                    && !tab.hasAttribute("muted")
                                    && tab.toggleMuteAudio());
}

function unMuteAllTabs() {
    for(var w of o.windows)
        [...w.gBrowser.tabs].filter(tab => tab.hasAttribute("soundplaying")
                                    && tab.hasAttribute("muted")
                                    && tab.toggleMuteAudio());
}

function setVolume() {
    var input = {value: 1};
    var prompt = Services.prompt.prompt(null, "Задать уровень громкости во всех вкладках", "от 0 до 1",
                                        input, null, {value: false});

    if (prompt)
        for(var w of o.windows) for(var {contentWindow: win} of w.gBrowser.browsers) {
            var dwu = win.QueryInterface(Ci.nsIInterfaceRequestor).getInterface(Ci.nsIDOMWindowUtils);
            dwu.audioVolume = input.value;
        }
}

function promptDialog(pref) {
    var input = {value: cbu.getPrefs(pref)};
    var prompt = Services.prompt.prompt(null, "Задать дефолтный уровень громкости", "от 0.0 до 1.0",
                                        input, null, {value: false});

    if (prompt)
        cbu.setPrefs(pref, input.value);
}

function hotKeys(e) {
    // Alt + Shift + S - Переключить звук в активной вкладке в активном окне
    // Alt + Shift + M - Отключить звук во всех вкладках во всех окнах
    // Alt + Shift + U - Включить звук во всех вкладках во всех окнах
    // См: https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/keyCode#Constants_for_keyCode_value
    if (e.altKey && e.shiftKey && !e.ctrlKey && !e.metaKey) {

        switch (e.keyCode) {
            case 77: muteAllTabs(); break;
            case 83: muteTab(); break;
            case 85: unMuteAllTabs(); break;
            default: return;
        }

        e.preventDefault(); e.stopPropagation();
    }
}

function tabVolume(e) {
    let tab = e.originalTarget;
    while (tab && tab.localName != 'tab') tab = tab.parentNode;

    if (!tab || !e.shiftKey) return;

    e.preventDefault(); e.stopPropagation();

    var step = .05,
        dwu = tab.linkedBrowser.contentWindow.QueryInterface(Ci.nsIInterfaceRequestor).getInterface(Ci.nsIDOMWindowUtils);

    dwu.audioVolume = e.deltaY < 0 ? Math.min(1, dwu.audioVolume + step) : Math.max(0, dwu.audioVolume - step);

    document.getElementById('tabbrowser-tab-tooltip').hidePopup();
    tabVolTltp.openPopup(tab, "after_start");
    tabVolTltp.label = 'Volume: ' + (dwu.audioVolume * 100).toFixed();
    tab.onmouseleave = () => {
        tabVolTltp.hidePopup();
        tab.onmouseleave = null;
    }
}

addEventListener("keydown", hotKeys, false, window);
addEventListener("wheel", tabVolume, true, window.gBrowser.tabContainer);
addDestructor(()=> {
    removeEventListener("keydown", hotKeys, false, window);
    removeEventListener("wheel", tabVolume, true, window.gBrowser.tabContainer);
});

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

Выделить код

Код:

data:image/svg+xml;base64,PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIGhlaWdodD0nMTZweCcgd2lkdGg9JzE2cHgnPjxnPjxwYXRoIGQ9J00gOS43OSwxNCBDIDE1LjYsMTIuMSAxNS42LDMuOTcgOS43OSwyLjAyIEwgOS43OSwwLjEyOCBDIDE4LDIuMTEgMTgsMTMuOSA5Ljc5LDE1LjkgWiBNIDMuNTgsMTAuOCAwLDEwLjggMCw1LjI1IDMuNTgsNS4yNSA3Ljk0LDAuODk2IDcuOTQsMTUuMSBaIE0gOS43OSw0LjQyIEMgMTIuNyw1LjgyIDEyLjcsMTAuMiA5Ljc5LDExLjYgWicgc3R5bGU9J2ZpbGw6cmdiKDEyMSwxMjQsMTI4KScvPjwvZz48L3N2Zz4=


Спасибо: Dumby - за помощь с кодом, Vitaliy V. - за помощь с svg-иконкой и Infocatcher - за заимствованный у него код.

Поиск выделенного текста в файловом поисковике( Firefox24+ ) от 19.02.2018.
Кнопка для поиска выделенного текста в бесплатном и простом файловом поисковике Everything (Portable), предназначенного для поиска файлов по названию на компьютере. После установки пути к программе иконка кнопки будет как у запускаемой программы(.exe файла), а в сплывающей подсказке у кнопки будет отображаться название запускаемой программы.
Можно создать много кнопок для поиска выделенного текста в других файловых поисковиках или для запуска других программ которым нужно передавать в качестве аргумента выделенный текст, но для запуска таких поисковиков или программ в коде инициализации кнопки в строке var arg = "/s"; нужно указать правильные аргументы запуска программ.

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

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

Выделить код

Код:

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%u043E%u0438%u0441%u043A%20%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u043D%u043E%u0433%u043E%20%u0442%u0435%u043A%u0441%u0442%u0430%20%u0432%20%u0444%u0430%u0439%u043B%u043E%u0432%u043E%u043C%20%u043F%u043E%u0438%u0441%u043A%u043E%u0432%u0438%u043A%u0435%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%20arg%20%3D%20%22/s%22%3B%20//%20%u0443%u043A%u0430%u0436%u0438%u0442%u0435%20%u0430%u0440%u0433%u0443%u043C%u0435%u043D%u0442%u044B%20%u043A%u043E%u0442%u043E%u0440%u044B%u0435%20%u043D%u0443%u0436%u043D%u043E%20%u043F%u0435%u0440%u0435%u0434%u0430%u0442%u044C%20%u043F%u0440%u043E%u0433%u0440%u0430%u043C%u043C%u0435%0Avar%20s%20%3D%20%22CB%22%20+%20_id.slice%2820%29%20+%20%22.pathForApp%22%3B%0A%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%u041F%u043E%u0438%u0441%u043A%20%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u043D%u043E%u0433%u043E%20%u0442%u0435%u043A%u0441%u0442%u0430%20%u0432%20%u0444%u0430%u0439%u043B%u043E%u0432%u043E%u043C%20%u043F%u043E%u0438%u0441%u043A%u043E%u0432%u0438%u043A%u0435%3A%20%22%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20+%20path.split%28%22%5C%5C%22%29.pop%28%29.replace%28%22.exe%22%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%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%0AtoggleButtonData%28%29%3B%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%20file%20%3D%20Cc%5B%22@mozilla.org/file/local%3B1%22%5D.createInstance%28Ci.nsIFile%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%20var%20args%20%3D%20%5Barg%2C%20getSelect%28%29%5D%3B%0A%20%20%20try%20%7B%20process.runw%28true%2C%20args%2C%20args.length%29%20%7D%0A%20%20%20catch%28e%29%20%7B%20alert%28e%29%20%7D%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%0A%20%20%20var%20pref%20%3D%20Services.prefs%3B%0A%20%20%20var%20str%20%3D%20pref.getStringPref%20%3F%20pref.getStringPref%28s%29%20%3A%20pref.getComplexValue%28s%2C%20Ci.nsISupportsString%29.data%3B%0A%20%20%20try%20%7B%20return%20str%20%7D%20%0A%20%20%20catch%28e%29%20%7B%20return%20%22%3F%3F%3F%3F%3F%3F%22%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%0Afunction%20getSelect%28%29%20%7B%0A%20%20%20return%20gBrowser.contentDocument.defaultView.getSelection%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

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

Выделить код

Код:

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

var arg = "/s"; // укажите аргументы которые нужно передать программе
var s = "CB" + _id.slice(20) + ".pathForApp";

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

function runApp() {
   var file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile);
   file.initWithPath( getPath() );
   var process = Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess);
   process.init(file);
   var args = [arg, getSelect()];
   try { process.runw(true, args, args.length) }
   catch(e) { alert(e) };
};

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() {
   var pref = Services.prefs;
   var str = pref.getStringPref ? pref.getStringPref(s) : pref.getComplexValue(s, Ci.nsISupportsString).data;
   try { return str } 
   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();
};

function getSelect() {
   return gBrowser.contentDocument.defaultView.getSelection();
};

Часы( Firefox52+ ) от 17.02.2018.
кнопка отображает дигитальные часики, в сплывающей подсказке кнопки отображается дата и название дня недели. Css стиль для часиков можно редактировать в вкладке кнопки Справка. Чтобы часики показывали секунды надо в коде инициализации удалить .slice(0,5)

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

Выделить код

Код:

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%u0427%u0430%u0441%u044B%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bcustombuttons-stdicon-2%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bself.timer%20%3D%20setInterval%28%28%29%3D%3E%20self.label%20%3D%20new%20Date%28%29.toLocaleTimeString%28%27lv-LV%27%29.slice%280%2C5%29%2C%201000%29%3B%20%20%0A%0Avar%20style%20%3D%20custombutton.buttonGetHelp%28self%29.replace%28/id/g%2C%20_id%29%3B%0Avar%20uri%20%3D%20makeURI%28%27data%3Atext/css%2C%27+%20encodeURIComponent%28style%29%29%3B%0Avar%20sss%20%3D%20Cc%5B%22@mozilla.org/content/style-sheet-service%3B1%22%5D.getService%28Ci.nsIStyleSheetService%29%3B%0Asss.loadAndRegisterSheet%28uri%2C%200%29%3B%20%0A%0AaddDestructor%28%28%29%3D%3E%20%7B%20%0A%20%20%20sss.unregisterSheet%28uri%2C%200%29%3B%0A%20%20%20try%20%7B%20clearTimeout%28self.timer%29%20%7D%20catch%28e%29%20%7B%7D%3B%0A%7D%29%3B%0A%0Athis.onmouseover%20%3D%28%29%3D%3E%20%7B%0A%20%20%20var%20date%20%3D%20new%20Date%28%29%3B%0A%20%20%20self.tooltipText%20%3D%20date.toLocaleDateString%28%29%20+%20%27.%20%27%20+%20date.toLocaleDateString%28%27ru%27%2C%20%7Bweekday%3A%20%27long%27%7D%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%23id%20.toolbarbutton-text%20%7B%0A%20%20%20color%3A%20black%20%21important%3B%0A%20%20%20font-weight%3A%20bold%20%21important%3B%0A%20%20%20display%3A%20block%20%21important%3B%0A%7D%0A%0A%23id%20.toolbarbutton-icon%20%7B%0A%20%20display%3A%20none%20%21important%3B%0A%7D%0A%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

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

Выделить код

Код:

self.timer = setInterval(()=> self.label = new Date().toLocaleTimeString('lv-LV').slice(0,5), 1000);  

var style = custombutton.buttonGetHelp(self).replace(/id/g, _id);
var uri = makeURI('data:text/css,'+ encodeURIComponent(style));
var sss = Cc["@mozilla.org/content/style-sheet-service;1"].getService(Ci.nsIStyleSheetService);
sss.loadAndRegisterSheet(uri, 0); 

addDestructor(()=> { 
   sss.unregisterSheet(uri, 0);
   try { clearTimeout(self.timer) } catch(e) {};
});

this.onmouseover =()=> {
   var date = new Date();
   self.tooltipText = date.toLocaleDateString() + '. ' + date.toLocaleDateString('ru', {weekday: 'long'});
};

Справка:

Выделить код

Код:

#id .toolbarbutton-text {
   color: black !important;
   font-weight: bold !important;
   display: block !important;
}

#id .toolbarbutton-icon {
  display: none !important;
}

Переключить текущий поисковик( Firefox24+ ) от 27.12.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%u0442%u0435%u043A%u0443%u0449%u0438%u0439%20%u043F%u043E%u0438%u0441%u043A%u043E%u0432%u0438%u043A%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CAAABAAEAEBAAAAEAGABoAwAAFgAAACgAAAAQAAAAIAAAAAEAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADs9Pt8xetPtu9FsfFNtu%252BTzvb2%252B%252Fne4dFJeBw0egA%252FfAJAfAA8ewBBegAAAAD%252B%252FPtft98Mp%252BwWsfAVsvEbs%252FQeqvF8xO7%252F%252F%252F63yqkxdgM7gwE%252FggM%252BfQA%252BegBDeQDe7PIbotgQufcMufEPtfIPsvAbs%252FQvq%252Bfz%252Bf%252F%252B%252B%252FZKhR05hgBBhQI8hgBAgAI9ewD0%252B%252Fg3pswAtO8Cxf4Kw%252FsJvvYAqupKsNv%252B%252Fv7%252F%252FP5VkSU0iQA7jQA9hgBDgQU%252BfQH%252F%252Ff%252FQ6fM4sM4KsN8AteMCruIqqdbZ7PH8%252Fv%252Fg6Nc%252Fhg05kAA8jAM9iQI%252BhQA%252BgQDQu6b97uv%252F%252F%252F7V8Pqw3eiWz97q8%252Ff%252F%252F%252F%252F7%252FPptpkkqjQE4kwA7kAA5iwI8iAA8hQCOSSKdXjiyflbAkG7u2s%252F%252B%252F%252F39%252F%252F7r8utrqEYtjQE8lgA7kwA7kwA9jwA9igA9hACiWSekVRyeSgiYSBHx6N%252F%252B%252Fv7k7OFRmiYtlAA5lwI7lwI4lAA7kgI9jwE9iwI4iQCoVhWcTxCmb0K%252BooT8%252Fv%252F7%252F%252F%252FJ2r8fdwI1mwA3mQA3mgA8lAE8lAE4jwA9iwE%252BhwGfXifWvqz%252B%252Ff%252F58u%252Fev6Dt4tr%252B%252F%252F2ZuIUsggA7mgM6mAM3lgA5lgA6kQE%252FkwBChwHt4dv%252F%252F%252F728ei1bCi7VAC5XQ7kz7n%252F%252F%252F6bsZkgcB03lQA9lgM7kwA2iQktZToPK4r9%252F%252F%252F9%252F%252F%252FSqYK5UwDKZAS9WALIkFn%252B%252F%252F3%252F%252BP8oKccGGcIRJrERILYFEMwAAuEAAdX%252F%252Ff7%252F%252FP%252B%252BfDvGXQLIZgLEWgLOjlf7%252F%252F%252F%252F%252F%252F9QU90EAPQAAf8DAP0AAfMAAOUDAtr%252F%252F%252F%252F7%252B%252Fu2bCTIYwDPZgDBWQDSr4P%252F%252Fv%252F%252F%252FP5GRuABAPkAA%252FwBAfkDAPAAAesAAN%252F%252F%252B%252Fz%252F%252F%252F64g1C5VwDMYwK8Yg7y5tz8%252Fv%252FV1PYKDOcAAP0DAf4AAf0AAfYEAOwAAuAAAAD%252F%252FPvi28ymXyChTATRrIb8%252F%252F3v8fk6P8MAAdUCAvoAAP0CAP0AAfYAAO4AAACAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAQAA%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%u0442%u044C%20%u043C%u0435%u043D%u044E%20%u043A%u043D%u043E%u043F%u043A%u0438%20%u043F%u043E%20%u043B%u0435%u0432%u043E%u043C%u0443%20%u043A%u043B%u0438%u043A%u0443%20.............%0Athis._handleClick%20%3D%28%29%3D%3E%20menuPopup.showPopup%28this%2C%20-1%2C%20-1%2C%20%22popup%22%2C%20%22bottomleft%22%2C%20%22topleft%22%29%3B%0A%0A%0A//%20%u0421%u043E%u0437%u0434%u0430%u0442%u044C%20%u043F%u043E%u0434%u043C%u0435%u043D%u044E%20%u0441%20%u043F%u043E%u0438%u0441%u043A%u043E%u0432%u0438%u043A%u0430%u043C%u0438%20%u0443%20%u043A%u043D%u043E%u043F%u043A%u0438%20.............%20%0Avar%20menuPopup%20%3D%20self.appendChild%28document.createElement%28%22menupopup%22%29%29%3B%0AmenuPopup.setAttribute%28%27style%27%2C%20%27overflow%3A%20scroll%27%29%3B%20%0A%0Afunction%20setItemsToMenuPopup%28%29%20%7B%0A%20%20%20menuPopup.textContent%20%3D%20%22%22%3B%20%20%20%20%20%20%0A%0A%20%20%20var%20engines%20%3D%20Services.search.getVisibleEngines%28%7B%7D%29%3B%0A%20%20%20engines.forEach%28engine%3D%3E%20%7B%20%0A%20%20%20%20%20%20var%20mItem%20%3D%20document.createElement%28%22menuitem%22%29%3B%0A%20%20%20%20%20%20mItem.setAttribute%28%22label%22%2C%20engine.name%29%3B%0A%20%20%20%20%20%20mItem.setAttribute%28%22class%22%2C%20%22menuitem-iconic%22%29%3B%0A%20%20%20%20%20%20mItem.setAttribute%28%22src%22%2C%20engine.iconURI.spec%29%3B%0A%20%20%20%20%20%20mItem.onmousedown%20%3D%28%29%3D%3E%20setTimeout%28%28%29%3D%3E%20Services.search.currentEngine%20%3D%20engine%2C%200%29%3B%0A%20%20%20%20%20%20menuPopup.appendChild%28mItem%29%3B%0A%20%20%20%7D%29%0A%7D%3B%20%20%0AsetItemsToMenuPopup%28%29%3B%0A%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%u0438%u043B%u0438%20%u043F%u0440%u0438%20%u0438%u0437%u043C%u0435%u043D%u0435%u043D%u0438%u044F%u0445%20%u043F%u043E%u0438%u0441%u043A%u043E%u0432%u0438%u043A%u0430%u0445%20.............%0Afunction%20toggleImage%28%29%20%7B%0A%20%20%20self.ownerDocument.getAnonymousElementByAttribute%28self%2C%20%22class%22%2C%20%22toolbarbutton-icon%22%29.%0A%20%20%20src%20%3D%20Services.search.currentEngine.iconURI.spec%3B%0A%7D%3B%0AtoggleImage%28%29%3B%0A%20%20%20%0A%20%20%20%0A//%20%u041D%u0430%u0431%u043B%u044E%u0434%u0430%u0442%u0435%u043B%u044C%20%u0437%u0430%20%u0438%u0437%u043C%u0435%u043D%u0435%u043D%u0438%u044F%u043C%u0438%20%u0432%20%u043F%u043E%u0438%u0441%u043A%u043E%u0432%u0438%u043A%u0430%u0445%20%u043F%u043E%u0434%u043C%u0435%u043D%u044E%20.............%20%0Avar%20getEngineModified%20%3D%20%7B%0A%20%20%20observe%3A%28subject%2C%20topic%2C%20data%29%3D%3E%20%7B%0A%20%20%20%20%20%20if%20%28%20/changed%7Cremoved%7Ccurrent/.test%28data%29%20%29%20%7B%20toggleImage%28%29%3B%20setItemsToMenuPopup%28%29%3B%20%7D%3B%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%7D%0A%7D%3B%0AServices.obs.addObserver%28getEngineModified%2C%20%22browser-search-engine-modified%22%2C%20false%29%3B%20%20%20%0AaddDestructor%28%28%29%3D%3E%20Services.obs.removeObserver%28getEngineModified%2C%20%22browser-search-engine-modified%22%29%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

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

Выделить код

Код:

// Открыть меню кнопки по левому клику .............
this._handleClick =()=> menuPopup.showPopup(this, -1, -1, "popup", "bottomleft", "topleft");


// Создать подменю с поисковиками у кнопки ............. 
var menuPopup = self.appendChild(document.createElement("menupopup"));
menuPopup.setAttribute('style', 'overflow: scroll'); 

function setItemsToMenuPopup() {
   menuPopup.textContent = "";      

   var engines = Services.search.getVisibleEngines({});
   engines.forEach(engine=> { 
      var mItem = document.createElement("menuitem");
      mItem.setAttribute("label", engine.name);
      mItem.setAttribute("class", "menuitem-iconic");
      mItem.setAttribute("src", engine.iconURI.spec);
      mItem.onmousedown =()=> setTimeout(()=> Services.search.currentEngine = engine, 0);
      menuPopup.appendChild(mItem);
   })
};  
setItemsToMenuPopup();


// Установить нужную иконку кнопки при старте или при изменениях поисковиках .............
function toggleImage() {
   self.ownerDocument.getAnonymousElementByAttribute(self, "class", "toolbarbutton-icon").
   src = Services.search.currentEngine.iconURI.spec;
};
toggleImage();
   
   
// Наблюдатель за изменениями в поисковиках подменю ............. 
var getEngineModified = {
   observe:(subject, topic, data)=> {
      if ( /changed|removed|current/.test(data) ) { toggleImage(); setItemsToMenuPopup(); };             
   }
};
Services.obs.addObserver(getEngineModified, "browser-search-engine-modified", false);   
addDestructor(()=> Services.obs.removeObserver(getEngineModified, "browser-search-engine-modified"));

Сумматор ( Firefox24+ ) от 14.11.2016.
Последовательно складывает выделяемые на странице числа. Также работает с выделенными по Ctrl+клик ячейками таблиц. Текущий результат сложения выводится в адресной строке.

Клики на кнопке:
ЛКМ => подсчитать сумму
СКМ => меню кнопки
ПКМ => сбросить результат

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

Выделить код

Код:

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%u0443%u043C%u043C%u0430%u0442%u043E%u0440%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABm0lEQVQ4jWNggALf6s02PhWbHYjBAQ3rBRjQQWTb/hnli+/+qVnx8H/18gf/k/tPvkvsPfEchpP7Tr4uWXDrV8Gca/99KjY7YBjg0LCfJXXi6cPd2z/8b9/85n9sx5E+dPnQ5p0haRPPPMFqAAMDA0N40w79wjnXnndv//C/bNHtx6Ete83Q1cR2HJ6C0wAGBgaG6LZDjY1rnv3p3v7hf9rE0wcdGvazoLmEw6t0qwROAxgYGBgSuo8d6Nz67n/rpjdvkyecnoxXMTbg27BZJGvq+Zvd2z/8L5l/82l40w59kg1JaD/sUL7ozpuW9S/+RLcfrCbZgPCmHfoFc64+Suw9vo9kzQ4N+zlSJpw6njXtwl3fhs0iJBsQ1310VsWS+1+i2w8nYZPHa2hU+4HQquX3P8T3HFuNS01o457DWCW8SrdK5M64dCNv1pWLWNM7AwNDfNexksTe40exGpDYe3xf/eon/yNa9x9J6D7agY7TJp9dU7P8wfOEnuPzMU3uPrawaO6NDzUrHv7Hh6uW3f8f33WsEcMAcrMzAGtTCbhDYacMAAAAAElFTkSuQmCC%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//%20%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%0A%20%20%20if%20%28%20e.button%20%3D%3D%200%20%29%20summar%28%29%3B%20//%20%u041B%u041A%u041C%0A%20%20%20if%20%28%20e.button%20%3D%3D%201%20%29%20gShowPopup%28this%29%3B%20//%20%u0421%u041A%u041C%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//%20%u041F%u041A%u041C%0A%20%20%20%20%20%20%20%20e.preventDefault%28%29%3B%0A%20%20%20%20%20%20%20%20sum%20%3D%200%3B%0A%20%20%20%20%20%20%20%20tabSummar.label%20%3D%20%22%22%3B%0A%20%20%20%20%20%20%20%20%7D%0A%7D%3B%0A%0A%0Avar%20sum%20%3D%200%3B%0A%0A//%20%u0421%u043E%u0437%u0434%u0430%u0442%u044C%20%u0432%20%u0430%u0434%u0440%u0435%u0441%u043D%u043E%u0439%20%u0441%u0442%u0440%u043E%u043A%u0435%20%u0441%u0447%u0451%u0442%u0447%u0438%u043A%20%u0432%u043A%u043B%u0430%u0434%u043E%u043A%20....%0Avar%20tabSummar%20%3D%20document.createElement%28%22statusbarpanel%22%29%3B%0AtabSummar.setAttribute%28%22id%22%2C%20%22tabSummar%22%29%3B%0A//tabSummar.setAttribute%28%22context%22%2C%20%22event.stopPropagation%28%29%22%29%3B%0A//tabSummar.setAttribute%28%22tooltiptext%22%2C%20%22%u0418%u0442%u043E%u0433%u043E%u0432%u0430%u044F%20%u0441%u0443%u043C%u043C%u0430%22%29%3B%20%0Avar%20urlbarIcons%20%3D%20document.getElementById%28%22urlbar-icons%22%29%3B%20%0AurlbarIcons.insertBefore%28tabSummar%2C%20urlbarIcons.firstChild%29%3B%0AaddDestructor%28%28%29%3D%3E%20tabSummar.remove%28%29%20%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.............%0A//%20this.onmouseover%20%3D%28%29%3D%3E%20%7B%20this.tooltipText%20%3D%20%22%u0418%u0442%u043E%u0433%u043E%u0432%u0430%u044F%20%u0441%u0443%u043C%u043C%u0430%3A%20%22%20+%20sum%3B%20%7D%3B%0Athis.tooltipText%20%3D%20%22%u041B%3A%20%u041F%u043E%u0434%u0441%u0447%u0438%u0442%u0430%u0442%u044C%20%5Cn%u0421%3A%20CB%20%u043C%u0435%u043D%u044E%20%5Cn%u041F%3A%20%u0421%u0431%u0440%u043E%u0441%u0438%u0442%u044C%22%3B%0A%0Afunction%20summar%28%29%20%7B%0A%20%20%20var%20sel%20%3D%20document.commandDispatcher.focusedWindow.getSelection%28%29.toString%28%29%3B%0A%20%20%20var%20nums%20%3D%20sel.split%28/%5Cs+/%29%3B%0A%0A%20%20%20nums.forEach%28num%3D%3E%20%7B%0A%20%20%20%20%20%20num%20%3D%20+num%3B%0A%20%20%20%20%20%20if%20%28%20isFinite%28num%29%20%29%20sum%20+%3D%20num%3B%0A%20%20%20%7D%29%3B%0A%20%20%20sum%20%3D%20fixPrecision%28sum%29%3B%0A%20%20%20sum%20%3D%20sum*1%3B%0A%20%20%20tabSummar.label%20%3D%20sum%3B%0A%7D%3B%0A%0A%0Afunction%20fixPrecision%28n%29%20%7B%0A%20%20%20//%20Try%20fix%20%22bugs%22%20with%20floating%20point%20operations%0A%20%20%20//%20E.g.%200.3/0.1%20%3D%202.9999999999999995%0A%20%20%20return%20n.toPrecision%2813%29.toString%28%29%0A%20%20%20%20%20%20%20%20%20%20%20.replace%28/%5C.0+%28e%7C%24%29/%2C%20%22%241%22%29%20//%201.000%20and%201.000e5%20%3D%3E%201%0A%20%20%20%20%20%20%20%20%20%20%20.replace%28/%28%5C.%5Cd*%5B%5E0%5D%290+%28e%7C%24%29/%2C%20%22%241%242%22%29%3B%20//%201.200%20and%201.200e5%20%3D%3E%201.2%0A%7D%3B%0A%0A%0A//%20Css%20%u0441%u0442%u0438%u043B%u044C%20%u0434%u043B%u044F%20%u043E%u0442%u043E%u0431%u0440%u0430%u0436%u0435%u043D%u0438%u044F%20%u0440%u0435%u0437%u0443%u043B%u044C%u0442%u0430%u0442%u0430%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%23tabSummar%20%7B%20color%3A%20blue%20%21important%3B%20%7D%5C%0A%20%20%20%20%20%20%23tabSummar%20%7B%20-moz-appearance%3A%20none%20%21important%3B%20border%3A%200%20%21important%3B%20margin-right%3A%20-8px%20%21important%3B%20%7D%5C%0A%20%20%20%27%29%29%3B%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%20sss.loadAndRegisterSheet%28uri%2C%200%29%3B%0A%20%20%20addDestructor%28%28%29%3D%3E%20sss.unregisterSheet%28uri%2C%200%29%20%29%3B%20%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

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

Выделить код

Код:

/*Initialization Code*/

//  Настройка функций кликов мыши для кнопки .............
this.onclick =e=> {

   if ( e.button == 0 ) summar(); // ЛКМ
   if ( e.button == 1 ) gShowPopup(this); // СКМ 
   if ( e.button == 2 && !e.ctrlKey && !e.shiftKey && !e.altKey && !e.metaKey ) { // ПКМ
        e.preventDefault();
        sum = 0;
        tabSummar.label = "";
        }
};


var sum = 0;

// Создать в адресной строке счётчик вкладок ....
var tabSummar = document.createElement("statusbarpanel");
tabSummar.setAttribute("id", "tabSummar");
//tabSummar.setAttribute("context", "event.stopPropagation()");
//tabSummar.setAttribute("tooltiptext", "Итоговая сумма"); 
var urlbarIcons = document.getElementById("urlbar-icons"); 
urlbarIcons.insertBefore(tabSummar, urlbarIcons.firstChild);
addDestructor(()=> tabSummar.remove() );


// Подсказка для кнопки .............
// this.onmouseover =()=> { this.tooltipText = "Итоговая сумма: " + sum; };
this.tooltipText = "Л: Подсчитать \nС: CB меню \nП: Сбросить";

function summar() {
   var sel = document.commandDispatcher.focusedWindow.getSelection().toString();
   var nums = sel.split(/\s+/);

   nums.forEach(num=> {
      num = +num;
      if ( isFinite(num) ) sum += num;
   });
   sum = fixPrecision(sum);
   sum = sum*1;
   tabSummar.label = sum;
};


function fixPrecision(n) {
   // Try fix "bugs" with floating point operations
   // E.g. 0.3/0.1 = 2.9999999999999995
   return n.toPrecision(13).toString()
           .replace(/\.0+(e|$)/, "$1") // 1.000 and 1.000e5 => 1
           .replace(/(\.\d*[^0])0+(e|$)/, "$1$2"); // 1.200 and 1.200e5 => 1.2
};


// Css стиль для отображения результата
   var uri = makeURI('data:text/css,'+ encodeURIComponent('\
      #tabSummar { color: blue !important; }\
      #tabSummar { -moz-appearance: none !important; border: 0 !important; margin-right: -8px !important; }\
   '));
   var sss = Cc["@mozilla.org/content/style-sheet-service;1"].getService(Ci.nsIStyleSheetService);
   sss.loadAndRegisterSheet(uri, 0);
   addDestructor(()=> sss.unregisterSheet(uri, 0) );


Части кода кнопки заимствованы у bunda1, Infocatcher и др. Спасибо им и всем остальным за советы и помощь.

Добавить все открытие вкладки в папку закладок( Firefox24+ ) от 18.02.2018.
кнопка создает новые подпапки закладок с названием из значения текущей даты и времени в указанной папке закладок и сохраняет все открытие вкладки как закладки в упомянутых выше подпапках. Папку закладок нужно указать в начале кода инициализации кнопки, если папка закладок для сохранения подпапок не будет указана кнопка сохранит подпапки на панели закладок.

ЛКМ => Добавить все открытие вкладки в папку закладок.

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

Выделить код

Код:

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%u0414%u043E%u0431%u0430%u0432%u0438%u0442%u044C%20%u0432%u0441%u0435%20%u043E%u0442%u043A%u0440%u044B%u0442%u0438%u0435%20%u0432%u043A%u043B%u0430%u0434%u043A%u0438%20%u0432%20%u043F%u0430%u043F%u043A%u0443%20%u0437%u0430%u043A%u043B%u0430%u0434%u043E%u043A%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEREAAAEAIADwBAAAFgAAACgAAAARAAAAIgAAAAEAIAAAAAAAyAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQAAAAAEFBwcD5TTywYtQTQHAAAAAAECAgAAAAABAgEDAAAAACZKJaoakiP/K4A0ywIAAAIBAQAAAAAAAAAAAAAAAQEBAQAAAAwaIj8ZrvD9GLr382eet7eKfnt7SkI9PBgQCg4CAAUAJGYouiDSL/87r0DbCgMABwAAAQACAgICAAAAAQMDBAAXFRYjGh8mahGR2O8fx///Ic3//obh/P+s2PD/W7HZ6CKe4NcvmWr7Ercb/0+6P++PTBBXCwUAAwAAAQAAAAAABQYHAxodHzcaFBdLDHrD3ifN//8oxvf6Hsb/+xeLff0FjED/DqRQ/x+hM/8KkhX/Qb1J+nS3UOtUoUjRNHg9vw0NDgEjIiUUIBMRHBstN0sep9/pLNH//y/O+v430v//E3pB/xClAP440zf9Ps1I/zekQv9EpE7/S79j/2jQeP9dpmL/DQ0OAR4jJxAfZoJ2I73u7i/T//8y0Pz+NdT8/zrX//8yp4r/O7ps/2jXlP9/5Iz/YdRr/2KoZf51mWP/Y4JY6ERbR70AAAAAGmV6ckbo//9D5v7+ONf+/jbV/P482f3/P9z9/0Df//9x4/7/fuP//2rTm/903Hj/Zp1f++q7jP+XelyoAAAAAAEBAQEAAQEBECQkITR8h3tJx+DZTN///0Hd/P5D4P3/YOf8/670/P+l8///asiV/3fKev9xnG7778qc/5yDY6gAAAAAAAAAAAAAAAAAAQEBAAAAAAAGBwA0oMfGTOn//4fs/PzN+P//l/D8/7T8//96u5//ZZVl/4Ocfvv84Lz/nIRkqAAAAAAAAAAAAAAAAAECAgIBBgcIAAAAAESAm6Jv5///1vv9++38///u+Pr/3PDz/+Di2v/j1rr/6Ne8+//v0P+ei3KoAAAAAAAAAAAAAAAAAAAAAAIDAwMAAAAAiJiho2zT///L9/z7+f3+//77+v/u7O7/7+Ta///qzP/35Mn7//PX/6KUgagAAAAAAAAAAAAAAAAAAAAAAwMDBAAAAACuqKWijdv//87t+Pv/////+fv7/+zu8P/t5dz//OrQ//np0fv/+d//o5eGqAAAAAAAAAAAAAAAAAAAAAADAwMEAAAAAKampaL/////+vr6+////v/8/Pv/7e7v/+/n3v//79f//O3Y+//+6P+kmoqoAAAAAAAAAAAAAAAAAAAAAAMDAwQAAAAApKSkoP/////4+fj5/f39/v39/f7z9Pb/8Oni///z4P/88eD7///y/6SdkKgAAAAAAAAAAAAAAAAAAAAAAwMDBAAAAACrq6ui//////v7+/v///////////7///728ez8+vHi/Prz5fn///n/pJ6VpwAAAAAAAAAAAAAAAAAAAAACAgIDAAAAAF5eXlrGxsXE0tLS0erq6un6+vr5////////////////+/v4+/////+opZ2oAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAwICExMTEisrKylHR0dFaGdnZYmKi4inpqam19TP2pGOiI8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bvar%20parentFolder%20%3D%20%22New%20Folder%22%3B%20//%20%u043F%u0430%u043F%u043A%u0430%20%u0437%u0430%u043A%u043B%u0430%u0434%u043E%u043A%20%u0434%u043B%u044F%20%u0434%u043E%u0431%u0430%u0432%u043B%u0435%u043D%u0438%u0438%20%u043F%u043E%u0434%u043F%u0430%u043F%u043E%u043A%20%u0441%20%u0441%u043E%u0445%u0440%u0430%u043D%u0435%u043D%u043D%u044B%u043C%u0438%20%u0432%u043A%u043B%u0430%u0434%u043A%u0430%u043C%u0438%0Avar%20index%20%3D%20-1%3B%20%20%20%20%20//%200%20-%20%u043F%u043E%u0434%u043F%u0430%u043F%u043A%u0430%20%u0432%20%u043F%u0430%u043F%u043A%u0443%20%u0434%u043E%u0431%u0430%u0432%u043B%u044F%u0435%u0442%u0441%u044F%20%u0432%20%u043D%u0430%u0447%u0430%u043B%u0435%2C%20-1%20%u0432%20%u043A%u043E%u043D%u0446%u0435%0A%0A%0A//%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%20%0A%20%20%20//%20%u0441%u043E%u0437%u0434%u0430%u0442%u044C%20%u043D%u043E%u0432%u0443%u044E%20%u043F%u043E%u0434%u043F%u0430%u043F%u043A%u0443%20%u0437%u0430%u043A%u043B%u0430%u0434%u043E%u043A%20%u0432%20%u0443%u043A%u0430%u0437%u0430%u043D%u043D%u043E%u0439%20%u043F%u0430%u043F%u043A%u0435%20%u0437%u0430%u043A%u043B%u0430%u0434%u043E%u043A%20%u0438%u043B%u0438%20%u043D%u0430%20%u043F%u0430%u043D%u0435%u043B%u0438%20%u0437%u0430%u043A%u043B%u0430%u0434%u043E%u043A%0A%20%20%20var%20parentFolderId%20%3D%20getBookFolderId%28%29%20%7C%7C%203%3B%0A%20%20%20var%20subfolder%20%3D%20getDataAndTime%28%29%3B%0A%20%20%20var%20subfolderId%20%3D%20PlacesUtils.bookmarks.createFolder%28parentFolderId%2C%20subfolder%2C%20index%29%3B%20%20%20%20%20%0A%0A%20%20%20var%20array%20%3D%20getTabsInfo%28%29%3B%0A%0A%20%20%20//%20%u0440%u0435%u043A%u0443%u0440%u0441%u0438%u0432%u043D%u043E%20%u0441%20%u0437%u0430%u0434%u0435%u0440%u0436%u043A%u043E%u0439%20%u0434%u043E%u0431%u0430%u0432%u0438%u0442%u044C%20%u0432%u043A%u043B%u0430%u0434%u043A%u0438%20%u0432%20%u043F%u0430%u043F%u043A%u0443%20%u0437%u0430%u043A%u043B%u0430%u0434%u043E%u043A%0A%20%20%20function%20save%28%29%20%7B%0A%20%20%20%20%20%20var%20el%20%3D%20array.shift%28%29%3B%0A%20%20%20%20%20%20if%20%28%20el%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20PlacesUtils.bookmarks.insertBookmark%28subfolderId%2C%20el.uri%2C%20-1%2C%20el.label%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20setTimeout%28save%2C%200%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20else%0A%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20//%20%u0432%u0441%u043F%u043B%u044B%u0432%u0430%u044E%u0449%u0430%u044F%20%u043F%u043E%u0434%u0441%u043A%u0430%u0437%u043A%u0430%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20var%20parentFolderName%20%3D%20%28parentFolderId%20%3D%3D%203%29%20%3F%20%22%u041F%u0430%u043D%u0435%u043B%u044C%20%u0437%u0430%u043A%u043B%u0430%u0434%u043E%u043A%22%20%3A%20parentFolder%3B%0A%20%20%20%20%20%20%20%20%20%20%20Cc%5B%22@mozilla.org/alerts-service%3B1%22%5D.getService%28Ci.nsIAlertsService%29%0A%20%20%20%20%20%20%20%20%20%20%20.showAlertNotification%28self.image%2C%20self.label%2C%20%22%u0414%u043E%u0431%u0430%u0432%u0438%u043B%20%u0432%u0441%u0435%20%u0432%u043A%u043B%u0430%u0434%u043A%u0438%20%u0432%20%u043F%u0430%u043F%u043A%u0443%20%u0437%u0430%u043A%u043B%u0430%u0434%u043E%u043A%3A%5Cn%22%20+%20parentFolder%20+%20%22%20%3E%20%22%20+%20subfolder%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%7D%20%0A%20%20%20%7D%3B%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20save%28%29%3B%0A%7D%3B%0A%0A%0A//%20%u041F%u043E%u043B%u0443%u0447%u0438%u0442%u044C%20%u0442%u0435%u043A%u0443%u0449%u0443%u044E%20%u0434%u0430%u0442%u0443%20%u0438%20%u0432%u0440%u0435%u043C%u044F%20..........%20%0Afunction%20getDataAndTime%28%29%20%7B%0A%20%20%20var%20date%20%3D%20new%20Date%28%29%3B%0A%20%20%20var%20time%20%3D%20date.toLocaleString%28%27ru%27%2C%20%7Byear%3A%20%27numeric%27%2C%20month%3A%20%27numeric%27%2C%20day%3A%20%27numeric%27%7D%29%0A%20%20%20return%20%28time%20+%20%27.%20%27%20+%20date.toLocaleTimeString%28%27lv-LV%27%29%29%3B%20//.replace%28/%3A/g%2C%20%22%B7%22%29%3B%0A%7D%3B%0A%0A%0A//%20%u041F%u043E%u043B%u0443%u0447%u0438%u0442%u044C%20id%20%u043F%u0430%u043F%u043A%u0438%20parentFolderName%20..........%20%0Afunction%20getBookFolderId%28id%20%3D%201%29%20%7B%0A%20%20%20var%20folder%20%3D%20PlacesUtils.getFolderContents%28id%29.root%3B%0A%0A%20%20%20for%20%28%20var%20i%20%3D%200%3B%20i%20%3C%20folder.childCount%3B%20i++%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20var%20child%20%3D%20folder.getChild%28i%29%3B%0A%20%20%20%20%20%20%20%20%20%20if%20%28%20%21PlacesUtils.nodeIsFolder%28child%29%20%29%20continue%3B%20%0A%0A%20%20%20%20%20%20%20%20%20%20if%20%28%20child.title%20%3D%3D%20parentFolder%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20self.result%20%3D%20child.itemId%3B%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%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%20else%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20getBookFolderId%28child.itemId%29%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%0A%20%20%20return%20self.result%3B%20%0A%7D%3B%0A%0A%0A//%20%u041F%u043E%u043B%u0443%u0447%u0438%u0442%u044C%20%u043C%u0430%u0441%u0441%u0438%u0432%20%u0441%20%u0430%u0434%u0440%u0435%u0441%u0430%u043C%u0438%20%u0438%20%u043D%u0430%u0437%u0432%u0430%u043D%u0438%u044F%u043C%u0438%20%u0432%u043A%u043B%u0430%u0434%u043E%u043A%20..........%20%0Afunction%20getTabsInfo%28%29%20%7B%0A%20%20%20var%20array%20%3D%20%5B%5D%2C%20seenURIs%20%3D%20%5B%5D%3B%0A%20%20%20%0A%20%20%20%5B...gBrowser.tabs%5D.forEach%28tab%3D%3E%20%7B%0A%20%20%20%20%20%20var%20label%20%3D%20tab.label%3B%0A%20%20%20%20%20%20var%20uri%20%3D%20tab.linkedBrowser.currentURI.spec%3B%0A%20%20%20%20%20%20%0A%20%20%20%20%20%20if%20%28%20seenURIs%5Buri%5D%20%29%20return%3B%20//%20%u0441%u0442%u043E%u043F%20%u0435%u0441%u043B%u0438%20%u0442%u0430%u043A%u043E%u0439%20%u0430%u0434%u0440%u0435%u0441%20%u0443%u0436%u0435%20%u0431%u044B%u043B%0A%20%20%20%20%20%20seenURIs%5Buri%5D%20%3D%20true%3B%0A%20%20%20%20%20%20%0A%20%20%20%20%20%20array.push%28%7B%20uri%3A%20Services.io.newURI%28uri%2C%20null%2C%20null%29%2C%20label%3A%20label%20%7D%29%3B%0A%20%20%20%7D%29%3B%0A%0A%20%20%20return%20array%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

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

Выделить код

Код:

var parentFolder = "New Folder"; // папка закладок для добавлении подпапок с сохраненными вкладками
var index = -1;     // 0 - подпапка в папку добавляется в начале, -1 в конце


// Настройка функций кликов мыши для кнопки ..........
this._handleClick =()=> {
   
   // создать новую подпапку закладок в указанной папке закладок или на панели закладок
   var parentFolderId = getBookFolderId() || 3;
   var subfolder = getDataAndTime();
   var subfolderId = PlacesUtils.bookmarks.createFolder(parentFolderId, subfolder, index);     

   var array = getTabsInfo();

   // рекурсивно с задержкой добавить вкладки в папку закладок
   function save() {
      var el = array.shift();
      if ( el ) {
           PlacesUtils.bookmarks.insertBookmark(subfolderId, el.uri, -1, el.label);
           setTimeout(save, 0);
           }
      else
           {
           // всплывающая подсказка         
           var parentFolderName = (parentFolderId == 3) ? "Панель закладок" : parentFolder;
           Cc["@mozilla.org/alerts-service;1"].getService(Ci.nsIAlertsService)
           .showAlertNotification(self.image, self.label, "Добавил все вкладки в папку закладок:\n" + parentFolder + " > " + subfolder);
           } 
   };           
   save();
};


// Получить текущую дату и время .......... 
function getDataAndTime() {
   var date = new Date();
   var time = date.toLocaleString('ru', {year: 'numeric', month: 'numeric', day: 'numeric'})
   return (time + '. ' + date.toLocaleTimeString('lv-LV')); //.replace(/:/g, "·");
};


// Получить id папки parentFolderName .......... 
function getBookFolderId(id = 1) {
   var folder = PlacesUtils.getFolderContents(id).root;

   for ( var i = 0; i < folder.childCount; i++ ) {
          var child = folder.getChild(i);
          if ( !PlacesUtils.nodeIsFolder(child) ) continue; 

          if ( child.title == parentFolder) {
               self.result = child.itemId;         
               break;
               }
          else 
               getBookFolderId(child.itemId);
          }
  
   return self.result; 
};


// Получить массив с адресами и названиями вкладок .......... 
function getTabsInfo() {
   var array = [], seenURIs = [];
   
   [...gBrowser.tabs].forEach(tab=> {
      var label = tab.label;
      var uri = tab.linkedBrowser.currentURI.spec;
      
      if ( seenURIs[uri] ) return; // стоп если такой адрес уже был
      seenURIs[uri] = true;
      
      array.push({ uri: Services.io.newURI(uri, null, null), label: label });
   });

   return array;
};

Переключить многопроцессный режим( Firefox50+ ) от 15.05.2019.
кнопка включает - выключает многопроцессный режим (e10) и перезапускает браузер. При включеном многопроцессный режиме иконка кнопки будет зелёного цвета.

ЛКМ => Переключить многопроцессный режим.

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

Выделить код

Код:

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%u043C%u043D%u043E%u0433%u043E%u043F%u0440%u043E%u0446%u0435%u0441%u0441%u043D%u044B%u0439%20%u0440%u0435%u0436%u0438%u043C%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEREAAAEAIADwBAAAFgAAACgAAAARAAAAIgAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQCFAn4ChQN+A4UDfwOFA38DhQJ/AoUBfgGFAn4ChQN+A4UDfgOFAn4ChQB+AIUAfgCFA38DhQJ/AoUAfgCFAH0AhQqCCt82mDbfRZ9F30afRt9GoEbfOZo53yWPJd83mDffRZ9F30WfRd8+mz7fFIcU3xaIFt9IoUjfNJc03weBB98AfgDfHIsc/4bAhv+p0an/qNGo/6jSqP+Kwor/WahZ/4W/hf+p0an/qtKq/5bHlv83mTf/VKdU/6PPo/+RxpH/LZQt/wF+Af8okSj/wt7C/9nq2f/B3sH/wt/C/57Mnv9jrWP/k8aT/9nq2f/h7uH/rNOs/0yjTP+XyZf/xeDF/9Xo1f9irmL/BYAF/yiRKP+62rr/h7+H/zeXN/82lzb/LJIs/xSHFP8dih3/jMKM/6XPpf84mDj/OZk5/7DWsP9qsmr/rtWu/5DFkP8OhA7/KJEo/7fZt/9qsWr/BoEG/waBBv8FgAX/An8C/wqBCv+AvYD/m8ub/yWPJf9IoUj/qNGo/0agRv+BvoH/o8+j/xuLG/8okSj/uNm4/3W3df8aihr/GYkZ/w+FD/8AfgD/B4AH/368fv+aypr/Io4i/1SnVP+m0ab/PZw9/3G2cf+t1K3/Io4i/yiRKP+/3b//vNu8/5HFkf+Nw43/VadV/wB+AP8HgAf/frx+/5rKmv8ijiL/XKtc/6bQpv86mzr/a7Jr/7TXtP8mkCb/KJEo/8Pfw//g7eD/zePN/8bfxv94uHj/AH4A/weAB/9+vH7/msqa/yKOIv9erF7/ptCm/zqaOv9psWn/tti2/yeQJ/8okSj/vdu9/6LNov9lr2X/Yq5i/zubO/8DfwP/C4IL/368fv+aypr/Io4i/1mpWf+m0Kb/PJs8/2yzbP+y1rL/JY8l/yiRKP+42bj/cLRw/xKHEv8ShxL/DIQM/xSIFP8qkir/isKK/5rKmv8ijiL/T6RP/6fRp/9AnUD/d7h3/6rSqv8fjR//KJEo/7jZuP9vtG//D4YP/w+GD/8OhQ7/MZYx/2ewZ/+n0af/msqa/yKOIv9AnUD/qtOq/1GmUf+OxI7/ncyd/xeJF/8okSj/vty+/7LVsv+AvYD/gL2A/16sXv86mjr/lciV/9rr2v+aypr/Io4i/ymSKf+v1a//ncyd/8rjyv+FwYX/CoMK/yeQJ/++277/5e/l/9rp2v/Z6dn/ncud/ySPJP9Tp1P/utq6/5bHlv8ijSL/EYUR/328ff/P5c//y+PL/0qiSv8DfwP/FIcU/2OuY/9+vH7/fbt9/327ff9aqlr/DYQN/xqKGv9XqFf/TaNN/xGFEf8EfwT/NZg1/3e4d/9osWj/Gosa/wB+AP8BfQHfCIEI3wuCC98LggvfC4IL3wiBCN8BfgHfAn4C3weAB98HgAffAX0B3wB9AN8EgATfEoYS3wuDC98CfwLfAH4A3wB9AIUAfQCFAH0AhQB+AIUAfgCFAH0AhQB+AIUAfQCFAH0AhQB9AIUAfQCFAH0AhQB+AIUAfgCFAH4AhQB+AIUAfQCFAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEE%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%20if%20%28%20%21custombuttons.confirmBox%28null%2C%20%22%u041F%u0435%u0440%u0435%u0437%u0430%u043F%u0443%u0441%u0442%u0438%u0442%u044C%20%u0431%u0440%u0430%u0443%u0437%u0435%u0440%20%u0447%u0442%u043E%u0431%u044B%20%u0438%u0437%u043C%u0435%u043D%u0435%u043D%u0438%u044F%20%u0432%u0441%u0442%u0443%u043F%u0438%u043B%u0438%20%u0432%20%u0441%u0438%u043B%u0443%3F%22%2C%20%22%u0414%u0430%22%2C%20%22%u041E%u0442%u043C%u0435%u043D%u0430%22%29%20%29%20return%3B%20%0A%20%20%20%0A%20%20%20if%20%28%20cbu.getPrefs%28s%29%20%3D%3D%201%20%29%20%7B%0A%20%20%20%20%20%20%20%20cbu.setPrefs%28s%2C%2010%29%3B%0A%20%20%20%20%20%20%20%20cbu.setPrefs%28%22browser.tabs.remote.autostart%22%2C%20true%29%3B%0A%20%20%20%20%20%20%20%20cbu.setPrefs%28%22browser.tabs.remote.autostart.2%22%2C%20true%29%3B%0A%20%20%20%20%20%20%20%20cbu.setPrefs%28%22extensions.e10sBlocksEnabling%22%2C%20false%29%3B%0A%20%20%20%20%20%20%20%20cbu.setPrefs%28%22extensions.e10sBlockedByAddons%22%2C%20false%29%3B%0A%20%20%20%20%20%20%20%20cbu.setPrefs%28%22browser.tabs.remote.force-enable%22%2C%20true%29%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20else%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20cbu.setPrefs%28s%2C%201%29%3B%0A%20%20%20%20%20%20%20%20cbu.setPrefs%28%22browser.tabs.remote.autostart%22%2C%20false%29%3B%0A%20%20%20%20%20%20%20%20cbu.setPrefs%28%22browser.tabs.remote.autostart.2%22%2C%20false%29%3B%0A%20%20%20%20%20%20%20%20cbu.setPrefs%28%22extensions.e10sBlocksEnabling%22%2C%20true%29%3B%0A%20%20%20%20%20%20%20%20cbu.setPrefs%28%22extensions.e10sBlockedByAddons%22%2C%20true%29%3B%0A%20%20%20%20%20%20%20%20cbu.setPrefs%28%22browser.tabs.remote.force-enable%22%2C%20false%29%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%0A%20%20%20Services.startup.quit%28Services.startup.eAttemptQuit%20%7C%20Services.startup.eRestart%29%3B%20%20%20%20%20%0A%7D%3B%0A%0A%0Avar%20s%20%3D%20%22dom.ipc.processCount%22%3B%0Afunction%20toggleImage%28%29%20%7B%0A%20%20%20self.style.filter%20%3D%20%28cbu.getPrefs%28s%29%20%3D%3D%201%29%20%3F%20%22grayscale%281%29%22%20%3A%20%22%22%3B%0A%7D%3B%20%20%20%20%20%20%20%20%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%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 =()=> {
   if ( !custombuttons.confirmBox(null, "Перезапустить браузер чтобы изменения вступили в силу?", "Да", "Отмена") ) return; 
   
   if ( cbu.getPrefs(s) == 1 ) {
        cbu.setPrefs(s, 10);
        cbu.setPrefs("browser.tabs.remote.autostart", true);
        cbu.setPrefs("browser.tabs.remote.autostart.2", true);
        cbu.setPrefs("extensions.e10sBlocksEnabling", false);
        cbu.setPrefs("extensions.e10sBlockedByAddons", false);
        cbu.setPrefs("browser.tabs.remote.force-enable", true);
        }
   else
        {
        cbu.setPrefs(s, 1);
        cbu.setPrefs("browser.tabs.remote.autostart", false);
        cbu.setPrefs("browser.tabs.remote.autostart.2", false);
        cbu.setPrefs("extensions.e10sBlocksEnabling", true);
        cbu.setPrefs("extensions.e10sBlockedByAddons", true);
        cbu.setPrefs("browser.tabs.remote.force-enable", false);
        }
   
   Services.startup.quit(Services.startup.eAttemptQuit | Services.startup.eRestart);     
};


var s = "dom.ipc.processCount";
function toggleImage() {
   self.style.filter = (cbu.getPrefs(s) == 1) ? "grayscale(1)" : "";
};        
toggleImage();
Services.prefs.addObserver(s, toggleImage, false);
addDestructor(()=> Services.prefs.removeObserver(s, toggleImage));

Открытие панели закладок в новом табе( Firefox ) от 31.12.2016.

Выделить код

Код:

getBrowser (). selectedTab = getBrowser (). addTab ("chrome://browser/content/bookmarks/bookmarksPanel.xul");

Иконка 24х24

Если вместо адреса в круглых скобках вставить выражение "about:addons", получится кнопка, открывающая в новом табе окно управления расширениями.

Панель закладок в контекстном меню

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

Выделить код

Код:

(function() {
  if ( document.getElementById("contextBookmarksToolbar") ) return; 

  var contextMenu = document.getElementById("contentAreaContextMenu");
  var menu = document.createElement("menu");
  var menuPopup = document.createElement("menupopup");
  
  menu.setAttribute("id", "contextBookmarksToolbar");
  menu.setAttribute("class", "menu-iconic bookmark-item");
  menu.setAttribute("label", "Панель Закладок");
  menu.setAttribute("image", "chrome://browser/skin/places/bookmarksToolbar.png");

  menuPopup.setAttribute("id", "context_bookmarksToolbarPopup");
  menuPopup.setAttribute("placespopup", "true");
  menuPopup.setAttribute("context", "placesContext");
  menuPopup.setAttribute("openInTabs", "children");
  menuPopup.setAttribute("tooltip", "bhTooltip");
  menuPopup.setAttribute("popupsinherittooltip", "true");
  menuPopup.setAttribute("onpopupshowing", "if (!this.parentNode._placesView) new PlacesMenu(event, 'place:folder=TOOLBAR')");
  menuPopup.setAttribute("oncommand", "BookmarksEventHandler.onCommand(event, this.parentNode._placesView);");
  menuPopup.setAttribute("onclick", "BookmarksEventHandler.onClick(event, this.parentNode._placesView);");
  
  menu.appendChild(menuPopup);
  contextMenu.appendChild(menu);

  contextMenu.addEventListener("popupshowing", function() {
    menu.hidden = !gContextMenu; 
  }, false);
})();


Панель закладок в отдельном контекстном меню
можно вызывать через CTRL-RMB (event.ctrlKey), для этого нужно создать кнопку со следующим кодом, но добавлять ее нужно не в меню, а на Панель инструментов:
Код инициализации:

Выделить код

Код:

(function() {
  if (document.getElementById("context_bookmarksToolbarPopup")) return;
 
  var contextMenu = document.getElementById("contentAreaContextMenu");
  var menuPopup = document.createElement("menupopup");
  var parentNode = document.getElementById("mainPopupSet");
 
  menuPopup.setAttribute("id", "context_bookmarksToolbarPopup");
  menuPopup.setAttribute("placespopup", "true");
  menuPopup.setAttribute("context", "placesContext");
  menuPopup.setAttribute("openInTabs", "children");
  menuPopup.setAttribute("tooltip", "bhTooltip");
  menuPopup.setAttribute("popupsinherittooltip", "true");
  menuPopup.setAttribute("onpopupshowing", "if (!this.parentNode._placesView) new PlacesMenu(event, 'place:folder=TOOLBAR')");
  menuPopup.setAttribute("oncommand", "BookmarksEventHandler.onCommand(event, this.parentNode._placesView);");
  menuPopup.setAttribute("onclick", "BookmarksEventHandler.onClick(event, this.parentNode._placesView);");
 
  parentNode.appendChild(menuPopup);
 
  contextMenu.addEventListener("popupshowing", function(event) {
    if (!event.ctrlKey) return;
    event.preventDefault();
    event.stopPropagation();
    menuPopup.openPopupAtScreen(event.screenX, event.screenY);
  }, false);
})();

Быстрый доступ к менеджеру паролей.( Firefox ) от 04.01.2017.
Открыть окно с сохранёнными паролями, отфильтрованное по домену открытой страницы.

Код кнопки(с иконкой) и просто Код:
Код кнопки:

Выделить код

Код:

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%u0430%u0440%u043E%u043B%u0438%20%u0441%u0430%u0439%u0442%u043E%u0432%20%u043E%u0442%u043A%u0440%u044B%u0442%u044C%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACc0lEQVQ4jZXRXUiTARTG8ROubjYn4oUytUbFlG2+mro25yBBS8wsnBYLpJna0PlRkUpYRpiKlJqJhJhdSIJfCBUoigQlYQiWpgsnmak4bdWcZts7nfPpqiun2bn//TmcQ7TLqBkKuBbjP1B9Wb7UkH18repS0EJ+NP9lwlHi7+aIiChLymXqdCdWVww6rH+JhW1CAdagAPspCnfVgUtX5eS7Iz5P5FGuiZh3fNUAZhkwF4n+WuGKNoxbWab267FNKFB8ynNcH0M8t4F0CefhzNsbgFkG52w4NqfEuHXWa4qIKEPKqxhuloI1yJHF0GO3gYJo7x7LqAZYZLDxWQTH2BEYu4Su4pP8D513xIsr7zWY7UtEnmrfgNtArorf92MkGZgLwuakGPZRGdixONgMKVif1sExV4KFwRQUqMh9ICOEU2PsTQEWlHBNx4I1qmE3ZoKdKYbzWyWclqcwdEchnaFmt4H8SMGx5zWJWB5NBUzZcJoKsWGuwqa1CVv2F2Dn76E0njMZF0Fe2w8YRsJnZUms81c7+utCwRp1cFnrgd9tcNk6YTXexIOLvGW9kPy2v8+bvO5nKUwbax1oLZHA8VGEwaYENOcJHI25B+21Wp/v+Up6pQkigdvVCxMODTmsHWgpUWFrXILXT5JRrRWyusMUkhxMPgwR1y0kIroi47baLW1ouR0Py5twlJ7eP6NXckcKlSTdEf2dNDGnwvGzY6u3IR2NOSKUn/Mwnwkg/39CIqI0CZU5V7tc7zqLUJ/JQK+iJCI6sCdMRJQj57UPdxeht+4CHml9nRoBBe4ZExHlBpMoJ4pruh7jOaQLJdV/YSL6A4IrN1kmwC2QAAAAAElFTkSuQmCC%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%20host%20%3D%20content.document.domain.replace%28/%5Ewww./g%2C%27%27%29%3B%0A//%20alert%28host%29%3B%0Awindow.openDialog%28%22chrome%3A//passwordmgr/content/passwordManager.xul%22%2C%20%22SignonViewerDialog%22%2C%20%27%27%2C%20%7BfilterString%3A%20host%7D%29%3B%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

Код:

Выделить код

Код:

var host = content.document.domain.replace(/^www./g,'');
window.openDialog("chrome://passwordmgr/content/passwordManager.xul", "SignonViewerDialog", '', {filterString: host});

Функция для открытия программы с системными переменными в пути.( Firefox )
В примере IE открывает текущую ссылку(из меню кнопки openLinkAsMenu ) используя переменную %PROGRAMFILES% . Так же и с другими переменными, %SYSTEMROOT% или %USERPROFILE%.

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

Выделить код

Код:

function openIElink() {
      var environment = Cc["@mozilla.org/process/environment;1"].getService(Ci.nsIEnvironment);
      var localFile = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsILocalFile);
      var process = Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess);

       localFile.initWithPath(environment.get("PROGRAMFILES")+ "\\Internet Explorer\\iexplore.exe");
       process.init(localFile);
       process.run(false, [content.location.href], 1);
  }
  openIElink();

Удалить куки текущего сайта( Firefox24+ ) от 06.02.2017.
кнопка удаляет куки текущего сайта и все Flash куки.

ЛКМ => Удалить куки текущего сайта,
СКМ => Удалить куки и обновить все вкладки текущего сайта.

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

Выделить код

Код:

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%u0423%u0434%u0430%u043B%u0438%u0442%u044C%20%u043A%u0443%u043A%u0438%20%u0442%u0435%u043A%u0443%u0449%u0435%u0433%u043E%20%u0441%u0430%u0439%u0442%u0430%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABUAAAAVCAYAAACpF6WWAAACaklEQVR42rVVu2piURTd6jW+FSMWRkW76WRsRBCbNFY2ATHFlCGdTaZXmU/wB/IHYjGdON2ANlapxELxRQpJjPH9yNy14dzx5prGmRwQb+4+Z2Wttdc+SvQJS/pU0EQi8f3t7S2t0+lOBtvtdr/q9foPBVSSpG+BQOCrXDiNnSRRp9P5Ij/+BXU6nROv10vb7fbDg0KFrEhTOzs7o6enp2eVfIfDQRcXF7Rer1WbAWCz2ZjJZrPhd0ajkVarFS0WC9Lr9fzObDbTaDRSeyozJVk+LZdLFROXy0WtVouq1SrkcQ0A6XSaotEoA0OB1WqldrutBQ0GgzSbzRSGbrebarUaFQoFZpRKpVhRs9mk6XRK4XCYJpMJg9rtdiagke/3++nl5YX/NplMfKBUKvHz/f09JZNJVgIb5vM57wNDoUgDiv/k8/lYGpbH42Ggx8dHur29pUwmw56hIdgDZfv9XrHp/PycialALRYLb0ZRdHM4HPIzGIqDHy2oQUNVoCIuh+EXDUO33+8T9WPDooDCI8REzpoiH3ZgNRoNymazSg1A+BzKR1OFzwooug7P0FUwQMMQGeHt5eUlxWIxbhSmDvVDdcg3zqpA8WIwGKgiBQ9zuRwVi0W6vr6mq6srZiTPN4VCIbq7u1PSgvNIiwoUxX6/z2EWC8wjkQjl83kql8tUqVR4shCdeDxO3W5X2Y9oaUDxotfracYUCQDjm5sbVoEhQJdhASZIWIDkaEBfX1+ZmZjvY5eJwWBgW47dZIigsOLQU8d4PKZ/ufpkYo73kfr58PDgOvWSls/pZPm/VaByFgvyV+F//Jz8AYsmOCaaWhXDAAAAAElFTkSuQmCC%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%20%0A%20%20%20if%20%28%20e.button%20%3D%3D%200%20%29%20%7B%20%20%20%20%20%20%20%20//%20%u041B%u041A%u041C%0A%20%20%20%20%20%20%20%20deleteCookiesFromHost%28%29%3B%0A%20%20%20%20%20%20%20%20//BrowserReload%28%29%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%0A%20%20%20if%20%28%20e.button%20%3D%3D%201%20%29%20%7B%20%20%20%20%20%20%20%20//%20%u0421%u041A%u041C%20%0A%20%20%20%20%20%20%20%20deleteCookiesFromHost%28%29%3B%0A%20%20%20%20%20%20%20%20reloadAllTabsFromHost%28%29%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%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%20%20%20%20%20%20//%20%u041F%u041A%u041C%0A%20%20%20%20%20%20%20%20e.preventDefault%28%29%3B%20%20%0A%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20try%20%7B%20Services.wm.getMostRecentWindow%28%22Browser%3ACookies%22%29.close%28%29%20%7D%20catch%28e%29%20%7B%7D%3B%0A%20%20%20%20%20%20%20%20var%20win%20%3D%20openDialog%20%28%22chrome%3A//browser/content/preferences/cookies.xul%22%2C%20%22_blank%22%2C%20%22resizable%2Cdialog%3Dyes%2Ccenterscreen%22%2C%20null%29%3B%0A%20%20%20%20%20%20%20%20addEventListener%28%22load%22%2C%20%28%29%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20var%20host%20%3D%20content.location.host%2C%20arr%20%3D%20host.split%28%27.%27%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20if%20%28%20arr.length%20%3E%202%20%29%20host%20%3D%20arr%5B1%5D%20+%20%22.%22%20+%20arr%5B2%5D%3B%0A%20%20%20%20%20%20%20%20%20%20%20var%20filter%20%3D%20win.document.getElementById%28%22filter%22%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20filter.value%20%3D%20host%3B%20setTimeout%28%28%29%3D%3E%20filter.doCommand%28%29%2C%200%29%3B%0A%20%20%20%20%20%20%20%20%7D%2C%20false%2C%20win%29%3B%0A%20%20%20%20%20%20%20%20%7D%20%20%20%20%20%20%20%20%0A%7D%3B%0A%0A%0A//%20%u0423%u0434%u0430%u043B%u0438%u0442%u044C%20%u043A%u0443%u043A%u0438%20%u0431%u0430%u0437%u043E%u0432%u043E%u0433%u043E%20%u0434%u043E%u043C%u0435%u043D%u0430%20.............%0Afunction%20deleteCookiesFromHost%28%29%20%7B%0A%20%20%20var%20host%20%3D%20Services.eTLD.getBaseDomain%28gBrowser.currentURI%29%3B%0A%0A%20%20%20//%20%u0443%u0434%u0430%u043B%u0438%u0442%u044C%20%u043E%u0431%u044B%u0447%u043D%u044B%u0435%20%u043A%u0443%u043A%u0438%20%u0434%u043E%u043C%u0435%u043D%u0430%0A%20%20%20for%20%28%20var%20en%20%3D%20Services.cookies.enumerator%3B%20en.hasMoreElements%28%29%3B%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20var%20cookie%20%3D%20en.getNext%28%29.QueryInterface%28Ci.nsICookie%29%3B%0A%20%20%20%20%20%20%20%20%20%7Ecookie.host.indexOf%28host.trim%28%29%29%20%26%26%20Services.cookies.remove%28cookie.host%2C%20cookie.name%2C%20cookie.path%2C%20false%29%3B%20%0A%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%0A%20%20%20//%20%u0443%u0434%u0430%u043B%u0438%u0442%u044C%20%u043A%u0443%u043A%u0438%20%u0434%u043E%u043C%u0435%u043D%u0430%20%u0438%u0437%20%u0438%u0441%u0442%u043E%u0440%u0438%u0438%20%20%20%20%20%0A%20%20%20var%20reversedDomain%20%3D%20host.split%28%22%22%29.reverse%28%29.join%28%22%22%29%20+%20%22.%22%3B%0A%20%20%20Cu.import%28%22resource%3A//gre/modules/FileUtils.jsm%22%29%3B%0A%20%20%20var%20file%20%3D%20FileUtils.getFile%28%22ProfD%22%2C%20%5B%22webappsstore.sqlite%22%5D%29%3B%0A%20%20%20var%20dbConn%20%3D%20Services.storage.openDatabase%28file%29%3B%0A%20%20%20dbConn.executeSimpleSQL%28%22DELETE%20FROM%20webappsstore2%20WHERE%20scope%20LIKE%20%5C%22%25%22%20+%20reversedDomain%20+%22%25%5C%22%22%29%3B%0A%20%20%20dbConn.close%28%29%3B%0A%20%20%20%0A%20%20%20//%20%u0443%u0434%u0430%u043B%u0438%u0442%u044C%20%u0432%u0441%u0435%20Flash%20%u043A%u0443%u043A%u0438%0A%20%20%20var%20dir%20%3D%20Services.dirsvc.get%28%27Home%27%2C%20Ci.nsIFile%29%3B%0A%20%20%20dir.append%28%22Application%20Data%22%29%3B%0A%20%20%20dir.append%28%22Macromedia%22%29%3B%0A%20%20%20dir.remove%28true%29%3B%0A%20%20%20dir.create%28Ci.nsIFile.DIRECTORY_TYPE%2C%200777%29%3B%0A%7D%3B%0A%0A%0A//%20%u041F%u0435%u0440%u0435%u0437%u0430%u0433%u0440%u0443%u0437%u0438%u0442%u044C%20%u0432%u0441%u0435%20%u0432%u043A%u043B%u0430%u0434%u043A%u0438%20%u0442%u0435%u043A%u0443%u0449%u0435%u0433%u043E%20%u0441%u0430%u0439%u0442%u0430%20.............%0Afunction%20reloadAllTabsFromHost%28%29%20%7B%0A%20%20%20var%20host%20%3D%20content.document.domain%3B%0A%20%20%20%0A%20%20%20for%28%20var%20tab%20of%20gBrowser.tabs%20%29%20%7B%20%20%0A%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%20if%20%28%20host%20%3D%3D%20tabHost%20%29%20gBrowser.reloadTab%28tab%29%3B%0A%20%20%20%20%20%20%20%20%7D%0A%7D%3B%0A%0A%0Athis.tooltipText%20%3D%20%22%u041B%3A%20%u0423%u0434%u0430%u043B%u0438%u0442%u044C%20%u043A%u0443%u043A%u0438%20%u0442%u0435%u043A%u0443%u0449%u0435%u0433%u043E%20%u0441%u0430%u0439%u0442%u0430%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5Cn%u0421%3A%20%u0423%u0434%u0430%u043B%u0438%u0442%u044C%20%u043A%u0443%u043A%u0438%20%u0442%u0435%u043A%u0443%u0449%u0435%u0433%u043E%20%u0441%u0430%u0439%u0442%u0430%20+%20%u043E%u0431%u043D%u043E%u0432%u0438%u0442%u044C%20%u0432%u0441%u0435%20%u0432%u043A%u043B%u0430%u0434%u043A%u0438%20%u0442%u0435%u043A%u0443%u0449%u0435%u0433%u043E%20%u0441%u0430%u0439%u0442%u0430%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5Cn%u041F%3A%20%u0423%u043F%u0440%u0430%u0432%u043B%u0435%u043D%u0438%u0435%20%u043A%u0443%u043A%u0430%u043C%u0438%20%u0434%u043B%u044F%20%u0442%u0435%u043A%u0443%u0449%u0435%u0433%u043E%20%u0441%u0430%u0439%u0442%u0430%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5CnCtrl+%u041F%3A%20CB%20%u041C%u0435%u043D%u044E%22%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

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

Выделить код

Код:

// Настройка функций кликов мыши для кнопки .............
this.onclick =e=> {
   
   if ( e.button == 0 ) {        // ЛКМ
        deleteCookiesFromHost();
        //BrowserReload();
        }
      
   if ( e.button == 1 ) {        // СКМ 
        deleteCookiesFromHost();
        reloadAllTabsFromHost();
        }
        
   if ( e.button == 2 && !e.ctrlKey && !e.shiftKey && !e.altKey && !e.metaKey ) {       // ПКМ
        e.preventDefault();  
        
        try { Services.wm.getMostRecentWindow("Browser:Cookies").close() } catch(e) {};
        var win = openDialog ("chrome://browser/content/preferences/cookies.xul", "_blank", "resizable,dialog=yes,centerscreen", null);
        addEventListener("load", ()=> {
           var host = content.location.host, arr = host.split('.');
           if ( arr.length > 2 ) host = arr[1] + "." + arr[2];
           var filter = win.document.getElementById("filter");
           filter.value = host; setTimeout(()=> filter.doCommand(), 0);
        }, false, win);
        }        
};


// Удалить куки базового домена .............
function deleteCookiesFromHost() {
   var host = Services.eTLD.getBaseDomain(gBrowser.currentURI);

   // удалить обычные куки домена
   for ( var en = Services.cookies.enumerator; en.hasMoreElements(); ) {
         var cookie = en.getNext().QueryInterface(Ci.nsICookie);
         ~cookie.host.indexOf(host.trim()) && Services.cookies.remove(cookie.host, cookie.name, cookie.path, false); 
         }
   
   // удалить куки домена из истории     
   var reversedDomain = host.split("").reverse().join("") + ".";
   Cu.import("resource://gre/modules/FileUtils.jsm");
   var file = FileUtils.getFile("ProfD", ["webappsstore.sqlite"]);
   var dbConn = Services.storage.openDatabase(file);
   dbConn.executeSimpleSQL("DELETE FROM webappsstore2 WHERE scope LIKE \"%" + reversedDomain +"%\"");
   dbConn.close();
   
   // удалить все Flash куки
   var dir = Services.dirsvc.get('Home', Ci.nsIFile);
   dir.append("Application Data");
   dir.append("Macromedia");
   dir.remove(true);
   dir.create(Ci.nsIFile.DIRECTORY_TYPE, 0777);
};


// Перезагрузить все вкладки текущего сайта .............
function reloadAllTabsFromHost() {
   var host = content.document.domain;
   
   for( var tab of gBrowser.tabs ) {  
        var tabHost = tab.linkedBrowser.contentDocument.location.host;
        if ( host == tabHost ) gBrowser.reloadTab(tab);
        }
};


this.tooltipText = "Л: Удалить куки текущего сайта\
                  \nС: Удалить куки текущего сайта + обновить все вкладки текущего сайта\
                  \nП: Управление куками для текущего сайта\
                  \nCtrl+П: CB Меню";

Запуск портативной программы из портативного Firefox( Firefox24+ ) от 28.01.2017.
Кнопка образец для запуска портативной программы которая находится папке портативного Firefox, для работы кнопки нужно создать в папке профиля Firefox папку Soft и помещать туда нужные портативные программы. В вначале кода инициализации кнопки нужно указать название папки программы и название exe файла программы, если папка и название exe файла указаны правильно иконка кнопки будет как у запускаемой программы(.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%u043E%u0440%u0442%u0430%u0442%u0438%u0432%u043D%u043E%u0439%20%u043F%u0440%u043E%u0433%u0440%u0430%u043C%u043C%u044B%20%u0438%u0437%20%u043F%u043E%u0440%u0442%u0430%u0442%u0438%u0432%u043D%u043E%u0433%u043E%20%u0431%u0440%u0430%u0443%u0437%u0435%u0440%u0430%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bcustombuttons-stdicon-2%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bvar%20app%20%3D%20%22fdm%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%20%20//%20%20%u043D%u0430%u0437%u0432%u0430%u043D%u0438%u0435%20%u043F%u0430%u043F%u043A%u0438%20%u043F%u0440%u043E%u0433%u0440%u0430%u043C%u043C%u044B%20%20%20%20%0Avar%20appFolder%20%3D%20%22FreeDownloadManager%22%3B%20%20%20%20%20//%20%20%u043D%u0430%u0437%u0432%u0430%u043D%u0438%u0435%20exe%20%u0444%u0430%u0439%u043B%u0430%20%u043F%u0440%u043E%u0433%u0440%u0430%u043C%u043C%u044B%20%20%0A%0A%0Avar%20file%20%3D%20Services.dirsvc.get%28%27ProfD%27%2C%20Ci.nsIFile%29%3B%0Afile.initWithPath%28file.path%20+%20%22%5C%5CSoft%5C%5C%22%20+%20appFolder%20+%20%22%5C%5C%22%20+%20app%20+%20%22.exe%22%29%3B%0A%0Adocument.getAnonymousNodes%28self%29%5B0%5D.src%20%3D%20%22moz-icon%3A//file%3A//%22%20+%20file.path%3B%0Aself.tooltipText%20%3D%20%22%u041B%3A%20%u0417%u0430%u043F%u0443%u0441%u0442%u0438%u0442%u044C%20%22%20+%20app%20+%20%22%5Cn%u041F%3A%20CB%20%u041C%u0435%u043D%u044E%22%3B%0A%0Athis._handleClick%20%3D%28%29%3D%3E%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%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%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 app = "fdm";                           //  название папки программы    
var appFolder = "FreeDownloadManager";     //  название exe файла программы  


var file = Services.dirsvc.get('ProfD', Ci.nsIFile);
file.initWithPath(file.path + "\\Soft\\" + appFolder + "\\" + app + ".exe");

document.getAnonymousNodes(self)[0].src = "moz-icon://file://" + file.path;
self.tooltipText = "Л: Запустить " + app + "\nП: CB Меню";

this._handleClick =()=> {
   var arg = []; // gClipboard.read()  content.location.href  document.commandDispatcher.focusedWindow.getSelection()

   var process = Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess);
   process.init(file);
   process.run(false, arg, (arg.length));
};

Кодировать изображение или текстовой файл в base64( Firefox24+ ) от 30.11.2017.
кнопка даёт возможность перекодировать в base64 изображение или текстовой файлы находящейся на жёстким диске, это полезно если нужно добавить изображение в css код.

ЛКМ => Кодировать изображение или текстовой файл в base64.

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

Выделить код

Код:

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%u0434%u0438%u0440%u043E%u0432%u0430%u0442%u044C%20%u0438%u0437%u043E%u0431%u0440%u0430%u0436%u0435%u043D%u0438%u0435%20%u0438%u043B%u0438%20%u0442%u0435%u043A%u0441%u0442%u043E%u0432%u043E%u0439%20%u0444%u0430%u0439%u043B%20%u0432%20base64%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACLElEQVR42pXTXUtUURTG8f/aZ58zppqjY4YhRgQBWRABRRgoEERlKNJlQn2ICOquIooi6Bt0FRDkOGlAUUBRQoEFmEYEZhSRYG/zojpzzl55cA6lUNFv89zszX5YN0tyIyNUDYdR1KfOoYCwQgSE1RQQMXiel7NhGFLVN9Dfz//I5nJ9VlX53buZ94BgDNT6HvuvjhNYQVAUcA4Obs9w7WQXqg7LGoHvIxIXCCk/HlM4e2w3Ym0yPOduPiMmgBERksRqampWkkoRBAFTF7q5MvSCcgQ3ns9SUYM1kLDW97POuf7IOW5ls6gqAlgDdRZOPwk43ruXu2/zNKfX87VsEH6x8eeu7h4iP8B5HjhFnCNllH0Xxxg4uofpwiKZpjTjj8dI204QIWEVMHX1iDV4bWnM1k14rS2kmjK8qUuz46HQe6iHe7dHeXnpCJ2nRgkjJaZJge8J5XqBnR3Ilja0JUPYkMEEjbxaesC2OxHXu8qAMHn5MGi1QMEAWMC0N2I60pjNzcvZgPpFFj9PsDAxxuvzByhWABUqIZQjqgWKVQUfWGptwGxshCCPzk3hiku42XmiyU9YoBIpiCBGiE/CoooPmMZadP4Dsj7EtK9Dfxi0FCL1Pj4xJWathYQIJnnQLx9hbga0gKldAClAOY+WF4gJwlpGBJtcp58W+RvfegwND+OcI2aMoVQqPZLlhcg71Qan/JERKBQK908MDp5hte8C7AI8/u0bMM0aPwHiYdBiB+lf7gAAAABJRU5ErkJggg%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%20fp%20%3D%20window.makeFilePicker%28%29%3B%0Afp.init%28window%2C%20%22%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20%u0444%u0430%u0439%u043B%22%2C%20fp.modeOpen%29%3B%0Afp.appendFilter%28%22Text%20and%20images%22%2C%20%22*.txt%3B%20*.text%3B%20*.css%3B%20*.js%3B%20*.ini%3B%20*.rdf%3B%20*.xml%3B%20*.html%3B%20*.htm%3B%20*.shtml%3B%20*.xhtml%3B%20*.jpe%3B%20*.jpg%3B%20*.jpeg%3B%5C%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*.gif%3B%20*.png%3B%20*.bmp%3B%20*.ico%3B%20*.svg%3B%20*.svgz%3B%20*.tif%3B%20*.tiff%3B%20*.ai%3B%20*.drw%3B%20*.pct%3B%20*.psp%3B%20*.xcf%3B%20*.psd%3B%20*.raw%22%29%3B%0Afp.open%28re%3D%3E%20%7B%20%0A%20%20%20if%20%28%20re%20%21%3D%20fp.returnOK%20%29%20return%3B%0A%20%20%20var%20file%20%3D%20fp.file%3B%0A%20%20%20%20%20%0A%20%20%20var%20inputStream%20%3D%20Cc%5B%22@mozilla.org/network/file-input-stream%3B1%22%5D.createInstance%28Ci.nsIFileInputStream%29%3B%0A%20%20%20inputStream.init%28file%2C%200x01%2C%200600%2C%200%29%3B%0A%20%20%20var%20stream%20%3D%20Cc%5B%22@mozilla.org/binaryinputstream%3B1%22%5D.createInstance%28Ci.nsIBinaryInputStream%29%3B%0A%20%20%20stream.setInputStream%28inputStream%29%3B%0A%20%20%20var%20encoded%20%3D%20btoa%28stream.readBytes%28stream.available%28%29%29%29%3B%0A%20%20%20var%20contentType%20%3D%20Cc%5B%22@mozilla.org/mime%3B1%22%5D.getService%28Ci.nsIMIMEService%29.getTypeFromFile%28file%29%3B%0A%20%20%20var%20dataURI%20%3D%20%22data%3A%22%20+%20contentType%20+%20%22%3Bcharset%3Dutf-8%3Bbase64%2C%22%20+%20encoded%3B%0A%20%20%20%20%20%20%0A%20%20%20gClipboard.write%28dataURI%29%3B%0A%20%20%20Cc%5B%22@mozilla.org/alerts-service%3B1%22%5D.getService%28Ci.nsIAlertsService%29%0A%20%20%20.showAlertNotification%28self.image%2C%20self.label%2C%20%22%u0421%u043A%u043E%u043F%u0438%u0440%u043E%u0432%u0430%u043B%20%u0444%u0430%u0439%u043B%20%u043A%u0430%u043A%20base64%22%29%3B%0A%7D%29%3B%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

вкладка Код:

Выделить код

Код:

var fp = window.makeFilePicker();
fp.init(window, "Открыть файл", fp.modeOpen);
fp.appendFilter("Text and images", "*.txt; *.text; *.css; *.js; *.ini; *.rdf; *.xml; *.html; *.htm; *.shtml; *.xhtml; *.jpe; *.jpg; *.jpeg;\
                                    *.gif; *.png; *.bmp; *.ico; *.svg; *.svgz; *.tif; *.tiff; *.ai; *.drw; *.pct; *.psp; *.xcf; *.psd; *.raw");
fp.open(re=> { 
   if ( re != fp.returnOK ) return;
   var file = fp.file;
     
   var inputStream = Cc["@mozilla.org/network/file-input-stream;1"].createInstance(Ci.nsIFileInputStream);
   inputStream.init(file, 0x01, 0600, 0);
   var stream = Cc["@mozilla.org/binaryinputstream;1"].createInstance(Ci.nsIBinaryInputStream);
   stream.setInputStream(inputStream);
   var encoded = btoa(stream.readBytes(stream.available()));
   var contentType = Cc["@mozilla.org/mime;1"].getService(Ci.nsIMIMEService).getTypeFromFile(file);
   var dataURI = "data:" + contentType + ";charset=utf-8;base64," + encoded;
      
   gClipboard.write(dataURI);
   Cc["@mozilla.org/alerts-service;1"].getService(Ci.nsIAlertsService)
   .showAlertNotification(self.image, self.label, "Скопировал файл как base64");
});

HTTP Request Loger( Firefox24+ ) от 12.02.2017.
кнопка записивает сетевые запросы (referrer, HTTP method and URL) открытых сайтов в текстовый файл http-request-log.txt в папке профиля.

ЛКМ => Включить-Выключить запись(логирование),
СКМ => Открыть текстовый(лог) файл,
ПКМ => Удалить текстовый(лог) файл.

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

Выделить код

Код:

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%3EHTTP%20Request%20Logger%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/8DAwP/AwMD/wMDA/8DAwP/AwMD/wMDA/8DAwP/AwMD/wMDA/8DAwP/AwMD/wMDA/8DAwP/AwMD/AAAA/wAAAP/AwMD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/wMDA/wAAAP8AAAD/wMDA/wAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/8DAwP8AAAD/AAAA/8DAwP8AAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/AwMD/AAAA/wAAAP/AwMD/AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/wMDA/wAAAP8AAAD/wMDA/wAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/8DAwP8AAAD/AAAA/8DAwP8AAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/AwMD/AAAA/wAAAP/AwMD/AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/wMDA/wAAAP8AAAD/wMDA/wAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/8DAwP8AAAD/AAAA/8DAwP8AAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/AwMD/AAAA/wAAAP/AwMD/AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/wMDA/wAAAP8AAAD/wMDA/wAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/8DAwP8AAAD/AAAA/8DAwP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP/AwMD/AAAA/wAAAP/AwMD/wMDA/8DAwP/AwMD/wMDA/8DAwP/AwMD/wMDA/8DAwP/AwMD/wMDA/8DAwP/AwMD/wMDA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AACsQQAArEEAAKxBH/isQR/4rEEf+KxBH/isQR/4rEEf+KxBH/isQR/4rEEf+KxBH/isQQAArEEAAKxBAACsQQ%3D%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5BgBrowser.currentURI.spec%20%3D%3D%20%22about%3Acustomizing%22%20%7C%7C%20%28%28%29%20%3D%3E%20%7B%0A%09var%20fileName%20%3D%20%22http-request-log.txt%22%3B%0A%09var%20file%20%3D%20Services.dirsvc.get%28%22ProfD%22%2C%20Ci.nsIFile%29%3B%0A%09file.append%28fileName%29%3B%0A%0A%09var%20obsId%20%3D%20%22httpRequestLogger%22%3B%0A%09var%20pn%20%3D%20%22CB.%22%20+%20obsId%20+%20%22.on%22%3B%0A%09cbu.isPref%28pn%2C%20false%29%3B%0A%09var%20storageId%20%3D%20%22CB.%22%20+%20obsId%20+%20%22.Storage%22%3B%0A%09%0A%09var%20storage%20%3D%20%28function%28%29%20%7B%0A%09%09var%20global%20%3D%20Cu.import%28%22resource%3A//gre/modules/Services.jsm%22%2C%20%7B%7D%29%3B%0A%09%09var%20ns%20%3D%20storageId%3B%0A%09%09var%20storage%20%3D%20global%5Bns%5D%20%7C%7C%20%28global%5Bns%5D%20%3D%20global.Object.create%28null%29%29%3B%0A%09%09return%20%7B%0A%09%09%09get%3A%20function%28key%2C%20defaultVal%29%20%7B%0A%09%09%09%09if%28key%20in%20storage%29%0A%09%09%09%09%09return%20storage%5Bkey%5D%3B%0A%09%09%09%09return%20defaultVal%3B%0A%09%09%09%7D%2C%0A%09%09%09set%3A%20function%28key%2C%20val%29%20%7B%0A%09%09%09%09if%28key%20%3D%3D%3D%20null%29%0A%09%09%09%09%09delete%20storage%5Bkey%5D%3B%0A%09%09%09%09else%0A%09%09%09%09%09storage%5Bkey%5D%20%3D%20val%3B%0A%09%09%09%7D%0A%09%09%7D%3B%0A%09%7D%29%28%29%3B%0A%0A%09function%20obsConstructor%28%29%20%7B%0A%09%09var%20obs%20%3D%20storage.get%28obsId%2C%20null%29%3B%0A%09%09if%20%28%21obs%29%20%7B%0A%09%09%09obs%20%3D%20%7B%0A%09%09%09%09topic%3A%20%22http-on-modify-request%22%2C%0A%09%09%09%09init%3A%20function%28%29%20Services.obs.addObserver%28this%2C%20this.topic%2C%20false%29%2C%0A%09%09%09%09destroy%3A%20function%28%29%20%7B%0A%09%09%09%09%09try%20%7BServices.obs.removeObserver%28this%2C%20this.topic%29%3B%7D%0A%09%09%09%09%09catch%28ex%29%20%7BCu.reportError%28ex%29%3B%7D%0A%09%09%09%09%7D%2C%0A%09%09%09%09observe%3A%20function%28subj%29%20%7B%0A%09%09%09%09%09var%20channel%20%3D%20subj.QueryInterface%28Ci.nsIHttpChannel%29%3B%0A%09%09%09%09%09var%20ref%20%3D%20channel.referrer%20%3F%20channel.referrer.spec%20%3A%20%22%28none%29%22%3B%0A%09%09%09%09%09var%20str%3D%20ref%20+%20%22%20%22%20+%20channel.requestMethod%20+%20%22%20%22%20+%20channel.URI.spec%20+%20%22%5Cr%5Cn%22%3B%0A%09%09%09%09%09str%20%3D%20this.suc.ConvertFromUnicode%28str%29%3B%0A%09%09%09%09%09this.fos.write%28str%2C%20str.length%29%3B%0A%09%09%09%09%7D%2C%0A%09%09%09%09get%20fos%28%29%20%7B%0A%09%09%09%09%09delete%20this.fos%3B%0A%09%09%09%09%09var%20fos%20%3D%20Cc%5B%22@mozilla.org/network/file-output-stream%3B1%22%5D.createInstance%28Ci.nsIFileOutputStream%29%3B%0A%09%09%09%09%09//%20PR_WRONLY%20%7C%20PR_CREATE_FILE%20%7C%20PR_APPEND%0A%09%09%09%09%09fos.init%28file%2C%20parseInt%28%220x02%22%29%20%7C%20parseInt%28%220x08%22%29%20%7C%20parseInt%28%220x10%22%29%2C%20-1%2C%200%29%3B%0A%09%09%09%09%09return%20this.fos%20%3D%20fos%3B%0A%09%09%09%09%7D%2C%0A%09%09%09%09get%20suc%28%29%20%7B%0A%09%09%09%09%09delete%20this.suc%3B%0A%09%09%09%09%09var%20suc%20%3D%20Cc%5B%22@mozilla.org/intl/scriptableunicodeconverter%22%5D.createInstance%28Ci.nsIScriptableUnicodeConverter%29%3B%0A%09%09%09%09%09suc.charset%20%3D%20%22utf-8%22%3B%0A%09%09%09%09%09return%20this.suc%20%3D%20suc%3B%0A%09%09%09%09%7D%0A%09%09%09%09%0A%09%09%09%7D%3B%0A%09%09%09storage.set%28obsId%2C%20obs%29%3B%0A%09%09%09obs.init%28%29%3B%0A%09%09%7D%0A%09%7D%0A%09function%20obsDestructor%28reason%29%20%7B%20%20%0A%09%09if%20%28%20%21/delete%7Cupdate/.test%28reason%29%20%29%20return%3B%0A%09%09var%20obs%20%3D%20storage.get%28obsId%2C%20null%29%3B%0A%09%09if%20%28obs%29%20%7B%0A%09%09%09obs.destroy%28%29%3B%0A%09%09%09storage.set%28obsId%2C%20null%29%3B%0A%09%09%7D%0A%09%09reason%20%3D%3D%20%22delete%22%20%26%26%20cbu.clearPrefs%28pn%29%3B%0A%09%7D%0A%09addDestructor%28reason%20%3D%3E%20%7B%0A%09%09obsDestructor%28reason%29%3B%0A%09%09setTimeout%28function%28%29%20%7B%0A%09%09%09custombuttons.palette.querySelector%28%27toolbarbutton%5Bid%3D%22%27%20+%20_id%20+%20%27%22%5D%27%29%20%26%26%20obsDestructor%28%22delete%22%29%3B%0A%09%09%7D%2C%20500%29%3B%0A%09%7D%29%3B%0A%0A%09var%20imgON%20%3D%20%22data%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/8DAwP/AwMD/wMDA/8DAwP/AwMD/wMDA/8DAwP/AwMD/wMDA/8DAwP/AwMD/wMDA/8DAwP/AwMD/AAAA/wAAAP/AwMD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/wMDA/wAAAP8AAAD/wMDA/wAAAP9m/5n/Zv+Z/2b/mf9m/5n/Zv+Z/2b/mf9m/5n/Zv+Z/2b/mf9m/5n/AAAA/8DAwP8AAAD/AAAA/8DAwP8AAAD/Zv+Z/2b/mf9m/5n/Zv+Z/2b/mf9m/5n/Zv+Z/2b/mf9m/5n/Zv+Z/wAAAP/AwMD/AAAA/wAAAP/AwMD/AAAA/2b/mf9m/5n/Zv+Z/2b/mf9m/5n/Zv+Z/2b/mf9m/5n/Zv+Z/2b/mf8AAAD/wMDA/wAAAP8AAAD/wMDA/wAAAP9m/5n/Zv+Z/2b/mf9m/5n/Zv+Z/2b/mf9m/5n/Zv+Z/2b/mf9m/5n/AAAA/8DAwP8AAAD/AAAA/8DAwP8AAAD/Zv+Z/2b/mf9m/5n/Zv+Z/2b/mf9m/5n/Zv+Z/2b/mf9m/5n/Zv+Z/wAAAP/AwMD/AAAA/wAAAP/AwMD/AAAA/2b/mf9m/5n/Zv+Z/2b/mf9m/5n/Zv+Z/2b/mf9m/5n/Zv+Z/2b/mf8AAAD/wMDA/wAAAP8AAAD/wMDA/wAAAP9m/5n/Zv+Z/2b/mf9m/5n/Zv+Z/2b/mf9m/5n/Zv+Z/2b/mf9m/5n/AAAA/8DAwP8AAAD/AAAA/8DAwP8AAAD/Zv+Z/2b/mf9m/5n/Zv+Z/2b/mf9m/5n/Zv+Z/2b/mf9m/5n/Zv+Z/wAAAP/AwMD/AAAA/wAAAP/AwMD/AAAA/2b/mf9m/5n/Zv+Z/2b/mf9m/5n/Zv+Z/2b/mf9m/5n/Zv+Z/2b/mf8AAAD/wMDA/wAAAP8AAAD/wMDA/wAAAP9m/5n/Zv+Z/2b/mf9m/5n/Zv+Z/2b/mf9m/5n/Zv+Z/2b/mf9m/5n/AAAA/8DAwP8AAAD/AAAA/8DAwP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP/AwMD/AAAA/wAAAP/AwMD/wMDA/8DAwP/AwMD/wMDA/8DAwP/AwMD/wMDA/8DAwP/AwMD/wMDA/8DAwP/AwMD/wMDA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQ%3D%3D%22%3B%0A%09function%20setState%28on%29%20%7B%0A%09%09on%20%3F%20obsConstructor%28%29%20%3A%20obsDestructor%28%22delete%22%29%3B%0A%09%09cbu.setPrefs%28pn%2C%20on%29%3B%0A%09%09var%20src%20%3D%20on%20%3F%20imgON%20%3A%20self.image%3B%0A%09%09var%20en%20%3D%20Services.wm.getEnumerator%28%22navigator%3Abrowser%22%29%3B%0A%09%09while%28en.hasMoreElements%28%29%29%20%7B%0A%09%09%09var%20doc%20%3D%20en.getNext%28%29.document%3B%0A%09%09%09var%20btn%20%3D%20doc.getElementById%28_id%29%3B%0A%09%09%09var%20%5Bimg%5D%20%3D%20doc.getAnonymousNodes%28btn%29%3B%0A%09%09%09if%20%28img%29%20img.src%20%3D%20src%3B%0A%09%09%7D%0A%09%7D%0A%09setState%28cbu.getPrefs%28pn%29%29%3B%0A%09self.onclick%20%3De%3D%3E%20%7B%0A%09%09if%20%28%20e.button%20%3D%3D%200%20%29%20setState%28%21cbu.getPrefs%28pn%29%29%3B%0A%09%09%0A%09%09if%20%28%20e.button%20%3D%3D%201%20%29%20%0A%09%09%20%20%20%20%20file.exists%28%29%20%3F%20file.launch%28%29%20%3A%20custombuttons.alertSlide%28self.label%2C%20%22%u041B%u043E%u0433%20%u0444%u0430%u0439%u043B%20%u043D%u0435%20%u0441%u0443%u0449%u0435%u0441%u0442%u0432%u0443%u0435%u0442%22%29%3B%0A%09%09%0A%09%09if%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%20%20%20%20%20%20%20%20%20%20%20%20%20%20e.preventDefault%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20setState%28false%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%28function%20f%28i%20%3D%2020%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%20try%20%7B%20file.remove%28true%29%3B%20custombuttons.alertSlide%28self.label%2C%20%22%u0423%u0434%u0430%u043B%u0438%u043B%20%u043B%u043E%u0433%20%u0444%u0430%u0439%u043B%22%29%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%20catch%28e%29%20%7B%20i%20%26%26%20setTimeout%28%28%29%3D%3E%20f%28--i%29%2C%202000%29%20%7D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%29%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%7D%0A%7D%29%28%29%3B%0A%0A%0Athis.tooltipText%20%3D%20%22%u0417%u0430%u043F%u0438%u0441%u044B%u0432%u0430%u0442%u044C%20%u0441%u0435%u0442%u0435%u0432%u044B%u0435%20%u0437%u0430%u043F%u0440%u043E%u0441%u044B%20%u0441%u0430%u0439%u0442%u043E%u0432%20%u0432%20%u0442%u0435%u043A%u0441%u0442%u043E%u0432%u044B%u0439%20%u0444%u0430%u0439%u043B%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5Cn%u041B%3A%20%u0412%u043A%u043B%u044E%u0447%u0438%u0442%u044C-%u0412%u044B%u043A%u043B%u044E%u0447%u0438%u0442%u044C%20%u0437%u0430%u043F%u0438%u0441%u044C%28%u043B%u043E%u0433%u0438%u0440%u043E%u0432%u0430%u043D%u0438%u0435%29%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5Cn%u0421%3A%20%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20%u0442%u0435%u043A%u0441%u0442%u043E%u0432%u044B%u0439%28%u043B%u043E%u0433%29%20%u0444%u0430%u0439%u043B%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5Cn%u041F%3A%20%u0423%u0434%u0430%u043B%u0438%u0442%u044C%20%u0442%u0435%u043A%u0441%u0442%u043E%u0432%u044B%u0439%28%u043B%u043E%u0433%29%20%u0444%u0430%u0439%u043B%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5CnCtrl+%u041F%3A%20CB%20%u041C%u0435%u043D%u044E%22%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%5BHTTP%20Request%20Logger%20-%20%u041A%u043D%u043E%u043F%u043A%u0430%20%u0441%u043E%u0445%u0440%u0430%u043D%u044F%u0435%u0442%20%u0437%u0430%u043F%u0440%u043E%u0441%u044B%20%u0441%u0430%u0439%u0442%u043E%u0432%20%u0432%20%u0441%u0435%u0442%u044C%20%u0432%20%u0442%u0435%u043A%u0441%u0442%u043E%u0432%u044B%u0439%20%u0444%u0430%u0439%u043B%20%u0432%20%u043F%u0430%u043F%u043A%u0435%20%u043F%u0440%u043E%u0444%u0438%u043B%u044F.%0A%u0418%u043C%u044F%20%u0444%u0430%u0439%u043B%u0430%20%22http-request-logger.txt%22.%0A*********************************************************************%0A%u041B%u041A%u041C%20-%20%u0412%u041A%u041B%u044E%u0447%u0438%u0442%u044C%20/%20%u0412%u042B%u041A%u041B%u044E%u0447%u0438%u0442%u044C%20%u0437%u0430%u043F%u0438%u0441%u044C%20%u0432%20%u0444%u0430%u0439%u043B%20%28%u043B%u043E%u0433%u0438%u0440%u043E%u0432%u0430%u043D%u0438%u0435%29.%0A%u0421%u041A%u041C%20-%20%u043E%u0442%u043A%u0440%u043E%u0435%u0442%20%u044D%u0442%u043E%u0442%20%u0444%u0430%u0439%u043B%20%u0432%20%u0432%u0430%u0448%u0435%u043C%20%u0442%u0435%u043A%u0441%u0442%u043E%u0432%u043E%u043C%20%u0440%u0435%u0434%u0430%u043A%u0442%u043E%u0440%u0435%20%u043F%u043E-%u0443%u043C%u043E%u043B%u0447%u0430%u043D%u0438%u044E.%0A%u041F%u041A%u041C%20-%20%u0441%u0442%u0430%u043D%u0434%u0430%u0440%u0442%u043D%u043E%u0435%20%u043C%u0435%u043D%u044E%20%u043A%u043D%u043E%u043F%u043A%u0438.%0A%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

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

Выделить код

Код:

gBrowser.currentURI.spec == "about:customizing" || (() => {
    var fileName = "http-request-log.txt";
    var file = Services.dirsvc.get("ProfD", Ci.nsIFile);
    file.append(fileName);

    var obsId = "httpRequestLogger";
    var pn = "CB." + obsId + ".on";
    cbu.isPref(pn, false);
    var storageId = "CB." + obsId + ".Storage";
    
    var storage = (function() {
        var global = Cu.import("resource://gre/modules/Services.jsm", {});
        var ns = storageId;
        var storage = global[ns] || (global[ns] = global.Object.create(null));
        return {
            get: function(key, defaultVal) {
                if(key in storage)
                    return storage[key];
                return defaultVal;
            },
            set: function(key, val) {
                if(key === null)
                    delete storage[key];
                else
                    storage[key] = val;
            }
        };
    })();

    function obsConstructor() {
        var obs = storage.get(obsId, null);
        if (!obs) {
            obs = {
                topic: "http-on-modify-request",
                init: function() Services.obs.addObserver(this, this.topic, false),
                destroy: function() {
                    try {Services.obs.removeObserver(this, this.topic);}
                    catch(ex) {Cu.reportError(ex);}
                },
                observe: function(subj) {
                    var channel = subj.QueryInterface(Ci.nsIHttpChannel);
                    var ref = channel.referrer ? channel.referrer.spec : "(none)";
                    var str= ref + " " + channel.requestMethod + " " + channel.URI.spec + "\r\n";
                    str = this.suc.ConvertFromUnicode(str);
                    this.fos.write(str, str.length);
                },
                get fos() {
                    delete this.fos;
                    var fos = Cc["@mozilla.org/network/file-output-stream;1"].createInstance(Ci.nsIFileOutputStream);
                    // PR_WRONLY | PR_CREATE_FILE | PR_APPEND
                    fos.init(file, parseInt("0x02") | parseInt("0x08") | parseInt("0x10"), -1, 0);
                    return this.fos = fos;
                },
                get suc() {
                    delete this.suc;
                    var suc = Cc["@mozilla.org/intl/scriptableunicodeconverter"].createInstance(Ci.nsIScriptableUnicodeConverter);
                    suc.charset = "utf-8";
                    return this.suc = suc;
                }
                
            };
            storage.set(obsId, obs);
            obs.init();
        }
    }
    function obsDestructor(reason) {  
        if ( !/delete|update/.test(reason) ) return;
        var obs = storage.get(obsId, null);
        if (obs) {
            obs.destroy();
            storage.set(obsId, null);
        }
        reason == "delete" && cbu.clearPrefs(pn);
    }
    addDestructor(reason => {
        obsDestructor(reason);
        setTimeout(function() {
            custombuttons.palette.querySelector('toolbarbutton[id="' + _id + '"]') && obsDestructor("delete");
        }, 500);
    });

    var imgON = "data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/8DAwP/AwMD/wMDA/8DAwP/AwMD/wMDA/8DAwP/AwMD/wMDA/8DAwP/AwMD/wMDA/8DAwP/AwMD/AAAA/wAAAP/AwMD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/wMDA/wAAAP8AAAD/wMDA/wAAAP9m/5n/Zv+Z/2b/mf9m/5n/Zv+Z/2b/mf9m/5n/Zv+Z/2b/mf9m/5n/AAAA/8DAwP8AAAD/AAAA/8DAwP8AAAD/Zv+Z/2b/mf9m/5n/Zv+Z/2b/mf9m/5n/Zv+Z/2b/mf9m/5n/Zv+Z/wAAAP/AwMD/AAAA/wAAAP/AwMD/AAAA/2b/mf9m/5n/Zv+Z/2b/mf9m/5n/Zv+Z/2b/mf9m/5n/Zv+Z/2b/mf8AAAD/wMDA/wAAAP8AAAD/wMDA/wAAAP9m/5n/Zv+Z/2b/mf9m/5n/Zv+Z/2b/mf9m/5n/Zv+Z/2b/mf9m/5n/AAAA/8DAwP8AAAD/AAAA/8DAwP8AAAD/Zv+Z/2b/mf9m/5n/Zv+Z/2b/mf9m/5n/Zv+Z/2b/mf9m/5n/Zv+Z/wAAAP/AwMD/AAAA/wAAAP/AwMD/AAAA/2b/mf9m/5n/Zv+Z/2b/mf9m/5n/Zv+Z/2b/mf9m/5n/Zv+Z/2b/mf8AAAD/wMDA/wAAAP8AAAD/wMDA/wAAAP9m/5n/Zv+Z/2b/mf9m/5n/Zv+Z/2b/mf9m/5n/Zv+Z/2b/mf9m/5n/AAAA/8DAwP8AAAD/AAAA/8DAwP8AAAD/Zv+Z/2b/mf9m/5n/Zv+Z/2b/mf9m/5n/Zv+Z/2b/mf9m/5n/Zv+Z/wAAAP/AwMD/AAAA/wAAAP/AwMD/AAAA/2b/mf9m/5n/Zv+Z/2b/mf9m/5n/Zv+Z/2b/mf9m/5n/Zv+Z/2b/mf8AAAD/wMDA/wAAAP8AAAD/wMDA/wAAAP9m/5n/Zv+Z/2b/mf9m/5n/Zv+Z/2b/mf9m/5n/Zv+Z/2b/mf9m/5n/AAAA/8DAwP8AAAD/AAAA/8DAwP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP/AwMD/AAAA/wAAAP/AwMD/wMDA/8DAwP/AwMD/wMDA/8DAwP/AwMD/wMDA/8DAwP/AwMD/wMDA/8DAwP/AwMD/wMDA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQ==";
    function setState(on) {
        on ? obsConstructor() : obsDestructor("delete");
        cbu.setPrefs(pn, on);
        var src = on ? imgON : self.image;
        var en = Services.wm.getEnumerator("navigator:browser");
        while(en.hasMoreElements()) {
            var doc = en.getNext().document;
            var btn = doc.getElementById(_id);
            var [img] = doc.getAnonymousNodes(btn);
            if (img) img.src = src;
        }
    }
    setState(cbu.getPrefs(pn));
    self.onclick =e=> {
        if ( e.button == 0 ) setState(!cbu.getPrefs(pn));
        
        if ( e.button == 1 ) 
             file.exists() ? file.launch() : custombuttons.alertSlide(self.label, "Лог файл не существует");
        
        if ( e.button == 2 && !e.ctrlKey && !e.shiftKey && !e.altKey && !e.metaKey ) { 
                     e.preventDefault();
                     setState(false);
                     
                     (function f(i = 20) {
                        try { file.remove(true); custombuttons.alertSlide(self.label, "Удалил лог файл") }
                        catch(e) { i && setTimeout(()=> f(--i), 2000) };
                     })();
                     }
    }
})();


this.tooltipText = "Записывать сетевые запросы сайтов в текстовый файл\
                  \nЛ: Включить-Выключить запись(логирование)\
                  \nС: Открыть текстовый(лог) файл\
                  \nП: Удалить текстовый(лог) файл\
                  \nCtrl+П: CB Меню";

FF Exp Imp CB(для Firefox 53) Автор Indomito ver 7.0.1 bild of 03.06.2017

Импорт и Экспорт кнопок из/в HTML-файл
Клики на кнопке:
Shift+Left            —  Запись кнопки
Left                     —  Запись всех кнопок
Middle                 —  Установить каталог кнопок
Ctrl+Middle         —  Сбос каталога кнопок
Right                   —  Чтение кнопок(ки)


По просьбе желающих размещаю старую кнопку.:

Mozilla FF to CB FF Exp Imp CB это HTML-файл от 2015 года. Установка через Mеню->Файл.

Инициализация: Надстроечная секция(не обязательно, но можно поменять по желанию)

Выделить код

Код:

/*Initialization Code
Автор Indomito ver 7.0.1 bild of 03.06.2017
-------------------------------------------------------------------------------------------------------
Обновление для совместимоси с FireFox 53 и ТВ(не проверено на необходимость, т.к. не обновлял ещё)
 1. Замена Application.prefs.setValue() на cbu.setPrefs() и Application.prefs.getValue() на gPrefService.getComplexValue(cEICB, Ci.nsISupportsString).data()
 2. Конвертации пути в UTF-8 из-за коллизий пути содержащей кириллицу:
   - запись: cbu.setPrefs(cEICB, convertFromUnicode("UTF-8", cPathEI))
   - чтение: gPrefService.getComplexValue(cEICB, Ci.nsISupportsString).data
 3. Правки которые я хотел внести с 2012 года, а может и ранее, точно непомю, самую первую версию кнопки
-------------------------------------------------------------------------------------------------------*/

//*********************************************************************
// ----------------Можно менять значения констант ---------------------
// ------------------------BEGIN DEF-----------------------------------
const cEICB = "Export.Import.CB.type.HTML"; // Желательно не трогать, т.к. старые кнопки будут считываться с ошибками
const cPathEI = "C:\\"; // Нет менять, используется для сброса Export.Import.CB.type.HTML 
const cPrefName = "Mozilla FF to CB "; // префикс заголовка для уточнения Mozilla FireFox или Mozilla Thunderbird
const cPathSetMsg = "Надо установить путь для чтения/записи кнопок";
const csExpT = "Экспорт кнопок в HTML";
const csExpOneT ="Экспорт одной кнопки в HTML";
const csExpOneMsg ="Выберите имя кнопки"; 
const csImpT = "Импорт кнопок из HTML";
const csSetIET = "Каталог для Экспорта/Импорта кнопок в/из HTML";
const dProc = 0.30; // процент открытия выбора окна кнопок, при dProc = 0.30 это 30% кнопок от общего числа
const csNoNameBT = "Для этой кнопки не определено имя";
const csNoBT = "Это не кнопка";
const spcTn = "=================================";
const spcTm = "               Не активные кнопки";
this.tooltipText = "  Импорт и Экспорт кнопок из/в HTML-файл\n———-——————————————————\nShift+Left        —  Запись кнопки"+
                   "\nLeft                  —  Запись всех кнопок" +
                   "\nMiddle            —  Установить каталог кнопок" +
                   "\nCtrl+Middle   —  Сбос каталога кнопок" +
                   "\nRight               —  Чтение кнопок(ки)";
// -------------------------END DEF-----------------------------------


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

Выделить код

Код:

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%3EFF%20Exp%20Imp%20CB%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%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/*Initialization%20Code%0A%u0410%u0432%u0442%u043E%u0440%20Indomito%20ver%207.0.1%20bild%20of%2003.06.2017%0A-------------------------------------------------------------------------------------------------------%0A%u041E%u0431%u043D%u043E%u0432%u043B%u0435%u043D%u0438%u0435%20%u0434%u043B%u044F%20%u0441%u043E%u0432%u043C%u0435%u0441%u0442%u0438%u043C%u043E%u0441%u0438%20%u0441%20FireFox%2053%20%u0438%20%u0422%u0412%28%u043D%u0435%20%u043F%u0440%u043E%u0432%u0435%u0440%u0435%u043D%u043E%20%u043D%u0430%20%u043D%u0435%u043E%u0431%u0445%u043E%u0434%u0438%u043C%u043E%u0441%u0442%u044C%2C%20%u0442.%u043A.%20%u043D%u0435%20%u043E%u0431%u043D%u043E%u0432%u043B%u044F%u043B%20%u0435%u0449%u0451%29%0A%201.%20%u0417%u0430%u043C%u0435%u043D%u0430%20Application.prefs.setValue%28%29%20%u043D%u0430%20cbu.setPrefs%28%29%20%u0438%20Application.prefs.getValue%28%29%20%u043D%u0430%20gPrefService.getComplexValue%28cEICB%2C%20Ci.nsISupportsString%29.data%28%29%0A%202.%20%u041A%u043E%u043D%u0432%u0435%u0440%u0442%u0430%u0446%u0438%u0438%20%u043F%u0443%u0442%u0438%20%u0432%20UTF-8%20%u0438%u0437-%u0437%u0430%20%u043A%u043E%u043B%u043B%u0438%u0437%u0438%u0439%20%u043F%u0443%u0442%u0438%20%u0441%u043E%u0434%u0435%u0440%u0436%u0430%u0449%u0435%u0439%20%u043A%u0438%u0440%u0438%u043B%u043B%u0438%u0446%u0443%3A%0A%20%20%20-%20%u0437%u0430%u043F%u0438%u0441%u044C%3A%20cbu.setPrefs%28cEICB%2C%20convertFromUnicode%28%22UTF-8%22%2C%20cPathEI%29%29%0A%20%20%20-%20%u0447%u0442%u0435%u043D%u0438%u0435%3A%20gPrefService.getComplexValue%28cEICB%2C%20Ci.nsISupportsString%29.data%0A%203.%20%u041F%u0440%u0430%u0432%u043A%u0438%20%u043A%u043E%u0442%u043E%u0440%u044B%u0435%20%u044F%20%u0445%u043E%u0442%u0435%u043B%20%u0432%u043D%u0435%u0441%u0442%u0438%20%u0441%202012%20%u0433%u043E%u0434%u0430%2C%20%u0430%20%u043C%u043E%u0436%u0435%u0442%20%u0438%20%u0440%u0430%u043D%u0435%u0435%2C%20%u0442%u043E%u0447%u043D%u043E%20%u043D%u0435%u043F%u043E%u043C%u044E%2C%20%u0441%u0430%u043C%u0443%u044E%20%u043F%u0435%u0440%u0432%u0443%u044E%20%u0432%u0435%u0440%u0441%u0438%u044E%20%u043A%u043D%u043E%u043F%u043A%u0438%0A-------------------------------------------------------------------------------------------------------*/%0A%0A//*********************************************************************%0A//%20----------------%u041C%u043E%u0436%u043D%u043E%20%u043C%u0435%u043D%u044F%u0442%u044C%20%u0437%u043D%u0430%u0447%u0435%u043D%u0438%u044F%20%u043A%u043E%u043D%u0441%u0442%u0430%u043D%u0442%20---------------------%0A//%20------------------------BEGIN%20DEF-----------------------------------%0Aconst%20cEICB%20%3D%20%22Export.Import.CB.type.HTML%22%3B%20//%20%u0416%u0435%u043B%u0430%u0442%u0435%u043B%u044C%u043D%u043E%20%u043D%u0435%20%u0442%u0440%u043E%u0433%u0430%u0442%u044C%2C%20%u0442.%u043A.%20%u0441%u0442%u0430%u0440%u044B%u0435%20%u043A%u043D%u043E%u043F%u043A%u0438%20%u0431%u0443%u0434%u0443%u0442%20%u0441%u0447%u0438%u0442%u044B%u0432%u0430%u0442%u044C%u0441%u044F%20%u0441%20%u043E%u0448%u0438%u0431%u043A%u0430%u043C%u0438%0Aconst%20cPathEI%20%3D%20%22C%3A%5C%5C%22%3B%20//%20%u041D%u0435%u0442%20%u043C%u0435%u043D%u044F%u0442%u044C%2C%20%u0438%u0441%u043F%u043E%u043B%u044C%u0437%u0443%u0435%u0442%u0441%u044F%20%u0434%u043B%u044F%20%u0441%u0431%u0440%u043E%u0441%u0430%20Export.Import.CB.type.HTML%20%0Aconst%20cPrefName%20%3D%20%22Mozilla%20FF%20to%20CB%20%22%3B%20//%20%u043F%u0440%u0435%u0444%u0438%u043A%u0441%20%u0437%u0430%u0433%u043E%u043B%u043E%u0432%u043A%u0430%20%u0434%u043B%u044F%20%u0443%u0442%u043E%u0447%u043D%u0435%u043D%u0438%u044F%20Mozilla%20FireFox%20%u0438%u043B%u0438%20Mozilla%20Thunderbird%0Aconst%20cPathSetMsg%20%3D%20%22%u041D%u0430%u0434%u043E%20%u0443%u0441%u0442%u0430%u043D%u043E%u0432%u0438%u0442%u044C%20%u043F%u0443%u0442%u044C%20%u0434%u043B%u044F%20%u0447%u0442%u0435%u043D%u0438%u044F/%u0437%u0430%u043F%u0438%u0441%u0438%20%u043A%u043D%u043E%u043F%u043E%u043A%22%3B%0Aconst%20csExpT%20%3D%20%22%u042D%u043A%u0441%u043F%u043E%u0440%u0442%20%u043A%u043D%u043E%u043F%u043E%u043A%20%u0432%20HTML%22%3B%0Aconst%20csExpOneT%20%3D%22%u042D%u043A%u0441%u043F%u043E%u0440%u0442%20%u043E%u0434%u043D%u043E%u0439%20%u043A%u043D%u043E%u043F%u043A%u0438%20%u0432%20HTML%22%3B%0Aconst%20csExpOneMsg%20%3D%22%u0412%u044B%u0431%u0435%u0440%u0438%u0442%u0435%20%u0438%u043C%u044F%20%u043A%u043D%u043E%u043F%u043A%u0438%22%3B%20%0Aconst%20csImpT%20%3D%20%22%u0418%u043C%u043F%u043E%u0440%u0442%20%u043A%u043D%u043E%u043F%u043E%u043A%20%u0438%u0437%20HTML%22%3B%0Aconst%20csSetIET%20%3D%20%22%u041A%u0430%u0442%u0430%u043B%u043E%u0433%20%u0434%u043B%u044F%20%u042D%u043A%u0441%u043F%u043E%u0440%u0442%u0430/%u0418%u043C%u043F%u043E%u0440%u0442%u0430%20%u043A%u043D%u043E%u043F%u043E%u043A%20%u0432/%u0438%u0437%20HTML%22%3B%0Aconst%20dProc%20%3D%200.30%3B%20//%20%u043F%u0440%u043E%u0446%u0435%u043D%u0442%20%u043E%u0442%u043A%u0440%u044B%u0442%u0438%u044F%20%u0432%u044B%u0431%u043E%u0440%u0430%20%u043E%u043A%u043D%u0430%20%u043A%u043D%u043E%u043F%u043E%u043A%2C%20%u043F%u0440%u0438%20dProc%20%3D%200.30%20%u044D%u0442%u043E%2030%25%20%u043A%u043D%u043E%u043F%u043E%u043A%20%u043E%u0442%20%u043E%u0431%u0449%u0435%u0433%u043E%20%u0447%u0438%u0441%u043B%u0430%0Aconst%20csNoNameBT%20%3D%20%22%u0414%u043B%u044F%20%u044D%u0442%u043E%u0439%20%u043A%u043D%u043E%u043F%u043A%u0438%20%u043D%u0435%20%u043E%u043F%u0440%u0435%u0434%u0435%u043B%u0435%u043D%u043E%20%u0438%u043C%u044F%22%3B%0Aconst%20csNoBT%20%3D%20%22%u042D%u0442%u043E%20%u043D%u0435%20%u043A%u043D%u043E%u043F%u043A%u0430%22%3B%0Aconst%20spcTn%20%3D%20%22%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%22%3B%0Aconst%20spcTm%20%3D%20%22%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%u041D%u0435%20%u0430%u043A%u0442%u0438%u0432%u043D%u044B%u0435%20%u043A%u043D%u043E%u043F%u043A%u0438%22%3B%0Athis.tooltipText%20%3D%20%22%20%20%u0418%u043C%u043F%u043E%u0440%u0442%20%u0438%20%u042D%u043A%u0441%u043F%u043E%u0440%u0442%20%u043A%u043D%u043E%u043F%u043E%u043A%20%u0438%u0437/%u0432%20HTML-%u0444%u0430%u0439%u043B%5Cn%u2014%u2014%u2014-%u2014%u2014%u2014%u2014%u2014%u2014%u2014%u2014%u2014%u2014%u2014%u2014%u2014%u2014%u2014%u2014%u2014%u2014%5CnShift+Left%20%20%20%20%20%20%20%20%u2014%20%20%u0417%u0430%u043F%u0438%u0441%u044C%20%u043A%u043D%u043E%u043F%u043A%u0438%22+%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22%5CnLeft%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%u2014%20%20%u0417%u0430%u043F%u0438%u0441%u044C%20%u0432%u0441%u0435%u0445%20%u043A%u043D%u043E%u043F%u043E%u043A%22%20+%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22%5CnMiddle%20%20%20%20%20%20%20%20%20%20%20%20%u2014%20%20%u0423%u0441%u0442%u0430%u043D%u043E%u0432%u0438%u0442%u044C%20%u043A%u0430%u0442%u0430%u043B%u043E%u0433%20%u043A%u043D%u043E%u043F%u043E%u043A%22%20+%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22%5CnCtrl+Middle%20%20%20%u2014%20%20%u0421%u0431%u043E%u0441%20%u043A%u0430%u0442%u0430%u043B%u043E%u0433%u0430%20%u043A%u043D%u043E%u043F%u043E%u043A%22%20+%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22%5CnRight%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%u2014%20%20%u0427%u0442%u0435%u043D%u0438%u0435%20%u043A%u043D%u043E%u043F%u043E%u043A%28%u043A%u0438%29%22%3B%0A//%20-------------------------END%20DEF-----------------------------------%0A%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%20UTF-8%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//*********************************************************************%0A%0A%0A//*********************************************************************%0A//%20%u041E%u0431%u0440%u0430%u0431%u043E%u0442%u0447%u0438%u043A%20%u0441%u043E%u0431%u044B%u0442%u0438%u0439%20%u043F%u043E%20%u043D%u0430%u0436%u0430%u0442%u0438%u044E%20%u043A%u043D%u043E%u043F%u043E%u043A%20%u043C%u044B%u0448%u0438%20%u0441/%u0431%u0435%u0437%20%u043C%u043E%u0434%u0438%u0444%u0438%u043A%u0430%u0442%u043E%u0440%u0430%u043C%u0438%0A//*********************************************************************%0Athis.onclick%20%3D%20function%28event%29%20%7B%0A%20%20%20%20if%28event.button%20%3D%3D%200%20%26%26%20event.shiftKey%29%20%7B%0A//%20%u0414%u0435%u0439%u0441%u0442%u0432%u0438%u0435%20%u043F%u0440%u0438%20%u043A%u043B%u0438%u043A%u0435%20shift+%u041B%u041A%u041C%0AshKeylbMouse%28%29%3B%0A%20%20%20%20%7D%0A%20%20%20%20else%20if%28event.button%20%3D%3D%200%29%20%7B%0A//%20%u0414%u0435%u0439%u0441%u0442%u0432%u0438%u0435%20%u043F%u0440%u0438%20%u043A%u043B%u0438%u043A%u0435%20%u041B%u041A%u041C%0AlbMouse%28%29%3B%0A%20%20%20%20%7D%0A%20%20%20%20else%20if%28event.button%20%3D%3D%201%20%26%26%20event.ctrlKey%29%0A%20%20%20%20%7B%0A%09ctrlKeymbMouse%28%29%3B%0A%20%20%20%20%7D%20%20%20%20%0A%20%20%20%20else%20if%28event.button%20%3D%3D%201%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%0AmbMouse%28%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%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%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%0ArbMouse%28%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%21event.ctrlKey%20%26%26%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%0A//*********************************************************************%0A//%u0421%u0431%u0440%u043E%u0441%u0438%u0442%u044C%20%u043A%u0430%u0442%u0430%u043B%u043E%u0433%20%u0437%u0430%u043F%u0438%u0441%u0438/%u0447%u0442%u0435%u043D%u0438%u044F%2C%20%u0435%u0441%u043B%u0438%20%u043E%u043D%20%u0443%u0441%u0442%u0430%u043D%u043E%u0432%u043B%u0435%u043D%0Afunction%20ctrlKeymbMouse%28%29%7B%0A%09cbu.setPrefs%28cEICB%2C%20convertFromUnicode%28%22UTF-8%22%2C%20cPathEI%29%20%29%3B%0A%09custombuttons.%20alertBox%20%28cEICB%2C%20%22%u0421%u0431%u0440%u043E%u0441%20-%20%22+cEICB+%22%20%3D%20%22+cPathEI%29%3B%0A%7D%3B%0A%0A//*********************************************************************%0A//%u0417%u0430%u043F%u0438%u0441%u044C%20%u043E%u0434%u043D%u043E%u0439%20%u043A%u043D%u043E%u043F%u043A%u0438%20%u043F%u043E%20%u0432%u044B%u0431%u043E%u0440%u0443%0Afunction%20shKeylbMouse%28%29%7B%0A%0Aif%20%28chkPath%28gPrefService.getComplexValue%28cEICB%2C%20Ci.nsISupportsString%29.data%29%20%21%3D%201%29%0A%20%20%20%7B%0A%20%20%20custombuttons.%20alertBox%20%28csExpT%2C%20cPathSetMsg%29%3B%0A%20%20%20return%3B%0A%20%20%20%7D%0A%0Avar%20name%20%3D%20%5B%5D%3B%20//%u043C%u0430%u0441%u0441%u0438%u0432%20%u0438%u043C%u0451%u043D%20%u043A%u043D%u043E%u043F%u043E%u043A%20%u0434%u043B%u044F%20%u0432%u044B%u0432%u043E%u0434%u0430%0Avar%20namea%20%3D%20%5B%5D%3B%20//%u043C%u0430%u0441%u0441%u0438%u0432%20%u0438%u043C%u0451%u043D%20%u043A%u043D%u043E%u043F%u043E%u043A%20%u0430%u043A%u0442%u0438%u0432%u043D%u044B%u0445%0Avar%20namep%20%3D%20%5B%5D%3B%20//%u043C%u0430%u0441%u0441%u0438%u0432%20%u0438%u043C%u0451%u043D%20%u043A%u043D%u043E%u043F%u043E%u043A%20%u043D%u0435%20%u0430%u043A%u0442%u0438%u0432%u043D%u044B%u0445%0Avar%20i%2Cj%2C%20buts%3B%0A%0Abuts%20%3D%20document.%20getElementsByTagName%20%28%22toolbarbutton%22%29%3B%0Afor%20%28i%20%3D%200%2C%20j%20%3D%200%3B%20i%20%3C%20buts.%20length%3B%20i++%29%0A%20%20%20%20if%20%28buts%5Bi%5D.getAttribute%28%22id%22%29.indexOf%28%22custombuttons-button%22%29%3D%3D0%20%26%26%20typeof%28buts%20%5Bi%5D.name%29%3D%3D%22string%22%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20namea%5Bj++%5D%20%3D%20buts%20%5Bi%5D.%20name%3B%0Anamea.sort%28cmp%29%3B%0Anamea.splice%28j%2C0%2CspcTn%2CspcTm%2CspcTn%29%3B%0A%0Abuts%20%3D%20custombuttons.%20palette.%20getElementsByTagName%20%28%22toolbarbutton%22%29%3B%0Afor%20%28%20i%20%3D%200%2C%20j%20%3D%200%3B%20i%20%3C%20buts.%20length%3B%20i++%29%0A%20%20%20%20if%20%28buts%20%5Bi%5D.%20getAttribute%20%28%22id%22%29.%20indexOf%20%28%22custombuttons-button%22%29%20%3D%3D%200%26%26typeof%28buts%20%5Bi%5D.getAttribute%20%28%22label%22%29%29%3D%3D%22string%22%29%0A%20%20%20%20%20%20%20%20%20%20%20%20namep%5Bj++%5D%20%3D%20buts%20%5Bi%5D.%20getAttribute%20%28%22label%22%29%3B%0A%0Anamep.sort%28cmp%29%3B%0Aname%3Dnamea.concat%28namep%29%3B%0A%0A//%20%u041E%u0442%u043A%u0440%u044B%u0442%u0438%u0435%20%u043C%u043E%u0434%u0430%u043B%u044C%u043D%u043E%u0433%u043E%20%u043E%u043A%u043D%u0430%20%u0432%u044B%u0431%u043E%u0440%u0430%20%u0438%u043C%u0451%u043D%20%u043A%u043D%u043E%u043F%u043E%u043A%20%u0441%20%u0443%u0447%u0451%u0442%u043E%u043C%20%u043E%u0431%u0449%u0435%u0433%u043E%20%u0447%u0438%u0441%u043B%u0430%20%u043A%u043D%u043E%u043F%u043E%u043A%0Avar%20rowsCount%20%3D%20name.length%20*%20dProc%3B%20%0Avar%20oSvc%20%3D%20Components.classes%5B%22@mozilla.org/observer-service%3B1%22%5D%0A%20%20%20%20.getService%28Components.interfaces.nsIObserverService%29%3B%0Avar%20observer%20%3D%20%7B%0A%20%20%20%20added%3A%20true%2C%0A%20%20%20%20observe%3A%20function%28subject%2C%20topic%2C%20data%29%20%7B%0A%20%20%20%20%20%20%20%20subject.addEventListener%28%22load%22%2C%20this%2C%20false%29%3B%0A%20%20%20%20%7D%2C%0A%20%20%20%20handleEvent%3A%20function%28e%29%20%7B%0A%20%20%20%20%20%20%20%20var%20doc%20%3D%20e.target%3B%0A%20%20%20%20%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%20%20%20%20%20%20%20%20if%28doc.location.href%20%21%3D%20%22chrome%3A//global/content/selectDialog.xul%22%29%0A%20%20%20%20%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20%20%20%20%20oSvc.removeObserver%28this%2C%20%22domwindowopened%22%29%3B%0A%20%20%20%20%20%20%20%20this.added%20%3D%20false%3B%0A%20%20%20%20%20%20%20%20var%20list%20%3D%20doc.getElementById%28%22list%22%29%3B%0A%20%20%20%20%20%20%20%20if%28list%29%0A%20%20%20%20%20%20%20%20%20%20%20%20list.setAttribute%28%22rows%22%2C%20rowsCount%29%3B%0A%20%20%20%20%7D%0A%7D%3B%0AoSvc.addObserver%28observer%2C%20%22domwindowopened%22%2C%20false%29%3B%0A%0Avar%20selected%20%3D%20%7B%7D%3B%0Avar%20bRt%20%3D%20Components.classes%5B%22@mozilla.org/embedcomp/prompt-service%3B1%22%5D%0A%20%20%20%20%20%20%20%20.getService%28Components.interfaces.nsIPromptService%29%0A%20%20%20%20%20%20%20%20.select%28window%2C%20csExpOneT%2C%20csExpOneMsg%2C%20name.length%2C%20name%2C%20selected%20%29%0Aobserver.added%20%26%26%20oSvc.removeObserver%28observer%2C%20%22domwindowopened%22%29%3B%0A%0Aif%20%28%21bRt%29%20return%3B%20//%20%u041E%u0442%u043C%u0435%u043D%u0430%20-%20%u0432%u044B%u0445%u043E%u0434%0A%20else%20if%20%28spcTm%3D%3Dname%5Bselected.value%5D%7C%7CspcTn%3D%3Dname%5Bselected.value%5D%29%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20custombuttons.%20alertBox%20%28csExpOneT%2C%20csNoBT%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%20%0A%20else%20if%20%28name%5Bselected.value%5D%3D%3D%22%22%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20custombuttons.%20alertBox%20%28csExpOneT%2C%20csNoNameBT%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%20%20%20%20%20%20%20%20%20%20%0A%20%0A//OK%20%20-%20%u043D%u0430%u0447%u0438%u043D%u0430%u0435%u043C%20%u043E%u0431%u0440%u0430%u0431%u043E%u043A%u0443%20%u0438%20%u0437%u0430%u043F%u0438%u0441%u044C%20%u0432%u044B%u0431%u0440%u0430%u043D%u043D%u043E%u0439%20%u043A%u043D%u043E%u043F%u043A%u0438%0Avar%20mydir%3DgPrefService.getComplexValue%28cEICB%2C%20Ci.nsISupportsString%29.data%2C%20myfilename%3Dname%20%5Bselected.value%5D%3B%0A%20%20var%20fp%20%3D%20Components.classes%5B%22@mozilla.org/filepicker%3B1%22%5D%0A%20%20%20%20%20%20%20%20%20%20.createInstance%28Components.interfaces.nsIFilePicker%29%3B%0A%20%20fp.init%28window%2C%20csExpOneT%2C%20fp.modeSave%29%3B%0A%20%20var%20dd%20%3D%20Components.classes%5B%22@mozilla.org/file/local%3B1%22%5D%0A%20%20%20%20%20%20%20%20%20.createInstance%28Components.interfaces.nsILocalFile%29%3B%0Add.initWithPath%28mydir%29%3B%20//%u041F%u0443%u0442%u044C%20%u043A%u043E%u0442%u043E%u0440%u044B%u0439%20%u0443%u0441%u0442%u0430%u043D%u043E%u0432%u043B%u0435%u043D%0Afp.displayDirectory%20%3D%20dd%3B%0Afp.defaultString%20%3D%20cPrefName+myfilename+%22.html%22%3B%0Aif%28fp.show%28%29%20%21%3D%20fp.returnCancel%29%0A%20%20%20%20%20%20%20%20custombuttons.%20alertBox%20%28csExpOneT%2C%20%22%u041A%u043D%u043E%u043F%u043A%u0430%20%22+myfilename+%22%20%u0441%u043E%u0445%u0440%u0430%u043D%u0435%u043D%u0430%20%u0432%20%5Cn%22+%20saveCB%28fp.file.path%2C%20myfilename%29%29%3B%0A%0A//******%20DefSub%0A//%u0421%u043E%u0440%u0442%u0438%u0440%u043E%u0432%u043A%u0430%20%u0441%u0442%u0440%u043E%u043A%20%u043F%u043E%20%u0432%u043E%u0437%u0440%u0430%u0441%u0442%u0430%u043D%u0438%u044E%0Afunction%20cmp%28a%2C%20b%29%20%7B%0A%20%20if%20%28a.toUpperCase%28%29%20%3E%20b.toUpperCase%28%29%29%20return%201%3B%0A%20%20if%20%28a.toUpperCase%28%29%20%3C%20b.toUpperCase%28%29%29%20return%20-1%3B%0A%20%20return%200%3B%0A%7D%3B%0A//******%20EndDefSub%0A%0A%7D%3B%0A%0A//*********************************************************************%0A//%u0417%u0430%u043F%u0438%u0441%u0430%u0442%u044C%20%u043A%u043D%u043E%u043F%u043A%u0438%0Afunction%20lbMouse%28%29%7B%0Aif%20%28chkPath%28gPrefService.getComplexValue%28cEICB%2C%20Ci.nsISupportsString%29.data%29%20%21%3D%201%29%20custombuttons.%20alertBox%20%28csExpT%2C%20cPathSetMsg%29%3B%0A%20else%20%20%7B%0Avar%20mydir%3DgPrefService.getComplexValue%28cEICB%2C%20Ci.nsISupportsString%29.data%2C%20myfilename%20%3D%20GenFileName%28%29%3B%0A%20%20var%20fp%20%3D%20Components.classes%5B%22@mozilla.org/filepicker%3B1%22%5D%0A%20%20%20%20%20%20%20%20%20%20.createInstance%28Components.interfaces.nsIFilePicker%29%3B%0A%20%20fp.init%28window%2C%20csExpT%2C%20fp.modeSave%29%3B%0A%20%20var%20dd%20%3D%20Components.classes%5B%22@mozilla.org/file/local%3B1%22%5D%0A%20%20%20%20%20%20%20%20%20.createInstance%28Components.interfaces.nsILocalFile%29%3B%0Add.initWithPath%28mydir%29%3B%20//%u041F%u0443%u0442%u044C%20%u043A%u043E%u0442%u043E%u0440%u044B%u0439%20%u0443%u0441%u0442%u0430%u043D%u043E%u0432%u043B%u0435%u043D%0Afp.displayDirectory%20%3D%20dd%3B%0Afp.defaultString%20%3D%20myfilename%3B%0Aif%28fp.show%28%29%20%21%3D%20fp.returnCancel%29%0A%20%20%20%20%20%20%20%20custombuttons.%20alertBox%20%28csExpT%2C%20%22%u041D%u0430%u0431%u043E%u0440%20%u043A%u043D%u043E%u043F%u043E%u043A%20%u0441%u043E%u0445%u0440%u0430%u043D%u0451%u043D%20%u0432%20%5Cn%22+%20saveCB%28fp.file.path%2C%20%22%22%29%29%3B%0A%20%20%7D%0A%7D%3B%0A%0A//*********************************************************************%0A//%u0421%u0447%u0438%u0442%u0430%u0442%u044C%20%u043A%u043D%u043E%u043F%u043A%u0438%0Afunction%20rbMouse%28%29%7B%0Aif%20%28chkPath%28gPrefService.getComplexValue%28cEICB%2C%20Ci.nsISupportsString%29.data%29%20%21%3D%201%29%20custombuttons.%20alertBox%20%28csImpT%2C%20cPathSetMsg%29%3B%0A%20%20else%0A%20%20%7B%0A%20%20%20var%20mydir%3DgPrefService.getComplexValue%28cEICB%2C%20Ci.nsISupportsString%29.data%3B%20//%2C%20myfilename%20%3D%20GenFileName%28%29%3B%0A%20%20%20var%20fp%20%3D%20Components.classes%5B%22@mozilla.org/filepicker%3B1%22%5D%0A%20%20%20%20%20%20.createInstance%28Components.interfaces.nsIFilePicker%29%3B%0A%20%20%20fp.init%28window%2C%20csImpT%2C%20fp.modeOpen%29%3B%0A%20%20%20var%20dd%20%3D%20Components.classes%5B%22@mozilla.org/file/local%3B1%22%5D%0A%20%20%20%20%20%20%20.createInstance%28Components.interfaces.nsILocalFile%29%3B%0A%20%20%20dd.initWithPath%28mydir%29%3B%0A%20%20%20fp.displayDirectory%20%3D%20dd%3B%0A%20%20%20if%28fp.show%28%29%20%21%3D%20fp.returnCancel%29%20getBrowser%20%28%29.%20selectedTab%20%3D%20getBrowser%20%28%29.%20addTab%20%28fp.file.path%29%3B%0A%20%20%7D%0A%7D%3B%0A%0A%0A//*********************************************************************%0A//%u0423%u0441%u0442%u0430%u043D%u043E%u0432%u0438%u0442%u044C%20%u043A%u0430%u0442%u0430%u043B%u043E%u0433%20%u0437%u0430%u043F%u0438%u0441%u0438/%u0447%u0442%u0435%u043D%u0438%u044F%0Afunction%20mbMouse%28%29%7B%0Avar%20sPathEI%3DgPrefService.getComplexValue%28cEICB%2C%20Ci.nsISupportsString%29.data%2C%20myfilename%20%3D%20GenFileName%28%29%3B%0Aif%20%28chkPath%28sPathEI%29%20%3D%3D%20-1%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20custombuttons.%20alertBox%20%28csSetIET%2C%20%22%u043F%u0435%u0440%u0435%u043C%u0435%u043D%u043D%u0430%u044F%20%20%20%22+cEICB+%22%20%u0443%u0436%u0435%20%u0441%u0443%u0449%u0435%u0441%u0442%u0432%u0443%u0435%u0442%20%u0438%20%u0437%u0430%u043D%u044F%u0442%u0430%22%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%3B%20//%u041D%u0435%u043B%u044C%u0437%u044F%20%u0441%u043E%u0437%u0434%u0430%u0432%u0430%u0442%u044C%20%u0442%u043A%20%u043F%u0435%u0440%u0435%u043C%u0435%u043D%u043D%u0430%u044F%20%u0443%u0436%u0435%20%u0437%u0430%u043D%u044F%u0442%u0430%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%3B%0A//%20%u0414%u0438%u0430%u043B%u043E%u0433%20%u0441%u043E%u0437%u0434%u0430%u043D%u0438%u044F%20%u0438%20%u0443%u0441%u0442%u0430%u043D%u043E%u0432%u043A%u0438%20%u043F%u0443%u0442%u0438%0Avar%20fp%20%3D%20Components.classes%5B%22@mozilla.org/filepicker%3B1%22%5D%0A%20%20%20%20.createInstance%28Components.interfaces.nsIFilePicker%29%3B%0Afp.init%28window%2C%20csSetIET%2C%20fp.modeGetFolder%29%3B%0Avar%20dd%20%3D%20Components.classes%5B%22@mozilla.org/file/local%3B1%22%5D%0A%20%20%20%20.createInstance%28Components.interfaces.nsILocalFile%29%3B%0Add.initWithPath%28sPathEI%29%3B%0Afp.displayDirectory%20%3D%20dd%3B%0Aif%28fp.show%28%29%20%3D%3D%20fp.returnCancel%29%20return%3B%0A%20%20%20else%0A%20%20%20%20%7B%0A%20%20%20%20sPathEI%20%3D%20fp.file.path%0A%20%20%20%20sPathEI+%3D%28sPathEI%5BsPathEI.length-1%5D%20%21%3D%20%22%5C%5C%22%29%3F%22%5C%5C%22%3A%22%22%0A%20%20%20%20cbu.setPrefs%28cEICB%2C%20convertFromUnicode%28%22UTF-8%22%2C%20sPathEI%29%29%0A%20%20%20%20//cbu.setPrefs%28cEICB%2C%20sPathEI+%3D%28sPathEI%5BsPathEI.length-1%5D%20%21%3D%20%22%5C%5C%22%29%3F%22%5C%5C%22%3A%22%22%29%3B%0A%20%20%20%20custombuttons.%20alertBox%20%28csSetIET%2C%20%22%u0423%u0441%u0442%u0430%u043D%u043E%u0432%u043B%u0435%u043D%20%u043F%u0443%u0442%u044C%20%u0434%u043B%u044F%20%u0437%u0430%u043F%u0438%u0441%u0438/%u0447%u0442%u0435%u043D%u0438%u044F%20%5Cn%20%22%20+%20sPathEI%29%3B%0A%20%20%20%20%7D%0A%7D%3B%0A%0A//*********************************************************************%0A//chkPath%20%u043F%u0440%u043E%u0432%u0435%u0440%u044F%u0435%u0442%20%u043F%u0443%u0442%u044C%20%u0438%20%u0442%u0434%2C%20%u043C%u043E%u0436%u043D%u043E%20%u0434%u043E%u0431%u043E%u0432%u043B%u044F%u0442%u044C%20%u043F%u0440%u043E%u0432%u0435%u0440%u043A%u0438%2C%20%u0442%u043A%20%u043D%u0435%20%u0432%u0441%u0451%20%u043F%u0440%u043E%u0432%u0435%u0440%u044F%u0435%u0442%u0441%u044F.%0A//return%20%3D%20-2%20%20%u043E%u0448%u0438%u0431%u043E%u0447%u043D%u044B%u0439%20%u043F%u0443%u0442%u044C%20%u0438%u043B%u0438%20%u0435%u0433%u043E%20%u043D%u0435%20%u0441%u0443%u0449%u0435%u0441%u0442%u0432%u0443%u0435%u0442%20%28%u043F%u043E%u0447%u0442%u0438%20%u043D%u0435%20%u0438%u0441%u043F%u043E%u043B%u044C%u0437%u0443%u0435%u0442%u0441%u044F%29%0A//%20return%20%3D%20-1%20%u043E%u0448%u0438%u0431%u043A%u0430%20%u043D%u0430%u0441%u0442%u0440%u043E%u0439%u043A%u0438%20%28%u0434%u043B%u044F%20%u0441%u043E%u0432%u043C%u0435%u0441%u0442%u0438%u043C%u043E%u0441%u0442%u0438%29%0A//%20return%20%3D%200%20%20%u0442%u0440%u0435%u0431%u0443%u0435%u0442%u0441%u044F%20%u0441%u043E%u0437%u0434%u0430%u0442%u044C%20%u0438%20%u043E%u043F%u0440%u0435%u0434%u0435%u043B%u0438%u0442%u044C%20%u043F%u0443%u0442%u044C%0A//%20return%20%3D%201%20%20%u0432%u0441%u0451%20%u041E%u041A%0A%0Afunction%20chkPath%28cPth%29%7B%0Avar%20vPth%20%3D%20gPrefService.getComplexValue%28cEICB%2C%20Ci.nsISupportsString%29.data%20//%u043F%u0440%u0435%u0434%u0443%u0441%u0442%u0430%u043D%u043E%u0432%u043A%u0430%0Aif%20%28vPth%20%3D%3D%20%22%22%29%7B%0A%20%20%20%20%20%20%20cbu.setPrefs%28cEICB%2C%20convertFromUnicode%28%22UTF-8%22%2C%20cPathEI%29%29%3B%20//%20%u0421%u043E%u0437%u0434%u0430%u043B%u0438%20%u0438%20%u043F%u0443%u0442%u044C%20%u043F%u043E%20%u0443%u043C%u043E%u043B%u0447%u0430%u043D%u0438%u044E%20%u0438%u0437%20%u043E%u043F%u0440%u0435%u0434%u0435%u043B%u0435%u043D%u0438%u044F%0A%20%20%20%20%20%20%20res%20%3D%201%3B%20//%u041F%u0435%u0440%u0435%u043C%u0435%u043D%u043D%u0430%u044F%20%u0441%u0443%u0449%u0435%u0441%u0442%u0432%u0443%u0435%u0442%20%u0438%20%u043E%u043F%u0440%u0435%u0434%u0435%u043B%u0435%u043D%u0430%0A%20%20%20%20%20%20%20%7D%0A%20else%20if%20%28typeof%28vPth%29%20%21%3D%20%22string%22%29%0A%20%20%20%20%20%20%20res%20%3D%20-1%3B%20//%u041F%u0435%u0440%u0435%u043C%u0435%u043D%u043D%u0430%u044F%20%u043E%u043F%u0440%u0435%u0434%u0435%u043B%u0435%u043D%u0430%20%u0438%20%u043D%u0435%20%u0442%u043E%u0433%u043E%20%u0442%u0438%u043F%u0430%2C%20%u0437%u043D%u0430%u0447%u0438%u0442%20%u043E%u043D%u0430%20%u043D%u0435%20%u043D%u0430%u0448%u0430%0A%20%20%20else%20%7B%0A%20%20%20%20%20%20%20%20//%u041F%u0440%u043E%u0431%u0443%u0435%u043C%20%u043F%u0440%u043E%u0432%u0435%u0440%u0438%u0442%u044C%20%u043F%u0443%u0442%u044C%20-%20%u043E%u0442%u0432%u0435%u0442%20%u0432%20%u0438%u0441%u043A%u043B%u044E%u0447%u0435%u043D%u0438%u0438.%0A%20%20%20%20%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%20%20%20%20%20%20%20%20%20createInstance%28Components.interfaces.nsILocalFile%29%3B%0A%20%20%20%20try%20%7B%0A%20%20%20%20%20%20%20%20file.initWithPath%28cPth%29%3B%0A%20%20%20%20%20%20%20%20%20if%20%28%21file.isDirectory%28%29%20%29%20res%20%3D%200%3B%20//%u0422%u0430%u043A%u043E%u0433%u043E%20%u043F%u0443%u0442%u0438%20%u043D%u0435%u0442%20%u043D%u0430%u0434%u043E%20%u0441%u043E%u0437%u0434%u0430%u0432%u0430%u0442%u044C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20else%20%20res%20%3D%201%3B%20//%20%u041F%u0443%u0442%u044C%20%u0435%u0441%u0442%u044C%0A%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20catch%28e%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20res%20%3D%20-2%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%0A%20return%20res%3B%0A%7D%3B%0A%0A//*********************************************************************%0A//%u0413%u0435%u043D%u0435%u0440%u0430%u0446%u0438%u044F%20%u0438%u043C%u0435%u043D%u0438%20%u0444%u0430%u0439%u043B%u0430%20%u043F%u0440%u0438%20%u0437%u0430%u043F%u0438%u0441%u0438%20%u0432%u0441%u0435%u0445%20%u043A%u043D%u043E%u043F%u043E%u043A%0Afunction%20GenFileName%28%29%7B%0Avar%20t%3Dnew%20Date%28%29%3B%0Avar%20y%3D1900+t.getYear%28%29%3B%0Avar%20min%3Dt.getMinutes%28%29%3B%20if%20%28min%3C10%29%7Bmin%3D%220%22+min%7D%3B%0Avar%20h%3Dt.getHours%28%29%3B%20%20if%20%28h%3C10%29%7Bh%3D%220%22+h%7D%3B%0Avar%20m%3Dt.getMonth%28%29%3B%0Avar%20d%3Dt.getDate%28%29%3B%0Avar%20indDM%20%3D%20d+%2831*m-31%29%3B%20%20%0Aswitch%28m%29%7Bcase%200%3A%20m%3D%22Jan%22%3Bbreak%3Bcase%201%3A%20m%3D%22Feb%22%3Bbreak%3Bcase%202%3A%20m%3D%22Mar%22%3Bbreak%3Bcase%203%3A%20m%3D%22Apr%22%3Bbreak%3Bcase%204%3A%20m%3D%22May%22%3Bbreak%3Bcase%205%3A%20m%3D%22June%22%3Bbreak%3Bcase%206%3A%20m%3D%22July%22%3Bbreak%3Bcase%207%3A%20m%3D%22Aug%22%3Bbreak%3Bcase%208%3A%20m%3D%22Sept%22%3Bbreak%3Bcase%209%3A%20m%3D%22Oct%22%3Bbreak%3Bcase%2010%3A%20m%3D%22Nov%22%3Bbreak%3Bdefault%3A%20m%3D%22Dec%22%3B%7D%0Aif%20%28d%3C10%29%7Bd%3D%220%22+d%7D%3B%0A//if%20%28m%3C10%29%7Bm%3D%220%22+m%7D%3B%0A//y%20%3D%20y%20-%202000%3B%0Ay.toString%20%28%29%0A//var%20curdate%3D%20d%20+%20%22.%22%20+m+%20%22%28%22%20+h+%20%22.%22%20+min+%20%22%29%22%3B%0Avar%20curdate%3D%20y%20+%20%22%20%22%20+indDM+%20%22%28%22%20+h+%20%22.%22%20+min+%20%22%29%22%3B%0A//var%20myfilename%20%3D%20cPrefName+%20y%22%20id%3D%22%20+y+%20indDM%20+%22%20%22+%20curdate%20+%22.html%22%3B%0Avar%20myfilename%20%3D%20cPrefName+%20curdate%20+%22.html%22%3B%0Areturn%20myfilename%3B%0A%7D%3B%0A%0A//*********************************************************************%0A//%20%u0424%u0443%u043D%u043A%u0446%u0438%u044F%20%u0437%u0430%u043F%u0438%u0441%u0438%20%u043A%u043D%u043E%u043F%u043E%u043A%20%u0432%20HTML-%u0444%u0430%u0439%u043B%0A//*********************************************************************%0A//%u0417%u0430%u043F%u0438%u0441%u044C%20%u043A%u043D%u043E%u043F%u043E%u043A%20%u0432%20HTML%20%u0444%u0430%u0439%u043B%0Afunction%20saveCB%28fullfilepath%2C%20nameCB%29%7B%0Avar%20bu%3D%22%22%2C%20buts%2C%20doc%2C%20name%2C%20image%2C%20uri%2C%20mode%2C%20code%2C%20initCode%2C%20accelkey%2C%20help%3B%0A%0AVisibleConv%20%28nameCB%29%3B%0AAllConv%28nameCB%29%3B%0A%0A//var%20uc%20%3D%20Components.%20classes%20%5B%22@mozilla.org/intl/scriptableunicodeconverter%22%5D.%20createInstance%20%28Components.%20interfaces.%20nsIScriptableUnicodeConverter%29%3B%0A//uc.%20charset%20%3D%20%22utf-8%22%3B%0A//bu%20%3D%20uc.%20ConvertFromUnicode%20%28bu%29%3B%0Avar%20head%20%3D%20%22%3Chtml%3E%5Cn%3Chead%3E%5Cn%3Cmeta%20http-equiv%3D%27Content-Type%27%20content%3D%27text/html%3B%20charset%3Dutf-8%27%3E%5Cn%3C/head%3E%5Cn%3Cbody%3E%5Cn%22%3B%0Avar%20fileend%20%3D%20%22%5Cn%3C/body%3E%5Cn%3C/html%3E%22%0Avar%20htmlSource%20%3D%20head%20+%20bu%20+%20fileend%3B%0A%0Avar%20filedata%3DhtmlSource%3B%0A%0Avar%20file%20%3D%20Components.classes%5B%22@mozilla.org/file/local%3B1%22%5D.%0A%20%20%20%20%20%20%20%20%20%20%20createInstance%28Components.interfaces.nsILocalFile%29%3B%0Afile.initWithPath%28fullfilepath%29%3B%0Avar%20foStream%20%3D%20Components.classes%5B%22@mozilla.org/network/file-output-stream%3B1%22%5D.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20createInstance%28Components.interfaces.nsIFileOutputStream%29%3B%0A%0AfoStream.init%28file%2C%200x02%20%7C%200x08%20%7C%200x20%2C%200666%2C%200%29%3B%0Avar%20converter%20%3D%20Components.classes%5B%22@mozilla.org/intl/converter-output-stream%3B1%22%5D.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20createInstance%28Components.interfaces.nsIConverterOutputStream%29%3B%0Aconverter.init%28foStream%2C%20%22UTF-8%22%2C%200%2C%200%29%3B%0Aconverter.writeString%28filedata%29%3B%0Aconverter.close%28%29%3B%0Areturn%20fullfilepath%3B%0A%0A//*********************************************************************%0A//%u041F%u043E%u0434%u043F%u0440%u043E%u0433%u0440%u0430%u043C%u043C%u044B%20%u0434%u043B%u044F%20function%20saveCB%0A//*********************************************************************%0A//******DefSub%0A%0A//*********************************************************************%0Afunction%20VisibleConv%28nameCB%29%20%0A%7B%0Abuts%20%3D%20document.%20getElementsByTagName%20%28%22toolbarbutton%22%29%3B%0Afor%20%28var%20i%20%3D%200%3B%20i%20%3C%20buts.%20length%3B%20i++%29%0A%7B%0A%20%20%20%20if%20%28buts%20%5Bi%5D.getAttribute%20%28%22id%22%29.%20indexOf%20%28%22custombuttons-button%22%29%20%3D%3D%200%29%0A%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20name%20%3D%20buts%20%5Bi%5D.%20name%3B%0A%20%20%20%20%20%20%20%20if%20%28nameCB%21%3D%22%22%26%26nameCB%21%3Dname%29%20continue%3B%0A%20%20%20%20%20%20%20%20image%20%3D%20buts%20%5Bi%5D.%20image%20%7C%7C%20buts%20%5Bi%5D.%20cbStdIcon%3B%0A%20%20%20%20%20%20%20%20uri%20%3D%20buts%20%5Bi%5D.%20URI%3B%0A%20%20%20%20%20%20%20%20bu%20+%3D%22%3Cimg%20src%3D%22%20+%20image%20+%20%22%3E%26nbsp%3Ca%20href%3D%22%20+%20uri%20+%20%22%3E%22%20+%20name%20+%22%3C/a%3E%3Cbr%3E%5Cn%22%3B%0A%20%20%20%20%7D%0A%7D%0Abu%20+%3D%22%3Chr%3E%22%3B%0A%7D%3B%0A%0A//*********************************************************************%0Afunction%20AllConv%28nameCB%29%0A%7B%0Abuts%20%3D%20custombuttons.%20palette.%20getElementsByTagName%20%28%22toolbarbutton%22%29%3B%0Afor%20%28var%20i%20%3D%200%3B%20i%20%3C%20buts.%20length%3B%20i++%29%0A%7B%0A%20%20%20%20if%20%28buts%20%5Bi%5D.%20getAttribute%20%28%22id%22%29.%20indexOf%20%28%22custombuttons-button%22%29%20%3D%3D%200%29%0A%20%20%20%20%7B%0A//%20%u0418%u043C%u044F%20%u043A%u043D%u043E%u043F%u043A%u0438%20%u0432%20UTF-8%0A%20%20%20%20%20%20%20%20name%20%3D%20buts%20%5Bi%5D.%20getAttribute%20%28%22label%22%29%3B%0A%20%20%20%20%20%20%20%20if%20%28nameCB%21%3D%22%22%26%26nameCB%21%3Dname%29%20continue%3B%0A//%20%20%20%20%20%20%20%20var%20uc%20%3D%20Components.%20classes%20%5B%22@mozilla.org/intl/scriptableunicodeconverter%22%5D.%20createInstance%20%28Components.%20interfaces.%20nsIScriptableUnicodeConverter%29%3B%0A//%20%20%20%20%20%20%20%20uc.%20charset%20%3D%20%22utf-8%22%3B%0A//%20%20%20%20%20%20%20%20name%20%3D%20uc.%20ConvertFromUnicode%20%28name%29%3B%0A%0A//%20BASE64%20%u0432%20UTF-8%0A%20%20%20%20%20%20%20%20image%20%3D%20buts%20%5Bi%5D.%20getAttribute%20%28%22image%22%29%20%7C%7C%20buts%20%5Bi%5D.%20getAttribute%20%28%22cb-stdicon%22%29%3B%0A%20%20%20%20%20%20%20%20var%20uc%20%3D%20Components.%20classes%20%5B%22@mozilla.org/intl/scriptableunicodeconverter%22%5D.%20createInstance%20%28Components.%20interfaces.%20nsIScriptableUnicodeConverter%29%3B%0A%20%20%20%20%20%20%20%20uc.%20charset%20%3D%20%22utf-8%22%3B%0A%20%20%20%20%20%20%20%20image%20%3D%20uc.%20ConvertFromUnicode%20%28image%29%3B%0A%0A%20%20%20%20%20%20%20%20mode%20%3D%20buts%20%5Bi%5D.%20getAttribute%20%28%22cb-mode%22%29%3B%0A%20%20%20%20%20%20%20%20code%20%3D%20buts%20%5Bi%5D.%20getAttribute%20%28%22cb-oncommand%22%29%3B%0A%20%20%20%20%20%20%20%20initCode%20%3D%20buts%20%5Bi%5D.%20getAttribute%20%28%22cb-init%22%29%3B%0A%20%20%20%20%20%20%20%20accelkey%20%3D%20buts%20%5Bi%5D.%20getAttribute%20%28%22cb-accelkey%22%29%3B%0A%20%20%20%20%20%20%20%20help%20%3D%20buts%20%5Bi%5D.%20getAttribute%20%28%22Help%22%29%20%7C%7C%20buts%20%5Bi%5D.%20getAttribute%20%28%22help%22%29%20%7C%7C%20%22%22%3B%0A%20%20%20%20%20%20%20%20doc%20%3D%20document.%20implementation.%20createDocument%20%28%22%22%2C%20%22%22%2C%20null%29%3B%0A%20%20%20%20%20%20%20%20doc.%20async%20%3D%20false%3B%0A%20%20%20%20%20%20%20%20doc.%20load%20%28%22chrome%3A//custombuttons/content/nbftemplate.xml%22%29%3B%0A%20%20%20%20%20%20%20%20setText%20%28doc%2C%20%22name%22%2C%20name%2C%20false%29%3B%0A%20%20%20%20%20%20%20%20setText%20%28doc%2C%20%22mode%22%2C%20mode%2C%20false%29%3B%0A%20%20%20%20%20%20%20%20setText%20%28doc%2C%20%22image%22%2C%20image%2C%20true%29%3B%0A%20%20%20%20%20%20%20%20setText%20%28doc%2C%20%22code%22%2C%20code%2C%20true%29%3B%0A%20%20%20%20%20%20%20%20setText%20%28doc%2C%20%22initcode%22%2C%20initCode%2C%20true%29%3B%0A%20%20%20%20%20%20%20%20setText%20%28doc%2C%20%22accelkey%22%2C%20accelkey%2C%20true%29%3B%0A%20%20%20%20%20%20%20%20setText%20%28doc%2C%20%22help%22%2C%20help%2C%20true%29%3B%0A%20%20%20%20%20%20%20%20var%20ser%20%3D%20new%20XMLSerializer%20%28%29%3B%0A%20%20%20%20%20%20%20%20var%20data%20%3D%20ser.%20serializeToString%20%28doc%29%3B%0A%20%20%20%20%20%20%20%20uri%20%3D%20%22custombutton%3A//%22%20+%20escape%20%28data%29%3B%0A%20%20%20%20%20%20%20%20bu+%3D%22%3Cimg%20src%3D%22%20+%20image%20+%20%22%3E%26nbsp%3Ca%20href%3D%22%20+%20uri%20+%20%22%3E%22%20+%20name%20+%22%3C/a%3E%3Cbr%3E%5Cn%22%3B%0A%20%20%20%20%7D%0A%20%7D%0A%7D%3B%0A%0A//*********************************************************************%0Afunction%20setText%20%28doc%2C%20nodeName%2C%20text%2C%20make_CDATASection%29%0A%7B%0A%20%20%20%20var%20node%20%3D%20doc.%20getElementsByTagName%20%28nodeName%29%20%5B0%5D%2C%20cds%3B%0A%20%20%20%20if%20%28%21node%29%20return%3B%0A%20%20%20%20if%20%28make_CDATASection%29%0A%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20try%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20cds%20%3D%20doc.%20createCDATASection%20%28text%20%7C%7C%20%22%22%29%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20catch%20%28e%29%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20cds%20%3D%20doc.%20createTextNode%20%28text%20%7C%7C%20%22%22%29%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20node.%20appendChild%20%28cds%29%3B%0A%20%20%20%20%7D%0A%20%20%20%20else%0A%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20node.%20textContent%20%3D%20text%3B%0A%20%20%20%20%7D%0A%7D%3B%0A//******%20EndDefSub%0A%0A//******%20End%20function%20saveCB%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 ver 7.0.1 bild of 03.06.2017
-------------------------------------------------------------------------------------------------------
Обновление для совместимоси с FireFox 53 и ТВ(не проверено на необходимость, т.к. не обновлял ещё)
 1. Замена Application.prefs.setValue() на cbu.setPrefs() и Application.prefs.getValue() на gPrefService.getComplexValue(cEICB, Ci.nsISupportsString).data()
 2. Конвертации пути в UTF-8 из-за коллизий пути содержащей кириллицу:
   - запись: cbu.setPrefs(cEICB, convertFromUnicode("UTF-8", cPathEI))
   - чтение: gPrefService.getComplexValue(cEICB, Ci.nsISupportsString).data
 3. Правки которые я хотел внести с 2012 года, а может и ранее, точно непомю, самую первую версию кнопки
-------------------------------------------------------------------------------------------------------*/

//*********************************************************************
// ----------------Можно менять значения констант ---------------------
// ------------------------BEGIN DEF-----------------------------------
const cEICB = "Export.Import.CB.type.HTML"; // Желательно не трогать, т.к. старые кнопки будут считываться с ошибками
const cPathEI = "C:\\"; // Нет менять, используется для сброса Export.Import.CB.type.HTML 
const cPrefName = "Mozilla FF to CB "; // префикс заголовка для уточнения Mozilla FireFox или Mozilla Thunderbird
const cPathSetMsg = "Надо установить путь для чтения/записи кнопок";
const csExpT = "Экспорт кнопок в HTML";
const csExpOneT ="Экспорт одной кнопки в HTML";
const csExpOneMsg ="Выберите имя кнопки"; 
const csImpT = "Импорт кнопок из HTML";
const csSetIET = "Каталог для Экспорта/Импорта кнопок в/из HTML";
const dProc = 0.30; // процент открытия выбора окна кнопок, при dProc = 0.30 это 30% кнопок от общего числа
const csNoNameBT = "Для этой кнопки не определено имя";
const csNoBT = "Это не кнопка";
const spcTn = "=================================";
const spcTm = "               Не активные кнопки";
this.tooltipText = "  Импорт и Экспорт кнопок из/в HTML-файл\n———-——————————————————\nShift+Left        —  Запись кнопки"+
                   "\nLeft                  —  Запись всех кнопок" +
                   "\nMiddle            —  Установить каталог кнопок" +
                   "\nCtrl+Middle   —  Сбос каталога кнопок" +
                   "\nRight               —  Чтение кнопок(ки)";
// -------------------------END DEF-----------------------------------

//*********************************************************************
// Конвертировать текст в UTF-8
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();
};
//*********************************************************************


//*********************************************************************
// Обработчик событий по нажатию кнопок мыши с/без модификаторами
//*********************************************************************
this.onclick = function(event) {
    if(event.button == 0 && event.shiftKey) {
// Действие при клике shift+ЛКМ
shKeylbMouse();
    }
    else if(event.button == 0) {
// Действие при клике ЛКМ
lbMouse();
    }
    else if(event.button == 1 && event.ctrlKey)
    {
    ctrlKeymbMouse();
    }    
    else if(event.button == 1) {
        // Действие при клике СКМ
mbMouse();
    }
    else if(event.button == 2 && !event.ctrlKey &&!event.shiftKey && !event.altKey && !event.metaKey) {
        // Действие при клике ПКМ без модификаторов
rbMouse();
    }
};
this.oncontextmenu = function(event) {
    if(event.button == 2 && !event.ctrlKey &&!event.shiftKey && !event.altKey && !event.metaKey) {
        // Блокируем контекстное меню при клике ПКМ без модификаторов
        event.preventDefault();
        event.stopPropagation();
    }
};

//*********************************************************************
//Сбросить каталог записи/чтения, если он установлен
function ctrlKeymbMouse(){
    cbu.setPrefs(cEICB, convertFromUnicode("UTF-8", cPathEI) );
    custombuttons. alertBox (cEICB, "Сброс - "+cEICB+" = "+cPathEI);
};

//*********************************************************************
//Запись одной кнопки по выбору
function shKeylbMouse(){

if (chkPath(gPrefService.getComplexValue(cEICB, Ci.nsISupportsString).data) != 1)
   {
   custombuttons. alertBox (csExpT, cPathSetMsg);
   return;
   }

var name = []; //массив имён кнопок для вывода
var namea = []; //массив имён кнопок активных
var namep = []; //массив имён кнопок не активных
var i,j, buts;

buts = document. getElementsByTagName ("toolbarbutton");
for (i = 0, j = 0; i < buts. length; i++)
    if (buts[i].getAttribute("id").indexOf("custombuttons-button")==0 && typeof(buts [i].name)=="string")
                     namea[j++] = buts [i]. name;
namea.sort(cmp);
namea.splice(j,0,spcTn,spcTm,spcTn);

buts = custombuttons. palette. getElementsByTagName ("toolbarbutton");
for ( i = 0, j = 0; i < buts. length; i++)
    if (buts [i]. getAttribute ("id"). indexOf ("custombuttons-button") == 0&&typeof(buts [i].getAttribute ("label"))=="string")
            namep[j++] = buts [i]. getAttribute ("label");

namep.sort(cmp);
name=namea.concat(namep);

// Открытие модального окна выбора имён кнопок с учётом общего числа кнопок
var rowsCount = name.length * dProc; 
var oSvc = Components.classes["@mozilla.org/observer-service;1"]
    .getService(Components.interfaces.nsIObserverService);
var observer = {
    added: true,
    observe: function(subject, topic, data) {
        subject.addEventListener("load", this, false);
    },
    handleEvent: function(e) {
        var doc = e.target;
        var win = doc.defaultView;
        win.removeEventListener("load", this, false);
        if(doc.location.href != "chrome://global/content/selectDialog.xul")
            return;
        oSvc.removeObserver(this, "domwindowopened");
        this.added = false;
        var list = doc.getElementById("list");
        if(list)
            list.setAttribute("rows", rowsCount);
    }
};
oSvc.addObserver(observer, "domwindowopened", false);

var selected = {};
var bRt = Components.classes["@mozilla.org/embedcomp/prompt-service;1"]
        .getService(Components.interfaces.nsIPromptService)
        .select(window, csExpOneT, csExpOneMsg, name.length, name, selected )
observer.added && oSvc.removeObserver(observer, "domwindowopened");

if (!bRt) return; // Отмена - выход
 else if (spcTm==name[selected.value]||spcTn==name[selected.value]) 
            {
             custombuttons. alertBox (csExpOneT, csNoBT);
             return;
            } 
 else if (name[selected.value]=="")
            {
             custombuttons. alertBox (csExpOneT, csNoNameBT);
             return;
            }          
 
//OK  - начинаем обрабоку и запись выбранной кнопки
var mydir=gPrefService.getComplexValue(cEICB, Ci.nsISupportsString).data, myfilename=name [selected.value];
  var fp = Components.classes["@mozilla.org/filepicker;1"]
          .createInstance(Components.interfaces.nsIFilePicker);
  fp.init(window, csExpOneT, fp.modeSave);
  var dd = Components.classes["@mozilla.org/file/local;1"]
         .createInstance(Components.interfaces.nsILocalFile);
dd.initWithPath(mydir); //Путь который установлен
fp.displayDirectory = dd;
fp.defaultString = cPrefName+myfilename+".html";
if(fp.show() != fp.returnCancel)
        custombuttons. alertBox (csExpOneT, "Кнопка "+myfilename+" сохранена в \n"+ saveCB(fp.file.path, myfilename));

//****** DefSub
//Сортировка строк по возрастанию
function cmp(a, b) {
  if (a.toUpperCase() > b.toUpperCase()) return 1;
  if (a.toUpperCase() < b.toUpperCase()) return -1;
  return 0;
};
//****** EndDefSub

};

//*********************************************************************
//Записать кнопки
function lbMouse(){
if (chkPath(gPrefService.getComplexValue(cEICB, Ci.nsISupportsString).data) != 1) custombuttons. alertBox (csExpT, cPathSetMsg);
 else  {
var mydir=gPrefService.getComplexValue(cEICB, Ci.nsISupportsString).data, myfilename = GenFileName();
  var fp = Components.classes["@mozilla.org/filepicker;1"]
          .createInstance(Components.interfaces.nsIFilePicker);
  fp.init(window, csExpT, fp.modeSave);
  var dd = Components.classes["@mozilla.org/file/local;1"]
         .createInstance(Components.interfaces.nsILocalFile);
dd.initWithPath(mydir); //Путь который установлен
fp.displayDirectory = dd;
fp.defaultString = myfilename;
if(fp.show() != fp.returnCancel)
        custombuttons. alertBox (csExpT, "Набор кнопок сохранён в \n"+ saveCB(fp.file.path, ""));
  }
};

//*********************************************************************
//Считать кнопки
function rbMouse(){
if (chkPath(gPrefService.getComplexValue(cEICB, Ci.nsISupportsString).data) != 1) custombuttons. alertBox (csImpT, cPathSetMsg);
  else
  {
   var mydir=gPrefService.getComplexValue(cEICB, Ci.nsISupportsString).data; //, myfilename = GenFileName();
   var fp = Components.classes["@mozilla.org/filepicker;1"]
      .createInstance(Components.interfaces.nsIFilePicker);
   fp.init(window, csImpT, fp.modeOpen);
   var dd = Components.classes["@mozilla.org/file/local;1"]
       .createInstance(Components.interfaces.nsILocalFile);
   dd.initWithPath(mydir);
   fp.displayDirectory = dd;
   if(fp.show() != fp.returnCancel) getBrowser (). selectedTab = getBrowser (). addTab (fp.file.path);
  }
};


//*********************************************************************
//Установить каталог записи/чтения
function mbMouse(){
var sPathEI=gPrefService.getComplexValue(cEICB, Ci.nsISupportsString).data, myfilename = GenFileName();
if (chkPath(sPathEI) == -1) {
              custombuttons. alertBox (csSetIET, "переменная   "+cEICB+" уже существует и занята")
              return; //Нельзя создавать тк переменная уже занята
              };
// Диалог создания и установки пути
var fp = Components.classes["@mozilla.org/filepicker;1"]
    .createInstance(Components.interfaces.nsIFilePicker);
fp.init(window, csSetIET, fp.modeGetFolder);
var dd = Components.classes["@mozilla.org/file/local;1"]
    .createInstance(Components.interfaces.nsILocalFile);
dd.initWithPath(sPathEI);
fp.displayDirectory = dd;
if(fp.show() == fp.returnCancel) return;
   else
    {
    sPathEI = fp.file.path
    sPathEI+=(sPathEI[sPathEI.length-1] != "\\")?"\\":""
    cbu.setPrefs(cEICB, convertFromUnicode("UTF-8", sPathEI))
    //cbu.setPrefs(cEICB, sPathEI+=(sPathEI[sPathEI.length-1] != "\\")?"\\":"");
    custombuttons. alertBox (csSetIET, "Установлен путь для записи/чтения \n " + sPathEI);
    }
};

//*********************************************************************
//chkPath проверяет путь и тд, можно добовлять проверки, тк не всё проверяется.
//return = -2  ошибочный путь или его не существует (почти не используется)
// return = -1 ошибка настройки (для совместимости)
// return = 0  требуется создать и определить путь
// return = 1  всё ОК

function chkPath(cPth){
var vPth = gPrefService.getComplexValue(cEICB, Ci.nsISupportsString).data //предустановка
if (vPth == ""){
       cbu.setPrefs(cEICB, convertFromUnicode("UTF-8", cPathEI)); // Создали и путь по умолчанию из определения
       res = 1; //Переменная существует и определена
       }
 else if (typeof(vPth) != "string")
       res = -1; //Переменная определена и не того типа, значит она не наша
   else {
        //Пробуем проверить путь - ответ в исключении.
        var file = Components.classes["@mozilla.org/file/local;1"].
                 createInstance(Components.interfaces.nsILocalFile);
    try {
        file.initWithPath(cPth);
         if (!file.isDirectory() ) res = 0; //Такого пути нет надо создавать
                 else  res = 1; // Путь есть
         }
    catch(e) {
             res = -2;
             }
        }
 return res;
};

//*********************************************************************
//Генерация имени файла при записи всех кнопок
function GenFileName(){
var t=new Date();
var y=1900+t.getYear();
var min=t.getMinutes(); if (min<10){min="0"+min};
var h=t.getHours();  if (h<10){h="0"+h};
var m=t.getMonth();
var d=t.getDate();
var indDM = d+(31*m-31);  
switch(m){case 0: m="Jan";break;case 1: m="Feb";break;case 2: m="Mar";break;case 3: m="Apr";break;case 4: m="May";break;case 5: m="June";break;case 6: m="July";break;case 7: m="Aug";break;case 8: m="Sept";break;case 9: m="Oct";break;case 10: m="Nov";break;default: m="Dec";}
if (d<10){d="0"+d};
//if (m<10){m="0"+m};
//y = y - 2000;
y.toString ()
//var curdate= d + "." +m+ "(" +h+ "." +min+ ")";
var curdate= y + " " +indDM+ "(" +h+ "." +min+ ")";
//var myfilename = cPrefName+ y" id=" +y+ indDM +" "+ curdate +".html";
var myfilename = cPrefName+ curdate +".html";
return myfilename;
};

//*********************************************************************
// Функция записи кнопок в HTML-файл
//*********************************************************************
//Запись кнопок в HTML файл
function saveCB(fullfilepath, nameCB){
var bu="", buts, doc, name, image, uri, mode, code, initCode, accelkey, help;

VisibleConv (nameCB);
AllConv(nameCB);

//var uc = Components. classes ["@mozilla.org/intl/scriptableunicodeconverter"]. createInstance (Components. interfaces. nsIScriptableUnicodeConverter);
//uc. charset = "utf-8";
//bu = uc. ConvertFromUnicode (bu);
var head = "<html>\n<head>\n<meta http-equiv='Content-Type' content='text/html; charset=utf-8'>\n</head>\n<body>\n";
var fileend = "\n</body>\n</html>"
var htmlSource = head + bu + fileend;

var filedata=htmlSource;

var file = Components.classes["@mozilla.org/file/local;1"].
           createInstance(Components.interfaces.nsILocalFile);
file.initWithPath(fullfilepath);
var foStream = Components.classes["@mozilla.org/network/file-output-stream;1"].
               createInstance(Components.interfaces.nsIFileOutputStream);

foStream.init(file, 0x02 | 0x08 | 0x20, 0666, 0);
var converter = Components.classes["@mozilla.org/intl/converter-output-stream;1"].
                createInstance(Components.interfaces.nsIConverterOutputStream);
converter.init(foStream, "UTF-8", 0, 0);
converter.writeString(filedata);
converter.close();
return fullfilepath;

//*********************************************************************
//Подпрограммы для function saveCB
//*********************************************************************
//******DefSub

//*********************************************************************
function VisibleConv(nameCB) 
{
buts = document. getElementsByTagName ("toolbarbutton");
for (var i = 0; i < buts. length; i++)
{
    if (buts [i].getAttribute ("id"). indexOf ("custombuttons-button") == 0)
    {
        name = buts [i]. name;
        if (nameCB!=""&&nameCB!=name) continue;
        image = buts [i]. image || buts [i]. cbStdIcon;
        uri = buts [i]. URI;
        bu +="<img src=" + image + ">&nbsp<a href=" + uri + ">" + name +"</a><br>\n";
    }
}
bu +="<hr>";
};

//*********************************************************************
function AllConv(nameCB)
{
buts = custombuttons. palette. getElementsByTagName ("toolbarbutton");
for (var i = 0; i < buts. length; i++)
{
    if (buts [i]. getAttribute ("id"). indexOf ("custombuttons-button") == 0)
    {
// Имя кнопки в UTF-8
        name = buts [i]. getAttribute ("label");
        if (nameCB!=""&&nameCB!=name) continue;
//        var uc = Components. classes ["@mozilla.org/intl/scriptableunicodeconverter"]. createInstance (Components. interfaces. nsIScriptableUnicodeConverter);
//        uc. charset = "utf-8";
//        name = uc. ConvertFromUnicode (name);

// BASE64 в UTF-8
        image = buts [i]. getAttribute ("image") || buts [i]. getAttribute ("cb-stdicon");
        var uc = Components. classes ["@mozilla.org/intl/scriptableunicodeconverter"]. createInstance (Components. interfaces. nsIScriptableUnicodeConverter);
        uc. charset = "utf-8";
        image = uc. ConvertFromUnicode (image);

        mode = buts [i]. getAttribute ("cb-mode");
        code = buts [i]. getAttribute ("cb-oncommand");
        initCode = buts [i]. getAttribute ("cb-init");
        accelkey = buts [i]. getAttribute ("cb-accelkey");
        help = buts [i]. getAttribute ("Help") || buts [i]. getAttribute ("help") || "";
        doc = document. implementation. createDocument ("", "", null);
        doc. async = false;
        doc. load ("chrome://custombuttons/content/nbftemplate.xml");
        setText (doc, "name", name, false);
        setText (doc, "mode", mode, false);
        setText (doc, "image", image, true);
        setText (doc, "code", code, true);
        setText (doc, "initcode", initCode, true);
        setText (doc, "accelkey", accelkey, true);
        setText (doc, "help", help, true);
        var ser = new XMLSerializer ();
        var data = ser. serializeToString (doc);
        uri = "custombutton://" + escape (data);
        bu+="<img src=" + image + ">&nbsp<a href=" + uri + ">" + name +"</a><br>\n";
    }
 }
};

//*********************************************************************
function setText (doc, nodeName, text, make_CDATASection)
{
    var node = doc. getElementsByTagName (nodeName) [0], cds;
    if (!node) return;
    if (make_CDATASection)
    {
        try
        {
            cds = doc. createCDATASection (text || "");
        }
        catch (e)
        {
            cds = doc. createTextNode (text || "");
        }
        node. appendChild (cds);
    }
    else
    {
        node. textContent = text;
    }
};
//****** EndDefSub

//****** End function saveCB
};


Спасибо bunda1 за кнопку Объекты: перебор свойств, а то я бы долго искал нужные/обновлённые функции. :)

P.S. Об ошибках, хотя все устранил, пожелания и вопросах — пишите в ЛС, я отвечу. Есть ошибка, если кнопки не было , т.е. отсутствует переменная в about:config - Export.Import.CB.type.HTML -

ИДЁТ УСТРАНЕНИЕ

Экспорт/импорт закладок в HTML-файл( Firefox52+ ) от 27.05.2019.
кнопка открывает меню, из которого можно экспортировать закладки в HTML-файл с запросом на место сохранения или без запроса в последнюю папку сохранения, также кнопка даёт возможность импортировать закладки из HTML-файла и открыть папку для экспорта закладок.

Скриншот меню
058772974bfee502906bcfc05fc8ae0f.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%u042D%u043A%u0441%u043F%u043E%u0440%u0442/%u0438%u043C%u043F%u043E%u0440%u0442%20%u0437%u0430%u043A%u043B%u0430%u0434%u043E%u043A%20%u0432%20HTML-%u0444%u0430%u0439%u043B%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEhIAAAEAIACABQAAFgAAACgAAAASAAAAJAAAAAEAIAAAAAAAWAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAHAAAAAwAAAAAAAAANAAAAMwAAAEsAAABOAAAATgAAAE4AAABOAAAATgAAAE4AAABOAAAATgAAAE4AAABOAAAATgAAAE8AAABKAAAAMQAAAAwAAAAuLCwsl2tra89nZ2fNZ2dnz2dnZ89nZ2fPZ2dnz2dnZ89nZ2fPZ2dnz2dnZ89nZ2fPZ2dnz2dnZ81sbGzPKCgokwAAACsAAABHy8vL/7+/v/+/v7//v7+//729vf+/v7//v7+//7+/v/+/v7//v7+//76+vv++vr7/vr6+/7+/v/+/v7//ycnJ/wAAAEIKCgpQ0tLS/8PDw//Dw8P/wsLC/+fn5/3CwsL/w8PD/8PDw//Dw8P/wsLC/8nJyf/V1dX/x8fH/8PDw//ExMT/0tLS/wAAAEkJCQlQ39/f/9DQ0P/Q0ND/29vb/ykpKbfb29v/0NDQ/9DQ0P/Ozs7/7u7u/6ioqMVsbGyqvr6+0ujo6P/Pz8//39/f/wAAAEgKCgpQ6+vr/9vb2//b29v/5+fn/zIyMrfn5+f/29vb/9vb2//w8PD/ODg4jAAAAHw/Pz+oAAAAcHZ2dqvm5ub/6+vr/wAAAEgJCQlQ8PDw/9/f3//f39//7Ozs/zMzM7fs7Oz/39/f/+Tk5P+urq7ZAAAAa+jo6Prx8fH/w8PD5QAAAGPf39/18vLy/wAAAEgICAhQ9/f3/+bm5v/m5ub/8vLy/zQ0NLfy8vL/5ubm/+zs7P+RkZHOEhISd//////o6Oj//////gAAAGTLy8vq+fn5/wAAAEgJCQlQ/f39/+zs7P/s7Oz/+fn5/zMzM7j5+fn/7Ozs/+7u7v/l5eX3AAAAdoODg7Lq6urmUFBQmwQEBIr5+fn//f39/wAAAEgKCgpN//////Hx8f/x8fH//Pz8/0RERMH8/Pz/8fHx//Hx8f/4+Pj/vb294wAAAJAAAAB6GRkZnN3d3fH09PT//////wAAAEYFBQU3//////X19f/19fX/9fX1///////4+Pj/+Pj4//j4+P/4+Pj//f39//////////////////v7+//4+Pj//////wAAAC8AAAAKfn5+j/39/fn5+fn//Pz8/+Pj4+Pd3d3X3d3d193d3dfd3d3X3d3d193d3dfd3d3X3d3d193d3dfj4+PYeHh4ggcHBwkAAAAAAAAACZubm6b//////////gAAAC0FBQUGDQ0NBA4ODgQNDQ0EDQ0NBA0NDQQNDQ0EDQ0NBA0NDQQaGhoCAAAAAAAAAAAAAAAAFxcXARkZGQs3NzcwISEhHSkpKQMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//8AAgABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAwACD/8AA///AAP//wAA%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bself._handleClick%20%3D%28%29%3D%3E%20menuPopup.openPopup%28this%2C%20%22after_start%22%29%3B%20%20%0A%0A%0Avar%20array%20%3D%20%5B%0A%20%20%20%5B%20%22%u042D%u043A%u0441%u043F%u043E%u0440%u0442%20%u0437%u0430%u043A%u043B%u0430%u0434%u043E%u043A%20%u0432%20HTML-%u0444%u0430%u0439%u043B%22%2C%20%22setPathAndExportsBookmarksToHTMLFile%28%29%22%2C%20%22data%3Aimage/x-icon%3Bbase64%2CAAABAAEAEhIAAAEAIACABQAAFgAAACgAAAASAAAAJAAAAAEAIAAAAAAAWAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////////////////////////8AAAAAAAAAAAAAAAAAAAAADg/o/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////////////////////////8AAAAAAAAAAAAAAAAAAAAADg/o/w4P6P8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////////////////////////8AAAAAAAAAAAAAAAAAAAAADg/o/zUq6P8OD+j/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////////////////////////8AAAAAAAAAAAAAAAAAAAAADg/o/0RC//0cE+X/Dg/o/wAAAAAAAAAAAAAAAAAAAAAAAAAA/////xQW5/8tMOT/Njfw/0BA+v9JSP//UU///1hT//9aVv3/RUL5/zQy+f8zNPH/JSHa/w4P6P8AAAAAAAAAAAAAAAAAAAAA/////xAR5v0UFeL/Hh7v/Soo+P80Mf39PDn+/0I+//05NPn/F5sr/zlO0/08PeL/NDbb/Rwdyv8OD+j/AAAAAAAAAAAAAAAA/////w4P6P8XGOn/Hh7x/yQk9f8rKvX/MjD1/zk0+f85NPn/F5sr/xebK/8lQ6n/Hx/D/w4P6P8AAAAAAAAAAAAAAAAAAAAA/////w4P6P8OD+j/Dg/o/w4P6P8OD+j/Dg/o/w4P6P8OD+j/F5sr/zfyX/0Xmyv/Dg/o/wAAAAAAAAAAAAAAAAAAAAAAAAAA/////33EgP+W8J//m/Sk/6D5qv+k/K7/qPyz/6z8uP9t2H7/QuJf/zz/Xv8f7UX/F5sr/wAAAAAAAAAAAAAAAAAAAAAAAAAA/////wOQFP8f5D3/KexI/zL3U/87/V3/Qf9k/0T/aP9K/2v/Qf9j/zn5Wf8571X/Kt1J/xebK/8AAAAAAAAAAAAAAAAAAAAA/////weUGf0Y6Tj/IvNE/Sn6Tv81/lj9Pv9h/0X9Z/1H/mf/Rvpk/0HvXP064VP/MtZL/RrHN/8Xmyv/AAAAAAAAAAAAAAAA/////wmYHP8JmBz/CZgc/wmYHP8JmBz/CZgc/wmYHP8JmBz/CZgc/zjgUf8x1kj/FMIy/xebK/8AAAAAAAAAAAAAAAAAAAAA//////////////////////////8AAAAAAAAAAAAAAAAAAAAAKL08/zDXSP0NvCz/F5sr/wAAAAAAAAAAAAAAAAAAAAAAAAAA//////////////////////////8AAAAAAAAAAAAAAAAAAAAAHKsv/xS9Lv8Xmyv/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////////////////////////8AAAAAAAAAAAAAAAAAAAAAF5sr/xebK/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////////////////////////8AAAAAAAAAAAAAAAAAAAAAF5sr/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//8AAg9/AAIPPwACDx8AAg8PAAIABwACAAMAAgAHAAIADwACAA8AAgAHAAIAAwACAAcAAg8PAAIPHwACDz8AAg9/AAP//wAA%3D%22%5D%2C%0A%20%20%20%5B%20%22%u0418%u043C%u043F%u043E%u0440%u0442%20%u0437%u0430%u043A%u043B%u0430%u0434%u043E%u043A%20%u0438%u0437%20HTML-%u0444%u0430%u0439%u043B%u0430%22%2C%20%22importBookmarksOutHTMLFile%28%29%22%2C%20%22data%3Aimage/x-icon%3Bbase64%2CAAABAAEAEhIAAAEAIACABQAAFgAAACgAAAASAAAAJAAAAAEAIAAAAAAAWAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////////////////////////8AAAAADg/o/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////////////////////////8OD+j/Dg/o/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/////////////////////w4P6P81Kuj/Dg/o/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////////////////Dg/o/xwT5f9EQv/9Dg/o/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////////8OD+j/JSHa/zM08f80Mvn/RUL5/1pW/f9YU///UU///0lI//9AQPr/Njfw/y0w5P8UFuf/AAAAAAAAAAAAAAAA/////w4P6P8cHcr/NDbb/Tw94v85TtP9F5sr/zk0+f9CPv/9PDn+/zQx/f0qKPj/Hh7v/RQV4v8QEeb9AAAAAAAAAAAAAAAA//////////8OD+j/Hx/D/yVDqf8Xmyv/F5sr/zk0+f85NPn/MjD1/ysq9f8kJPX/Hh7x/xcY6f8OD+j/AAAAAAAAAAAAAAAA////////////////Dg/o/xebK/838l/9F5sr/w4P6P8OD+j/Dg/o/w4P6P8OD+j/Dg/o/w4P6P8OD+j/AAAAAAAAAAAAAAAA////////////////F5sr/x/tRf88/17/QuJf/23Yfv+s/Lj/qPyz/6T8rv+g+ar/m/Sk/5bwn/99xID/AAAAAAAAAAAAAAAA//////////8Xmyv/Kt1J/znvVf85+Vn/Qf9j/0r/a/9E/2j/Qf9k/zv9Xf8y91P/KexI/x/kPf8DkBT/AAAAAAAAAAAAAAAA/////xebK/8axzf/MtZL/TrhU/9B71z9Rvpk/0f+Z/9F/Wf9Pv9h/zX+WP0p+k7/IvNE/RjpOP8HlBn9AAAAAAAAAAAAAAAA//////////8Xmyv/FMIy/zHWSP844FH/CZgc/wmYHP8JmBz/CZgc/wmYHP8JmBz/CZgc/wmYHP8JmBz/AAAAAAAAAAAAAAAA////////////////F5sr/w28LP8w10j9KL08/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/////////////////////xebK/8UvS7/HKsv/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////////////////////////8Xmyv/F5sr/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////////////////////////8AAAAAF5sr/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//8AAgv/AAID/wACA/8AAgP/AAIAAwACAAMAAgADAAIAAwACAAMAAgADAAIAAwACAAMAAgP/AAID/wACA/8AAgv/AAP//wAA%3D%22%5D%2C%20%20%0A%20%20%20%5B%20%22separator%22%20%5D%2C%0A%20%20%20%5B%20%22%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20%u043F%u0430%u043F%u043A%u0443%20%u0434%u043B%u044F%20%u044D%u043A%u0441%u043F%u043E%u0440%u0442%u0430%20%u0437%u0430%u043A%u043B%u0430%u0434%u043E%u043A%22%2C%20%22openBookmarksFolder%28%29%22%2C%20%22data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAK8AAACvABQqw0mAAAABZ0RVh0Q3JlYXRpb24gVGltZQAwOC8xMS8wNdiEE10AAAAldEVYdFNvZnR3YXJlAE1hY3JvbWVkaWEgRmlyZXdvcmtzIE1YIDIwMDSHdqzPAAACiUlEQVR4nKWTy0uUYRTGf+/np6PTODOmMpaGhJRaZmQgRAQtglaBf4BRtGgTFLUqKjBoF1QQlBLdKCgrscuiFEq6gGmQBWWSYLfpMqXMTM71+773PS0kQXBR9MBvdZ7z8HDgKBHhf2T9jUkdUbVKKTXfzH7eqVpdXbDDzWvRmrDngePyMZniXfsxLtLBFuAWhziqlOoQET0n4dlprk5/uysisTncO7Gqt3s/N5eeWCjD8T5ZcWa5nNvFmc6d7AEKRAQRgaHT9Gcyb0XyB+ain8jGC+ul5/15GXTuSN+3bmntapHj2+kFyv6E2K7DSrw0Yw9v8ys6gS9chfbgWvA5K2qXUb2knAfZflaXrWXTqg2MByNt12sG25JTiaRSqsI2wuLU5HdyU19p2TZOga+IfX27CUdqqG8KMeK9IKdchtLP8GpdaivXcN8S1g3cDwERWxvIJmP4K1qwfRmQl5wc6p450B14dLiHCecTzf5mtp7aC0BlqJx1M44iywjk4q/xVzSDxMEkkYNXkIOXKSsOoESwUChgoS+At/8GI5u7JOswDIhlDKR/DBKoXA4mCiYxS124nBLxqKCQoGjqwuV46QSTH0fIOYwCjm0MuOnPFAXrwB2eKWY8yKdoDJbgd35S5eYJmWkaQqWYfCGf3wyQc4gCrm0EvMwXiksXQW4SslnIZ0GEhkAJC3IJIq4mpNM0lgaxiqpJTX1SP38xCni2ESgtsxBjgd0OAYHATJHGmgH8Ja1ECusIWSHqa6rI5MKk4lGejjEKuLbWvJqMmdVDZ5vwPGbRGr5rxeDjahJuCtsUE43FSOaFRJpLIx9IAK4CbKAS8AHzPsw8MkAaiCsRQSll/8PybIiI6N8D8VYf0gJ8eQAAAABJRU5ErkJggg%3D%3D%22%5D%2C%0A%20%20%20%5B%20%22%u042D%u043A%u0441%u043F%u043E%u0440%u0442%20%u0437%u0430%u043A%u043B%u0430%u0434%u043E%u043A%20%u0432%20HTML%20%u0431%u0435%u0437%20%u0437%u0430%u043F%u0440%u043E%u0441%u0430%22%2C%20%22exportsBookmarksToHTMLFile%28%29%22%2C%20%22data%3Aimage/x-icon%3Bbase64%2CAAABAAEAEhIAAAEAIACABQAAFgAAACgAAAASAAAAJAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE8A/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE8A/wBPAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE8A/wBkAP8ATwD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE8A/wB6AP0AUgD/AE8A/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABUAP8AZQD/AG4A/wB3AP8AfwD/AIQA/wCHAP8AiAD/AHkA/wBtAP8AbAD/AFgA/wBPAP8AAAAAAAAAAAAAAAAAAAAAAAAAAABQAP0AUgD/AFwA/QBmAP8AbgD9AHQA/wB4AP0AbwD/F5sr/wBzAP0AbgD/AGcA/QBQAP8ATwD/AAAAAAAAAAAAAAAAAAAAAABPAP8AVgD/AF0A/wBiAP8AZwD/AGsA/wBvAP8AbwD/F5sr/xebK/8AXgD/AFAA/wBPAP8AAAAAAAAAAAAAAAAAAAAAAAAAAABPAP8ATwD/AE8A/wBPAP8ATwD/AE8A/wBPAP8ATwD/F5sr/zfyX/0Xmyv/AE8A/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH3EgP+W8J//m/Sk/6D5qv+k/K7/qPyz/6z8uP9t2H7/QuJf/zz/Xv8f7UX/F5sr/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOQFP8f5D3/KexI/zL3U/87/V3/Qf9k/0T/aP9K/2v/Qf9j/zn5Wf8571X/Kt1J/xebK/8AAAAAAAAAAAAAAAAAAAAAAAAAAAeUGf0Y6Tj/IvNE/Sn6Tv81/lj9Pv9h/0X9Z/1H/mf/Rvpk/0HvXP064VP/MtZL/RrHN/8Xmyv/AAAAAAAAAAAAAAAAAAAAAAmYHP8JmBz/CZgc/wmYHP8JmBz/CZgc/wmYHP8JmBz/CZgc/zjgUf8x1kj/FMIy/xebK/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKL08/zDXSP0NvCz/F5sr/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHKsv/xS9Lv8Xmyv/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF5sr/xebK/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF5sr/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//8BB/9/AQf/PwEH/x8BB/8PAQcABwEHAAMBBwAHAQcADwEHAA8BBwAHAQcAAwEHAAcBB/8PAQf/HwEH/z8BB/9/AQf//wEE%3D%22%5D%0A%5D%3B%0Avar%20menuPopup%20%3D%20self.appendChild%28document.createElement%28%22menupopup%22%29%29%3B%0Aarray.forEach%28%28m%2Ci%29%3D%3E%20%7B%0A%20%20%20if%20%28%20m%5B0%5D%20%3D%3D%20%22separator%22%20%29%20%7B%20menuPopup.appendChild%28document.createElement%28%22menuseparator%22%29%29%3B%20return%20%7D%3B%0A%20%20%20var%20mItem%20%3D%20menuPopup.appendChild%28document.createElement%28%22menuitem%22%29%29%3B%0A%20%20%20mItem.setAttribute%28%22label%22%2C%20m%5B0%5D%29%3B%0A%20%20%20mItem.setAttribute%28%22class%22%2C%20%22menuitem-iconic%22%29%3B%0A%20%20%20mItem.setAttribute%28%22image%22%2C%20m%5B2%5D%29%3B%20%0A%20%20%20mItem.addEventListener%28%22command%22%2C%20%28%29%3D%3E%20eval%28m%5B1%5D%29%29%3B%0A%7D%29%3B%0AmenuPopup.setAttribute%28%22onclick%22%2C%20%22event.stopPropagation%28%29%22%29%3B%0A%0A%0Afunction%20importBookmarksOutHTMLFile%28%29%20%7B%0A%20%20%20var%20fp%20%3D%20window.makeFilePicker%28%29%3B%0A%20%20%20fp.init%28window%2C%20%22%u0412%u044B%u0431%u0435%u0440%u0438%u0442%u0435%20HTML-%u0444%u0430%u0439%u043B%20%u0434%u043B%u044F%20%u0438%u043C%u043F%u043E%u0440%u0442%u0430%20%u0437%u0430%u043A%u043B%u0430%u0434%u043E%u043A%22%2C%20fp.modeOpen%29%3B%0A%20%20%20fp.appendFilters%28fp.filterHTML%29%3B%0A%20%20%20Cu.import%28%22resource%3A//gre/modules/FileUtils.jsm%22%29%3B%0A%20%20%20fp.displayDirectory%20%3D%20FileUtils.File%28getPathToBookmarksFolder%28%29%29%3B%0A%20%20%20fp.open%28re%3D%3E%20%7B%20%0A%20%20%20%20%20%20if%20%28%20re%20%21%3D%20fp.returnOK%20%29%20return%3B%0A%20%20%20%20%20%20%0A%20%20%20%20%20%20Cu.import%28%22resource%3A//gre/modules/BookmarkHTMLUtils.jsm%22%29%3B%0A%20%20%20%20%20%20BookmarkHTMLUtils.importFromFile%28fp.file.path%2C%20%7Breplace%3A%20true%7D%29.then%28null%2C%20Cu.reportError%29%3B%0A%20%20%20%7D%29%0A%7D%3B%0A%0A%0Afunction%20exportsBookmarksToHTMLFile%28%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%20file.initWithPath%28getPathToBookmarksFolder%28%29%29%3B%0A%20%20%20var%20path%20%3D%20file.path%20+%20%22%5C%5Cbookmarks-%22%20+%20new%20Date%28%29.toLocaleDateString%28%29%20+%20%22%20%22%20+%20%28new%20Date%28%29.toLocaleTimeString%28%27lv-LV%27%29.replace%28/%3A/g%2C%20%22%u02F8%22%29%29%20+%20%22.html%22%3B%0A%0A%20%20%20Cu.import%28%22resource%3A//gre/modules/BookmarkHTMLUtils.jsm%22%29%3B%0A%20%20%20BookmarkHTMLUtils.exportToFile%28path%29.then%28null%2C%20Cu.reportError%29%3B%0A%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%20%22%u042D%u043A%u0441%u043F%u043E%u0440%u0442%u0438%u0440%u043E%u0432%u0430%u043B%20%u0437%u0430%u043A%u043B%u0430%u0434%u043A%u0438%20%u043A%u0430%u043A%20HTML%20%u0432%20%22%20+%20path%29%3B%0A%20%20%20setTimeout%28%28%29%3D%3E%20alertsService.closeAlert%28%29%2C%203500%29%3B%0A%7D%3B%0A%0A%0Afunction%20openBookmarksFolder%28%29%20%7B%0A%20%20%20var%20folder%20%3D%20Cc%5B%22@mozilla.org/file/local%3B1%22%5D.createInstance%28Ci.nsIFile%29%3B%0A%20%20%20folder.initWithPath%28getPathToBookmarksFolder%28%29%29%3B%0A%20%20%20folder.launch%28%29%3B%0A%7D%3B%0A%0A%0Afunction%20setPathAndExportsBookmarksToHTMLFile%28%29%20%7B%20%20%20%20%20%0A%20%20%20var%20fp%20%3D%20window.makeFilePicker%28%29%3B%0A%20%20%20fp.init%28window%2C%20%22%u0423%u043A%u0430%u0436%u0438%u0442%u0435%20%u043F%u0430%u043F%u043A%u0443%20%u0434%u043B%u044F%20%u044D%u043A%u0441%u043F%u043E%u0440%u0442%u0430%20%u0437%u0430%u043A%u043B%u0430%u0434%u043E%u043A%21%22%2C%20fp.modeGetFolder%29%3B%0A%20%20%20fp.open%28re%3D%3E%20%7B%20%0A%20%20%20%20%20%20if%20%28%20re%20%21%3D%20fp.returnOK%20%29%20return%3B%0A%20%20%20%20%20%20cbu.setPrefs%28%22CB.exportsBookmarksToHTMLFile.path%22%2C%20convertFromUnicode%28%22UTF-8%22%2C%20fp.file.path%29%29%3B%0A%20%20%20%20%20%20%0A%20%20%20%20%20%20exportsBookmarksToHTMLFile%28%29%3B%0A%20%20%20%7D%29%0A%7D%3B%0A%0A%0Afunction%20getPathToBookmarksFolder%28%29%20%7B%0A%20%20%20var%20s%20%3D%20%22CB.exportsBookmarksToHTMLFile.path%22%2C%20pref%20%3D%20Services.prefs%3B%0A%20%20%20try%20%7B%20return%20%28pref.getStringPref%20%3F%20pref.getStringPref%28s%29%20%3A%20pref.getComplexValue%28s%2C%20Ci.nsISupportsString%29.data%29%20%7D%0A%20%20%20catch%28e%29%20%7B%20return%20%22C%3A%22%20%7D%3B%0A%7D%3B%0A%20%20%20%20%20%20%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%0A%0Athis.onmouseover%20%3D%28%29%3D%3E%20%7B%20%0A%20%20%20var%20path%20%3D%20getPathToBookmarksFolder%28%29%3B%0A%20%20%20this.tooltipText%20%3D%20self.label%20+%20%22%5Cn%u041B%3A%20%u041C%u0435%u043D%u044E%20%u043A%u043D%u043E%u043F%u043A%u0438%5Cn%u041F%3A%20CB%20%u043C%u0435%u043D%u044E%5Cn%5Cn%u041F%u0430%u043F%u043A%u0430%20%u0434%u043B%u044F%20%u044D%u043A%u0441%u043F%u043E%u0440%u0442%u0430%3A%5Cn%22%20+%20path%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

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

Выделить код

Код:

self._handleClick =()=> menuPopup.openPopup(this, "after_start");  


var array = [
   [ "Экспорт закладок в HTML-файл", "setPathAndExportsBookmarksToHTMLFile()", "data:image/x-icon;base64,AAABAAEAEhIAAAEAIACABQAAFgAAACgAAAASAAAAJAAAAAEAIAAAAAAAWAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////////////////////////8AAAAAAAAAAAAAAAAAAAAADg/o/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////////////////////////8AAAAAAAAAAAAAAAAAAAAADg/o/w4P6P8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////////////////////////8AAAAAAAAAAAAAAAAAAAAADg/o/zUq6P8OD+j/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////////////////////////8AAAAAAAAAAAAAAAAAAAAADg/o/0RC//0cE+X/Dg/o/wAAAAAAAAAAAAAAAAAAAAAAAAAA/////xQW5/8tMOT/Njfw/0BA+v9JSP//UU///1hT//9aVv3/RUL5/zQy+f8zNPH/JSHa/w4P6P8AAAAAAAAAAAAAAAAAAAAA/////xAR5v0UFeL/Hh7v/Soo+P80Mf39PDn+/0I+//05NPn/F5sr/zlO0/08PeL/NDbb/Rwdyv8OD+j/AAAAAAAAAAAAAAAA/////w4P6P8XGOn/Hh7x/yQk9f8rKvX/MjD1/zk0+f85NPn/F5sr/xebK/8lQ6n/Hx/D/w4P6P8AAAAAAAAAAAAAAAAAAAAA/////w4P6P8OD+j/Dg/o/w4P6P8OD+j/Dg/o/w4P6P8OD+j/F5sr/zfyX/0Xmyv/Dg/o/wAAAAAAAAAAAAAAAAAAAAAAAAAA/////33EgP+W8J//m/Sk/6D5qv+k/K7/qPyz/6z8uP9t2H7/QuJf/zz/Xv8f7UX/F5sr/wAAAAAAAAAAAAAAAAAAAAAAAAAA/////wOQFP8f5D3/KexI/zL3U/87/V3/Qf9k/0T/aP9K/2v/Qf9j/zn5Wf8571X/Kt1J/xebK/8AAAAAAAAAAAAAAAAAAAAA/////weUGf0Y6Tj/IvNE/Sn6Tv81/lj9Pv9h/0X9Z/1H/mf/Rvpk/0HvXP064VP/MtZL/RrHN/8Xmyv/AAAAAAAAAAAAAAAA/////wmYHP8JmBz/CZgc/wmYHP8JmBz/CZgc/wmYHP8JmBz/CZgc/zjgUf8x1kj/FMIy/xebK/8AAAAAAAAAAAAAAAAAAAAA//////////////////////////8AAAAAAAAAAAAAAAAAAAAAKL08/zDXSP0NvCz/F5sr/wAAAAAAAAAAAAAAAAAAAAAAAAAA//////////////////////////8AAAAAAAAAAAAAAAAAAAAAHKsv/xS9Lv8Xmyv/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////////////////////////8AAAAAAAAAAAAAAAAAAAAAF5sr/xebK/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////////////////////////8AAAAAAAAAAAAAAAAAAAAAF5sr/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//8AAg9/AAIPPwACDx8AAg8PAAIABwACAAMAAgAHAAIADwACAA8AAgAHAAIAAwACAAcAAg8PAAIPHwACDz8AAg9/AAP//wAA="],
   [ "Импорт закладок из HTML-файла", "importBookmarksOutHTMLFile()", "data:image/x-icon;base64,AAABAAEAEhIAAAEAIACABQAAFgAAACgAAAASAAAAJAAAAAEAIAAAAAAAWAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////////////////////////8AAAAADg/o/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////////////////////////8OD+j/Dg/o/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/////////////////////w4P6P81Kuj/Dg/o/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////////////////Dg/o/xwT5f9EQv/9Dg/o/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////////8OD+j/JSHa/zM08f80Mvn/RUL5/1pW/f9YU///UU///0lI//9AQPr/Njfw/y0w5P8UFuf/AAAAAAAAAAAAAAAA/////w4P6P8cHcr/NDbb/Tw94v85TtP9F5sr/zk0+f9CPv/9PDn+/zQx/f0qKPj/Hh7v/RQV4v8QEeb9AAAAAAAAAAAAAAAA//////////8OD+j/Hx/D/yVDqf8Xmyv/F5sr/zk0+f85NPn/MjD1/ysq9f8kJPX/Hh7x/xcY6f8OD+j/AAAAAAAAAAAAAAAA////////////////Dg/o/xebK/838l/9F5sr/w4P6P8OD+j/Dg/o/w4P6P8OD+j/Dg/o/w4P6P8OD+j/AAAAAAAAAAAAAAAA////////////////F5sr/x/tRf88/17/QuJf/23Yfv+s/Lj/qPyz/6T8rv+g+ar/m/Sk/5bwn/99xID/AAAAAAAAAAAAAAAA//////////8Xmyv/Kt1J/znvVf85+Vn/Qf9j/0r/a/9E/2j/Qf9k/zv9Xf8y91P/KexI/x/kPf8DkBT/AAAAAAAAAAAAAAAA/////xebK/8axzf/MtZL/TrhU/9B71z9Rvpk/0f+Z/9F/Wf9Pv9h/zX+WP0p+k7/IvNE/RjpOP8HlBn9AAAAAAAAAAAAAAAA//////////8Xmyv/FMIy/zHWSP844FH/CZgc/wmYHP8JmBz/CZgc/wmYHP8JmBz/CZgc/wmYHP8JmBz/AAAAAAAAAAAAAAAA////////////////F5sr/w28LP8w10j9KL08/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/////////////////////xebK/8UvS7/HKsv/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////////////////////////8Xmyv/F5sr/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////////////////////////8AAAAAF5sr/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//8AAgv/AAID/wACA/8AAgP/AAIAAwACAAMAAgADAAIAAwACAAMAAgADAAIAAwACAAMAAgP/AAID/wACA/8AAgv/AAP//wAA="],  
   [ "separator" ],
   [ "Открыть папку для экспорта закладок", "openBookmarksFolder()", "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAK8AAACvABQqw0mAAAABZ0RVh0Q3JlYXRpb24gVGltZQAwOC8xMS8wNdiEE10AAAAldEVYdFNvZnR3YXJlAE1hY3JvbWVkaWEgRmlyZXdvcmtzIE1YIDIwMDSHdqzPAAACiUlEQVR4nKWTy0uUYRTGf+/np6PTODOmMpaGhJRaZmQgRAQtglaBf4BRtGgTFLUqKjBoF1QQlBLdKCgrscuiFEq6gGmQBWWSYLfpMqXMTM71+773PS0kQXBR9MBvdZ7z8HDgKBHhf2T9jUkdUbVKKTXfzH7eqVpdXbDDzWvRmrDngePyMZniXfsxLtLBFuAWhziqlOoQET0n4dlprk5/uysisTncO7Gqt3s/N5eeWCjD8T5ZcWa5nNvFmc6d7AEKRAQRgaHT9Gcyb0XyB+ain8jGC+ul5/15GXTuSN+3bmntapHj2+kFyv6E2K7DSrw0Yw9v8ys6gS9chfbgWvA5K2qXUb2knAfZflaXrWXTqg2MByNt12sG25JTiaRSqsI2wuLU5HdyU19p2TZOga+IfX27CUdqqG8KMeK9IKdchtLP8GpdaivXcN8S1g3cDwERWxvIJmP4K1qwfRmQl5wc6p450B14dLiHCecTzf5mtp7aC0BlqJx1M44iywjk4q/xVzSDxMEkkYNXkIOXKSsOoESwUChgoS+At/8GI5u7JOswDIhlDKR/DBKoXA4mCiYxS124nBLxqKCQoGjqwuV46QSTH0fIOYwCjm0MuOnPFAXrwB2eKWY8yKdoDJbgd35S5eYJmWkaQqWYfCGf3wyQc4gCrm0EvMwXiksXQW4SslnIZ0GEhkAJC3IJIq4mpNM0lgaxiqpJTX1SP38xCni2ESgtsxBjgd0OAYHATJHGmgH8Ja1ECusIWSHqa6rI5MKk4lGejjEKuLbWvJqMmdVDZ5vwPGbRGr5rxeDjahJuCtsUE43FSOaFRJpLIx9IAK4CbKAS8AHzPsw8MkAaiCsRQSll/8PybIiI6N8D8VYf0gJ8eQAAAABJRU5ErkJggg=="],
   [ "Экспорт закладок в HTML без запроса", "exportsBookmarksToHTMLFile()", "data:image/x-icon;base64,AAABAAEAEhIAAAEAIACABQAAFgAAACgAAAASAAAAJAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE8A/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE8A/wBPAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE8A/wBkAP8ATwD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE8A/wB6AP0AUgD/AE8A/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABUAP8AZQD/AG4A/wB3AP8AfwD/AIQA/wCHAP8AiAD/AHkA/wBtAP8AbAD/AFgA/wBPAP8AAAAAAAAAAAAAAAAAAAAAAAAAAABQAP0AUgD/AFwA/QBmAP8AbgD9AHQA/wB4AP0AbwD/F5sr/wBzAP0AbgD/AGcA/QBQAP8ATwD/AAAAAAAAAAAAAAAAAAAAAABPAP8AVgD/AF0A/wBiAP8AZwD/AGsA/wBvAP8AbwD/F5sr/xebK/8AXgD/AFAA/wBPAP8AAAAAAAAAAAAAAAAAAAAAAAAAAABPAP8ATwD/AE8A/wBPAP8ATwD/AE8A/wBPAP8ATwD/F5sr/zfyX/0Xmyv/AE8A/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH3EgP+W8J//m/Sk/6D5qv+k/K7/qPyz/6z8uP9t2H7/QuJf/zz/Xv8f7UX/F5sr/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOQFP8f5D3/KexI/zL3U/87/V3/Qf9k/0T/aP9K/2v/Qf9j/zn5Wf8571X/Kt1J/xebK/8AAAAAAAAAAAAAAAAAAAAAAAAAAAeUGf0Y6Tj/IvNE/Sn6Tv81/lj9Pv9h/0X9Z/1H/mf/Rvpk/0HvXP064VP/MtZL/RrHN/8Xmyv/AAAAAAAAAAAAAAAAAAAAAAmYHP8JmBz/CZgc/wmYHP8JmBz/CZgc/wmYHP8JmBz/CZgc/zjgUf8x1kj/FMIy/xebK/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKL08/zDXSP0NvCz/F5sr/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHKsv/xS9Lv8Xmyv/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF5sr/xebK/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF5sr/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//8BB/9/AQf/PwEH/x8BB/8PAQcABwEHAAMBBwAHAQcADwEHAA8BBwAHAQcAAwEHAAcBB/8PAQf/HwEH/z8BB/9/AQf//wEE="]
];
var menuPopup = self.appendChild(document.createElement("menupopup"));
array.forEach((m,i)=> {
   if ( m[0] == "separator" ) { menuPopup.appendChild(document.createElement("menuseparator")); return };
   var mItem = menuPopup.appendChild(document.createElement("menuitem"));
   mItem.setAttribute("label", m[0]);
   mItem.setAttribute("class", "menuitem-iconic");
   mItem.setAttribute("image", m[2]); 
   mItem.addEventListener("command", ()=> eval(m[1]));
});
menuPopup.setAttribute("onclick", "event.stopPropagation()");


function importBookmarksOutHTMLFile() {
   var fp = window.makeFilePicker();
   fp.init(window, "Выберите HTML-файл для импорта закладок", fp.modeOpen);
   fp.appendFilters(fp.filterHTML);
   Cu.import("resource://gre/modules/FileUtils.jsm");
   fp.displayDirectory = FileUtils.File(getPathToBookmarksFolder());
   fp.open(re=> { 
      if ( re != fp.returnOK ) return;
      
      Cu.import("resource://gre/modules/BookmarkHTMLUtils.jsm");
      BookmarkHTMLUtils.importFromFile(fp.file.path, {replace: true}).then(null, Cu.reportError);
   })
};


function exportsBookmarksToHTMLFile() {
   var file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile);
   file.initWithPath(getPathToBookmarksFolder());
   var path = file.path + "\\bookmarks-" + new Date().toLocaleDateString() + " " + (new Date().toLocaleTimeString('lv-LV').replace(/:/g, "˸")) + ".html";

   Cu.import("resource://gre/modules/BookmarkHTMLUtils.jsm");
   BookmarkHTMLUtils.exportToFile(path).then(null, Cu.reportError);

   var alertsService = Cc["@mozilla.org/alerts-service;1"].getService(Ci.nsIAlertsService)
   alertsService.showAlertNotification(self.image, self.label, "Экспортировал закладки как HTML в " + path);
   setTimeout(()=> alertsService.closeAlert(), 3500);
};


function openBookmarksFolder() {
   var folder = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile);
   folder.initWithPath(getPathToBookmarksFolder());
   folder.launch();
};


function setPathAndExportsBookmarksToHTMLFile() {     
   var fp = window.makeFilePicker();
   fp.init(window, "Укажите папку для экспорта закладок!", fp.modeGetFolder);
   fp.open(re=> { 
      if ( re != fp.returnOK ) return;
      cbu.setPrefs("CB.exportsBookmarksToHTMLFile.path", convertFromUnicode("UTF-8", fp.file.path));
      
      exportsBookmarksToHTMLFile();
   })
};


function getPathToBookmarksFolder() {
   var s = "CB.exportsBookmarksToHTMLFile.path", pref = Services.prefs;
   try { return (pref.getStringPref ? pref.getStringPref(s) : pref.getComplexValue(s, Ci.nsISupportsString).data) }
   catch(e) { return "C:" };
};
      

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();
};


this.onmouseover =()=> { 
   var path = getPathToBookmarksFolder();
   this.tooltipText = self.label + "\nЛ: Меню кнопки\nП: CB меню\n\nПапка для экспорта:\n" + path;
};

Папка загрузки( Firefox24+ ) от 28.11.2017.
кнопка даёт возможность открыть папку загрузки и установить папку загрузки. Сплывающая подсказка у кнопки отображает путь к папке загрузки.

Скриншот подсказки у кнопки
f73ebd8f440628204c160cbbb5133afd.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%3E%u041F%u0430%u043F%u043A%u0430%20%u0437%u0430%u0433%u0440%u0443%u0437%u043A%u0438%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/x-icon%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//%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%20%0A%20%20%20if%20%28%20e.button%20%3D%3D%200%20%29%20openDownloadFolder%28%29%3B%20//%20%u041B%u041A%u041C%20%0A%0A%20%20%20if%20%28%20e.button%20%3D%3D%201%20%29%20gShowPopup%28this%29%3B%20//%20%u0421%u041A%u041C%20%0A%20%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//%20%u041F%u041A%u041C%20%0A%20%20%20%20%20%20%20%20e.preventDefault%28%29%3B%0A%20%20%20%20%20%20%20%20setPathToDownloadFolder%28%29%3B%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%0A//%20%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20%u043F%u0430%u043F%u043A%u0443%20%u0437%u0430%u0433%u0440%u0443%u0437%u043A%u0438%20Firefox%20.............%0Afunction%20openDownloadFolder%28%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%28%20getPathToDownloadFolder%28%29%20%29%3B%20%0A%20%20%20file.launch%28%29%3B%0A%7D%3B%0A%0A%0A//%20%u0412%u044B%u0431%u0440%u0430%u0442%u044C%20%u043F%u0430%u043F%u043A%u0443%20%u0437%u0430%u0433%u0440%u0443%u0437%u043A%u0438%20%u0438%20%u0437%u0430%u043F%u0438%u0441%u0430%u0442%u044C%20%u043F%u0443%u0442%u044C%20%u0432%20%27about%3Aconfig%27%20.............%0Afunction%20setPathToDownloadFolder%28%29%20%7B%0A%20%20%20var%20fp%20%3D%20window.makeFilePicker%28%29%3B%0A%20%20%20fp.init%28window%2C%20%22%u0412%u044B%u0431%u0435%u0440%u0438%u0442%u0435%20%u043F%u0430%u043F%u043A%u0443%20%u0434%u043B%u044F%20%u0437%u0430%u0433%u0440%u0443%u0437%u043E%u043A%21%22%2C%202%29%3B%0A%20%20%20fp.open%28re%3D%3E%20%7B%20%0A%20%20%20%20%20%20if%20%28%20re%20%21%3D%20fp.returnOK%20%29%20return%3B%0A%20%20%20%20%20%20cbu.setPrefs%28%22browser.download.folderList%22%2C%202%29%3B%0A%20%20%20%20%20%20cbu.setPrefs%28%22browser.download.useDownloadDir%22%2C%20true%29%3B%0A%20%20%20%20%20%20cbu.setPrefs%28%22browser.download.dir%22%2C%20convertFromUnicode%28%22UTF-8%22%2C%20fp.file.path%29%29%3B%0A%20%20%20%7D%29%0A%7D%3B%0A%0A%0A//%20%u041F%u043E%u043B%u0443%u0447%u0438%u0442%u044C%20%u043F%u0443%u0442%u044C%20%u043A%20%u043F%u0430%u043F%u043A%u0435%20%u0437%u0430%u0433%u0440%u0443%u0437%u043A%u0438%20.............%0Afunction%20getPathToDownloadFolder%28%29%20%7B%20%0A%20%20%20try%20%7B%20return%20Services.downloads.userDownloadsDirectory.path%20%7D%20%0A%20%20%20catch%28e%29%20%7B%20return%20Services.downloads.defaultDownloadsDirectory.path%20%7D%3B%20%0A%7D%3B%0A%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%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.onmouseover%20%3D%28%29%3D%3E%20%7B%20%0A%20%20%20this.tooltipText%20%3D%20self.label%20%20+%20%22%3A%20%22%20+%20getPathToDownloadFolder%28%29%20+%20%22%5Cn%u041B%3A%20%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20%u043F%u0430%u043F%u043A%u0443%20%u0437%u0430%u0433%u0440%u0443%u0437%u043A%u0438%20%5Cn%u0421%3A%20CB%20%u043C%u0435%u043D%u044E%20%5Cn%u041F%3A%20%u0423%u0441%u0442%u0430%u043D%u043E%u0432%u0438%u0442%u044C%20%u043F%u0430%u043F%u043A%u0443%20%u0437%u0430%u0433%u0440%u0443%u0437%u043A%u0438%22%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

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

Выделить код

Код:

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

   if ( e.button == 1 ) gShowPopup(this); // СКМ 
        
   if ( e.button == 2 && !e.ctrlKey && !e.shiftKey && !e.altKey && !e.metaKey ) { // ПКМ 
        e.preventDefault();
        setPathToDownloadFolder();
        }
};
this.oncontextmenu =e=> { e.button && !e.ctrlKey && e.preventDefault() };


// Открыть папку загрузки Firefox .............
function openDownloadFolder() {
   var file = Services.dirsvc.get('ProfD', Ci.nsIFile);
   file.initWithPath( getPathToDownloadFolder() ); 
   file.launch();
};


// Выбрать папку загрузки и записать путь в 'about:config' .............
function setPathToDownloadFolder() {
   var fp = window.makeFilePicker();
   fp.init(window, "Выберите папку для загрузок!", 2);
   fp.open(re=> { 
      if ( re != fp.returnOK ) return;
      cbu.setPrefs("browser.download.folderList", 2);
      cbu.setPrefs("browser.download.useDownloadDir", true);
      cbu.setPrefs("browser.download.dir", convertFromUnicode("UTF-8", fp.file.path));
   })
};


// Получить путь к папке загрузки .............
function getPathToDownloadFolder() { 
   try { return Services.downloads.userDownloadsDirectory.path } 
   catch(e) { return Services.downloads.defaultDownloadsDirectory.path }; 
};


// Конвертировать текст в юникод ..................
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();
};


// Подсказка для кнопки ..................
this.onmouseover =()=> { 
   this.tooltipText = self.label  + ": " + getPathToDownloadFolder() + "\nЛ: Открыть папку загрузки \nС: CB меню \nП: Установить папку загрузки";
};

Экспорт всех CB кнопок в HTML файл( Firefox, SeaMonkey, PaleMoon ) от 26.05.2019.
кнопка открывает меню, из которого можно экспортировать все установленые Сustom Buttons кнопки в HTML-файл с запросом на место сохранения или без запроса в последнюю папку сохранения, также кнопка даёт возможность открыть в вкладке HTML-файл с кнопками из последней папки сохранения и открыть папку для экспорта кнопок.

Скриншот меню
8b20442b83f14eb95af244d21f8c8fa2.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%u042D%u043A%u0441%u043F%u043E%u0440%u0442%20%u0432%u0441%u0435%u0445%20CB%20%u043A%u043D%u043E%u043F%u043E%u043A%20%u0432%20HTML%20%u0444%u0430%u0439%u043B%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aapplication/text%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAAAAAJEylRHi9ZySAuVModLVTKHS1Uyh0sVModLFTKHCxUyhwsVMocLFTKHCxUyhwsVMocLFTKIS5UyR4vWc8JEymmHi9Zh4Oz6P92rNz7g7Ph/4Oz4f+Ds+H/g7Th/4S04f+EtOH/hbXh/4W14f+GteH/hLTh/3Ws3P2Cs+j/Hi9ZyyEvVIV0q9v/Wp7N+eny9/3v9/r96/P6/ejy+f3l8fn94u/5/eDu+P3d7Pj92uv4/d7s9v1cn877c6rb/yEvVMkfLlSHfLDf/2el0vvx9vv/4u34/9ro9v/W5vb/0OP1/8vg9f/G3fT/wdzz/7vZ9P/a6vn/bKfS/Xuv3/8fLlTKHi1Uh4Gz4v9sqdT78Pb7/+nx+v/h7fj/3uv4/9jo9//T5fb/z+P2/8rh9f/F3vb/2+v5/3Cr1P2Bs+H/Hi1Uyh0tVIeJt+T/c6zW+/H2+//q8vn/4u33/97r9//a6ff/1Ob2/9Dj9v/L4fX/xt71/9zr+P92rtf9h7bj/x0tVMoaK1OHnsPp/4S22/vu9fr/6vH4/+Ht9//e6/b/2uj2/9bm9v/Q5PX/zOH1/8ff9f/c6/j/fLHY/Y665f8dLFPKGitTh6/M7v+Tvt/77/X6//3+/v/0+Pz/8fb9/+zz/P/n8fz/4e76/9zq+f/W6Pr/3uz5/4C12f2Zwen/HS1UyhorU4e50/L/kr3e+93q9f/z9/v/7PT6/+vz+v/o8vn/5/H5/+Xv+f/i7vj/4u76/9rp9f99s9r9ocbs/x4tVMobLFOHv9f0/6zN5vuUv+H/m8Tl/5rD5P+aw+T/msPl/5nD5P+VweP/kb/j/4++4/+Gt97/jLzf/ajK7v8eLVTKHCxUh8HY9P/Q4vL7y93v/8XX6P/E1uf/wtTm/8DT5f++0uT/vNHj/7nP4/+2zOH/v9br/8Pb7/210fH/HCxTyhwsU4bE2fP/1+r7+6Svuf+MjIz/mJqc/5qcnf+eoKH/o6Sm/6WnqP+nqav/pKOj/6Ovuf/O5vn9utPx/xssU8kdLVOGy932/9jq+vqlrbb+oqCe/7S0tf+6ubn/wsLB/9HQ0P+5uLj/hYaF/87Myf+nsbv+z+T3/MTa9f8eLlXMGCpWgr/V8//0///7sLi9/5ybmv+wsLH/tLS0/7y7vP/Kysr/rq6u/3R1df/CwL//s7zD/+z///2wye7/FidStAQNJhFBXJu7fZTB9XuFm/WpqKT/s7O0/7q6uv/CwcL/0dHR/7q6uv+FhYb/1NLP/3+KoPV5k8H0OFCIwQAEEyUAAAEAAwQGCwAAAAA9PT2Gmpqa/5OTk/qZmZn/nZ2d/6Kiov+kpKT/o6Oj+rOzs/8/Pz+GAAAAAAMDBAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%3D%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bself._handleClick%20%3D%28%29%3D%3E%20menuPopup.openPopup%28this%2C%20%22after_start%22%29%3B%0A%0A%0Avar%20array%20%3D%20%5B%0A%20%20%20%5B%20%22%u042D%u043A%u0441%u043F%u043E%u0440%u0442%20%u0432%u0441%u0435%u0445%20CB%20%u043A%u043D%u043E%u043F%u043E%u043A%20%u0432%20HTML%20%u0444%u0430%u0439%u043B%22%2C%20%22setPathToHtmlFile%28%29%22%2C%20%22data%3Aimage/x-icon%3Bbase64%2CAAABAAEAEhIAAAEAIACABQAAFgAAACgAAAASAAAAJAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADg/o/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADg/o/w4P6P8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADg/o/zUq6P8OD+j/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADg/o/0RC//0cE+X/Dg/o/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQW5/8tMOT/Njfw/0BA+v9JSP//UU///1hT//9aVv3/RUL5/zQy+f8zNPH/JSHa/w4P6P8AAAAAAAAAAAAAAAAAAAAAAAAAABAR5v0UFeL/Hh7v/Soo+P80Mf39PDn+/0I+//05NPn/F5sr/zlO0/08PeL/NDbb/Rwdyv8OD+j/AAAAAAAAAAAAAAAAAAAAAA4P6P8XGOn/Hh7x/yQk9f8rKvX/MjD1/zk0+f85NPn/F5sr/xebK/8lQ6n/Hx/D/w4P6P8AAAAAAAAAAAAAAAAAAAAAAAAAAA4P6P8OD+j/Dg/o/w4P6P8OD+j/Dg/o/w4P6P8OD+j/F5sr/zfyX/0Xmyv/Dg/o/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH3EgP+W8J//m/Sk/6D5qv+k/K7/qPyz/6z8uP9t2H7/QuJf/zz/Xv8f7UX/F5sr/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOQFP8f5D3/KexI/zL3U/87/V3/Qf9k/0T/aP9K/2v/Qf9j/zn5Wf8571X/Kt1J/xebK/8AAAAAAAAAAAAAAAAAAAAAAAAAAAeUGf0Y6Tj/IvNE/Sn6Tv81/lj9Pv9h/0X9Z/1H/mf/Rvpk/0HvXP064VP/MtZL/RrHN/8Xmyv/AAAAAAAAAAAAAAAAAAAAAAmYHP8JmBz/CZgc/wmYHP8JmBz/CZgc/wmYHP8JmBz/CZgc/zjgUf8x1kj/FMIy/xebK/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKL08/zDXSP0NvCz/F5sr/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHKsv/xS9Lv8Xmyv/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF5sr/xebK/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF5sr/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//8BB/9/AQf/PwEH/x8BB/8PAQcABwEHAAMBBwAHAQcADwEHAA8BBwAHAQcAAwEHAAcBB/8PAQf/HwEH/z8BB/9/AQf//wEE%3D%22%5D%2C%0A%20%20%20%5B%20%22%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20%u0432%20%u0432%u043A%u043B%u0430%u0434%u043A%u0435%20HTML%20%u0444%u0430%u0439%u043B%22%2C%20%22openHtmlFileInTab%28%29%22%2C%20%22data%3Aimage/x-icon%3Bbase64%2CAAABAAEAEhIAAAEAIACABQAAFgAAACgAAAASAAAAJAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF5sr/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXmyv/F5sr/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABebK/8UvS7/HKsv/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF5sr/w28LP8w10j9KL08/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXmyv/FMIy/zHWSP844FH/CZgc/wmYHP8JmBz/CZgc/wmYHP8JmBz/CZgc/wmYHP8JmBz/AAAAAAAAAAAAAAAAAAAAABebK/8axzf/MtZL/TrhU/9B71z9Rvpk/0f+Z/9F/Wf9Pv9h/zX+WP0p+k7/IvNE/RjpOP8HlBn9AAAAAAAAAAAAAAAAAAAAAAAAAAAXmyv/Kt1J/znvVf85+Vn/Qf9j/0r/a/9E/2j/Qf9k/zv9Xf8y91P/KexI/x/kPf8DkBT/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF5sr/x/tRf88/17/QuJf/23Yfv+s/Lj/qPyz/6T8rv+g+ar/m/Sk/5bwn/99xID/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADg/o/xebK/838l/9F5sr/w4P6P8OD+j/Dg/o/w4P6P8OD+j/Dg/o/w4P6P8OD+j/AAAAAAAAAAAAAAAAAAAAAAAAAAAOD+j/Hx/D/yVDqf8Xmyv/F5sr/zk0+f85NPn/MjD1/ysq9f8kJPX/Hh7x/xcY6f8OD+j/AAAAAAAAAAAAAAAAAAAAAA4P6P8cHcr/NDbb/Tw94v85TtP9F5sr/zk0+f9CPv/9PDn+/zQx/f0qKPj/Hh7v/RQV4v8QEeb9AAAAAAAAAAAAAAAAAAAAAAAAAAAOD+j/JSHa/zM08f80Mvn/RUL5/1pW/f9YU///UU///0lI//9AQPr/Njfw/y0w5P8UFuf/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADg/o/xwT5f9EQv/9Dg/o/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4P6P81Kuj/Dg/o/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOD+j/Dg/o/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADg/o/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//8BB/v/AQfz/wEH4/8BB8P/AQeAAwEHAAMBB4ADAQfAAwEHwAMBB4ADAQcAAwEHgAMBB8P/AQfj/wEH8/8BB/v/AQf//wEE%3D%22%5D%2C%20%0A%20%20%20%5B%20%22separator%22%20%5D%2C%0A%20%20%20%5B%20%22%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20%u043F%u0430%u043F%u043A%u0443%20%u0434%u043B%u044F%20%u044D%u043A%u0441%u043F%u043E%u0440%u0442%u0430%20CB%20%u043A%u043D%u043E%u043F%u043E%u043A%22%2C%20%22openHtmlFileFolder%28%29%22%2C%20%22data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAK8AAACvABQqw0mAAAABZ0RVh0Q3JlYXRpb24gVGltZQAwOC8xMS8wNdiEE10AAAAldEVYdFNvZnR3YXJlAE1hY3JvbWVkaWEgRmlyZXdvcmtzIE1YIDIwMDSHdqzPAAACiUlEQVR4nKWTy0uUYRTGf+/np6PTODOmMpaGhJRaZmQgRAQtglaBf4BRtGgTFLUqKjBoF1QQlBLdKCgrscuiFEq6gGmQBWWSYLfpMqXMTM71+773PS0kQXBR9MBvdZ7z8HDgKBHhf2T9jUkdUbVKKTXfzH7eqVpdXbDDzWvRmrDngePyMZniXfsxLtLBFuAWhziqlOoQET0n4dlprk5/uysisTncO7Gqt3s/N5eeWCjD8T5ZcWa5nNvFmc6d7AEKRAQRgaHT9Gcyb0XyB+ain8jGC+ul5/15GXTuSN+3bmntapHj2+kFyv6E2K7DSrw0Yw9v8ys6gS9chfbgWvA5K2qXUb2knAfZflaXrWXTqg2MByNt12sG25JTiaRSqsI2wuLU5HdyU19p2TZOga+IfX27CUdqqG8KMeK9IKdchtLP8GpdaivXcN8S1g3cDwERWxvIJmP4K1qwfRmQl5wc6p450B14dLiHCecTzf5mtp7aC0BlqJx1M44iywjk4q/xVzSDxMEkkYNXkIOXKSsOoESwUChgoS+At/8GI5u7JOswDIhlDKR/DBKoXA4mCiYxS124nBLxqKCQoGjqwuV46QSTH0fIOYwCjm0MuOnPFAXrwB2eKWY8yKdoDJbgd35S5eYJmWkaQqWYfCGf3wyQc4gCrm0EvMwXiksXQW4SslnIZ0GEhkAJC3IJIq4mpNM0lgaxiqpJTX1SP38xCni2ESgtsxBjgd0OAYHATJHGmgH8Ja1ECusIWSHqa6rI5MKk4lGejjEKuLbWvJqMmdVDZ5vwPGbRGr5rxeDjahJuCtsUE43FSOaFRJpLIx9IAK4CbKAS8AHzPsw8MkAaiCsRQSll/8PybIiI6N8D8VYf0gJ8eQAAAABJRU5ErkJggg%3D%3D%22%5D%2C%0A%20%20%20%5B%20%22%u042D%u043A%u0441%u043F%u043E%u0440%u0442%20%u0432%u0441%u0435%u0445%20CB%20%u043A%u043D%u043E%u043F%u043E%u043A%20%u0432%20HTML%20%u0444%u0430%u0439%u043B%20%u0431%u0435%u0437%20%u0437%u0430%u043F%u0440%u043E%u0441%u0430%22%2C%20%22exportsButtonsToHtmlFile%28%29%22%2C%20%22data%3Aimage/x-icon%3Bbase64%2CAAABAAEAEhIAAAEAIACABQAAFgAAACgAAAASAAAAJAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE8A/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE8A/wBPAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE8A/wBkAP8ATwD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE8A/wB6AP0AUgD/AE8A/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABUAP8AZQD/AG4A/wB3AP8AfwD/AIQA/wCHAP8AiAD/AHkA/wBtAP8AbAD/AFgA/wBPAP8AAAAAAAAAAAAAAAAAAAAAAAAAAABQAP0AUgD/AFwA/QBmAP8AbgD9AHQA/wB4AP0AbwD/F5sr/wBzAP0AbgD/AGcA/QBQAP8ATwD/AAAAAAAAAAAAAAAAAAAAAABPAP8AVgD/AF0A/wBiAP8AZwD/AGsA/wBvAP8AbwD/F5sr/xebK/8AXgD/AFAA/wBPAP8AAAAAAAAAAAAAAAAAAAAAAAAAAABPAP8ATwD/AE8A/wBPAP8ATwD/AE8A/wBPAP8ATwD/F5sr/zfyX/0Xmyv/AE8A/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH3EgP+W8J//m/Sk/6D5qv+k/K7/qPyz/6z8uP9t2H7/QuJf/zz/Xv8f7UX/F5sr/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOQFP8f5D3/KexI/zL3U/87/V3/Qf9k/0T/aP9K/2v/Qf9j/zn5Wf8571X/Kt1J/xebK/8AAAAAAAAAAAAAAAAAAAAAAAAAAAeUGf0Y6Tj/IvNE/Sn6Tv81/lj9Pv9h/0X9Z/1H/mf/Rvpk/0HvXP064VP/MtZL/RrHN/8Xmyv/AAAAAAAAAAAAAAAAAAAAAAmYHP8JmBz/CZgc/wmYHP8JmBz/CZgc/wmYHP8JmBz/CZgc/zjgUf8x1kj/FMIy/xebK/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKL08/zDXSP0NvCz/F5sr/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHKsv/xS9Lv8Xmyv/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF5sr/xebK/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF5sr/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//8BB/9/AQf/PwEH/x8BB/8PAQcABwEHAAMBBwAHAQcADwEHAA8BBwAHAQcAAwEHAAcBB/8PAQf/HwEH/z8BB/9/AQf//wEE%3D%22%5D%0A%5D%3B%0Avar%20menuPopup%20%3D%20self.appendChild%28document.createElement%28%22menupopup%22%29%29%3B%0Aarray.forEach%28%28m%2Ci%29%3D%3E%20%7B%0A%20%20%20if%20%28%20m%5B0%5D%20%3D%3D%20%22separator%22%20%29%20%7B%20menuPopup.appendChild%28document.createElement%28%22menuseparator%22%29%29%3B%20return%20%7D%3B%0A%20%20%20var%20mItem%20%3D%20menuPopup.appendChild%28document.createElement%28%22menuitem%22%29%29%3B%0A%20%20%20mItem.setAttribute%28%22label%22%2C%20m%5B0%5D%29%3B%0A%20%20%20mItem.setAttribute%28%22class%22%2C%20%22menuitem-iconic%22%29%3B%0A%20%20%20mItem.setAttribute%28%22image%22%2C%20m%5B2%5D%29%3B%20%0A%20%20%20mItem.addEventListener%28%22command%22%2C%20%28%29%3D%3E%20eval%28m%5B1%5D%29%29%3B%0A%7D%29%3B%0AmenuPopup.setAttribute%28%22onclick%22%2C%20%22event.stopPropagation%28%29%22%29%3B%0A%0A%0Afunction%20openHtmlFileInTab%28%29%20%7B%0A%20%20%20var%20fp%20%3D%20window.makeFilePicker%28%29%3B%0A%20%20%20fp.init%28window%2C%20%22%u0412%u044B%u0431%u0435%u0440%u0438%u0442%u0435%20HTML-%u0444%u0430%u0439%u043B%20%u0434%u043B%u044F%20%u0438%u043C%u043F%u043E%u0440%u0442%u0430%20%u0437%u0430%u043A%u043B%u0430%u0434%u043E%u043A%22%2C%20fp.modeOpen%29%3B%0A%20%20%20fp.appendFilters%28fp.filterHTML%29%3B%0A%20%20%20Cu.import%28%22resource%3A//gre/modules/FileUtils.jsm%22%29%3B%0A%20%20%20fp.displayDirectory%20%3D%20FileUtils.File%28getPathToHtmlFileFolder%28%29%29%3B%0A%20%20%20fp.open%28re%3D%3E%20%7B%20%0A%20%20%20%20%20%20if%20%28%20re%20%3D%3D%20fp.returnOK%20%29%0A%20%20%20%20%20%20%20%20%20%20%20gBrowser.selectedTab%20%3D%20gBrowser.addTab%28fp.file.path%2C%20%7B%20triggeringPrincipal%3A%20Services.scriptSecurityManager.getSystemPrincipal%28%29%2C%7D%29%0A%20%20%20%7D%29%0A%7D%3B%0A%0Afunction%20exportsButtonsToHtmlFile%28%29%20%7B%0A%20%20%20var%20visibleCBbuttons%20%3D%20%5B...document.querySelectorAll%28%27%5Bcb-mode%5D%27%29%5D%3B%0A%20%20%20var%20paletteCBbuttons%20%3D%20%5B...custombuttons.palette.querySelectorAll%28%27%5Bcb-mode%5D%27%29%5D%3B%0A%20%20%20var%20allCBbuttons%20%3D%20visibleCBbuttons.concat%28paletteCBbuttons%29%3B%0A%20%20%20%0A%20%20%20var%20array%20%3D%20%5B%5D%3B%0A%20%20%20allCBbuttons.forEach%28but%3D%3E%20%7B%0A%20%20%20%20%20%20var%20uri%20%3D%20but.URI%20%3F%20but.URI%20%3A%20getPaleteButtonsURI%28but%29%3B%0A%20%20%20%20%20%20var%20name%20%3D%20but.getAttribute%28%22label%22%29%20%7C%7C%20%22%u0411%u0435%u0437%20%u043D%u0430%u0437%u0432%u0430%u043D%u0438%u044F%22%3B%0A%20%20%20%20%20%20var%20image%20%3D%20but.getAttribute%28%22image%22%29%20%7C%7C%20%22data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAACNFBMVEXDRgDweQDnbwC0NgDCRQC7PQDtpTu+QQD78q3PUwDCRAD//8vbYQDLTgDocAD0iQX1jQbGSgD7iAD4gwDVaw7vdwDyegD+igDweQDlawDyhAXveADmZwDzmBbtcwDwkhHveADmhBTkgxbweADkfRH+igD7hADXZQX0gADyjA/tfgvveQDiawDQVADRXgfnbwD1jAb9iQD9z0PVZAbxpinykRHtdgD5mRbERQDDRgDOYArCRAD9iQD3ewDxegD3dwDFRgDAQAD+hgD4fQDucgDtgQftfwTISQDCRQDvdgD5lxb1kRb2qh7wnynkagD766LDRQDDRwDDRQDspjbtpzbuqDbvqzv//8DUZAbCRQD//83pjhvveQbvggW+QQDfcxLlmUb//8veYADMTwDHSADVVwC8PgDwixb78q3oZgDUWADRVADCRQD9iQDERwDBQQDYVQC+PgC0NgDbYQDWWgDUWADSVQDFSAC+QAC7PAC0NgD+wRL+/kD+/zb+7i3+8Cv+/DX+wBL/+DD/rwz+qgz+rwz/tAz+sQzfbAT+3iP/+jD//Dz1jwP+nwf5iwf7pBz2tRr4lwb/ogfsdQT+2R7/9ET+2iT8yyLmgBL5iQL2egLokhP7zzT60zv1zUr0gAL1ewP50yn9+UL++EXooyngaAH41EPzowzyySj+xxzlhhHvvyruwjXxvTnUag3+zxrwigP+swz86U/ZXwD75lHqegD6xzb//kn+uhPTXAG3OAD/+UC2vFeJAAAAe3RSTlMAAAAAAAAAAAAAAAAAAAAAAAAAAACfnwAIaelpAAA2+wD7UQAAa3oArKzRzMysnwgAvPQA/gAAw3prw0oALr16vS4AACnF6bspAAAA/mIAADQAAAAAAI8AAEwA0vv7kd2yAuuvr+vKABL23U+8Sk/d9vUDIIAQAAAQgCAfvupHAAABB0lEQVR4Xi3IU3fDABgA0C+u26FdZ9u2bdu2vZSzbds2/tyac3IfLxjpGyA6MimqY6gHTNgiiNwkwRM1E7EhTrYyTfMzzsh0ZEPiH+D6+u5mV1jEhpe5haVCYW1T4suEvUOkk7PLpVJ5WFnl7hEUDN5LPvsHJ6cazdn13f3DYxu0B35+/Y2qVSr17NzGeUgohIVHLK/PMDa39qKieRATGxd/9cS4uU1MwnmQktqY/qGlaVr7/ZOVDTmQm5df8PwyNj4xOTVdjOM4kCRZOr+wWFa+srpWQVEU8PnV2zu7NbV19UfHDQRBAIfTdNHc0soVdnR2dfdgGAgEvW99/QNc4eDQ8O8Ihv0D77NPgbVLZ6kAAAAASUVORK5CYII%3D%22%3B%0A%20%20%20%20%20%20%0A%20%20%20%20%20%20array.push%28%22%3Cimg%20src%3D%22%20+%20image%20+%20%22%3E%26nbsp%3Ca%20href%3D%22%20+%20uri%20+%20%22%3E%22%20+%20name%20+%22%3C/a%3E%3Cbr%3E%5Cn%22%29%3B%0A%20%20%20%7D%29%3B%0A%20%20%20%0A%20%20%20var%20before%20%3D%20%22%3Chtml%3E%5Cn%3Chead%3E%5Cn%3Cmeta%20http-equiv%3D%27Content-Type%27%20content%3D%27text/html%3B%20charset%3Dutf-8%27%3E%5Cn%3C/head%3E%5Cn%3Cbody%3E%5Cn%22%3B%0A%20%20%20var%20after%20%3D%20%22%5Cn%3C/body%3E%5Cn%3C/html%3E%22%3B%0A%20%20%20var%20text%20%3D%20before%20+%20array.join%28%22%22%29%20+%20after%3B%0A%20%20%20var%20text%20%3D%20convertFromUnicode%28%22UTF-8%22%2C%20text%29%3B%20%0A%20%20%20%0A%20%20%20var%20date%20%3D%20new%20Date%28%29%3B%0A%20%20%20var%20time%20%3D%20date.toLocaleString%28%27ru%27%2C%20%7Byear%3A%20%27numeric%27%2C%20month%3A%20%27numeric%27%2C%20day%3A%20%27numeric%27%7D%29%0A%20%20%20var%20time%20%3D%20time%20+%20%27.%20%27%20+%20date.toLocaleTimeString%28%29.replace%28/%3A/g%2C%20%22%u02F8%22%29%3B%0A%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%20file.initWithPath%28getPathToHtmlFileFolder%28%29%29%3B%0A%20%20%20file.append%28%22CB%20buttons%20%22%20+%20time%20+%20%22.html%22%29%3B%0A%20%20%20custombuttonsUtils.writeFile%28file.path%2C%20text%29%3B%0A%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%20%22%u042D%u043A%u0441%u043F%u043E%u0440%u0442%u0438%u0440%u043E%u0432%u0430%u043B%20%u0432%u0441%u0435%20CB%20%u043A%u043D%u043E%u043F%u043A%u0438%20%u043A%u0430%u043A%20HTML%20%u0432%20%22%20+%20file.path%29%3B%0A%20%20%20setTimeout%28%28%29%3D%3E%20alertsService.closeAlert%28%29%2C%204000%29%3B%0A%7D%3B%0A%0A%0Afunction%20getPaleteButtonsURI%28but%29%20%7B%0A%20%20%20var%20doc%20%3D%20document.implementation.createDocument%28%22%22%2C%20%22%22%2C%20null%29%3B%0A%20%20%20doc.async%20%3D%20false%3B%0A%20%20%20doc.load%28%22chrome%3A//custombuttons/content/nbftemplate.xml%22%29%3B%0A%0A%20%20%20%5B%22help%2CHelp%22%2C%20%22name%2Clabel%22%2C%20%22image%2Cimage%22%2C%20%22mode%2Ccb-mode%22%2C%20%22initcode%2Ccb-init%22%2C%20%22accelkey%2Ccb-accelkey%22%2C%20%22code%2Ccb-oncommand%22%5D%0A%20%20%20.forEach%28str%3D%3E%20%7B%0A%20%20%20%20%20%20var%20arr%20%3D%20str.split%28%27%2C%27%29%3B%0A%20%20%20%20%20%20var%20value%20%3D%20but.getAttribute%28arr%5B1%5D%29%2C%20name%20%3D%20arr%5B0%5D%3B%0A%20%20%20%20%20%20custombutton.buttonSetText%28doc%2C%20name%2C%20value%2C%20true%29%3B%0A%20%20%20%7D%29%3B%0A%0A%20%20%20var%20ser%20%3D%20new%20XMLSerializer%28%29%3B%0A%20%20%20return%20%22custombutton%3A//%22%20+%20escape%28ser.serializeToString%28doc%29%29%3B%0A%7D%3B%0A%0A%0Afunction%20openHtmlFileFolder%28%29%20%7B%0A%20%20%20var%20folder%20%3D%20Cc%5B%22@mozilla.org/file/local%3B1%22%5D.createInstance%28Ci.nsIFile%29%3B%0A%20%20%20folder.initWithPath%28%20getPathToHtmlFileFolder%28%29%20%29%3B%0A%20%20%20folder.launch%28%29%3B%0A%7D%3B%0A%0A%0Afunction%20setPathToHtmlFile%28%29%20%7B%20%20%20%20%20%0A%20%20%20var%20fp%20%3D%20window.makeFilePicker%28%29%3B%0A%20%20%20fp.init%28window%2C%20%22%u0423%u043A%u0430%u0436%u0438%u0442%u0435%20%u043F%u0430%u043F%u043A%u0443%20%u0434%u043B%u044F%20%u044D%u043A%u0441%u043F%u043E%u0440%u0442%u0430%20CB%20%u043A%u043D%u043E%u043F%u043E%u043A%21%22%2C%20fp.modeGetFolder%29%3B%0A%20%20%20fp.open%28re%3D%3E%20%7B%20%0A%20%20%20%20%20%20if%20%28%20re%20%21%3D%20fp.returnOK%20%29%20return%3B%0A%20%20%20%20%20%20cbu.setPrefs%28%22CB.exportsButtonsToHtmlFile.path%22%2C%20convertFromUnicode%28%22UTF-8%22%2C%20fp.file.path%29%29%3B%0A%20%20%20%20%20%20%0A%20%20%20%20%20%20exportsButtonsToHtmlFile%28%29%3B%0A%20%20%20%7D%29%0A%7D%3B%0A%0A%0Afunction%20getPathToHtmlFileFolder%28%29%20%7B%0A%20%20%20var%20s%20%3D%20%22CB.exportsButtonsToHtmlFile.path%22%2C%20pref%20%3D%20Services.prefs%3B%0A%20%20%20var%20str%20%3D%20pref.getStringPref%20%3F%20pref.getStringPref%28s%29%20%3A%20pref.getComplexValue%28s%2C%20Ci.nsISupportsString%29.data%3B%0A%20%20%20try%20%7B%20return%20str%20%7D%20%0A%20%20%20catch%28e%29%20%7B%20return%20%22C%3A%22%20%7D%3B%0A%7D%3B%0A%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%0A%0Athis.onmouseover%20%3D%28%29%3D%3E%20%7B%20%0A%20%20%20this.tooltipText%20%3D%20self.label%20+%20%22%5Cn%u041B%3A%20%u041C%u0435%u043D%u044E%20%u043A%u043D%u043E%u043F%u043A%u0438%5Cn%u041F%3A%20CB%20%u043C%u0435%u043D%u044E%5Cn%5Cn%u041F%u0430%u043F%u043A%u0430%20%u0434%u043B%u044F%20%u044D%u043A%u0441%u043F%u043E%u0440%u0442%u0430%3A%5Cn%22%20+%20getPathToHtmlFileFolder%28%29%3B%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

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

Выделить код

Код:

self._handleClick =()=> menuPopup.openPopup(this, "after_start");


var array = [
   [ "Экспорт всех CB кнопок в HTML файл", "setPathToHtmlFile()", "data:image/x-icon;base64,AAABAAEAEhIAAAEAIACABQAAFgAAACgAAAASAAAAJAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADg/o/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADg/o/w4P6P8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADg/o/zUq6P8OD+j/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADg/o/0RC//0cE+X/Dg/o/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQW5/8tMOT/Njfw/0BA+v9JSP//UU///1hT//9aVv3/RUL5/zQy+f8zNPH/JSHa/w4P6P8AAAAAAAAAAAAAAAAAAAAAAAAAABAR5v0UFeL/Hh7v/Soo+P80Mf39PDn+/0I+//05NPn/F5sr/zlO0/08PeL/NDbb/Rwdyv8OD+j/AAAAAAAAAAAAAAAAAAAAAA4P6P8XGOn/Hh7x/yQk9f8rKvX/MjD1/zk0+f85NPn/F5sr/xebK/8lQ6n/Hx/D/w4P6P8AAAAAAAAAAAAAAAAAAAAAAAAAAA4P6P8OD+j/Dg/o/w4P6P8OD+j/Dg/o/w4P6P8OD+j/F5sr/zfyX/0Xmyv/Dg/o/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH3EgP+W8J//m/Sk/6D5qv+k/K7/qPyz/6z8uP9t2H7/QuJf/zz/Xv8f7UX/F5sr/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOQFP8f5D3/KexI/zL3U/87/V3/Qf9k/0T/aP9K/2v/Qf9j/zn5Wf8571X/Kt1J/xebK/8AAAAAAAAAAAAAAAAAAAAAAAAAAAeUGf0Y6Tj/IvNE/Sn6Tv81/lj9Pv9h/0X9Z/1H/mf/Rvpk/0HvXP064VP/MtZL/RrHN/8Xmyv/AAAAAAAAAAAAAAAAAAAAAAmYHP8JmBz/CZgc/wmYHP8JmBz/CZgc/wmYHP8JmBz/CZgc/zjgUf8x1kj/FMIy/xebK/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKL08/zDXSP0NvCz/F5sr/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHKsv/xS9Lv8Xmyv/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF5sr/xebK/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF5sr/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//8BB/9/AQf/PwEH/x8BB/8PAQcABwEHAAMBBwAHAQcADwEHAA8BBwAHAQcAAwEHAAcBB/8PAQf/HwEH/z8BB/9/AQf//wEE="],
   [ "Открыть в вкладке HTML файл", "openHtmlFileInTab()", "data:image/x-icon;base64,AAABAAEAEhIAAAEAIACABQAAFgAAACgAAAASAAAAJAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF5sr/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXmyv/F5sr/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABebK/8UvS7/HKsv/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF5sr/w28LP8w10j9KL08/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXmyv/FMIy/zHWSP844FH/CZgc/wmYHP8JmBz/CZgc/wmYHP8JmBz/CZgc/wmYHP8JmBz/AAAAAAAAAAAAAAAAAAAAABebK/8axzf/MtZL/TrhU/9B71z9Rvpk/0f+Z/9F/Wf9Pv9h/zX+WP0p+k7/IvNE/RjpOP8HlBn9AAAAAAAAAAAAAAAAAAAAAAAAAAAXmyv/Kt1J/znvVf85+Vn/Qf9j/0r/a/9E/2j/Qf9k/zv9Xf8y91P/KexI/x/kPf8DkBT/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF5sr/x/tRf88/17/QuJf/23Yfv+s/Lj/qPyz/6T8rv+g+ar/m/Sk/5bwn/99xID/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADg/o/xebK/838l/9F5sr/w4P6P8OD+j/Dg/o/w4P6P8OD+j/Dg/o/w4P6P8OD+j/AAAAAAAAAAAAAAAAAAAAAAAAAAAOD+j/Hx/D/yVDqf8Xmyv/F5sr/zk0+f85NPn/MjD1/ysq9f8kJPX/Hh7x/xcY6f8OD+j/AAAAAAAAAAAAAAAAAAAAAA4P6P8cHcr/NDbb/Tw94v85TtP9F5sr/zk0+f9CPv/9PDn+/zQx/f0qKPj/Hh7v/RQV4v8QEeb9AAAAAAAAAAAAAAAAAAAAAAAAAAAOD+j/JSHa/zM08f80Mvn/RUL5/1pW/f9YU///UU///0lI//9AQPr/Njfw/y0w5P8UFuf/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADg/o/xwT5f9EQv/9Dg/o/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4P6P81Kuj/Dg/o/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOD+j/Dg/o/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADg/o/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//8BB/v/AQfz/wEH4/8BB8P/AQeAAwEHAAMBB4ADAQfAAwEHwAMBB4ADAQcAAwEHgAMBB8P/AQfj/wEH8/8BB/v/AQf//wEE="], 
   [ "separator" ],
   [ "Открыть папку для экспорта CB кнопок", "openHtmlFileFolder()", "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAK8AAACvABQqw0mAAAABZ0RVh0Q3JlYXRpb24gVGltZQAwOC8xMS8wNdiEE10AAAAldEVYdFNvZnR3YXJlAE1hY3JvbWVkaWEgRmlyZXdvcmtzIE1YIDIwMDSHdqzPAAACiUlEQVR4nKWTy0uUYRTGf+/np6PTODOmMpaGhJRaZmQgRAQtglaBf4BRtGgTFLUqKjBoF1QQlBLdKCgrscuiFEq6gGmQBWWSYLfpMqXMTM71+773PS0kQXBR9MBvdZ7z8HDgKBHhf2T9jUkdUbVKKTXfzH7eqVpdXbDDzWvRmrDngePyMZniXfsxLtLBFuAWhziqlOoQET0n4dlprk5/uysisTncO7Gqt3s/N5eeWCjD8T5ZcWa5nNvFmc6d7AEKRAQRgaHT9Gcyb0XyB+ain8jGC+ul5/15GXTuSN+3bmntapHj2+kFyv6E2K7DSrw0Yw9v8ys6gS9chfbgWvA5K2qXUb2knAfZflaXrWXTqg2MByNt12sG25JTiaRSqsI2wuLU5HdyU19p2TZOga+IfX27CUdqqG8KMeK9IKdchtLP8GpdaivXcN8S1g3cDwERWxvIJmP4K1qwfRmQl5wc6p450B14dLiHCecTzf5mtp7aC0BlqJx1M44iywjk4q/xVzSDxMEkkYNXkIOXKSsOoESwUChgoS+At/8GI5u7JOswDIhlDKR/DBKoXA4mCiYxS124nBLxqKCQoGjqwuV46QSTH0fIOYwCjm0MuOnPFAXrwB2eKWY8yKdoDJbgd35S5eYJmWkaQqWYfCGf3wyQc4gCrm0EvMwXiksXQW4SslnIZ0GEhkAJC3IJIq4mpNM0lgaxiqpJTX1SP38xCni2ESgtsxBjgd0OAYHATJHGmgH8Ja1ECusIWSHqa6rI5MKk4lGejjEKuLbWvJqMmdVDZ5vwPGbRGr5rxeDjahJuCtsUE43FSOaFRJpLIx9IAK4CbKAS8AHzPsw8MkAaiCsRQSll/8PybIiI6N8D8VYf0gJ8eQAAAABJRU5ErkJggg=="],
   [ "Экспорт всех CB кнопок в HTML файл без запроса", "exportsButtonsToHtmlFile()", "data:image/x-icon;base64,AAABAAEAEhIAAAEAIACABQAAFgAAACgAAAASAAAAJAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE8A/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE8A/wBPAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE8A/wBkAP8ATwD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE8A/wB6AP0AUgD/AE8A/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABUAP8AZQD/AG4A/wB3AP8AfwD/AIQA/wCHAP8AiAD/AHkA/wBtAP8AbAD/AFgA/wBPAP8AAAAAAAAAAAAAAAAAAAAAAAAAAABQAP0AUgD/AFwA/QBmAP8AbgD9AHQA/wB4AP0AbwD/F5sr/wBzAP0AbgD/AGcA/QBQAP8ATwD/AAAAAAAAAAAAAAAAAAAAAABPAP8AVgD/AF0A/wBiAP8AZwD/AGsA/wBvAP8AbwD/F5sr/xebK/8AXgD/AFAA/wBPAP8AAAAAAAAAAAAAAAAAAAAAAAAAAABPAP8ATwD/AE8A/wBPAP8ATwD/AE8A/wBPAP8ATwD/F5sr/zfyX/0Xmyv/AE8A/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH3EgP+W8J//m/Sk/6D5qv+k/K7/qPyz/6z8uP9t2H7/QuJf/zz/Xv8f7UX/F5sr/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOQFP8f5D3/KexI/zL3U/87/V3/Qf9k/0T/aP9K/2v/Qf9j/zn5Wf8571X/Kt1J/xebK/8AAAAAAAAAAAAAAAAAAAAAAAAAAAeUGf0Y6Tj/IvNE/Sn6Tv81/lj9Pv9h/0X9Z/1H/mf/Rvpk/0HvXP064VP/MtZL/RrHN/8Xmyv/AAAAAAAAAAAAAAAAAAAAAAmYHP8JmBz/CZgc/wmYHP8JmBz/CZgc/wmYHP8JmBz/CZgc/zjgUf8x1kj/FMIy/xebK/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKL08/zDXSP0NvCz/F5sr/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHKsv/xS9Lv8Xmyv/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF5sr/xebK/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF5sr/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//8BB/9/AQf/PwEH/x8BB/8PAQcABwEHAAMBBwAHAQcADwEHAA8BBwAHAQcAAwEHAAcBB/8PAQf/HwEH/z8BB/9/AQf//wEE="]
];
var menuPopup = self.appendChild(document.createElement("menupopup"));
array.forEach((m,i)=> {
   if ( m[0] == "separator" ) { menuPopup.appendChild(document.createElement("menuseparator")); return };
   var mItem = menuPopup.appendChild(document.createElement("menuitem"));
   mItem.setAttribute("label", m[0]);
   mItem.setAttribute("class", "menuitem-iconic");
   mItem.setAttribute("image", m[2]); 
   mItem.addEventListener("command", ()=> eval(m[1]));
});
menuPopup.setAttribute("onclick", "event.stopPropagation()");


function openHtmlFileInTab() {
   var fp = window.makeFilePicker();
   fp.init(window, "Выберите HTML-файл для импорта закладок", fp.modeOpen);
   fp.appendFilters(fp.filterHTML);
   Cu.import("resource://gre/modules/FileUtils.jsm");
   fp.displayDirectory = FileUtils.File(getPathToHtmlFileFolder());
   fp.open(re=> { 
      if ( re == fp.returnOK )
           gBrowser.selectedTab = gBrowser.addTab(fp.file.path, { triggeringPrincipal: Services.scriptSecurityManager.getSystemPrincipal(),})
   })
};

function exportsButtonsToHtmlFile() {
   var visibleCBbuttons = [...document.querySelectorAll('[cb-mode]')];
   var paletteCBbuttons = [...custombuttons.palette.querySelectorAll('[cb-mode]')];
   var allCBbuttons = visibleCBbuttons.concat(paletteCBbuttons);
   
   var array = [];
   allCBbuttons.forEach(but=> {
      var uri = but.URI ? but.URI : getPaleteButtonsURI(but);
      var name = but.getAttribute("label") || "Без названия";
      var image = but.getAttribute("image") || "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAACNFBMVEXDRgDweQDnbwC0NgDCRQC7PQDtpTu+QQD78q3PUwDCRAD//8vbYQDLTgDocAD0iQX1jQbGSgD7iAD4gwDVaw7vdwDyegD+igDweQDlawDyhAXveADmZwDzmBbtcwDwkhHveADmhBTkgxbweADkfRH+igD7hADXZQX0gADyjA/tfgvveQDiawDQVADRXgfnbwD1jAb9iQD9z0PVZAbxpinykRHtdgD5mRbERQDDRgDOYArCRAD9iQD3ewDxegD3dwDFRgDAQAD+hgD4fQDucgDtgQftfwTISQDCRQDvdgD5lxb1kRb2qh7wnynkagD766LDRQDDRwDDRQDspjbtpzbuqDbvqzv//8DUZAbCRQD//83pjhvveQbvggW+QQDfcxLlmUb//8veYADMTwDHSADVVwC8PgDwixb78q3oZgDUWADRVADCRQD9iQDERwDBQQDYVQC+PgC0NgDbYQDWWgDUWADSVQDFSAC+QAC7PAC0NgD+wRL+/kD+/zb+7i3+8Cv+/DX+wBL/+DD/rwz+qgz+rwz/tAz+sQzfbAT+3iP/+jD//Dz1jwP+nwf5iwf7pBz2tRr4lwb/ogfsdQT+2R7/9ET+2iT8yyLmgBL5iQL2egLokhP7zzT60zv1zUr0gAL1ewP50yn9+UL++EXooyngaAH41EPzowzyySj+xxzlhhHvvyruwjXxvTnUag3+zxrwigP+swz86U/ZXwD75lHqegD6xzb//kn+uhPTXAG3OAD/+UC2vFeJAAAAe3RSTlMAAAAAAAAAAAAAAAAAAAAAAAAAAACfnwAIaelpAAA2+wD7UQAAa3oArKzRzMysnwgAvPQA/gAAw3prw0oALr16vS4AACnF6bspAAAA/mIAADQAAAAAAI8AAEwA0vv7kd2yAuuvr+vKABL23U+8Sk/d9vUDIIAQAAAQgCAfvupHAAABB0lEQVR4Xi3IU3fDABgA0C+u26FdZ9u2bdu2vZSzbds2/tyac3IfLxjpGyA6MimqY6gHTNgiiNwkwRM1E7EhTrYyTfMzzsh0ZEPiH+D6+u5mV1jEhpe5haVCYW1T4suEvUOkk7PLpVJ5WFnl7hEUDN5LPvsHJ6cazdn13f3DYxu0B35+/Y2qVSr17NzGeUgohIVHLK/PMDa39qKieRATGxd/9cS4uU1MwnmQktqY/qGlaVr7/ZOVDTmQm5df8PwyNj4xOTVdjOM4kCRZOr+wWFa+srpWQVEU8PnV2zu7NbV19UfHDQRBAIfTdNHc0soVdnR2dfdgGAgEvW99/QNc4eDQ8O8Ihv0D77NPgbVLZ6kAAAAASUVORK5CYII=";
      
      array.push("<img src=" + image + ">&nbsp<a href=" + uri + ">" + name +"</a><br>\n");
   });
   
   var before = "<html>\n<head>\n<meta http-equiv='Content-Type' content='text/html; charset=utf-8'>\n</head>\n<body>\n";
   var after = "\n</body>\n</html>";
   var text = before + array.join("") + after;
   var text = convertFromUnicode("UTF-8", text); 
   
   var date = new Date();
   var time = date.toLocaleString('ru', {year: 'numeric', month: 'numeric', day: 'numeric'})
   var time = time + '. ' + date.toLocaleTimeString().replace(/:/g, "˸");

   var file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile);
   file.initWithPath(getPathToHtmlFileFolder());
   file.append("CB buttons " + time + ".html");
   custombuttonsUtils.writeFile(file.path, text);

   var alertsService = Cc["@mozilla.org/alerts-service;1"].getService(Ci.nsIAlertsService)
   alertsService.showAlertNotification(self.image, self.label, "Экспортировал все CB кнопки как HTML в " + file.path);
   setTimeout(()=> alertsService.closeAlert(), 4000);
};


function getPaleteButtonsURI(but) {
   var doc = document.implementation.createDocument("", "", null);
   doc.async = false;
   doc.load("chrome://custombuttons/content/nbftemplate.xml");

   ["help,Help", "name,label", "image,image", "mode,cb-mode", "initcode,cb-init", "accelkey,cb-accelkey", "code,cb-oncommand"]
   .forEach(str=> {
      var arr = str.split(',');
      var value = but.getAttribute(arr[1]), name = arr[0];
      custombutton.buttonSetText(doc, name, value, true);
   });

   var ser = new XMLSerializer();
   return "custombutton://" + escape(ser.serializeToString(doc));
};


function openHtmlFileFolder() {
   var folder = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile);
   folder.initWithPath( getPathToHtmlFileFolder() );
   folder.launch();
};


function setPathToHtmlFile() {     
   var fp = window.makeFilePicker();
   fp.init(window, "Укажите папку для экспорта CB кнопок!", fp.modeGetFolder);
   fp.open(re=> { 
      if ( re != fp.returnOK ) return;
      cbu.setPrefs("CB.exportsButtonsToHtmlFile.path", convertFromUnicode("UTF-8", fp.file.path));
      
      exportsButtonsToHtmlFile();
   })
};


function getPathToHtmlFileFolder() {
   var s = "CB.exportsButtonsToHtmlFile.path", pref = Services.prefs;
   var str = pref.getStringPref ? pref.getStringPref(s) : pref.getComplexValue(s, Ci.nsISupportsString).data;
   try { return str } 
   catch(e) { return "C:" };
};


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();
};


this.onmouseover =()=> { 
   this.tooltipText = self.label + "\nЛ: Меню кнопки\nП: CB меню\n\nПапка для экспорта:\n" + getPathToHtmlFileFolder();
};

Закрывать боковую панель кликом на пустом месте странице (PaleMoon 27 и FF52 esr проверялось)
по клику на пустом месте страницы(клик на ссылке игнорируется) или нажатием ESC (не делает stop если страница загружается), в код можно добавить список адресов где не нужно по клику закрывать панель, переменная arr. Сейчас там два исключения: не закрывать в ScrapBook и на страницах с адресами, которые начинаются на data:. Не обязательно создавать новую CB кнопку, можно использовать уже существующую и положить код в любую Custom Buttons кнопку, в инициализацию.

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

Выделить код

Код:

/*Initialization Code*/
// ---------12--------------------------- (auto-hide SideBar) ---------------------------------------------------------------

(function() { this.clickPageSB = function(event) { gBrowser.addEventListener('mousedown',on, false);   };

    function go() {
           clickPageSB(event);
           let selection = getBrowserSelection();
           const sidebarbox = window.document.getElementById("sidebar-box").hidden;
             if ( !sidebarbox && !selection && getLoc() ) toggleSidebar();
           }

    function on(e) {
      if ( e.button != 0 || e.target.tagName.toLowerCase() === 'a') return;
       gBrowser.removeEventListener('mousedown',on, false);
       timeoutId = setTimeout(go, 500)   
       }

    function off() {   clickPageSB(event);     clearTimeout(timeoutId)   }
      sidebar.addEventListener('click',off, false);
       clickPageSB(event);

// текущий адресс.
//  Исключения в массиве arr - если адресс совпадает, начинается с ... то выход. иначе возврат текущего урл.
 function getLoc() {
     let loc = content.location.href;
     let arr = ["chrome://scrapbook/","data:"];
    for (var i = 0; i < arr.length; i++) {
      if ( loc.startsWith(arr[i]) == 1 ) return;
      }
    return loc;
   };
       

// ------------ Закрывать по ESC бок. панель ------------
 document.addEventListener('keypress', function (e){
       const sidebarbox = window.document.getElementById("sidebar-box").hidden;
          // Shift=16, T=84, ESC == 27
          switch(e.keyCode) {
             case 27:
               if( gBrowser.webProgress.isLoadingDocument && !sidebarbox ) { e.preventDefault();  toggleSidebar(); }
                 else if ( !sidebarbox )  toggleSidebar();
             }
       }, false);
 })();