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

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

№107613-08-2009 23:23:23

3Jlou
Участник
 
Группа: Members
Зарегистрирован: 14-08-2008
Сообщений: 211
UA: Firefox 3.0

Re: Custom Buttons

Помогите вылечить кнопку, лепил код из нескольких кнопок (контекстное меню брал от кнопки под Custom Buttons 2), в принципе кнопка рабочая (ЛКМ открывает дополнения в боковухе, СКМ открывает/закрывает вкладку с дополнениями, ПКМ выкидывает меню со списком дополнений), но иконка выглядит неактивной и консоль ошибок отображает ошибку в строке:

Выделить код

Код:

subMenu.setAttribute("image", Cb.defaultImg());

Закомментировал эту строку, кнопка стала конфликтовать с расширением MR Tech Toolkit: ЛКМ не работает, СКМ не закрывает вкладку при повторном нажатии, а на ПКМ вообще выпадает меню MR Tech Toolkit :o

Отключил MR Tech Toolkit - кнопка работает как надо, включил - конфликтует. Где собака зарыта?

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

Выделить код

Код:

this.url2xul= 'chrome://mozapps/content/extensions/extensions.xul';
this.onClick= function(e)
{
    switch (e.button)
    {
        case 0: 
            openWebPanel(this.tooltipText, this.url2xul); 
            break;
        case 1: 
        {
            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;
                };
            };
        }; 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 subPopup = document.createElement("menupopup");

// subPopup.appendChild(cbPopup);
// subPopup.appendChild(cbPopup.lastChild);

var subMenu = document.createElement("menu");
subMenu.setAttribute("label", "Custom Button");
subMenu.setAttribute("image", Cb.defaultImg());
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);
// popup.appendChild(subPopup);

extensionsPopup.parentNode.appendChild(popup);

this.setAttribute("context", popup.id);
this.onclick = function(aEvent) {
  if(aEvent.button === 1) gBrowser.selectedTab = gBrowser.addTab('chrome://mozapps/content/extensions/extensions.xul?type=extensions');
}

Отсутствует

 

№107714-08-2009 14:03:58

Jarichek
Member I
 
Группа: Members
Откуда: Минск
Зарегистрирован: 09-04-2009
Сообщений: 306
UA: Firefox 3.5

Re: Custom Buttons

Anton
У меня в консоли ошибок появляется вот такое:

Выделить код

Код:

Ошибка: uncaught exception: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsIDOMLocation.hostname]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: chrome://custombuttons/content/cbbutton.js :: anonymous :: line 356"  data: no]

при нажатии на кнопку "Поиск по сайту" (ту, что ты выше помог сделать) при зажатом Ctrl на пустой вкладке. Может быть нужно исправить, чтобы на пустой вкладке выскакивало это окно без заполненного поля "Сайт"?

Отсутствует

 

№107814-08-2009 17:45:37

Anton
Участник
 
Группа: Extensions
Откуда: от верблюда
Зарегистрирован: 14-12-2004
Сообщений: 3057
UA: Firefox 3.5
Веб-сайт

Re: Custom Buttons

vurdalak пишет:

Проблема в том, что в коде инициализации кнопки, свойство getBrowser (). contentDocument. location. href; инициализируется один лишь раз, в итоге , если перейдешь на другую страницу (или откроешь другую вкладку) браузеры открывают страницу, ту которая проинициализировалась вначале, а никак не текущую..

Своими методами тыка пока ничего не добился, подскажите , плиз, че , где дописать

Код кнопки не предназначен передавать в качестве аргументов url.
Дописывать надо многое. Можно попросить автора кнопки.


Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!

Отсутствует

 

№107914-08-2009 17:50:57

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

Re: Custom Buttons

Jarichek пишет:

У меня в консоли ошибок появляется вот такое:

Выделить код

Код:

Ошибка: uncaught exception: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsIDOMLocation.hostname]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: chrome://custombuttons/content/cbbutton.js :: anonymous :: line 356"  data: no]

Найти все обращения к location.hostname и завернуть в try/catch.

Было:

var url = doc. location. hostname;

Стало:

Выделить код

Код:

try { var url = doc. location. hostname; }
catch(e) { var url = ""; }

Добавлено 14-08-2009 17:51:41

Anton пишет:

Дописывать надо многое. Можно попросить автора кнопки.

Скорее даже не «до», а «пере». =)


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

Отсутствует

 

№108014-08-2009 18:00:48

vurdalak
Участник
 
Группа: Members
Зарегистрирован: 03-06-2005
Сообщений: 173
UA: Firefox 3.5

Re: Custom Buttons

Дописывать надо многое. Можно попросить автора кнопки.

Скорее даже не «до», а «пере». =)

Ничего себе, не ожидал :/

Автор кнопки Yan ?

Черт, не могу успокоится :whistle:, а может можно при нажатии на кнопку или меню , чтобы всегда выполнялся код "инициализация" кнопки хотябы ?:whistle:

Отредактировано vurdalak (14-08-2009 18:10:43)

Отсутствует

 

№108114-08-2009 18:15:19

Anton
Участник
 
Группа: Extensions
Откуда: от верблюда
Зарегистрирован: 14-12-2004
Сообщений: 3057
UA: Firefox 3.5
Веб-сайт

Re: Custom Buttons

ЛКМ не работает, СКМ не закрывает вкладку при повторном нажатии,

Это потому что в конце кода устанавливается ещё один обработчик onclick:

Выделить код

Код:

;
this.onclick = function(aEvent) {
  if(aEvent.button === 1) gBrowser.selectedTab = gBrowser.addTab('chrome://mozapps/content/extensions/extensions.xul?type=extensions');
}

Его надо убрать, тогда будут работать ЛКМ, СКМ.

3Jlou пишет:

а на ПКМ вообще выпадает меню MR Tech Toolkit

Это как раз случается, если упомянутая строка

Выделить код

Код:

subMenu.setAttribute("image", Cb.defaultImg());

не закомментирована.


Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!

Отсутствует

 

№108214-08-2009 18:46:26

Anton
Участник
 
Группа: Extensions
Откуда: от верблюда
Зарегистрирован: 14-12-2004
Сообщений: 3057
UA: Firefox 3.5
Веб-сайт

Re: Custom Buttons

vurdalak пишет:

Автор кнопки Yan ?

Я не знаю. Если честно, я и свои не все помню (но эту точно не писал).

vurdalak пишет:

при нажатии на кнопку или меню , чтобы всегда выполнялся код "инициализация" кнопки хотябы ?

Ну, вообще-то мысль. Будет работать. Допиши в конец

Выделить код

Код:

this. onmouseover = function (event)
{
    this. removeAttribute ("initialized");
    this. init ();
};

Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!

Отсутствует

 

№108314-08-2009 19:16:07

vurdalak
Участник
 
Группа: Members
Зарегистрирован: 03-06-2005
Сообщений: 173
UA: Firefox 3.5

Re: Custom Buttons

Эх-йолы палы
Когда нажимаю на меню кнопка перенициализируется и меню ускользаааает (поиграйся с вкладками):cry:
Может всесто this. onmouseover onclick какой нибудь ?

Да и в принципе этот подход нивелирует задачу, изложенную в посте http://forum.mozilla-russia.org/viewtop … 68#p364268

Надо как то при this. onmouseover назначать переменной свойство getBrowser (). contentDocument. location. href и повторно ее инициализировать

Отредактировано vurdalak (14-08-2009 19:30:25)

Отсутствует

 

№108414-08-2009 19:20:27

Anton
Участник
 
Группа: Extensions
Откуда: от верблюда
Зарегистрирован: 14-12-2004
Сообщений: 3057
UA: Firefox 3.5
Веб-сайт

Re: Custom Buttons

vurdalak
Вот так попробуй:

Выделить код

Код:

this. onmouseover = function (event)
{
    if (event. originalTarget != this)
        return;
    this. removeAttribute ("initialized");
    this. init ();
};

ps. Но от "фишки" с сохранением иконки придётся отказаться.

Отредактировано Anton (14-08-2009 19:21:53)


Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!

Отсутствует

 

№108514-08-2009 19:31:16

vurdalak
Участник
 
Группа: Members
Зарегистрирован: 03-06-2005
Сообщений: 173
UA: Firefox 3.5

Re: Custom Buttons

ps. Но от "фишки" с сохранением иконки придётся отказаться.

Вот это я и написал выше, пока не видел твое сообщение .....

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

А вообще как передавать значение переменные из кода инициализации в код и наоборот ?
Эх знать бы синтаксис , сам бы че-то мутил, а то уже наверное надоел немного ;)

Отредактировано vurdalak (14-08-2009 19:42:24)

Отсутствует

 

№108614-08-2009 19:42:42

Anton
Участник
 
Группа: Extensions
Откуда: от верблюда
Зарегистрирован: 14-12-2004
Сообщений: 3057
UA: Firefox 3.5
Веб-сайт

Re: Custom Buttons

vurdalak
Ладно, тогда вместо "this. onmouseover...." в конце добавляем

Выделить код

Код:

mP. firstChild. setAttribute ("oncommand", 'event.stopPropagation();this.f(this.getAttribute("path"),getBrowser().contentDocument.location.href,this);');
mP. firstChild. nextSibling. setAttribute ("oncommand", 'event.stopPropagation();this.f(this.getAttribute("path"),getBrowser().contentDocument.location.href,this);');

а после

Выделить код

Код:

var m = document.createElement('menuitem');

добавляем

Выделить код

Код:

m.setAttribute('path',path);

Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!

Отсутствует

 

№108714-08-2009 20:00:10

vurdalak
Участник
 
Группа: Members
Зарегистрирован: 03-06-2005
Сообщений: 173
UA: Firefox 3.5

Re: Custom Buttons

УРА - :D Родили наконец
Ни единого сбоя теперь ...
Спасибо...

Выложу код, может кому пригодиться

Выделить код

Код:

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%3EFavorite%20Applications%3C/name%3E%0D%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABwAAAA5AAAARgAAAEEAAAA4AAAAJAAAAA0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFQAAAU8dLhSTS2YrwmGEU9U8hoPMCXCHwAg/SqMCEBNtAAAALQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAGRUeD3dShTXYerNF/3nFov844ff/E9///xLY//8Vz/X/G6jG8RBIVqoAAABAAAAABQAAAAAAAAAAAAAAChsoEndjpzvzY6sr/3q7nf835f//Etz//xDZ//8P1vz/EdL3/yDJ7f8jwOP/D2d7wwECAjUAAAAAAAAAAAcNBD5enDjpUq4e/0CPFf91n5z/ZeP5/zbm//8h3f//Edn//w/X/f8U0PX/H8Hl/yC94f8NUWGhAAAADQAAAAY5WSWYYLYw/0CiHv9LskP/V6BZ/3iUkf973O7/XfD//zjl//8O2f//Ddf9/xLP9P8iweT/HKbF8wMSFTwOFAooZJxD11CuLf9MsEX/Vr1t/23Tm/+Zyqn/fYGB/4ajr/+Qzdv/bOv//xLb//8O1fr/Fsjt/yK94f8LS1l5KDYeTWyxTO5Lrz7/Vrxq/2jOmP+m2bz/ZHpc/01JMP9aQCD/TD8y/3iQmv9e5fz/Ctf+/xLQ9f8hxOn/GXOIoSk7IFNntVL0ULdX/13GiP+S4L7/epN2/2VWJP/Hghv/340n/7l7Iv9TRzT/ZbLI/yTi//8J1f3/H9H2/x17kak1Qi86d8Bv6la+bv9q0KH/ot69/2JuTf+8fiz/759M//K6g//yo1L/mXs+/1ubp/887///I9Tt/0Covf8fc4mRHyocC3u6fMpiyYn/c9Sq/6Tfwf9wcWH/wYg4//WtYv/2yJH/96te/7KNTP9ff5P/Voel/0NQkf9KWbL/Hl9xUwAAAABTelpzgd6q/5Hfu/+ZwKn/hYS//3RjY//Hk1//0o9Z/7J5Of+WhI3/UE/U/w8I3f8JA+7/P2Dz3RQnJhEAAAAAFyEaDKTiw8244sL/jY+5/zQy9/9kZdT/a2me/2dilf9naK//YmPt/xEQ8/8AAOr/EhL0/ytPj1IAAAAAAAAAAAAAAAA5SUMqpcip2nJ0sP8WFeb/AwPh/yor5f81NuX/ISHk/wAA2f8AANb/CAje/w0Nj3kAAAAAAAAAAAAAAAAAAAAAAAAAAB8kHRZAQ4OKXFzf7iUlzP8TE8v/EhLK/xoay/8tLc/+NTXD0h8fe1YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADY2cD98fOOadnbc03d33Nh/f+TAa2u9bx4eNBcAAAAAAAAAAAAAAAAAAAAA+A8AAOAHAADAAwAAgAEAAIAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAgAEAAMADAADgBwAA+A8AAA%3D%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%5Bvar%20login%20%3D%20%22Administrator%22%3B%20%20%20%20%20%20%20%20%20%20//%20Here%20put%20your%20login%20name%21%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//%20So%20you%20can%20use%20%22Show%20Desktop%22%20command%21%0A%0A/*%0AIf%20you%20deleted%20%22Show%20Desktop%22%20from%20your%20Quick%20Launch%20toolbar%2C%20just%20enter%20this%20URI%0Ain%20your%20Firefox%20and%20save%20the%20file%20as%20%22Show%20Desktop.scf%22.%20Then%20you%20can%20put%20it%20in%20you%20Quick%20Launch%21%21%0AShowDesktop%3D%22data%3Aapplication/x-unknown-content-type%3Bbase64%2CW1NoZWxsXQ0KQ29tbWFuZD0yDQpJY29uRmlsZT1leHBsb3Jlci5leGUsMw0KW1Rhc2tiYXJdDQpDb21tYW5kPVRvZ2dsZURlc2t0b3ANCg%3D%3D%22%3B%0A*/%0A%0Avar%20apps%20%3D%20new%20Array%3B%0ADefault%3D%27data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACkElEQVR4XqXNa2jVZQAG8N//nJ3jmbs4l6XZhSGI0sWhQ9CCpKhcWljOYCLZDZEgsA+RFEQWCcEsF8vsy9yHLiKCGxgsVnZZzLm2BV2kYdgWJ7cyN6Zn7nLO8bwh9KmBX/rB8/F5niiE4H/r2qX+xLPaTu4TPt1mvG2LyfYnjaAYcdcQXS1PxBzOZnh4L0bI/M7oKL+ccD6W1Vt7VB1yKMwauPpcvd6m6+7BcWQxByVkphjKcbbd4cfa7MDUf0dilzM2Dg0gzfRl6e//sG84q7Ww0ExZDVVLyOdsbqn1IlKIAEDfHiH0C6FTSO/ViuW4teEFa3/rrSyEv4WZHuHI1lRI7vwod8u2lqeQQASxzBky3chy8002vVHnelw8OPXJK5svNEcqSMb5NXOnxTXriiZnHCqrb0nfsKV5OxKxfNLuzi9cchGlole3+ybT6UC5P28zXkEBw6xeNGDZYJ/b77s/mn/XqoX5bHYDSiMkv3zG5XvvVqQYU5iLxYhjEEmG0rxz7vn+gQdfW1UqGX1+sp++gY4YcoWk/EiCn0bJ1mAMP+MvXKL7K3q+lW7a/97TUTT8VmpJifLVa2QrylfGEKbH7Ow56nTXcQ2nWl2BoTGGKrGCsYvzfLbmyHlMd9RWN5bk4yZGZ4TxTCoCJFCO4o5dTi99VHnPuy4cG1u3oG7FDxpT+5294wk3zg0SybiRqci5HLraRYAIRYg3r7c15NUeiuq/O7Xs8YbUvMpocnkVySpGUYoJ/NguMXAmbTYJzMeiBRvffq7ykaYPyjYc6PX+YPDmSHCwO/g6hKjuwwKqzSZCEZIoRmXZA417vHwsxHd8PD1n7esNsYeapotW7n4JSyPXFiGOJEr/DVxBwOQ/YMb/YyJTjUkAAAAASUVORK5CYII%3D%27%3B%0AGchrome%3D%27data%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABwAAAA5AAAARgAAAEEAAAA4AAAAJAAAAA0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFQAAAU8dLhSTS2YrwmGEU9U8hoPMCXCHwAg/SqMCEBNtAAAALQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAGRUeD3dShTXYerNF/3nFov844ff/E9///xLY//8Vz/X/G6jG8RBIVqoAAABAAAAABQAAAAAAAAAAAAAAChsoEndjpzvzY6sr/3q7nf835f//Etz//xDZ//8P1vz/EdL3/yDJ7f8jwOP/D2d7wwECAjUAAAAAAAAAAAcNBD5enDjpUq4e/0CPFf91n5z/ZeP5/zbm//8h3f//Edn//w/X/f8U0PX/H8Hl/yC94f8NUWGhAAAADQAAAAY5WSWYYLYw/0CiHv9LskP/V6BZ/3iUkf973O7/XfD//zjl//8O2f//Ddf9/xLP9P8iweT/HKbF8wMSFTwOFAooZJxD11CuLf9MsEX/Vr1t/23Tm/+Zyqn/fYGB/4ajr/+Qzdv/bOv//xLb//8O1fr/Fsjt/yK94f8LS1l5KDYeTWyxTO5Lrz7/Vrxq/2jOmP+m2bz/ZHpc/01JMP9aQCD/TD8y/3iQmv9e5fz/Ctf+/xLQ9f8hxOn/GXOIoSk7IFNntVL0ULdX/13GiP+S4L7/epN2/2VWJP/Hghv/340n/7l7Iv9TRzT/ZbLI/yTi//8J1f3/H9H2/x17kak1Qi86d8Bv6la+bv9q0KH/ot69/2JuTf+8fiz/759M//K6g//yo1L/mXs+/1ubp/887///I9Tt/0Covf8fc4mRHyocC3u6fMpiyYn/c9Sq/6Tfwf9wcWH/wYg4//WtYv/2yJH/96te/7KNTP9ff5P/Voel/0NQkf9KWbL/Hl9xUwAAAABTelpzgd6q/5Hfu/+ZwKn/hYS//3RjY//Hk1//0o9Z/7J5Of+WhI3/UE/U/w8I3f8JA+7/P2Dz3RQnJhEAAAAAFyEaDKTiw8244sL/jY+5/zQy9/9kZdT/a2me/2dilf9naK//YmPt/xEQ8/8AAOr/EhL0/ytPj1IAAAAAAAAAAAAAAAA5SUMqpcip2nJ0sP8WFeb/AwPh/yor5f81NuX/ISHk/wAA2f8AANb/CAje/w0Nj3kAAAAAAAAAAAAAAAAAAAAAAAAAAB8kHRZAQ4OKXFzf7iUlzP8TE8v/EhLK/xoay/8tLc/+NTXD0h8fe1YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADY2cD98fOOadnbc03d33Nh/f+TAa2u9bx4eNBcAAAAAAAAAAAAAAAAAAAAA+A8AAOAHAADAAwAAgAEAAIAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAgAEAAMADAADgBwAA+A8AAA%3D%3D%27%3B%0AIExplorer%3D%27data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAABh0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjA4ZXKc4QAAAgtJREFUOE+NU99LU2EYnvSHdNP0uHUcw7n8RTmNgYKgWESXQexGNAoSIsoiutDhUDbndEmLWo1ayEydgV1FXWi1HINipC1rP9x2cptnJoo8nu+Dc9xxg3XggcP3ve/zvu/zPl8FAMX/fuaVGA0+keMUN9rYCppHCMphZCmI4eWoEHYUS85o8VLJ5FJE15s1dAR2ce62j0KML0kgJplCMRAYV3eg9Weh8nLQvN6C3p2QSIoICtu0hLNo9P2C8r4fpyyfwbiiqHr0B6wriQb3pqwTaYSxLynanuFjHo0zETBd/dC0XsaZi9dRfXMB1Y4YTk/EUf8sW0xQmEwImAeLULb3SvMSAv1wAKw9AZ3zL4Woh0zE1g95sN40Kh8LLdvXwdgiUFkjUFt/g7XGoR3fRMNUBoYnXDHB2SUe7CsOldNRqAe/loWsA5N/A3VzPFSuBJTjGzhpegpd97WykHzQPL+DWu82agSVVfYoGHMY6ksPZcYhOjR5ePQFD3DH//1ohCuC4uzkGq2mf56D1plCjTCvZjRONyBuweDj0Rvah/UbL99C52waLbde0mqUxCGsypmBfkIwztQWml/k0P3uHwZCexhaTtJkEic6UmGc4SQCkaT27ns02dZh9CTRM5fB1dmf9F/UpdD+ih73D9TfeysxXnCsSlWOC1nq3VAfnLcFoBv6BJJc7mUevz8EdJ2boXU7oPQAAAAASUVORK5CYII%3D%27%3B%0AWExplorer%3D%27data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAEG0lEQVR4AQEQBO/7Af///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAADNmjT/////AP7+/gD+/v4AOWzSCwAAAPj////+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8AzJkz///////////////////////Cjyn/AAAAEQAAAAL///8A////AP///wD///8A////AP///wD///8AAcyZM/8zZswAAACaAAAAAAAAAAAAAAAAAAAAZgC+iyUA/f39AP39/QD+/v4A/v7+AP39/QBQg+kLAAAA+P////4E////AAD4kgAA/f0A9fYCAMTVKQD1DjIA/P/nAA87uQAhFAsAJiYXAAAAAAAAAAAAr3wWAAAAAB8AAADhAAAA9gT+/v4AAPT0APPp6QCitxQAIl1DAAkFAwAKAwAANw8AANrd7AC1kFEACPrTAPz8/AAGBgYAs4Aa1urq6gABAQELBP7+/gAA9fUA49fXABE6mQAaFwMA+foAAPn7AADL6gAADxsUAA9AmAA8MBcAAAAAAADngQDq+PgAroeNAAAAAB8E/v7+AP3x8QDn3t4ADScFABYAAAACBgAA8QYAAN/5AAD89gAA/QPxAAAAsQAAAAAA+d/fAN/n5wDq+A8AAADsCgL9/f0A6ODgABUWGAAA9vcAFgAAABEAAAAHAAAACAcAAPn8AAAS/NcAAPj4AAD4+AD39/cA387OAH+j7D4AAAD5Av7+/gDi4uIAIjBLABf/8gDp7/UA8QAAAPkAAAADAQAA4szdAA334AAA7+0AAPT0AODg4AAEBgYAAAAA+QAAAOgE/Pz8AAICAgAMLVMANvDWANnaygDpBDQA9fv7AALy6AAZ8OYA9t7NAAD49gAAHSEA3d3dANvl/AAAAAD9AAAA+AT7+/sAISEhAAD8/AAA68oAJwz1ACcA2AAACAAAAA0AAO4QEAC7vzcACM+3ACf+3QD69/cAeqL2PgAAAPkAAAD+BAUFBQDY2NgA1tZFAP39/QD+/v4A/f39AP39/QD9/f0A/v7+APsIMADICVQABNK7ADgsKgAAAMz5AAAA6AAAAPgERHfdCwAAAB8AAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADGAAAAxgCggI3MCPXUAAAAzP0AAAD4/////gEAAAACAAAACAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAYAAAA/QAAAOH////2Af///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAgAAAAgAAAAAAAAA+P////59OFeo8fymrgAAAABJRU5ErkJggg%3D%3D%27%3B%0ACtrlPanel%3D%27data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAsTAAALEwEAmpwYAAAABGdBTUEAAIuuYjyvIgAAACBjSFJNAACHGwAAi/8AAP/YAAB91AAAgSAAAOmkAAAz8AAAJVC/P0EaAAAEG0lEQVR42mJkTDzG8P/ffwYpEU6Gzz/+8H//9Y+dh4s1+cOn3+zMbMwWf/8wWAAVMOi/nLtX8uet4L+MrAz/GBgYmIHY/ft3BoAAYgHSOYyMjCIfv/2x+Pnnv8WfH/+YPnz4zMsAVMbC+p9BQYCV4dNfNoYvf9j4vn37wvCXkZ3hF9BADyFhBtVv3xgAAoiF4e/fif+//Wb6+ukvAzvrPwYtUVYGSyM+Bl15HgYTLSkGRUkOhty5txkOXP//F+TSv/9+MrCxsjBICggw/H73jgEggFgYvn37HGXEx+9lJMpgqCrEoCTJw8DBycoAAh++vGP4y8TO8O8/IwMj0FaGf38Y2ISUGZgktBlYGR4x/P//nwEggFj+//jBkO2py2BlIAnW9Auo7uMvBoYfP38zvD2aycBr1MPAxsLO8PsvM8PPb58ZhByDGb4x8TAwPL0HNJiJASCAmFhYWRkevvoG1vz9NwPDN5Dm/wwMX57sZPjLrcnAwCfLwMXJzPDr19//X8XNGX5JWzP8/flVjOnLq5lC7G+XAwQQCwsLE8PHL7/BBvwG2v7zL9AVQAO+3V/E8E86juEvkP3/90+GbyzCzJ90wsRUuDhmGqgKO6v/4ufl/HiCASCAWJgYGRlefQBay/Cf4fsfRoZfjEDNTw4x/P5wiYHVyInh/hsGhhc//jEEhwU4OFmo3/vOxMN98Yo8w+p/ir8EX0uvBggAQQC+/wQBAAAA8fkCAPf25ADuzJEABC2AAPnkrgD/FUcA6ujpAMTU2gBKOz4ADgkHBcfU4wXNzbvV8efcyCAD8ZMlFRvSAgBBAL7/BAYFAwDz9vgA+AcnAP8IHAD0vkgAAAUPAPkplQCyqrAAEQDYAKTmJQDhz8HdGv3XbBUE9L8QAQT5BgIBAAP+/QACiAUc8n/+Mvz8DYw6pVyGf68OAWML6CUuBQYG23yGHwxfGMwefmK4/fj2dQbu5zsYhIFpjJmNAehZcLgBBBALIxMTw2dgIH79AQo8YGjrLWb4/fEWw+8/DAyaAowMh9/zMnAy/2L4w8TP+uLjK4a33xkZ+Pn/M8gKAh3K+I8BIIBY/gDN+gNMYT+AGn4AI+M3IzfDT35DsOninAwM8m9+Mxy5+Yrhz5+/zIzAhPPr1x+Gly+/MHz78p/h5x8hBoAAYvnz9x/DT6BrmNiAOoCGfAUmiRcf/jLcuPmU4eS5+wy3rt1g+Pfuyk8VtkefeNk+gxMPCAC9z/CekZkBIIBY/v/5wvL8LQfDtGW3GO49eMXwCpjCvjy7+Ov/99cf2P5/mKvO/eseA/v7E0wsbPc5OHmByfcfAzIACCAW9t9v3t6/+vzP0wub//D+f3pGkPnZaQHmP2t4eTjvMTKzfmZj4wAmbXagRiag7f+BNIp+BoAAAwDAMqTgcw5bNAAAAABJRU5ErkJggg%3D%3D%27%3B%0AMSNotepad%3D%27data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAABh0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjA4ZXKc4QAAAoJJREFUOE+lk/tL01EUwO0fy1ely6IUMoi0AoM0Sy1TMDMitZyvfLDNdM5HPle6RNt0mlvz0ebmYzoVN5vO4cQ5yxQFAz/NbxTo9Kcu3Hu4h3s/fM6BcwYI+q91CBBXdGDtjaG88LUQywoK/9yLJEKseaulRnzX/5Sg41tIiKsWaauX0mdxolUr6Btz0NpWh9Ls4ZNugHbbDpklMvKkTQEQAVD4YQmN+yeGzX00qzvUu9aodKwhc25TurhLtnWbuNb10wF5ygUqnD4UTg8Sxwa5Nhc5026eTnpIG18lYWSdBO3B6QCF2krutI838z7ypzdJNS+RZHJz3/idWyNeLvd7iFEfkKYwnFxCl95Mnm2FdPMGj81bxA25uKZfJla3wZXPm4R0exC93yGtdysAIvRAPWSm1rlEvP4H8UM+ogZcRPS5idKsc6HHQ7BymUj5Kum6A15KWo5YCIAeg5ku7xTXtV5itD7CuhcIVzm41LlChNLO2Xoboko7qV1bpFQNHLEQAB/9JUzsWUkaXOVih4tz7dOENU8gejeLqMFGsMyCqGCSpFoHyU32QIBKb8G6byR/fJmLTQ5C60Y5LzchqrYQKflKcNEXIrMNJBaP8ah1jVdVzf/KEAxUOgsLv6ZodM5xtWGe0LIBQkq0RBSPEF48TIjYRLTYRkqd3W+wyL2c0qOADp2ZyT0jet8Md1Quf8OMxCqnSO63kzVuJ2d2huhMKS8KyykqrQ5sYrfBb8AExt1hVOtzlLkHkXtHaVxxIJuZJ7trnhsJz0+fhXqNlc5lO3LTN3I7p3hQMcjNrBZuP6wkOb2EfLH0xM/CJB8eGc+kJGbIeJJTISge1zxpCv/mfgPvVs+ANDa5fgAAAABJRU5ErkJggg%3D%3D%27%3B%0ANotepadPP%3D%27data%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEACABoBQAAFgAAACgAAAAQAAAAIAAAAAEACAAAAAAAQAEAAAAAAAAAAAAAAAEAAAAAAAD//P8A//zwAP/3/wD/9/AA8P//APD98ADw9/8A8PTwAPD34ADw5+AA7///AO/08ADg8P8A4PDwAO//7wDv8O8A4PTvAO/o/wDg5/AA7+3vAO/n4ADg6O8A4OjgAODi4ADg3+AA4NzfAODY0ADf7+8A3+DgANDg7wDP+P8AwPD/ANDg0ADf3+AA393fAN/Y0ADQ2tAA0NDfANDU0ADQ0M8A0M/QAN/HwADP3N8Az9DfAM/Q0ADP1M8AwNDPAM/M0ADAyNAAz87PAM/HzwDPxcAAwM/PAMDEwADAx78A0LfQAM+3wADAv8AAsMjQAL/HwACwyMAAoMDAAJ/A4ACQx98Av8C/ALDAsACfr8AAn6DAAI+YwAC/v78Av7e/ALC4sACwt78AsLCwAL+orwC/r6AAv6egAK+/vwCvv7AAr7ewAK+vrwCvr6AAoKigAKCkoACgn7AAn6i/AJCosACfop8AkKCfAJ+foACPh68An5yfAJCYkACQl5AAj5CQAICQnwCPj48AgIeAAH/P3wBf3/AAT8jgAEDI3wB/sN8Af7/AAG+3wABgt8AAYKiwAH+QkABfoK8AT6+/AECgvwBAkK8AQICgAECAnwAw2OAAMNDvADDI7wAg0O8AIMjvACDH4AAvwNAAEMDgAC+43wAvl68AcGiPAHB4cABwd3AAb2xvAEBPXwAAAAAAf5CfAH+PkABwgJAAf4SPAHCAgABfmL8AUIe/AE+HvwA/zPAAP8fwADDP/wAwwvAAP8jvAC/A8AAwvPAAL77wAC+18AAguPAAH6//ABCH0AAfiM8AEIfPAA+A0AAgh78AH4i/AB+PsAAQgL8Af2/wAG93wABgWN8AYF/AAHB/gABveIAAYHeAAEB4vwBAf7AAQHigAEBwrwBfeJ8AUE+/AE9PrwBfUI8AT1+PABB/0AAQf88AD3/QAA9/zwA/YJAAP2CPADBojwA/X48AL1yPAC9YgAAvV4AAIF+PACBcgAAQfL8AEHiwABB3sAAPfL8AD3ewAABwsAB/fX8AcHh/AHB1cABgcH8Ab29wAG9qbwBgaG8AYGdvAGBiYABQZ3AAX2dvAF9gYABAYH8AUFhgAF9bXwBAT1AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8AYGF/f35hW0H+/v7+/v7+/lAHAAcTIjVQW2BhfX1+XP5TABMMAwgOBQAHAQADBS3+UwAWBwoACRkVAAAAAwBP/lsHJCAZgEIYBwQTAwcAYP5TAAsFAitobB0DEAsHB13+WwcxLyYzanJ7EQULBDEx/lcAMS8tGj14dW8wKhBd/v5TADUhNSYlPnpzcE0bXf7+WwtSNSY0ODdmd3lrKkj+/lcHJiImJCYzOmlldXES/v5bByIXFxABAgYfYnNkZ/7+WwdFRk8uNSlKWVZuY208/lwXRzlFTkFLTAMoQj8eXzJdFhcUIyRBNVEm/v7+VEN8UyYmMzE1QVhX/v7+/v5EWgD///8AAf//AAH//wAB//8AAf//AAH//wAB//8AA///AAP//wAD//8AA///AAP//wAB//8AAP//ADj//wB8//8%3D%27%3B%0ATimenDate%3D%27data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAABh0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjA4ZXKc4QAAAqBJREFUOE+Fk2tIk1EAho9F2J8uFF0gol92g6j+WEFGTGrQBYYynGnrYllOwbIx2aJWUEiJoZiFIYSaoJFdSEFrXcwaUZFz4Vrq5mWX+lz25UQpop62SaOLowPn1+F5znvOeU8cIGKN7FcbIosJc3cK24cvQozPF9/erxDXM5PjokxYMNk8+HI9xe5cmkbrqQtcJK9DwdKGvUw55UNdawkhE1xMWNW2nKLegzR+rqM52MQxu5mVjcXEnStHnJrNsfKrEcmkgk1VPlbfSCacwuRI4aSzkNwOWHCtH1EqEEbB4kOpmEymf+OLomHmmxzMuHCGNXcWktSyhM2tXpbU/0CUeBFnQ4Kjgpm7M2ILpu9rR+R3Ma9Ex5zLK5hWqSIsFqfVCIMg/vAsFqnzSU9PR9hbS/l7Omr34yrdDucToWg9WWdXhWIrEAcsTM3IIyF7G2tTDBOCkeeVcD0NKhSgX8ZY8Q6C5XuQm0oYtbfyfegt2Zf2InYdQSgbiVdUosi6wDplDoWFhQh32x1s927x7FEb7a5hbN4RXIExPIHPBIY/IffZOFF1l+kba5inqGdD+iMSd5xDo9FM3MHN1qdYB0Z5EoLtLi+DVguyvZ2gz4Xs6kAe6KTmtoct+5+TpH3A2q1G1Gp1BI48Y1jQ0j3O6/4A3X2DSD1vkD3d+Ls7kboe43c85M07H2k5FSiVSnQ6XRSOCpq7RpAkiaDdyteAB39/D/6BHiRHC0FZYrCvl/x8I2azOdrAP5p494Ubr8/HR3sbX9/eJzj8gUG3E1mWsTo/UXC8InLjv2L/Xv1IE8PHkIYCkRRhyO+XsFieUVZ2hbTduWRmZk4KR6scFjidbqqrGygoMJKaqonsqNfrY4L/fCatVotKpcJgMPwX+v0IPwEurq5/p1hhrwAAAABJRU5ErkJggg%3D%3D%27%3B%0AAddRemove%3D%27data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAABh0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjA4ZXKc4QAAAs9JREFUOE+Vk91L02EUx+2q/yII6iJIxRoRRlHdiRBGF0KglFIkpRWKdKEpJlqEkQRR1txsbqY1dM40Naf5sqm/+ba20sxyc75szqHzNTf36fdb2Bh104EvPJznnA/PeXn2COZJov7DZEcP7IkIlwBPhTUemfxUmYPUDoNOVPsomKygrR9g8quHYBCMRiMGgwHRonYVJQGMY+M8GQrwsG8Hee8Wyg4fqhYP6oZ5uno9uN3g9QZJTk4mMTExEiCRJMj73nFyCt9ReE9PWVk7iso+6moERs0TbK24cTkdZGbeiEiWckNP+fLZxo/ZJUyjMywvuHC5PNhnXUw45miyzlPYaueWbpq0q7f/Deju/BAq47YJigQ/d3q3udYZIKlhk5TnNp41O3hrmKe8vIX8fPnfJTyo6+d+ywy53ZDaCte6RDUHKK224HYusuGDqUkYFpvbLPrz8hr/QEIlZNZYOP/Gh8YCLwY2UHVPUakR8LqWpECWl8EiQJMeXqlAoQiQnl4UgoQAjTod+q8b1FvWWddexv80np6qGnzr4PeLEavwzeBD+LhDpQL0Iqi0pIPs7Ozf85QAbrcX/bdV3k2nMKg5xnu1kaER+D4FP2xOKlRtmIUlBLFHg8I2avUQ8fHxYYDD6cFgX+X63AUO6/Yh1/ZjHoBBUWOmOeobTDinV1hb38K3toVa00VsbGwYYHcsMDC7wtmeOPYqo8iRK+hoAWUVtOlgtD3ApljKrl25kodMJgsDRkasfFpc5qB2P/vrDpFe8ZJqcWJKJbzVQoe4wdJGStbTYyUu7kS4B69f12C1fcG3A599DuyrP5F/9FJQYuRN7ab4B2BiAjyeoJhs49Spc8TExISnIDWyuLgYVbWGu3kFpKSkcvrMWY7KjpOQcImMjPvk5Dzm4sWbHDlykujo6Mg92P1ZaWlpJCUlhZ4madcvnXNzc8nKyorwS/e/AIz06Svr2XfUAAAAAElFTkSuQmCC%27%3B%0ACmdPrompt%3D%27data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAABh0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjA4ZXKc4QAAAQ1JREFUOE9j/P//PwNFAGQAJZiB17Xrv17m9v+G2bv/G2TtwonN8vf+N83b+9+8YN9/6+wN/yU8W4H2Al0vXHbzv3jPh//iXW9xYrHOt/+jN//677/29//4zT/+T+tb/N8yZuH/4uLi/wwupQv+G0YV/DeOLcOLLePL/lsAMYh2jMv5rxXQAjHAwSsOFIokYxHNQIgBtp7xYM0eHh4gP4EBiI1sKMSzqJYIa0ANsHKNBkvCNMIMgokhyyEbgtUAXF5BNhSmBm4AzAv4XIDNFRgG4AsD5DDC6QJSYwLuAkfvRJKjEGSZqGYQJBqN/ev/K5iG/le2iCIaq1hE/Je3K4EYAIpiEINcTFFOBFkOAK4+5J3cVDxkAAAAAElFTkSuQmCC%27%3B%0AMagnifier%3D%27data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAABh0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjA4ZXKc4QAAAqxJREFUOE+Vkt1L01EYx48vFQRFdwVdVFQ3URFBd0HQjf9AhXWnBGLRMtdUiLLCt8RGbxZoQvaiglhRai03Z9Za5dbUueb2U/emNXx3upkv26ffFrndlRdfznkOz/dznuecJwkQmwsdpK7bIEJLEZEkksUyEbEmOVlEksJiYTFZLIbDYtP6tSKSkiI2igWxR/jF1lS3qFYdSxJRwJZzWnYrdexS6dmp1MfWv/tovCNXx4FCA3sLP3Hospbs6/VsO14kWxExQKXBD0sOAn4rgdE+ZmUFZS3O2CEowZyDcECS4wHmAwNRI+l59+MAdccoBGz4nF2MDJrxeyyM+yyYDB08b3iJtllLt6GT0JiN5ZlB2bhMeu7dOKBM5ycy3kv/dyOSowunzYjmTQfvPlh5YRumsX+KZwYfD6pbcNs/xio4kXM7DijV/iQy3ceA04zXbUHfYaTzq0QoMI7GPUGtbYI3E3PUmMZQ36yVjUFO5dxKALT9gKlehpxf8di/0KjrQTf8g0bzEA02FxqXG63HR1ckzLXqNiSrgQxVQgulOhkwaWHQYaTP9J6mD/08+SbxyGhHM+Dgs9uJZdiFNTRFTXs3LU31nFYltFCmjwJMDNoNOLr11L/tkW/2USdDDJ4hHB4XIyNeRiO/uNfUTuvzx2TlqeMt1PTOysEIhIdZCHnRtJl42jXJx/kg5tlpXLOT8jfPsSBnqfKLCAftZBfciQOOKppJO9/K0TOv6dFUYGytovi2jrfyeIzH3hwWZV26+pjtBzPIqbSyPy0/YQ7UatSymisz4dU+zCVZnEzPpKL8LorcEi4WlJN5OjeWk6iVSYxu8NaB/jDSDQXKs/djibHzf+hPgiSPZfMRrMU5KM/X/Ld5pYKWKiXSrXwuKh6uyrwCiJaruHBl1eYo4DduhgDBD20V8AAAAABJRU5ErkJggg%3D%3D%27%3B%0AOnScrKeyb%3D%27data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAABh0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjA4ZXKc4QAAAJVJREFUOE9j/P//PwNFAGQAJRismSHz/H9SMLKFDAxtb/6Tg0tLS4HmgLwPNCD62H+SsELPhf8YBvz9+/f/zDNf///79w+FBlkDEgfJb7gPsQirAaS4AqcLGs78///r19//6DTIBTBx2rkAZDLIZpA/Qf4FARANshnkAmQvUj8MQCaSiuHRCEoMIA45GJyQKMkHg8MAACArvHlXxbSqAAAAAElFTkSuQmCC%27%3B%0AWinTskMngr%3D%27data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAABh0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjA4ZXKc4QAAAJ5JREFUOE+VU9EOgCAIxPXQY7/sp/lnxpFMTEpkYzST4+AwEVFir+yUc5YYMb6LvG5ILqUsvbK1Qr0YDqKGu58AYNDacSP+xwGqzMX40+IaAImabCN/xwCGqgaMogwEAHLOHmKwkvI1g0MWQQ+jEcO1Uv5K58k6sNhZIl02F8Dr3as+DVIZyBY2rT0w+1YMg/0BmuSTGV76HHcHiWSxG7luAcTplZKTAAAAAElFTkSuQmCC%27%3B%0ASystProps%3D%27data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAABh0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjA4ZXKc4QAAAiRJREFUOE99kj9o21AQxl82jx67Crpo9FZDlxoyWNDBKhki8BCMBmMyBOGhuF2MmyFoKsKD0VRQh4A8GORNWQLyUFAGgzy4KEOGN3Tw0MGFDl/vnSu5TkgFH/p397vv7t0RAPHc9en7B/4pf2kckizeidSuHh3EK8BjjdYDKPnSgzv34axMGDcaxGWE2mRD4fscTo7mGQ40ixBeJwinKYIvSQmo0rPo5wQyS0gJSBYUfJMiWuasWG753b3bwFtk5CBDZexDXNUghgJG12NICXCXW7IMhOQw/g1E5MJ/70J9d6YS+gw7wGWFXJDsBqy2tetF2VeBo3swxP9BOu3AW20wWAPWZ7I9ocCPLjkQEBekJwCy6izBCQwiwGAFdO6A+jDjASrrnNytQLctGE1j78BfkNVxCKdPU1d3krUAzNu/gH4Kcd6BONOh2QZqzR4ax+b+ODxqozEHA9yXNRoaWKp/NTBxEkO8jVBpuqjbDvQTD2brH4CagzYFy7nOMJpTS/2ErYr2AOI4hHgVQGsFqJ8GXL0cYjnIb3R0MwlvnKF3nqBDUpWqb0K8IIDeitFo07fXFnrd3uEx5g8bJLc58rXkpRoNI3IQ8yIZZ8kukWBF5WIby2Pc/txCSUpJoIw30b2KCJBSNbdMLCo/AeT3OeSDhLpHc7XCIbUSw58k3OvjxAOAenEuHEoIEHyNubp6Lio/l1yuckFTEBWsjkctyf8qFzl/ABIpmnDaTkSAAAAAAElFTkSuQmCC%27%3B%0ACalculator%3D%27data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAABh0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjA4ZXKc4QAAAmhJREFUOE91k99PklEYx18vyrXVRbeuu278T7zK1kWtrVbO8qLwoiybM12aLEdz5mqaqUPE3JJUwAQhfwBq4i/wxwSFyECSgZZaJpaSnw5stlq+Z3v3PO+z8/2e7/d5zkkDpIM15VvjaPoRaXPrpxTf/SXF99OkldiGdOp0hnT8xDHpZEa65O1blK5kZab9ASUJkl/PgF8ECO7Bkoifkvk+hEX0/4De2S1GgjDqjye3pTCpww+SDvM8YYEaEYgyTZCrj0Ncrlwmu2SJ86WLnFHGOVsaoK3XdziBxe4nHIFO1zbZynUu1MGl55DXDPltUNAu4otNjIMppf8rsNp9+IXErsk4ReooNTZQdSd4oA1RrvmAShej0fadoemonIIFZgS5/SM0277yrCtEi2019e9cFfXpeUbcXszjXw4nMA94GJ8XzVoAs3uTFmsAy1wCozNAo2OHmO4aa9qiVE22iY4peCtUNOu9uNZBWTuKeU5Y6dhg9mYm1sIs3CkHMlOwjkF/ABRl/SgeTmAUii4qXmL0QJ3pPZpZmPJtyxMYHQlMwoLOEUHnDKOzbxHahYaeEAZnnPo3EQYnYvIEBtse3eIUtcGPTTTvVoUFVesala1Bbj8ao6h2ieGZz/IEr6y7WEUP8pVDXC8epm8Zcu5o6F2E9qFltLYYAxNr8gRa0w76GehwRDG6olRrvQgHKJvm0JhWKW+O4HDJjDF5lZv031IWnrZ5UA9CRYOHnHt91BgS3K1eILfMi2NyRV6BWty8fvGSCp+4KajyU9W5R16JhRvFr/8BHTrGZPFcbj0Fqnco7utlAX+Dk/lvcXcJCTRwbTMAAAAASUVORK5CYII%3D%27%3B%0ANetConnect%3D%27data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAABh0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjA4ZXKc4QAAAtxJREFUOE91k2tI01EYh8/SDxVaGpQVVAYV+CEQchRppandEMEP2WXa1Uq7MUShIk2taGWIdr86M0vn0ka1NishHTMj3RKMxtBIa00zoxxUhPH0/09mSnXghXP58Zzf+573KADhG87v3+j80Sxs/QOi5cNYERroFCF+iSL450SxKyJYMSwcOZEBclS6zZR0H+D2p7NoezTkOpJJagxj2vVjBBZ+5NKLz5JsSDsyvIsiZyl77Mu46Mqh/ruZewO1FHcdZb11PlPLNYh8N4qCZHKrn/wF8QLCayLY/HwBxzu2UtpzhcuufCo+NrHB+ppJ2gYUp7MRBQL/LBUWi2UURKj0bgJOGVj+aDZbJMheezTqtvVkt38gygT+F1skiwKRI1DsCyJibfZoQNgJB2MO2gmtnEnE/eksNc9iibmZ+QaYd+0ra27ZyHxgQK2rZsq+MOYlZYxyIeYcsiEy7IzJfcC48ykElYUwvlTJjOI+7tp60bX2Y+gc5NZLD1ctXagOXUKr1Q67EMo8CbCuHrGrFZHpkHLdjygULC5OJ++2g6qWT5idA7R+AWsf1L37xdHz+j+AvLpeRLwekWRCqBoQ22sQBwQxmiwvoOSRi6o2D/cdHkpM7ym4001S6n70+iGIkAHTUk0oosoRcdWIVbWMSw/GLzkFZcoNih52U946QL6uE31LH82ub+zIPDJcB+8zypAZqfWExOqYvOIyczdmERB1gwmRpShVRoqMbvL1XewuuInWbONZzyB36p4POfB1lQxZuLWM8J3NxO18TKJUk8gtTSiTDShX7iE2fjXR0dFoNBqqrG+50uDGZJLSHtmWMkQWhK/aRnjcJhbFJJKwNo1N6dlUGF/wtL0fa6eHe85BTta0k5CQ8Hdv+4B11lfUtn3B+AZ0dg+VNimk/3DG2EHeGZ3XUVpa2v8BZZZezjV6SD98wWvdF/KtarXa63RUDf7102SxL+9/nct7vwFQw5ZrKBhJFQAAAABJRU5ErkJggg%3D%3D%27%3B%0APowOptions%3D%27data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAABh0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjA4ZXKc4QAAAetJREFUOE+lk99rklEYx9e/0VU3QfdB/0JMyEaoF17JZNlg8cqsi8naClSaiBk2jOY71BbOC3/UunBBGkHEgkZu5KiGroiRWxJa6rrp03sOOHS+FNGBL5zDc57PeZ7vwzkGDP3XEoBexdQIR3X0Tu9ZN7m2W+Pzq2eUc3HUxA6j9qtaTv9D3fMAoLWdo7G/xutHyyRv3OH+1GPsdh+BQEAXIgFLiTjpdEaW3infhY9uWr6TPDkxROSUmUvjQSZdk/qARTVK6FYQj8cjAV+rT+GTn4b/NPkzx4nZgsQSL5jzRw/V54HT6SQyP4/b7ZaA2n6dTusbb9deknnwnMzDLyjKLAaDgYmJywMQ2YKAdFWv12m3D3izWSGd3SSb29U8mNLkIJFIkUplJURRFNlSn4kCsre3R6fTplR6Ty5XIhwWKrCxUWVrq0E+v8PY2Aw226g+oNlsaoFflMtVVlbe4fUWKRYrVCo/WV//QaHQYnX1Ow7H9UGAKEl4cWjYXFxzP43PG+d2KEkoVCKqftBUZXo6Kdvua6HrrghYrVZMJjMXRi7KsbqUa8zMbsv9orqkVRDDYrHoA3rHpC5EZNJy2MTw8Ljc37vp4pzxCmaz+e8AARPJQmKUC76zWEbOYzSa9D3408fRi+l68C+Q35MrucWVT9wHAAAAAElFTkSuQmCC%27%3B%0AMSPaint%3D%27data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAABh0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjA4ZXKc4QAAAZZJREFUOE+NkjFowkAUhnVzdMxYoYubdhM6uTWbgQ7tJodDkQwiTuIimUJwEHEKHYRkKMShoFtcCnYoOGY8x4zt1m5/711MjEZbDw6O4973vvfe5QHkaG21G/xcfclzecTz8nDJIgBt3qjCuysi6JTAWkxcRffpbZh+5j55sNAZ7EoR9m11D/jIwerVkiACsJZzADnI0O9N0NYtqPfd6FEKQMHWLABr2OcBk7kPzQwSwKfLEgMC+FM7U96BAQEexxxqx5NZ/FFhX0JTkeV5D/uS5ADSTXLcANpgA2MsNIW+NyrDWoUIXQuo5CSAdjomY1A3F5HmDtCdcYS6hvBaAHoWqE9nAcbrGvWXMpRmAYEbTYB6QiMmCDX4X4D97oDNGPiyhoVQ91ZrcFPF91ycXR/d4R8GpEYW6lQTHS9hLUCBCISuINxupMHx58r+th3AGRbRf27L7KRPEzrOnpmCNHA30sB4UqQBBiXZPAq+CEAQ6oFm1iOA0D9Ve1xKpgRpsTRAvfDfuPx9VPup7CdLiMmx8jn1+N0vr+ulS/dQUwwAAAAASUVORK5CYII%3D%27%3B%0A%0A%0Avar%20directoryService%20%3D%20Components.classes%5B%27@mozilla.org/file/directory_service%3B1%27%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.getService%28Components.interfaces.nsIProperties%29%3B%0Avar%20profileFolder%20%3D%20directoryService.get%28%27ProfD%27%2C%20Components.interfaces.nsIFile%29%3B%0Avar%20profilePath%20%3D%20profileFolder.QueryInterface%28Components.interfaces.nsILocalFile%29.path%3B%0A%20%20%20%20profilePath%20%3D%20profilePath.replace%28/%5C%5C/g%2C%27/%27%29%3B%0A%20%20%20%20CurrentPage%20%3D%20getBrowser%20%28%29.%20contentDocument.%20location.%20href%3B%0A%0A//%20------%20Menu%20Items%20------%0Aapps.push%28%5B%27Run%20in%20IE%27%2C%20%20%20IExplorer%2C%20%27C%3A/Program%20Files/Internet%20Explorer/IEXPLORE.EXE%27%2C%20CurrentPage%5D%29%3B%0Aapps.push%28%5B%27Run%20in%20Google%20Chrome%27%2C%20%20%20%20%20%20%20%20Gchrome%2C%20%20%27C%3A/Documents%20and%20Settings/Admin/Local%20Settings/Application%20Data/Google/Chrome/Application/chrome.exe%27%2C%20CurrentPage%5D%29%3B%0Aapps.push%28%27separator%27%29%3B%0A%0Aapps.push%28%5B%27Open%20Drive%20C%3A%27%2C%20%20%20%20%20%20%20WExplorer%2C%20%27C%3A/WINDOWS/explorer.exe%27%2C%20%27C%3A/%27%5D%29%3B%0Aapps.push%28%5B%27Open%20Drive%20D%3A%27%2C%20%20%20%20%20%20%20WExplorer%2C%20%27C%3A/WINDOWS/explorer.exe%27%2C%20%27D%3A/%27%5D%29%3B%0Aapps.push%28%5B%27Open%20Profile%20Folder%27%2C%20WExplorer%2C%20%27C%3A/WINDOWS/explorer.exe%27%2C%20profilePath%5D%29%3B%0Aapps.push%28%27separator%27%29%3B%0A%0Aapps.push%28%5B%27Notepad%27%2C%20%20%20%20%20%20%20%20%20%20%20%20%20MSNotepad%2C%20%27C%3A/WINDOWS/notepad.exe%27%5D%29%3B%0Aapps.push%28%5B%27Notepad++%27%2C%20%20%20%20%20%20%20%20%20%20%20%20%20NotepadPP%2C%20%27F%3A/Run/Textutils/notepad++/notepad++.exe%27%5D%29%3B%0Aapps.push%28%27separator%27%29%3B%0Aapps.push%28%5B%27Control%20Panel%27%2C%20%20%20%20%20%20%20CtrlPanel%2C%20%27C%3A/WINDOWS/system32/control.exe%27%5D%29%3B%0Aapps.push%28%5B%27Add/Remove%20Programs%27%2C%20AddRemove%2C%20%27C%3A/WINDOWS/system32/control.exe%27%2C%20%27C%3A/WINDOWS/system32/Appwiz.cpl%27%5D%29%3B%0Aapps.push%28%27separator%27%29%3B%0Aapps.push%28%5B%27Magnifier%27%2C%20%20%20%20%20%20%20%20%20%20%20Magnifier%2C%20%27C%3A/WINDOWS/system32/magnify.exe%27%5D%29%3B%0Aapps.push%28%5B%27On-Screen%20Keyboard%27%2C%20%20OnScrKeyb%2C%20%27C%3A/WINDOWS/system32/osk.exe%27%5D%29%3B%0Aapps.push%28%5B%27Task%20Manager%27%2C%20%20%20%20%20%20%20%20WinTskMngr%2C%27C%3A/WINDOWS/system32/taskmgr.exe%27%5D%29%3B%0Aapps.push%28%5B%27Calculator%27%2C%20%20%20%20%20%20%20%20%20%20Calculator%2C%27C%3A/WINDOWS/system32/calc.exe%27%5D%29%3B%0Aapps.push%28%5B%27Paint%27%2C%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20MSPaint%2C%20%20%20%27C%3A/WINDOWS/system32/mspaint.exe%27%5D%29%0Aapps.push%28%5B%27Command%20Prompt%27%2C%20%20%20%20%20%20CmdPrompt%2C%20%27C%3A/WINDOWS/system32/cmd.exe%27%5D%29%3B%0A//%20------------------------%0A%0A%0Avar%20nMItem%20%3D%20function%28label%2Cimg%2Cpath%2Cargs%2Cobj%29%20%7B%0A%20%20var%20m%20%3D%20document.createElement%28%27menuitem%27%29%3B%0A%20%20m.setAttribute%28%27path%27%2Cpath%29%3B%0A%20%20m.setAttribute%28%27label%27%2Clabel%29%3B%0A%20%20m.f%20%3D%20obj.startProcess.bind%28obj%29%3B%0A%20%20m.setAttribute%28%27oncommand%27%2C%27event.stopPropagation%28%29%3Bthis.f%28%22%27+path+%27%22%2C%22%27+args+%27%22%2Cthis%29%27%29%3B%0A%20%20m.setAttribute%28%27class%27%2C%27menuitem-iconic%27%29%3B%0A%20%20if%20%28%21img%29%20img%20%3D%20Default%3B%0A%20%20m.setAttribute%28%27image%27%2Cimg%29%3B%0A%20%20m.tooltipText%20%3D%20label%3B%0A%20%20return%20m%3B%0A%7D%0A%0Athis.startProcess%20%3D%20function%28path%2Cargs%2Cmi%29%20%7B%0A%20%20this.currentCommand%3Dmi%3B%0A%20%20this.image%3Dmi.getAttribute%28%22image%22%29%3B%0A%20%20var%20file%20%3D%20Components.classes%5B%27@mozilla.org/file/local%3B1%27%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20.createInstance%28Components.interfaces.nsILocalFile%29%3B%0A%20%20var%20process%20%3D%20Components.classes%5B%27@mozilla.org/process/util%3B1%27%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.createInstance%28Components.interfaces.nsIProcess%29%3B%0A%20%20file.initWithPath%28path.replace%28/%5C//g%2C%27%5C%5C%5C%5C%27%29%29%3B%0A%20%20args%20%3D%20args.replace%28/%5C//g%2C%27%5C%5C%27%29%3B%0A%20%20if%20%28args%3D%3D%27%27%29%20%7B%20file.launch%28%29%3B%20return%3B%20%7D%20%0A%20%20process.init%28file%29%3B%0A%20%20process.run%28false%2C%5Bargs%5D%2C1%29%3B%20%0A%7D%0A%0Avar%20mP%20%3D%20document.createElement%28%27menupopup%27%29%3B%0Afor%20%28var%20i%3D0%3B%20i%3Capps.length%3B%20i++%29%20%7B%0A%20%20if%20%28apps%5Bi%5D%20%3D%3D%20%27separator%27%29%20%7B%0A%20%20%20%20mP.appendChild%28document.createElement%28%27menuseparator%27%29%29%3B%0A%20%20%7D%20else%20%7B%0A%20%20%20%20if%20%28%21apps%5Bi%5D%20%5B3%5D%29%20apps%5Bi%5D%20%5B3%5D%3D%27%27%3B%0A%20%20%20%20mP.appendChild%28nMItem%28apps%5Bi%5D%20%5B0%5D%2C%20apps%5Bi%5D%20%5B1%5D%2C%20apps%5Bi%5D%20%5B2%5D%2C%20apps%5Bi%5D%20%5B3%5D%2C%20this%29%29%3B%0A%20%20%7D%0A%7D%0A%0Athis.appendChild%28mP%29%3B%0Athis.type%20%3D%20%22menu-button%22%3B%0Athis.orient%20%3D%20%22horizontal%22%3B%0Athis.image%3DmP.firstChild.getAttribute%20%28%22image%22%29%3B%0Athis.currentCommand%3DmP.firstChild%3B%0A%0AmP.%20firstChild.%20setAttribute%20%28%22oncommand%22%2C%20%27event.stopPropagation%28%29%3Bthis.f%28this.getAttribute%28%22path%22%29%2CgetBrowser%28%29.contentDocument.location.href%2Cthis%29%3B%27%29%3B%0AmP.%20firstChild.%20nextSibling.%20setAttribute%20%28%22oncommand%22%2C%20%27event.stopPropagation%28%29%3Bthis.f%28this.getAttribute%28%22path%22%29%2CgetBrowser%28%29.contentDocument.location.href%2Cthis%29%3B%27%29%3B%5D%5D%3E%3C/initcode%3E%0D%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*CODE*/%0Athis.currentCommand.doCommand%28%29%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

Отредактировано vurdalak (14-08-2009 20:03:41)

Отсутствует

 

№108814-08-2009 20:10:52

Anton
Участник
 
Группа: Extensions
Откуда: от верблюда
Зарегистрирован: 14-12-2004
Сообщений: 3057
UA: Firefox 3.5
Веб-сайт

Re: Custom Buttons

ps

vurdalak пишет:

а то уже наверное надоел немного

нп, не бери в голову


Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!

Отсутствует

 

№108914-08-2009 20:47:35

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

Re: Custom Buttons

Anton пишет:

Я не знаю. Если честно, я и свои не все помню (но эту точно не писал).

Твои как раз видно по характерным пробелам. =)

vurdalak пишет:

Ничего себе, не ожидал :/

Ну, там структура не предусматривает передачу динамических параметров.


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

Отсутствует

 

№109015-08-2009 12:38:39

Kemerover
The function under construction
 
Группа: Members
Откуда: the middle of Great Russia
Зарегистрирован: 04-07-2009
Сообщений: 13
UA: Firefox 3.5
Веб-сайт

Re: Custom Buttons

ПОМОГИТЕ МНЕ СОЗДАТЬ КНОПКУ ПЕРЕВЕСТИ :whistle:

Отсутствует

 

№109115-08-2009 13:46:41

Jarichek
Member I
 
Группа: Members
Откуда: Минск
Зарегистрирован: 09-04-2009
Сообщений: 306
UA: Firefox 3.5

Re: Custom Buttons

Kemerover пишет:

ПОМОГИТЕ МНЕ СОЗДАТЬ КНОПКУ ПЕРЕВЕСТИ

Такая кнопка уже есть.

Выделить код

Код:

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%u0435%u0440%u0435%u0432%u043E%u0434%u0447%u0438%u043A%20Google%3C/name%3E%0D%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAADPElEQVR4nGWTTWhjZRSG3/uTNr39mTqTn1KacagTqyKIlYJ2ExQCUhiprgpduRVFpLvZjOCsXEgWFqRk0RZcWLopmOnCQcPUsVBiTEZbalrGTJOZJm2aNGm++92b737fcdGZTfvAuznwnMV7OBouEI/HdSHEyNzcXCwajb7r8/n6T09P99bW1u4PDw8/SiQSbHd396IGBINBJJPJQDqdvssYK0kpO0SkiIiUUlII0SqVSr8lk8n3JycnjUsLZmdnb5bL5T+klPK5RNzp0BlzyHEFKXU+cxynubKy8tXExIQJABoAzM/PB6amptYikch70DRtv3iMh5kClPQglcKzozMMXhnAh7E3EL0RhCcEX19f/6xSqSxhdHRUT6VS39i2LYUQtJ7epm9/uEdHtSZJKUkpRa0zm75fvE+f3/mRmM3JcRyqVqulmZmZl7G6uhopl8sHtm3TduEpffH1T1Srn9FFavUmnTRaJKUkx3Go0WiojY2N22aj0Yj5fL6wJyVS6R289koYVwd7L3V07aUBAICUEkopSCk1v99/Sw+Hw5NSyi7OXZQrTQwFBy6f6DlKKSil4HkeOp0ODMO4btq23S+EgFQaAAKzO1BKQdd1AICmaSAiEBGUlBBCwHVduK4LzrlpHh4e7nHOVW+vofdbPmxkHuPWB6/D6vFD13UoRfj38TPsP6mBOxJjN64gdNUC5xz1er2l5/P5XxqNBvNEByPBLmS2n+LXzQK4zcH5ebp9GkAeEksPwJgNxhhs20axWMzo7Xb7US6Xyx7Xanh7LIhXRywklh7i9z/30Wy1YNsMfT0mrG4DGoCO64Ixhlqt5uTz+UVjZ2dHDA0NFYPB4Cd9fVb3W2MhnDZb+DldwD+FCk5OWvivVEX27ycY7APevHkNouNSNpu9l8vlvtMAIBQKGfF4/Mvp6em7oVCoxzAMOB0PjAsQEfxdPvi7DBgG4Dgu5fP5vxYWFj4uFAoHBgAwxmhvby8jpTywLOsdy7IGfKah9XSb56IOeJ7A0dGxs7m5mVpeXv60Xq8fcM7Pf+EFsVhMq1Qq18fHx2ej0ehHgUAgYpqm2W63W6VSKVMsFhe3trYeVKtV/sL5HwhICaDODiyAAAAAAElFTkSuQmCC%5D%5D%3E%3C/image%3E%0D%0A%20%20%3Cmode%3E0%3C/mode%3E%0D%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bif%20%28%21window.%20cbTranslateButton2%29%0A%7B%0A%09getBrowser%20%28%29.%20addEventListener%0A%09%28%0A%09%09%22mouseup%22%2C%0A%09%09function%20%28event%29%0A%09%09%7B%0A%09%09%09if%20%28event.%20button%20%21%3D%200%29%0A%09%09%09%09return%3B%0A%09%09%09getBrowser%20%28%29.%20contentDocument.%20defaultView.%20cbTranslateButton2X%20%3D%20event.%20clientX%3B%0A%09%09%09getBrowser%20%28%29.%20contentDocument.%20defaultView.%20cbTranslateButton2Y%20%3D%20event.%20clientY%3B%0A%09%09%7D%2C%0A%09%09false%0A%09%29%3B%0A%09window.%20cbTranslateButton2%20%3D%20true%3B%0A%7D%5D%5D%3E%3C/initcode%3E%0D%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*%09original%20script%20is%20operajs%20Google-Translate%20v%201.6.12%0A%09opera%20ujs%20is%20http%3A//lexi.ucoz.ru/google-translate.js%0A%09original%20author%3A%20Lex1%0A%09modified%20by%20Anton%0A*/%0A%0Aconst%20UJS_TOOLBAR_ID%20%3D%20%22ujs_toolbar%22%3B%0Aconst%20UJS_GOOGLE_TRANSLATE_FRAME_ID%20%3D%20%22ujs_googletranslateframe%22%3B%0A%0Afunction%20cbTranslatorButton%20%28browser%29%0A%7B%0A%09this.%20doc%20%3D%20browser.%20contentDocument%3B%0A%09this.%20win%20%3D%20browser.%20contentDocument.%20defaultView%3B%0A%7D%0AcbTranslatorButton.%20prototype%20%3D%0A%7B%0A%09doc%3A%20null%2C%0A%09win%3A%20null%2C%0A%09toolbar%3A%20null%2C%0A%09clse%3A%20null%2C%0A%09frame%3A%20null%2C%0A%09%0A%09grabX%3A%200%2C%0A%09origX%3A%200%2C%0A%09grabY%3A%200%2C%0A%09origY%3A%200%2C%0A%09%0A%09handleEvent%3A%20function%20%28event%29%0A%09%7B%0A%09%09switch%20%28event.%20type%29%0A%09%09%7B%0A%09%09%09case%20%22mousedown%22%3A%0A%09%09%09%09this.%20tbOnMouseDown%20%28event%29%3B%0A%09%09%09%09break%3B%0A%09%09%09case%20%22mousemove%22%3A%0A%09%09%09%09this.%20tbOnMouseMove%20%28event%29%3B%0A%09%09%09%09break%3B%0A%09%09%09case%20%22mouseup%22%3A%0A%09%09%09%09this.%20tbOnMouseUp%20%28event%29%3B%0A%09%09%09%09break%3B%0A%09%09%09case%20%22click%22%3A%0A%09%09%09%09this.%20clseOnClick%20%28event%29%3B%0A%09%09%09%09break%3B%0A%09%09%09case%20%22load%22%3A%0A%09%09%09%09this.%20frameOnLoad%20%28event%29%3B%0A%09%09%09%09break%3B%0A%09%09%09default%3A%3B%0A%09%09%7D%0A%09%7D%2C%0A%09%0A%09tbOnMouseMove%3A%20function%20%28event%29%0A%09%7B%0A%09%09this.%20toolbar.%20style.%20left%20%3D%20this.%20origX%20+%20event.%20clientX%20-%20this.%20grabX%20+%20%27px%27%3B%0A%09%09this.%20toolbar.%20style.%20top%20%3D%20this.%20origY%20+%20event.%20clientY%20-%20this.%20grabY%20+%20%27px%27%3B%0A%09%7D%2C%0A%09%0A%09tbOnMouseUp%3A%20function%20%28event%29%0A%09%7B%0A%09%09this.%20doc.%20removeEventListener%20%28%27mousemove%27%2C%20this%2C%20false%29%3B%0A%20%20%20%20%20%20%20%20this.%20toolbar.%20style.%20zIndex%20%3D%209997%3B%0A%09%7D%2C%0A%09%0A%09tbOnMouseDown%3A%20function%20%28event%29%0A%09%7B%0A%09%09if%20%28event.%20target%20%3D%3D%20this.%20toolbar%29%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20event.%20preventDefault%20%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20this.%20toolbar.%20style.%20zIndex%20%3D%209998%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20this.%20grabX%20%3D%20event.%20clientX%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20this.%20grabY%20%3D%20event.%20clientY%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20this.%20origX%20%3D%20parseInt%20%28this.%20toolbar.%20style.%20left%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20this.%20origY%20%3D%20parseInt%20%28this.%20toolbar.%20style.%20top%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20this.%20doc.%20addEventListener%20%28%27mousemove%27%2C%20this%2C%20false%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20this.%20doc.%20addEventListener%20%28%27mouseup%27%2C%20this%2C%20false%29%3B%0A%20%20%20%20%20%20%20%20%7D%0A%09%7D%2C%0A%09%0A%09removeEventListener%3A%20function%20%28element%2C%20eventType%2C%20captureFlag%29%0A%09%7B%0A%09%09try%0A%09%09%7B%0A%09%09%09element.%20removeEventListener%20%28eventType%2C%20this%2C%20captureFlag%29%3B%0A%09%09%7D%0A%09%09catch%20%28err%29%20%7B%7D%0A%09%7D%2C%0A%09%0A%09removeElement%3A%20function%20%28element%29%0A%09%7B%0A%09%09try%0A%09%09%7B%0A%09%09%09element.%20parentNode.%20removeChild%20%28element%29%3B%0A%09%09%7D%0A%09%09catch%20%28err%29%20%7B%7D%0A%09%7D%2C%0A%09%0A%09clseOnClick%3A%20function%20%28event%29%0A%09%7B%0A%09%09this.%20clse.%20removeEventListener%20%28%27click%27%2C%20this%2C%20false%29%3B%0A%09%09this.%20removeEventListener%20%28this.%20toolbar%2C%20%27mousedown%27%2C%20false%29%3B%0A%09%09this.%20removeEventListener%20%28this.%20doc%2C%20%27mousemove%27%2C%20false%29%3B%0A%09%09this.%20removeEventListener%20%28this.%20doc%2C%20%27mouseup%27%2C%20false%29%3B%0A%09%09this.%20removeEventListener%20%28this.%20frame%2C%20%27load%27%2C%20false%29%3B%0A%09%09this.%20removeElement%20%28this.%20toolbar%29%3B%0A%09%09this.%20removeElement%20%28this.%20frame%29%3B%0A%09%09this.%20frame%20%3D%20null%3B%0A%09%09this.%20clse%20%3D%20null%3B%0A%09%09this.%20toolbar%20%3D%20null%3B%0A%09%09this.%20win%20%3D%20null%3B%0A%09%09this.%20doc%20%3D%20null%3B%0A%09%7D%2C%0A%09%0A%09ujs_createWindow%3A%20function%20%28txt%29%0A%09%7B%0A%09%09var%20doc%20%3D%20this.%20doc%3B%0A%09%09var%20win%20%3D%20this.%20win%3B%0A%09%09var%20h%2C%20w%3B%0A%09%20%20%20%20var%20txtLen%20%3D%20txt.%20length%3B%0A%09%20%20%20%20var%20tbId%20%3D%20UJS_TOOLBAR_ID%3B%0A%09%20%20%20%20if%20%28arguments.%20length%20%3E%202%29%0A%09%20%20%20%20%20%20%20%20tbId%20+%3D%20arguments%20%5B2%5D%3B%0A%09%09var%20toolbar%20%3D%20doc.%20getElementById%20%28tbId%29%3B%0A%09%20%20%20%20if%20%28toolbar%29%0A%09%20%20%20%20%20%20%20%20toolbar.%20parentNode.%20removeChild%20%28toolbar%29%3B%0A%09%20%20%20%20toolbar%20%3D%20doc.%20createElement%20%28%27div%27%29%3B%0A%09%20%20%20%20this.%20toolbar%20%3D%20toolbar%3B%0A%09%20%20%20%20toolbar.%20id%20%3D%20tbId%3B%0A%09%09if%20%28arguments.%20length%20%3D%3D%205%29%0A%09%20%20%20%20%7B%0A%09%20%20%20%20%20%20%20%20w%20%3D%20arguments%20%5B3%5D%3B%0A%09%20%20%20%20%20%20%20%20h%20%3D%20arguments%20%5B4%5D%0A%09%20%20%20%20%7D%0A%09%20%20%20%20else%0A%09%20%20%20%20%7B%0A%09%20%20%20%20%20%20%20%20h%20%3D%2015%3B%0A%09%20%20%20%20%20%20%20%20w%20%3D%2020%3B%0A%09%20%20%20%20%20%20%20%20if%20%28txtLen%20%3E%202000%29%0A%09%20%20%20%20%20%20%20%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20h%20%3D%2050%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20w%20%3D%2066%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20else%20if%20%28txtLen%20%3E%20250%29%0A%09%20%20%20%20%20%20%20%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20h%20%3D%2025%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20w%20%3D%2033%0A%09%20%20%20%20%20%20%20%20%7D%3B%0A%09%20%20%20%20%20%20%20%20h%20%3D%20parseInt%20%28h%20*%20win.%20innerHeight%20/%2030%29%3B%0A%09%20%20%20%20%20%20%20%20w%20%3D%20parseInt%20%28w%20*%20win.%20innerWidth%20/%2050%29%0A%09%20%20%20%20%7D%3B%0A%09%09var%20title%20%3D%20%28arguments.%20length%20%3E%201%29%20%3Farguments%20%5B1%5D%3A%20%27%3Ca%20href%3D%22http%3A//translate.google.com/%22%20target%3D%22_blank%22%20style%3D%22text-decoration%3Anone%3Bcolor%3A%23000099%3Bfont%3A16px%20Times%20New%20Roman%3B%22%3EGoogle%20Translate%3C/a%3E%27%3B%0A%09%09toolbar.%20innerHTML%20%3D%20%27%3Cimg%20src%3D%22data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAABh0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjIyt5EXfQAAAStJREFUOE+1k9tqhDAQhtOHqO37P4E3IlQFQQSvBBVEl1TBVVi1B+1C8XAx3QmNqIVqhBV+DEPmy8z8ycPX9Ruq6kLqqiRHvkfpiUjSMyGUJtB1HfR9D8MwCAlz6voNkEGCIGDJeZ5DURTCatoWNE0D4nk+jOMoDMBD8fDPpoGXu4OyLAPUutV1/N+KcPPNPaY4jidYktwG+hunlLL4ZmsI4EloxhxiGAY4jgNpmm6D8DQEcBj/I8SyrKnSzYr4bDzPm2CKoiwgu1rDTfN2eEWu6y4M2KxoPRNVVRcz4xXvdm0+k/nMwjDc5xraa9v2n5kgwDRNMdfQXtT6Us7jy9Z8n738Iw82O5/hUpag6zqQ0+kVmqZld0NUURSxl48M8v5xZQtZlg8Jc5HxA5fIE73hTda3AAAAAElFTkSuQmCC%22%20title%3D%22Close%22%20width%3D%2218%22%20height%3D%2218%22%3E%26nbsp%3B%27%20+%20title%20+%20%27%3Cdiv%3E%3C/div%3E%27%3B%0A%09%09toolbar.%20setAttribute%28%27style%27%2C%20%27position%3Afixed%3Bbackground%3Awhite%3Bdisplay%3Ablock%3Bvisibility%3Ahidden%3Bleft%3A0%3Btop%3A0%3Bheight%3Aauto%3Bwidth%3A%27%20+%20w%20+%20%27px%3Bfont%3A16px%20Times%20New%20Roman%3Bborder%3A1px%20solid%20gray%3Bpadding%3A3px%3Bz-index%3A9997%3Boverflow%3Avisible%3Bcursor%3Amove%3B%27%29%3B%0A%09%09toolbar.%20addEventListener%20%28%27mousedown%27%2C%20this%2C%20false%29%3B%0A%09%09var%20clse%20%3D%20toolbar.%20firstChild%3B%0A%09%09this.%20clse%20%3D%20clse%3B%0A%09%20%20%20%20clse.%20setAttribute%20%28%27style%27%2C%20%27float%3Aright%3Bbackground%3Awhite%3Bpadding%3A0%3Bmargin%3A0%3Bborder%3Anone%3Bcursor%3Apointer%3B%27%29%3B%0A%09%09clse.%20addEventListener%20%28%27click%27%2C%20this%2C%20false%29%3B%0A%09%09var%20textbar%20%3D%20toolbar.%20lastChild%3B%0A%09%20%20%20%20textbar.%20innerHTML%20%3D%20txt%3B%0A%09%09textbar.%20setAttribute%20%28%27style%27%2C%20%27display%3Ablock%3Bborder%3A1px%20solid%20%23aaaaaa%3Bmargin%3A2px%200%200%200%3Bpadding%3A4px%3Bbackground-color%3A%23fafcfe%3Bfont%3A14px%20Times%20New%20Roman%3Bheight%3A%27%20+%20h%20+%20%27px%3Bwidth%3Aauto%3Boverflow%3Aauto%3Bcursor%3Atext%3B%27%29%3B%0A%09%09doc.%20documentElement.%20appendChild%20%28toolbar%29%3B%0A%09%09var%20halfWidth%20%3D%20parseInt%20%28toolbar.%20offsetWidth%20/%202%29%3B%0A%09%09var%20strict%20%3D%20doc.%20compatMode%20%3D%3D%20%27CSS1Compat%27%3B%0A%09%09var%20mX%20%3D%20%28strict%3F%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20doc.%20documentElement.%20clientWidth%3A%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20doc.%20body.%20clientWidth%29%20-%20toolbar.%20offsetWidth%3B%0A%09%09var%20mY%20%3D%20%28strict%3F%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20doc.%20documentElement.%20clientHeight%3A%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20doc.%20body.%20clientHeight%29%20-%20toolbar.%20offsetHeight%3B%0A%09%20%20%20%20var%20lastClickX%20%3D%20win.%20cbTranslateButton2X%3B%0A%09%20%20%20%20var%20lastClickY%20%3D%20win.%20cbTranslateButton2Y%3B%0A%09%09toolbar.%20style.%20left%20%3D%20%28%28lastClickX%20%3C%20mX%20+%20halfWidth%29%3F%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%28lastClickX%20%3E%20halfWidth%3F%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%28lastClickX%20-%20halfWidth%29%3A%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%200%29%3A%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20mX%29%20+%20%22px%22%3B%0A%09%09toolbar.%20style.%20top%20%3D%20%28%28lastClickY%20%3C%20mY%29%3F%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20lastClickY%3A%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20mY%29%20+%20%22px%22%3B%0A%09%09toolbar.%20style.%20visibility%20%3D%20%27visible%27%3B%0A%09%20%20%20%20return%20textbar%3B%0A%09%7D%2C%0A%09%0A%09frameOnLoad%3A%20function%20%28event%29%0A%09%7B%0A%09%09var%20fr%20%3D%20event.%20currentTarget%3B%0A%09%09fr.%20removeEventListener%20%28%27load%27%2C%20this%2C%20false%29%3B%0A%09%09var%20tbId%20%3D%20fr.%20id.%20substring%20%28UJS_GOOGLE_TRANSLATE_FRAME_ID.%20length%29%3B%0A%09%09var%20toolbar%20%3D%20this.%20doc.%20getElementById%20%28UJS_TOOLBAR_ID%20+%20tbId%29%3B%0A%09%09var%20frdoc%20%3D%20fr.%20contentDocument%3B%0A%09%09var%20a%20%3D%20frdoc.%20getElementById%20%28%27autotrans%27%29%3B%0A%09%09var%20title%20%3D%20%28a%20%26%26%20%21/%23808080/.%20test%20%28a.%20innerHTML%29%29%3F%0A%09%09%09%09%09%09%27%26nbsp%3B-%26nbsp%3B%27%20+%20a.%20textContent.%20replace%20%28/%5E.+%3A%20%7C%20%5B%28%5CxBB%5D.+%24/g%2C%20%27%27%29%3A%0A%09%09%09%09%09%09%27%27%3B%0A%09%09var%20result%20%3D%20frdoc.%20getElementById%20%28%27result_box%27%29.%20innerHTML%3B%0A%09%09var%20ancor%20%3D%20toolbar.%20getElementsByTagName%20%28%22a%22%29%20%5B0%5D%3B%0A%09%09ancor.%20innerHTML%20+%3D%20title%3B%0A%09%09ancor.%20nextSibling.%20innerHTML%20%3D%20result%3B%0A%09%09setTimeout%0A%09%09%28%0A%09%09%09function%20%28%29%0A%09%09%09%7B%0A%09%09%09%09fr.%20parentNode.%20removeChild%20%28fr%29%3B%0A%09%09%09%7D%2C%0A%09%09%090%0A%09%09%29%3B%0A%09%7D%2C%0A%09%0A%09google_translate%3A%20function%20%28language%29%0A%09%7B%0A%09%09var%20doc%20%3D%20this.%20doc%3B%0A%09%09var%20win%20%3D%20this.%20win%3B%0A%09%09var%20t%20%3D%20document.%20commandDispatcher.%20focusedWindow.%20getSelection%20%28%29.%20toString%20%28%29%3B%0A%09%09var%20lng%20%3D%20%28win.%20navigator.%20language%20%3D%3D%20%27ru%27%29%3F%20%27ru%27%3A%20%27en%27%3B%0A%09%20%20%20%20if%20%28t%20%26%26%20location.%20hostname%20%21%3D%20%27translate.google.com%27%29%0A%09%20%20%20%20%7B%0A%09%20%20%20%20%20%20%20%20this.%20ujs_createWindow%0A%09%20%20%20%20%20%20%20%20%28%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%28lng%20%3D%3D%20%27ru%27%3F%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%27%5Cu041F%5Cu0435%5Cu0440%5Cu0435%5Cu0432%5Cu043E%5Cu0434%5Cu0438%5Cu043C%27%3A%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%27Translating%27%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%29%20+%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%27%5Cu2026%27%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%27%3Ca%20href%3D%22http%3A//translate.google.com/%22%20target%3D%22_blank%22%20style%3D%22text-decoration%3Anone%3Bcolor%3A%23000099%3Bfont%3A16px%20Times%20New%20Roman%3B%22%3EGoogle%20Translate%3C/a%3E%27%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20btoa%20%28escape%20%28t%29%29%0A%09%20%20%20%20%20%20%20%20%29%3B%0A%09%09%09var%20gtfId%20%3D%20UJS_GOOGLE_TRANSLATE_FRAME_ID%3B%0A%09%09%09var%20fr%20%3D%20doc.%20getElementById%20%28gtfId%29%3B%0A%09%20%20%20%20%20%20%20%20if%20%28%21fr%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20fr%20%3D%20doc.%20createElement%20%28%27iframe%27%29%3B%0A%09%20%20%20%20%20%20%20%20this.%20frame%20%3D%20fr%3B%0A%09%09%09fr.%20setAttribute%20%28%27id%27%2C%20gtfId%20+%20btoa%20%28escape%20%28t%29%29%29%3B%0A%09%20%20%20%20%20%20%20%20fr.%20setAttribute%20%28%27frameborder%27%2C%20%270%27%29%3B%0A%09%09%09fr.%20setAttribute%20%28%27style%27%2C%20%27width%3A0px%3Bheight%3A0px%3Bvisibility%3Ahidden%3Bposition%3Aabsolute%3Bleft%3A-999em%3B%27%29%3B%0A%09%09%09fr.%20setAttribute%0A%09%20%20%20%20%20%20%20%20%28%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%27src%27%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%27http%3A//translate.google.com/translate_t%3Ftext%3D%27%20+%0A%09%20%20%20%20%20%20%20%20%20%20%20%20encodeURIComponent%20%28t%29%20+%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%27%26hl%3D%27%20+%0A%09%20%20%20%20%20%20%20%20%20%20%20%20lng%20+%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%27%26langpair%3D%27%20+%0A%09%20%20%20%20%20%20%20%20%20%20%20%20language%20+%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%27%26tbb%3D1%26ujs%3Dgtt%27%0A%09%20%20%20%20%20%20%20%20%29%3B%0A%09%09%09fr.%20addEventListener%20%28%27load%27%2C%20this%2C%20false%29%3B%0A%09%20%20%20%20%20%20%20%20doc.%20documentElement.%20appendChild%20%28fr%29%3B%0A%09%20%20%20%20%7D%0A%09%20%20%20%20else%0A%09%20%20%20%20%7B%0A%09%20%20%20%20%09getBrowser%20%28%29.%20addTab%0A%09%20%20%20%20%20%20%20%20%28%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%27http%3A//translate.google.com/translate%3Fu%3D%27%20+%0A%09%20%20%20%20%20%20%20%20%20%20%20%20escape%20%28doc.%20location.%20href%29%20+%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%27%26hl%3D%27%20+%0A%09%20%20%20%20%20%20%20%20%20%20%20%20lng%20+%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%27%26langpair%3D%27%20+%0A%09%20%20%20%20%20%20%20%20%20%20%20%20language%20+%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%27%26tbb%3D1%27%20+%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%28doc.%20charset%3F%20%27%26ie%3D%27%20+%20doc.%20charset%3A%20%27%27%29%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20null%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20null%0A%09%20%20%20%20%20%20%20%20%29%3B%0A%09%09%7D%0A%09%7D%0A%7D%3B%0A%0Avar%20ct%20%3D%20getBrowser%20%28%29.%20selectedTab%3B%0Aif%20%28%21ct.%20cbTranslateButton5%29%0A%09ct.%20cbTranslateButton5%20%3D%20%5B%5D%3B%0Avar%20translator%20%3D%20new%20cbTranslatorButton%20%28getBrowser%20%28%29%29%3B%0Act.%20cbTranslateButton5.%20push%20%28translator%29%3B%0Atranslator.%20google_translate%20%28%22auto%7Cru%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

Отсутствует

 

№109217-08-2009 00:47:36

vurdalak
Участник
 
Группа: Members
Зарегистрирован: 03-06-2005
Сообщений: 173
UA: Firefox 3.5

Re: Custom Buttons

Есть расширение
https://addons.mozilla.org/ru/firefox/addon/10127

Как вызвать панель с сайтами через кнопку Custom Button (по умолчанию назначен key "Ctrl+Space")  ?
Помогите, а то мои попытки увенчались неуспехом...

Отредактировано vurdalak (17-08-2009 01:01:48)

Отсутствует

 

№109317-08-2009 02:01:38

3Jlou
Участник
 
Группа: Members
Зарегистрирован: 14-08-2008
Сообщений: 211
UA: Firefox 3.5

Re: Custom Buttons

vurdalak

Выделить код

Код:

loadURI ("chrome://sitelauncher/content/home.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%0D%0A%20%20%3Cname%3ESiteLauncher%3C/name%3E%0D%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bcustombuttons-stdicon-1%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%5Bthis.url2xul%3D%20%27chrome%3A//sitelauncher/content/home.html%27%3B%0Athis.onClick%3D%20function%28e%29%0A%7B%0A%09switch%20%28e.button%29%0A%09%7B%0A%09%09case%200%3A%20%0A%09%09%09loadURI%28this.url2xul%29%3B%0A%09%09%09break%3B%0A%09%09case%201%3A%20%0A%09%09%7B%0A%09%09%09var%20t%3D%20gBrowser.mTabs%3B%0A%09%09%09var%20current%3D%20content.document.location.href%3B%0A%09%09%09var%20i%3D%20t.length%3B%0A%09%09%09if%20%28current%3D%3Dthis.url2xul%29%20gBrowser.removeCurrentTab%28%29%3B%20%0A%09%09%09else%20while%20%28true%29%0A%09%09%09%7B%0A%09%09%09%09if%20%28--i%3C0%29%20%0A%09%09%09%09%7B%0A%09%09%09%09%09if%20%28current%3D%3D%27about%3Ablank%27%29%20//%20replace%20blank%20tab%0A%09%09%09%09%09%09loadURI%28this.url2xul%29%3B%0A%09%09%09%09%09else%20//%20add%20new%20tab%20%0A%09%09%09%09%09%09gBrowser.selectedTab%3D%20gBrowser.addTab%28this.url2xul%29%3B%20%0A%09%09%09%09%09break%3B%0A%09%09%09%09%7D%3B%0A%09%09%09%09if%20%28t%5Bi%5D.linkedBrowser.currentURI.spec%3D%3Dthis.url2xul%29%20//%20popup%20loaded%0A%09%09%09%09%7B%0A%09%09%09%09%09gBrowser.selectedTab%3D%20gBrowser.tabContainer.childNodes%5Bi%5D%3B%20%0A%09%09%09%09%09break%3B%0A%09%09%09%09%7D%3B%0A%09%09%09%7D%3B%0A%09%09%7D%3B%20break%3B%0A%09%7D%3B%0A%7D%3B%0Athis.setAttribute%28%27onclick%27%2C%27this.onClick%28event%29%3B%27%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

Отредактировано 3Jlou (17-08-2009 02:04:21)

Отсутствует

 

№109417-08-2009 03:40:46

vurdalak
Участник
 
Группа: Members
Зарегистрирован: 03-06-2005
Сообщений: 173
UA: Firefox 3.5

Re: Custom Buttons

Это немного не то , чего бы хотелось. Об chrome://sitelauncher/content/home.html я знал.
Проблема в том , что оно вызывает панель сайтов вместе с фиктивным home.html и URL вкладки заменяется им. Смысл такой, что javascript расширения следит за открытием chrome://sitelauncher/content/home.html и после этого выполняется команда отображения панели сайтов, ну и также после нажатия Ctrl-Space . Вот эту то команду, я не смог найти, когда ковырялся в расширении (автор там зашифровал все что мог наверное :) ). Вся надежда на местных гуру.
Средний клик тоже не устраивает, к тому же у меня Firefox после этого че-то вываливался.
Должен быть другой способ, такой же , какой используется в расширении без применения home.html .

Отсутствует

 

№109517-08-2009 13:36:51

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

Re: Custom Buttons

vurdalak пишет:

Как вызвать панель с сайтами через кнопку Custom Button (по умолчанию назначен key "Ctrl+Space")  ?

Как-то так:

Выделить код

Код:

var evt = document.createEvent("KeyEvents");
evt.initKeyEvent(
    "keydown", true, true, window, 
    true /*ctrlKey*/, false /*altKey*/, false /*shiftKey*/, false /*metaKey*/,
    evt.DOM_VK_SPACE /*keyCode*/, 0 /*charCode*/
);
document.documentElement.dispatchEvent(evt);

Но после изменения настроек расширения код кнопки нужно будет править (про keyCode).


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

Отсутствует

 

№109617-08-2009 14:55:20

vurdalak
Участник
 
Группа: Members
Зарегистрирован: 03-06-2005
Сообщений: 173
UA: Firefox 3.5

Re: Custom Buttons

Infocatcher
Спасибо
Это конечно вариант, но хотелось бы по правильному, не через кейивенты а как бы изнутри.
Пытаюсь просто вникнуть в принцип работы расширения, так как пытаюсь мутить че-то свое на его основе.
P.S. Панель сайтов - это элемент Popup как я понял ?

Отредактировано vurdalak (17-08-2009 14:55:55)

Отсутствует

 

№109717-08-2009 15:17:20

Anton
Участник
 
Группа: Extensions
Откуда: от верблюда
Зарегистрирован: 14-12-2004
Сообщений: 3057
UA: Firefox 3.5
Веб-сайт

Re: Custom Buttons

vurdalak пишет:

хотелось бы по правильному, не через кейивенты а как бы изнутри.

Публикация кода "как бы изнутри" нарушает требование, изложенное в copyright.txt расширения.


Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!

Отсутствует

 

№109817-08-2009 15:27:04

vurdalak
Участник
 
Группа: Members
Зарегистрирован: 03-06-2005
Сообщений: 173
UA: Firefox 3.5

Re: Custom Buttons

Блин, так это ж для самоизучения.
А если в PM ?

Отсутствует

 

№109917-08-2009 15:56:26

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

Re: Custom Buttons

А для самообучения пригодится http://jsbeautifier.org/.


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

Отсутствует

 

№110017-08-2009 20:01:48

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

Re: Custom Buttons

Кнопка для удаления истории текущей вкладки (ЛКМ) или истории всех вкладок (СКМ, Ctrl+ЛКМ)
Т.е. очищается список страниц для переходов вперед/назад.

Код для секции «инициализация»:

Выделить код

Код:

// Purge Tab(s) History
// (c) Infocatcher 2009
// version 0.2.0 - 2009-12-13

const uid = "__custombutton__" + this.id;
if(uid in window)
    window[uid]("rebuild");

var destroy = window[uid] = function _ds(reason) {
    var hnd = _ds.evtHandler;
    window.removeEventListener("unload",   hnd, false);
    window.removeEventListener("TabOpen",  hnd, false);
    window.removeEventListener("TabClose", hnd, false);
    gBrowser.removeProgressListener(hnd.progressListener);
    _ds.evtHandler = null;
    //alert(reason + " => destroy()");
};

this.updUI = function() {
    UpdateBackForwardCommands(gBrowser.webNavigation);
};
this.updButtonState = function() {
    this.setAttribute(
        "disabled",
        !gBrowser.browsers.some(
            function(br) {
                return br.sessionHistory && br.sessionHistory.count > 1;
            }
        )
    );
};
this.forceSaveSession = function() {
    const dummyVal = "custombuttonsDummyValue-" + Math.random();
    // Firefox or SeaMonkey
    var ss = (
        Components.classes["@mozilla.org/browser/sessionstore;1"]
        || Components.classes["@mozilla.org/suite/sessionstore;1"]
    ).getService(Components.interfaces.nsISessionStore);
    setTimeout(function(ss, val) {
        ss.setWindowValue(window, val, "0");
        ss.deleteWindowValue(window, val);
    }, 0, ss, dummyVal);
};
this.upd = function() {
    this.updUI();
    this.updButtonState();
    this.forceSaveSession();
};
this.purgeBrowserHistory = function(br, updFlag) {
    var sh = br.sessionHistory
        .QueryInterface(Components.interfaces.nsISHistoryInternal);
    if(sh.count == 0)
        return;
    var indx = sh.index;
    var cur = indx > -1 ? sh.getEntryAtIndex(indx, false) : null;
    sh.PurgeHistory(sh.count);
    cur && sh.addEntry(cur, true);
    if(updFlag === true)
        this.upd();
};
this.purgeBrowsersHistory = function() {
    gBrowser.browsers.forEach(this.purgeBrowserHistory, this);
    this.upd();
};

var dummy = function() {};
var progressListener = {
    button: this,
    QueryInterface: function(iid) {
        if(
            iid.equals(Components.interfaces.nsIWebProgressListener)
            || iid.equals(Components.interfaces.nsISupportsWeakReference)
            || iid.equals(Components.interfaces.nsISupports)
        )
            return this;
        throw Components.results.NS_NOINTERFACE;
    },
    onStateChange: dummy,
    onProgressChange: dummy,
    onLocationChange: function(aWebProgress, aRequest, aLocation) {
        this.button.updButtonState();
    },
    onStatusChange: dummy,
    onSecurityChange: dummy
};

var hnd = destroy.evtHandler = {
    button: this,
    progressListener: progressListener,
    destroy: destroy,
    handleEvent: function(e) {
        switch(e.type) {
            case "TabOpen":
            case "TabClose":
                setTimeout(function(button) {
                    button.updButtonState();
                }, 5, this.button);
            break;
            case "unload":
                this.destroy(e.type);
        }
    }
};

window.addEventListener("TabOpen",  hnd, false);
window.addEventListener("TabClose", hnd, false);
window.addEventListener("unload",   hnd, false);
gBrowser.addProgressListener(progressListener, Components.interfaces.nsIWebProgress.NOTIFY_LOCATION);

this.updButtonState();

this.onclick = function(e) {
    if(e.button == 1 || e.button == 0 && e.ctrlKey)
        this.purgeBrowsersHistory();
    else if(e.button == 0)
        this.purgeBrowserHistory(gBrowser.mCurrentBrowser, true);
};

В Firefox 10.0a1 что-то странное с обновлением состояния кнопки, вот немного подправленная версия: purgeTabsHistory.js

Отредактировано Infocatcher (07-10-2011 10:26:08)


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

Отсутствует

 

Board footer

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