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

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

№650124-06-2013 22:15:39

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

Re: Custom Buttons

voqabuhe пишет
bunda1 пишет

Попробуй:

Да также, открывается меню закладок.

Ну тогда я не понял вопроса :/

Добавлено 24-06-2013 22:18:10

Dumby пишет

Может попробуй прописать абсолютный путь до нужной папки......

:)

Выделить код

Код:

["Chrome", "UChrm", "chrome://global/skin/icons/folder-item.png", "0, 32px, 16px, 16px"]

на

Выделить код

Код:

["Chrome", "UChrm", "chrome://global/skin/dirListing/folder.png"]

Отредактировано bunda1 (24-06-2013 22:18:30)

Отсутствует

 

№650224-06-2013 23:35:19

Dumby
Участник
 
Группа: Members
Зарегистрирован: 12-08-2012
Сообщений: 2129
UA: Firefox 10.0

Re: Custom Buttons

bunda1 пишет

dirListing/folder.png

:beer:

Отсутствует

 

№650324-06-2013 23:59:02

voqabuhe
Участник
 
Группа: Members
Зарегистрирован: 06-12-2011
Сообщений: 3231
UA: Firefox 24.0

Re: Custom Buttons

bunda1 пишет

Ну тогда я не понял вопроса :/

Мне хотелось бы, чтобы сразу появлялась Панель закладок, обвёл красным. А сейчас появляется Меню закладок, на скрине  соответственно слева.
zTmX.jpg

Отсутствует

 

№650425-06-2013 22:18:46

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

Re: Custom Buttons

Как узнать что текущая страница полностью загрузилась после перехода по результатам поиска в гугле, ну когда переключаешь:  1    2    3    4    5    6    7    8    9    10    Следующая
Можно отследить такие переходы если использовать hashchange/popstate но есть проблема hashchange и popstate срабатывает раньше чем загрузилась или полностью показалась страница.

Отредактировано bunda1 (25-06-2013 22:23:30)

Отсутствует

 

№650526-06-2013 10:44:49

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

Re: Custom Buttons

Приветствую всех и хотя вопрос адресован к Infocatcher, может кто то ответит.

1. Обновился.
2. Отвалились/перестали работать кнопки которые использовали список тегов BBCode.
3. Анализ через консоль не помог - много ошибок.
4. Видимо отключили-переименовали функцию/класс.

Вот код базовых кнопок... надеюсь на помощь.

Сombo

Выделить код

Код:

/*Initialization Code*/
var menu = <menupopup xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
              xmlns:cb="http://xsms.nm.ru/custombuttons/"
              onclick="this. parentNode. handleClick (event);">

        <menuitem label="SPOILER"
                  class="menuitem-iconic"
                  image="data:image/png;base64,iVBO..."
                  cb:open="[spoiler]"
                  cb:close="[/spoiler]"/>
...........

        
        <menuitem label="HIDE"
                  class="menuitem-iconic"
                  image="data:image/png;base64,iVBO..."
                  cb:open="[hide]"
                  cb:close="[/hide]"/>
      
      </menupopup>;
    
this. appendChild (custombuttonsUtils. makeXML (menu));
this. type = "menu";
this. orient = "horizontal";

this.handleClick = function(event) {
    var menuitem = event. target;
    var open = menuitem. getAttributeNS ("http://xsms.nm.ru/custombuttons/", "open");
    var close = menuitem. getAttributeNS ("http://xsms.nm.ru/custombuttons/", "close");

    if(event.button == 0) {
// Действие при клике ЛКМ
this. open = false;
lbMouse(open,close);
    }
    else if(event.button == 1) {
        // Действие при клике СКМ
this. open = false;        
mbMouse (open,close);        
    }
    else if(event.button == 2 && !event.ctrlKey && !event.shiftKey && !event.altKey && !event.metaKey) {
        // Действие при клике ПКМ без модификаторов
this. open = false;        
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]) rbMouse (open,close,cs [x [1]. value]);

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

function lbMouse (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;
};

function mbMouse (open,close) {};

function rbMouse (open,close,paste){
if (paste.length == 0)  { 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;
};

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


Color Font

Выделить код

Код:

/*Initialization Code*/
var menu = <menupopup xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
              xmlns:cb="http://xsms.nm.ru/custombuttons/"
              onclick="this. parentNode. handleClick (event);">

        <menuitem label="=1"
                  class="menuitem-iconic"
                  image="data:image/png;base64,iVBO..."
                  cb:open="[size=1]"
                  cb:close="[/size]"/>

.............

        <menuitem label="=14"
                  class="menuitem-iconic"
                  image="data:image/png;base64,iVBO..."
                  cb:open="[size=14]"
                  cb:close="[/size]"/>

      </menupopup>;
    
this. appendChild (custombuttonsUtils. makeXML (menu));
this. type = "menu";
this. orient = "horizontal";

this.handleClick = function(event) {
    var menuitem = event. target;
    var open = menuitem. getAttributeNS ("http://xsms.nm.ru/custombuttons/", "open");
    var close = menuitem. getAttributeNS ("http://xsms.nm.ru/custombuttons/", "close");

    if(event.button == 0) {
// Действие при клике ЛКМ
this. open = false;
lbMouse(open,close);
    }
    else if(event.button == 1) {
        // Действие при клике СКМ
this. open = false;        
mbMouse (open,close);        
    }
    else if(event.button == 2 && !event.ctrlKey && !event.shiftKey && !event.altKey && !event.metaKey) {
        // Действие при клике ПКМ без модификаторов
this. open = false;        
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]) rbMouse (open,close,cs [x [1]. value]);
    }
};
this.oncontextmenu = function(event) {
    if(event.button == 2 && !event.ctrlKey && !event.shiftKey && !event.altKey && !event.metaKey) {
        // Блокируем контекстное меню при клике ПКМ без модификаторов
        this. open = false;
        event.preventDefault();
        event.stopPropagation();
    }
};

function lbMouse (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;
};

function mbMouse (open,close) {};

function rbMouse (open,close,paste){
if (paste.length == 0)  { 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;
};

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


Вставка символа

Выделить код

Код:

var menu = <menupopup xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
              oncommand="this.parentNode.handleMenuCommand(event)">
    <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";


То что базируется на неизвестных переменных/функциях реализовано в кнопке сканирования буфера обмена
Clipboard

Выделить код

Код:

/*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();");


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


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

Отсутствует

 

№650626-06-2013 18:11:25

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

Отсутствует

 

№650726-06-2013 19:04:38

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

Re: Custom Buttons

okkamas_knife пишет

хмм а если поковырять сам гугловский скрипт и брать событие окончания подгрузки данных оттуда?
там же наверняка обычный xmlHTTPRequest которым подгружаются данные и вставляются в DOM страницы
посмотреть как он это делает и по какой переменной можно отслеживать завершение действия..

Сложно для меня.

Отсутствует

 

№650826-06-2013 21:21:50

Lex1
Участник
 
Группа: Members
Зарегистрирован: 07-07-2007
Сообщений: 260
UA: Firefox 21.0

Re: Custom Buttons

там же наверняка обычный xmlHTTPRequest которым подгружаются данные и вставляются в DOM страницы
посмотреть как он это делает

Обычно отслеживают через document.addEventListener("DOMNodeInserted"...

Отсутствует

 

№650926-06-2013 21:34:46

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

Re: Custom Buttons

Lex1
Может с этим Вчера 21:18:46 что подскажешь.

Отсутствует

 

№651026-06-2013 21:46:13

Lex1
Участник
 
Группа: Members
Зарегистрирован: 07-07-2007
Сообщений: 260
UA: Firefox 21.0

Re: Custom Buttons

Да, кстати про BBCode. Я некогда переносил оперную кнопку url, т.к. привык к её логике (ссылка, при наличии, берётся из буфера обмена). М.б. кому-нибудь ещё пригодится:

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

Выделить код

Код:

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%20url%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%5B/*CODE*/%0Avar%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%20re%20%3D%20/%28%3F%3A%28%3F%3Ahttps%3F%7Cftp%7Cmms%7Crtsp%29%3A%5C/%5C/%7C%28%3F%3Aopera%7Cabout%29%3A%5C/%3F%29%5B%5E%5Cs%3C%3E%5C%5B%5C%5D%5Cx22%5D+/i%3B%0Avar%20txt%20%3D%20ujs_bbcode_tag%28%29%20%7C%7C%20%27%27%3B%0Avar%20url%20%3D%20%28txt.match%28/%5E%5C%5Burl%3D%28.+%3F%29%5C%5D/%29%20%7C%7C%20%5B%5D%29%5B1%5D%20%7C%7C%20txt.replace%28/%5C%5B%5B%5E%5C/%5D.*%3F%5C%5D.*%3F%5C%5B%5C/.+%3F%5C%5D/g%2C%20%27%27%29.match%28re%29%20%7C%7C%20win.getSelection%28%29.toString%28%29.match%28re%29%20%7C%7C%20gClipboard.read%28%29.match%28re%29%20%7C%7C%20%27%27%3B%0Aujs_bbcode_tag%28%27%5Burl%3D%27%20+%20url%20+%20%27%5D%27%29%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


Вставляет/убирает теги «[url=}{/url]» в форму ответа. Если на странице выделен текст, то он обрамляется тегами. Если это ссылка, или ссылка есть в буфере обмена, то она также будет добавлена.

Отсутствует

 

№651126-06-2013 22:34:36

Lex1
Участник
 
Группа: Members
Зарегистрирован: 07-07-2007
Сообщений: 260
UA: Firefox 21.0

Re: Custom Buttons

bunda1
Это только для гугля? Если нет, то вероятно самым простым (и дубовым) решением будет пару секунд, после hashchange, проверять изменение размера документа.

Добавлено 26-06-2013 22:41:13
И пример использования DOMNodeInserted. Хотя для определения окончания подгрузки страницы, он и не слишком много даёт.

Отредактировано Lex1 (26-06-2013 22:41:52)

Отсутствует

 

№651226-06-2013 22:42:03

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

Re: Custom Buttons

Lex1 пишет

bunda1
Это только для гугля? Если нет, то вероятно самым простым (и дубовым) решением будет пару секунд, после hashchange, проверять изменение размера документа.

Для всех поисковиков.
А addProgressListener для этого нельзя как то приспособить?

Добавлено 26-06-2013 22:43:36

Lex1 пишет

Хотя для определения окончания подгрузки страницы, он и не слишком много даёт.

Выделить код

Код:

alert(gBrowser.selectedBrowser.webProgress.isLoadingDocument);

Отредактировано bunda1 (26-06-2013 23:02:25)

Отсутствует

 

№651327-06-2013 01:17:29

Lex1
Участник
 
Группа: Members
Зарегистрирован: 07-07-2007
Сообщений: 260
UA: Firefox 22.0

Re: Custom Buttons

bunda1
Ну onStateChange срабатывает вовремя, т.ч. очевидно можно и так.

Выделить код

Код:

var progressListener=
{
    QueryInterface: function (aIID)
    {
        if (aIID. equals (Components. interfaces. nsIWebProgressListener) ||
            aIID. equals (Components. interfaces. nsISupportsWeakReference) ||
            aIID. equals (Components. interfaces. nsIXULBrowserWindow) ||
            aIID. equals (Components. interfaces. nsISupports))
            return this;
        throw Components. results. NS_NOINTERFACE;
    },
onLocationChange:function (a,b,c){LOG('onLocationChange')},
onProgressChange:function(a,b,c,d,e,f){LOG('onProgressChange')},
onSecurityChange:function(a,b,c){LOG('onSecurityChange')},
onStateChange:function(a,b,c,d){LOG('onStateChange'); if(c == 65552)LOG(content.document.body.innerHTML)},
onStatusChange:function(a,b,c,d){LOG('onStatusChange')}
};
getBrowser().addProgressListener(progressListener);

Отсутствует

 

№651427-06-2013 05:30:05

Kiril__777
Участник
 
Группа: Members
Зарегистрирован: 13-07-2009
Сообщений: 392
UA: Firefox 20.0

Re: Custom Buttons

Нельзя ли подправить код этих кнопок под фф 20.0.1 ?

скрытый текст
http://forum.mozilla-russia.org/viewtopic.php?pid=416000#p416000
http://forum.mozilla-russia.org/viewtopic.php?pid=526493#p526493

спасибо

Отсутствует

 

№651527-06-2013 07:19:40

villa7
Участник
 
Группа: Members
Зарегистрирован: 21-07-2012
Сообщений: 2235
UA: Firefox 23.0

Re: Custom Buttons

Kiril__777
Сам многие исправлял этим, кнопку АМО тоже.

скрытый текст
Автоматическое конвертирование:
convertE4X.js
Там код для секции «код» кнопки.
Надо нажать на кнопку, а затем кликнуть по другой кнопке или по открытому во вкладке *.js файлу.
Работа полученных после конвертирования кодов не гарантируется.
https://github.com/Infocatcher/Custom_Buttons/blob/master/Convert_E4X/convertE4X.js

Отредактировано villa7 (27-06-2013 07:20:44)


Лучше спросить у знающих - чем лезть не зная.

Отсутствует

 

№651627-06-2013 07:50:49

Kiril__777
Участник
 
Группа: Members
Зарегистрирован: 13-07-2009
Сообщений: 392
UA: Firefox 20.0

Re: Custom Buttons

villa7
а вот эту кнопку у вас получилось сделать рабочей?

Отсутствует

 

№651727-06-2013 08:02:20

villa7
Участник
 
Группа: Members
Зарегистрирован: 21-07-2012
Сообщений: 2235
UA: Firefox 23.0

Re: Custom Buttons

Kiril__777 пишет

villa7а вот эту кнопку у вас получилось сделать рабочей?

В этой кнопке конвертация не помогла, только просить разработчика.


Лучше спросить у знающих - чем лезть не зная.

Отсутствует

 

№651827-06-2013 10:09:18

Kiril__777
Участник
 
Группа: Members
Зарегистрирован: 13-07-2009
Сообщений: 392
UA: Firefox 20.0

Re: Custom Buttons

bunda1 пишет

Kiril__777 пишет:

    Подскажите, если я хочу перенести этот пункт из контекстного меню вкладки (tabContextMenu) в меню "Firefox" (appmenuSecondaryPane), то мне нужно одно значение заменить на другое?

Вот пример Добавить новый пункт "Перезапуск" в главном меню(Firefox 3.6 +)

Добавлено 31-03-2013 05:30:44
Или вот так:

Попытался состряпать такой пункт

скрытый текст
// Добавить новый пункт "Искать в кеше Google" в главном меню .....................................................
(function() {
    // блокировать дублирование пункта при открытии настройки панелей
    if ( document.getElementById("google12") ) return;
   
    var menuItem = document.createElement("menuitem");
    menuItem.setAttribute("id", "google12");               
    menuItem.setAttribute("label", "Искать в кеше Google");
    menuItem.setAttribute("oncommand", function(){window.open('http://www.google.com/search?q=cache:'+location.href)});   
   
    var QuitItem = document.getElementById("menu_print"); // в меню 'Файл'
    QuitItem.parentNode.insertBefore( menuItem, QuitItem );
   
    var appmenuQuit = document.getElementById("appmenu_quit") || document.getElementById("appmenu-quit"); // в меню kнопки "Firefox"
    if ( appmenuQuit ) appmenuQuit.parentNode.insertBefore( menuItem.cloneNode(true), appmenuQuit );
})();

не работает

Выделить код

Код:

menuItem.setAttribute("oncommand", function(){window.open('http://www.google.com/search?q=cache:'+location.href)});

дело вот в этой строчке?

Отсутствует

 

№651927-06-2013 10:28:21

Lex1
Участник
 
Группа: Members
Зарегистрирован: 07-07-2007
Сообщений: 260
UA: Firefox 22.0

Re: Custom Buttons

Kiril__777

Выделить код

Код:

menuItem.addEventListener("command", function(){content.open('http://www.google.com/search?q=cache:'+content.location.href)}, false);

См. http://forum.mozilla-russia.org/viewtopic.php?id=57411

Отсутствует

 

№652027-06-2013 12:53:22

Kiril__777
Участник
 
Группа: Members
Зарегистрирован: 13-07-2009
Сообщений: 392
UA: Firefox 20.0

Re: Custom Buttons

Lex1
спасибо за наводку!


Интересует вопрос, если выражение "nextEleMenu" определяет расположение нового пункта меню "перед", то что нужно написать чтобы новый пункт был "после"?

Отсутствует

 

№652127-06-2013 13:00:03

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

Re: Custom Buttons

bunda1 пишет

Indomito
Конвертирование старых кнопок с XML (E4X)

проще переписать скрипт используя такой шаблон

Favorites

Выделить код

Код:

/*Initialization Code*/
var apps = new Array;
//----иконки для меню в base64 

icon1='data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABwAAAA5AAAARgAAAEEAAAA4AAAAJAAAAA0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFQAAAU8dLhSTS2YrwmGEU9U8hoPMCXCHwAg/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==';
icon2='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAABh0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjA4ZXKc4QAAAgtJREFUOE+NU99LU2EYnvSHdNP0uHUcw7n8RTmNgYKgWESXQexGNAoSIsoiutDhUDbndEmLWo1ayEydgV1FXWi1HINipC1rP9x2cptnJoo8nu+Dc9xxg3XggcP3ve/zvu/zPl8FAMX/fuaVGA0+keMUN9rYCppHCMphZCmI4eWoEHYUS85o8VLJ5FJE15s1dAR2ce62j0KML0kgJplCMRAYV3eg9Weh8nLQvN6C3p2QSIoICtu0hLNo9P2C8r4fpyyfwbiiqHr0B6wriQb3pqwTaYSxLynanuFjHo0zETBd/dC0XsaZi9dRfXMB1Y4YTk/EUf8sW0xQmEwImAeLULb3SvMSAv1wAKw9AZ3zL4Woh0zE1g95sN40Kh8LLdvXwdgiUFkjUFt/g7XGoR3fRMNUBoYnXDHB2SUe7CsOldNRqAe/loWsA5N/A3VzPFSuBJTjGzhpegpd97WykHzQPL+DWu82agSVVfYoGHMY6ksPZcYhOjR5ePQFD3DH//1ohCuC4uzkGq2mf56D1plCjTCvZjRONyBuweDj0Rvah/UbL99C52waLbde0mqUxCGsypmBfkIwztQWml/k0P3uHwZCexhaTtJkEic6UmGc4SQCkaT27ns02dZh9CTRM5fB1dmf9F/UpdD+ih73D9TfeysxXnCsSlWOC1nq3VAfnLcFoBv6BJJc7mUevz8EdJ2boXU7oPQAAAAASUVORK5CYII=';



// -------------конец иконок-----------

// ------ пункты меню в формате название,иконка,адрес separator это разделитель ------
apps.push(['название пункта меню1',icon1,'http://адрес_сайта1/']);
apps.push(['название пункта меню2',icon2,'http://адрес_сайта2/']);
apps.push('separator');
apps.push(['название пункта меню1',icon1,'http://адрес_сайта1/']);
apps.push(['название пункта меню2',icon2,'http://адрес_сайта2/']);

// -------------конец меню-----------


var nMItem = function(label,img,path,args,obj) {
  var m = document.createElement('menuitem');
  m.setAttribute('path',path);
  m.setAttribute('label',label);
  m.f = obj.startProcess.bind(obj);
  m.setAttribute('oncommand','event.stopPropagation();this.f("'+path+'","'+args+'",this)');
  m.setAttribute('class','menuitem-iconic');
  if (!img) img = Default;
  m.setAttribute('image',img);
  m.tooltipText = label;
  return m;
}

this.startProcess = function(path,args,mi) {
this.currentCommand=mi;
  this.image=mi.getAttribute("image");
  getBrowser (). selectedTab = getBrowser (). addTab (path)

}

var mP = document.createElement('menupopup');
for (var i=0; i<apps.length; i++) {
  if (apps[i] == 'separator') {
    mP.appendChild(document.createElement('menuseparator'));
  } else {
    if (!apps[i] [3]) apps[i] [3]='';
    mP.appendChild(nMItem(apps[i] [0], apps[i] [1], apps[i] [2], apps[i] [3], this));
  }
}

this.appendChild(mP);
this.type = "menu";
this.orient = "horizontal";
this.image=mP.firstChild.getAttribute ("image");
this.currentCommand=mP.firstChild;

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);');

//-------------- если нужно чтоб меню появлялось при нажатии мыши на кнопку закомментируйте или удалите код ниже

/*
this. onmouseover = function (event)
{
    this. open = true;
 };
*/


Правда я не понял как это

Выделить код

Код:

// ------ пункты меню в формате название,иконка,адрес separator это разделитель ------

apps.push(['название пункта меню1',icon1,'http://адрес_сайта1/']);
apps.push(['название пункта меню2',icon2,'http://адрес_сайта2/']);
apps.push('separator');
apps.push(['название пункта меню1',icon1,'http://адрес_сайта1/']);
apps.push(['название пункта меню2',icon2,'http://адрес_сайта2/']);

// -------------конец меню-----------

Переделать в условный код т.е. ветвление, как у меня реализовано например COMBO... "в лоб" как то не красиво, хотя это дело техники.

IMHO

Отредактировано Indomito (27-06-2013 13:12:25)


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

Отсутствует

 

№652227-06-2013 14:15:06

villa7
Участник
 
Группа: Members
Зарегистрирован: 21-07-2012
Сообщений: 2235
UA: Firefox 23.0

Re: Custom Buttons

del

Отредактировано villa7 (27-06-2013 17:51:41)


Лучше спросить у знающих - чем лезть не зная.

Отсутствует

 

№652327-06-2013 19:27:54

Lex1
Участник
 
Группа: Members
Зарегистрирован: 07-07-2007
Сообщений: 260
UA: Firefox 22.0

Re: Custom Buttons

Kiril__777
Тогда придётся вставлять перед следующим элементом, т.е.

Выделить код

Код:

nextEleMenu = nextEleMenu.nextSibling;

Отсутствует

 

№652427-06-2013 21:16:42

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

Re: Custom Buttons

Kiril__777
Свойства узла childNodes, firstChild, lastChild, nextSibling, previousSibling и parentNode – Часть 2 | okITgo.ru - Mozilla Firefox

Добавлено 27-06-2013 21:19:47

Lex1 пишет

bunda1
Ну onStateChange срабатывает вовремя, т.ч. очевидно можно и так.

Большое спасибо :)

Добавлено 27-06-2013 21:34:50

Indomito пишет

проще переписать скрипт используя такой шаблон

А если такой шаблон:

Выделить код

Код:

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%20Menu2%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/gif%3Bbase64%2CR0lGODlhFwAWALMAAAAAAISEhNbWzv///////////////////////////////////////////////////ywAAAAAFwAWAAAETXDISasdYYjNu//ZJ47haHLlaaaqyApALMek5skbDtqdrnsvGE0IcPE4sx/wmBsqUUxis7j7+IbLWxKbbdW8X3BV3CVDzZ2Aes1uu9cRADs%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..........................................................................%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%20menuPopup.showPopup%28this%2C%20-1%2C%20-1%2C%20%22popup%22%2C%20%22bottomleft%22%2C%20%22topleft%22%29%3B%0A%7D%3B%0A%0A%0A//%20%u0421%u043E%u0437%u0434%u0430%u0442%u044C%20%u043C%u0435%u043D%u044E%20%20....................%20%20%20%20%20%20%0Avar%20array%20%3D%20%5B%0A%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20label%3A%20%22Black%22%2C%0A%20%20%20%20%20%20%20value%3A%20%22%5Bcolor%3D%23000000%5D%2C%5B/color%5D%22%2C%0A%20%20%20%20%20%20%20image%3A%20%22data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAAA0AAAANCAYAAABy6+R8AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAB90RVh0U29mdHdhcmUATWFjcm9tZWRpYSBGaXJld29ya3MgOLVo0ngAAAAjSURBVChTY2RgYPgPxCQDkCZSMckawC4j1ZZRTUiBNuxCDwDYNZxl4jAoIwAAAABJRU5ErkJggg%3D%3D%22%0A%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20label%3A%20%22Gray%22%2C%0A%20%20%20%20%20%20%20value%3A%20%22%5Bcolor%3D%23555555%5D%2C%5B/color%5D%22%2C%0A%20%20%20%20%20%20%20image%3A%20%22data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAAA0AAAANCAYAAABy6+R8AAAABGdBTUEAALGPC/xhBQAAAB90RVh0U29mdHdhcmUATWFjcm9tZWRpYSBGaXJld29ya3MgOLVo0ngAAAAjSURBVChTY2xoaPjPQCoAaSIVM5CqAeyyUU2QkB4NCGiSAwARDYf0VrC2pAAAAABJRU5ErkJggg%3D%3D%22%0A%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20label%3A%20%22D-Blue%22%2C%0A%20%20%20%20%20%20%20value%3A%20%22%5Bcolor%3D%23000066%5D%2C%5B/color%5D%22%2C%0A%20%20%20%20%20%20%20image%3A%20%22data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAAA0AAAANCAYAAABy6+R8AAAABGdBTUEAALGPC/xhBQAAAB90RVh0U29mdHdhcmUATWFjcm9tZWRpYSBGaXJld29ya3MgOLVo0ngAAAAiSURBVChTY2RgaPjPQDoAaSIVk6wB7DJSbRnVhBQ1wy/0APHz6uW3kCqQAAAAAElFTkSuQmCC%22%0A%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20label%3A%20%22%u041A%u0430%u0440%u0442%u0438%u043D%u043A%u0430%22%2C%0A%20%20%20%20%20%20%20value%3A%20%22%5Bimg%5D%2C%5B/img%5D%22%2C%0A%20%20%20%20%20%20%20image%3A%20%22data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABMAAAATCAYAAAByUDbMAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAACXBIWXMAAAsSAAALEgHS3X78AAADK0lEQVQ4T6WT30+TVxjHX2aybJe72MUiuJi4nyH7E8y82N00/hrodMnsXLIlxuyHFHTeuA0xE+IPshnnFpeh2ZiLRgpIC1XU4SrIoGKhBGpbQehSitD2fdvS0/ez5y1dIk12gTvJJ0/O+zzP93zPe84pKV+7PfPqmrIVz6wo0UBb9iiRDkqe0qZm5tC22qqVYYJvzsT3SC2bu7OKGQVtnX+Y2o4Pq9V4wqTKk6TGk+BAEftl/i/FOWv+WU+cX8JwxRLbvrtaBeM5avsT1PXHOVJE7Z04X/fFsWJxzpp/2TvP5Ulx5ropYh/YVThpcsyrc8Kb5ORjHBtM0jSq0xFOc86v0zCQ4Lg3saSm/q8EHdMFsW0iNqGbfHdP57Qvmed7n86pe0nODOsMxxTxNEwnoXsyw9kRnTOSt3IWjUNJrkULYpUi9nfKpD2cwSkOLowbNI8ZXAyk6Jla4GEcHIERmkf7mJZ/eyeSpclvcG7UyMeW+ymkjFZrm1t22ZUhpxGaNwnOKcZms4zEstyXk43q8PnNn3i2cS1PN67DFRrLO2wLpvhNFr0s0S+1BtDiLBILiVh4fpEHIj4RN3mjyYZ28BW0w+WcHrrGbAp6IxnaQmluRxbyBsT8UrFgwZmVtAjN5UQMfvcPsKvhU3ZeqsMTiRIRZ0G5k9a/DIh7iyViqcI2w/MwKZmHicVoEZU9tLd2MTYxQzixIM1pcQ5TUmPVWQuKWRyL26xSmdziaQUepeifHqIreJELw0c4O7iHU/3vUud6k/obb3Gidz0nezfwbV8lPw58RLPvK9rHz/PACNDq7DG1CtsXajYd41dpPurZwMHucqq6yoRS9nWtlLiSmu7VVF99Ebt7FVXux3Ol7HU+x/nR3XJpPdZzqlUjsW72uJ7nk85V7HO/LE2vFXgd+9X/wC3fpW6vs4yf/ZbYn6b2nogNRq+zsaWUdxxrqHC8tCzevvQC33httHfmxQ4pb+wumzsqqXDuoNK5c1msb9vCUV+DiN0ytU3v21UOk5TKPhGGWkBJf/7SbrbVyMX4/8N1/baprdv0cdYh78qixXnjibjivmUeqv8h9w+M0lQoOfmVdgAAAABJRU5ErkJggg%3D%3D%22%0A%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20label%3A%20%22Code%22%2C%0A%20%20%20%20%20%20%20value%3A%20%22%5Bcode%5D%2C%5B/code%5D%22%2C%0A%20%20%20%20%20%20%20image%3A%20%22data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAsTAAALEwEAmpwYAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAA60lEQVR42mL8//8/AyUAIICYGCgEAAFEsQEAAYQNKQHxfyieABWrRRJTQlYMEEBYNc9YtR2MoRoYsIjBDQEIIKyavTOb0RWC5ZJrJ2PIAQQQTs2g2EHH2AwBCCCQIIeNkweGzTgMwHAJQACBBLkUdC3BArqOgSDBSAaIE7AZADdk6dYD/+W0Tf8DBBAoGhk5GX+AZbx8A0DUMjwhDRK/C9TMsGzLYYZHV08zAAQQiqkgV5T3LcQV0nCbkb0KEEAYCnAYglMzQABhjUo0QxjwaQYIIEIpMQcqNgFXSgQIIEZKcyNAAFGcmQACDAB0jLqYK4uYbwAAAABJRU5ErkJggg%3D%3D%22%0A%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20label%3A%20%22Spoiler%22%2C%0A%20%20%20%20%20%20%20value%3A%20%22%5Bspoiler%5D%2C%5B/spoiler%5D%22%2C%0A%20%20%20%20%20%20%20image%3A%20%22data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAMklEQVQ4jWNgGKzgP7EKmSi1iWIDGJHY+JzNiEcOKxhCYTDwgNjQxRaojAwMwyIMKAYA3esECwxQ4k8AAAAASUVORK5CYII%3D%22%0A%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20label%3A%20%22%u0426%u0438%u0442%u0430%u0442%u0430%22%2C%0A%20%20%20%20%20%20%20value%3A%20%22%5Bquote%5D%2C%5B/quote%5D%22%2C%0A%20%20%20%20%20%20%20image%3A%20%22data%3Aimage/gif%3Bbase64%2CR0lGODlhFwAZANUeAPPz+NLS0qampqqqqrKytm5ubmZmZpaWmt7e3r6+voaGhmJiYlJSUoqKivHx9+Li4tra2tbW1ra2tkpKSoKCgu/v9crKyqKiopCw/4ap+IOn93p6euno8u7u9Pr9/tLOysbGxnZ2dq/H/qbA+J6ennJycpKSko6Ojubl77q6uuTj7eLi7Zqamh9AitTg+K/A4t/f6Ojx/d3d54mr+3if8GeS5VZ/xUVomTNRbihGctnY5NfW4tzc5tTT4AAAAAAAACwAAAAAFwAZAAAG3ECAcEgsGo/IpHLJbDqfyoBgACUSCoZDFYBIKBaMxtBBLpvLD0hEsphQypW4fB5/IBCWi6FAl2P+fxkaaXgCBRt0HB2KGB6Ojh8WESB6IYqXixyajSIiIxcCCQkkCyWap6ibjx4TJSYnpamnKLQonCIpE60MIbW+tCrBK42OLLolEi3BKivMzivQwx4jIwoCIy4vLdHc0DAr38QxLuTZ29/o4OAyMDIzNDU2Nzg5Lfbs+O3tMvz9/v8AAwocKEOHwYMIEyrcwWOHw4cQI0qcSJFijx09MmrcyLFjxiAAOw%3D%3D%22%0A%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20label%3A%20%22%u041F%u043E%u0434%u0447%u0435%u0440%u043A%u043D%u0443%u0442%u044B%u0439%20%u0442%u0435%u043A%u0441%u0442%22%2C%0A%20%20%20%20%20%20%20value%3A%20%22%5Bu%5D%2C%5B/u%5D%22%2C%0A%20%20%20%20%20%20%20image%3A%20%22data%3Aimage/gif%3Bbase64%2CR0lGODlhFwAWALMAAAAAAISEhNbWzv///////////////////////////////////////////////////ywAAAAAFwAWAAAEVHDISasdYYjNu//ZJ47haHLlaaaqyG5ADAjy7L2wTesdvnMxl+YTzAlFxR9o6Ekme8yOk4eKAgEBQeBZHdWo3RbJuvtytWTxxqdmi92tgHxOr9vnEQA7%22%0A%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20label%3A%20%22%u041A%u0443%u0440%u0441%u0438%u0432%22%2C%0A%20%20%20%20%20%20%20value%3A%20%22%5Bi%5D%2C%5B/i%5D%22%2C%0A%20%20%20%20%20%20%20image%3A%20%22data%3Aimage/gif%3Bbase64%2CR0lGODlhFwAWALMAAAAAAISEhNbWzv///////////////////////////////////////////////////ywAAAAAFwAWAAAERnDISasdYYjNu//ZJ47haHLlaaaqyH5AHIPaGQduTc65DeC9HWClg/2IwtOLc1MWNzIZskV6UlHWq2Cp5V691IB4TC6bxxEAOw%3D%3D%22%0A%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20label%3A%20%22%u0416%u0438%u0440%u043D%u044B%u0439%22%2C%0A%20%20%20%20%20%20%20value%3A%20%22%5Bb%5D%2C%5B/b%5D%22%2C%0A%20%20%20%20%20%20%20image%3A%20%22data%3Aimage/gif%3Bbase64%2CR0lGODlhFwAWALMAAAAAAISEhNbWzv///////////////////////////////////////////////////ywAAAAAFwAWAAAETXDISasdYYjNu//ZJ47haHLlaaaqyApALMek5skbDtqdrnsvGE0IcPE4sx/wmBsqUUxis7j7+IbLWxKbbdW8X3BV3CVDzZ2Aes1uu9cRADs%3D%22%0A%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20label%3A%20%22CUT%3D%u041F%u043E%u043B%u043D%u0430%u044F%20%u043D%u043E%u0432%u043E%u0441%u0442%u044C%22%2C%0A%20%20%20%20%20%20%20value%3A%20%22%5BCUT%3D%u041F%u043E%u043B%u043D%u0430%u044F%20%u043D%u043E%u0432%u043E%u0441%u0442%u044C%5D%2C%5B/CUT%5D%22%2C%0A%20%20%20%20%20%20%20image%3A%20%22data%3Aimage/gif%3Bbase64%2CR0lGODlhFQAUAPcAAP//////zP//mf//Zv//M///AP/M///MzP/Mmf/MZv/MM//MAP+Z//+ZzP+Zmf+ZZv+ZM/+ZAP9m//9mzP9mmf9mZv9mM/9mAP8z//8zzP8zmf8zZv8zM/8zAP8A//8AzP8Amf8AZv8AM/8AAMz//8z/zMz/mcz/Zsz/M8z/AMzM/8zMzMzMmczMZszMM8zMAMyZ/8yZzMyZmcyZZsyZM8yZAMxm/8xmzMxmmcxmZsxmM8xmAMwz/8wzzMwzmcwzZswzM8wzAMwA/8wAzMwAmcwAZswAM8wAAJn//5n/zJn/mZn/Zpn/M5n/AJnM/5nMzJnMmZnMZpnMM5nMAJmZ/5mZzJmZmZmZZpmZM5mZAJlm/5lmzJlmmZlmZplmM5lmAJkz/5kzzJkzmZkzZpkzM5kzAJkA/5kAzJkAmZkAZpkAM5kAAGb//2b/zGb/mWb/Zmb/M2b/AGbM/2bMzGbMmWbMZmbMM2bMAGaZ/2aZzGaZmWaZZmaZM2aZAGZm/2ZmzGZmmWZmZmZmM2ZmAGYz/2YzzGYzmWYzZmYzM2YzAGYA/2YAzGYAmWYAZmYAM2YAADP//zP/zDP/mTP/ZjP/MzP/ADPM/zPMzDPMmTPMZjPMMzPMADOZ/zOZzDOZmTOZZjOZMzOZADNm/zNmzDNmmTNmZjNmMzNmADMz/zMzzDMzmTMzZjMzMzMzADMA/zMAzDMAmTMAZjMAMzMAAAD//wD/zAD/mQD/ZgD/MwD/AADM/wDMzADMmQDMZgDMMwDMAACZ/wCZzACZmQCZZgCZMwCZAABm/wBmzABmmQBmZgBmMwBmAAAz/wAzzAAzmQAzZgAzMwAzAAAA/wAAzAAAmQAAZgAAMwAAAAYG+P///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAANkALAAAAAAVABQAAAhhALMJHEiwoMGDCBMqTHitocOHEB9mu7YQYcOKBy9mw8ZRILaBHzmKnEjxo8eNIFMKvGhSJcqTK0sWbElzIMuUNWGS9NiRZ8uXOzEW1CjUJsmIGpFWpEixqM2mTldGnSo0IAA7%22%0A%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20label%3A%20%22Center%22%2C%0A%20%20%20%20%20%20%20value%3A%20%22%5Bc%5D%2C%5B/c%5D%22%2C%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20image%3A%20%22data%3Aimage/x-icon%3Bbase64%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ERBwAAEfkR+RP5E/kRAAcA+fn5AAAHEQcHAAAAAAAAABERBwAR+RMAAAAA+RMABwD5+fkABwcREREAAAAAAAAAAAcHABMA+RMRERMAAAAHAPn5APcHEQAAAAAAAAAAAAAAAAATABMREREREfX1EwAHAAD39/cAAAAAAAAAAAAAAAAAAAAT9fUTABMAE/X1EwAA+ff3APkAAAAAAAAAAAAAAAAAE/X1ERMAEwAT9fX1EwAA+QD5+QAAAAAAAAAAAAAA9fUREREREwAAABMRERH1EwcA+fn5AAAAAAAAAAAAAAD1ERP5+QAREwATEQD5+RMRBwD5+fkAAAAAAAAAAAAAABMR+fn5+QARBwcA+ff3+QcHAPn5AAAAAAAAAAAAAAAAABEAAAAAAAcHBwAAAPn3BwD5+fkAAAAAAAAAAAAAAAAAEwAAAAAABwcHAAAAAAAHAPn5+fkAAAAAAAAAAAAAAAATEwAAAPX19fX1AAAAExMAAPn5+QAAAAAAAAAAAAAAExER9fX19fX19RIS9fUTE2cA+fn5AAAAAAAAAAAAAAATExEREREREvX19RISEhJnZwD5+fkAAAAAAAAAAAAAAGcTExMSEhISEvX19fUTZ2dnAPn5+QAAAAAAAAAAAAAAZ/X19RIRERISEvX19fUHB2cA+fkAAAAAAAAAAAAAAABn9fX1EhERERESEvX19QcHZwAA+fkAAAAAAAAAAAAAAAD19fUSERERERESEvX19QcA+WcA+fkAAAAAAAAAAAAAAGf19RIRERERERES9fX1BwBnBwcA+fkAAAAAAAAAABEHAGf1EhIRERERERIS9QcAAAARBwcA+fn5+QAAAAARBwcAAAD1EhISEhISEgcAAAAAAAARBwcAAAD5ABERBwcHAAAAAAAAAAAAAAAAAAAAAAAAAAAR9QcHBwAAEREHBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAREfUHAAAAEREHAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEREQAAAAAAEQcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEREAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOHwH//B4Af/wcAD4wDAAcEAAAGAAAAAgIAAAIHwAAAB+AAAA/wAAB/+AAAf/AAAH/gAAB/4AAAf+AAAP/wAAD/8AAAf/AAAH/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%3D%3D%22%0A%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20label%3A%20%22More%22%2C%0A%20%20%20%20%20%20%20value%3A%20%22%5Bmore%5D%2C%5B/more%5D%22%2C%0A%20%20%20%20%20%20%20image%3A%20%22data%3Aimage/gif%3Bbase64%2CR0lGODlhFQAUALMAAAAAAP////Pz8+bm5tnZ2czMzL+/v7GxsaOjo5SUlIWFhXR0dGNjY1FRUTw8PCUlJSwAAAAAFQAUAAAEZjDISau9OOutnF9V5zEX4QDPQD2AY2QKAJASItOY8uxqcHoaRSPWCCRQC0dQEWAhnJ2lEQUoRmFMn+x1zWUPM0n3osgGGgKxMrMoStJqDc/CeMArA8fugZgQ9ikXBT0YdxuHiImJEQA7%22%0A%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20label%3A%20%22Hide%22%2C%0A%20%20%20%20%20%20%20value%3A%20%22%5Bhide%5D%2C%5B/hide%5D%22%2C%0A%20%20%20%20%20%20%20image%3A%20%22data%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%22%0A%20%20%20%20%20%20%20%7D%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%5D%3B%20%20%20%20%20%20%20%20%0A%0Avar%20menuPopup%20%3D%20document.getElementById%28%22mainPopupSet%22%29.appendChild%28document.createElement%28%22menupopup%22%29%29%3B%20%20%20%20%20%0Aarray.forEach%28function%28%20m%20%29%20%7B%0A%20%20%20%20%20if%20%28%20%22separator%22%20in%20m%20%29%20%7B%20menuPopup.appendChild%28%20document.createElement%28%22menuseparator%22%29%20%29%3B%20return%20%7D%3B%0A%20%20%20%20%20var%20menuitem%20%3D%20document.createElement%28%22menuitem%22%29%3B%0A%20%20%20%20%20menuitem.setAttribute%28%22label%22%2C%20m.label%29%3B%0A%20%20%20%20%20menuitem.setAttribute%28%22value%22%2C%20m.value%29%3B%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20menuitem.setAttribute%28%22class%22%2C%20%22menuitem-iconic%22%29%3B%0A%20%20%20%20%20menuitem.setAttribute%28%22image%22%2C%20m.image%29%3B%0A%20%20%20%20%20menuitem.addEventListener%28%22click%22%2C%20insertBBcode%2C%20false%29%3B%0A%20%20%20%20%20menuPopup.appendChild%28%20menuitem%20%29%3B%0A%7D%29%3B%20%0AaddDestructor%28function%28%29%20%7B%20menuPopup.parentNode.removeChild%28%20menuPopup%20%29%20%7D%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%20%0A%20%20%20%20%0A%20%20%20%20%20%20%20%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....................%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0Afunction%20insertBBcode%28%20e%20%29%20%7B%20%0A%20%20%20var%20array%20%3D%20e.target.getAttribute%28%22value%22%29.split%28%22%2C%22%29%3B%0A%20%20%20if%20%28%20%21array%5B1%5D%20%29%20return%3B%0A%20%20%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%20open%20%3D%20array%5B0%5D%3B%0A%20%20%20%20%20%20%20%20var%20close%20%3D%20array%5B1%5D%3B%0A%20%20%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%20%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%20var%20open%20%3D%20array%5B0%5D%20+%20gClipboard.read%28%29%3B%0A%20%20%20%20%20%20%20%20var%20close%20%3D%20array%5B1%5D%3B%0A%20%20%20%20%20%20%20%20%7D%3B%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%0A%20%20%20var%20theBox%20%3D%20gBrowser.contentDocument.activeElement%3B%0A%20%20%20var%20startPos%20%3D%20theBox.selectionStart%3B%0A%20%20%20var%20endPos%20%3D%20theBox.selectionEnd%3B%0A%20%20%20var%20oPosition%20%3D%20theBox.scrollTop%3B%0A%20%20%20var%20oHeight%20%3D%20theBox.scrollHeight%3B%0A%20%20%20var%20text%20%3D%20theBox.value.substring%280%2CstartPos%29%3B%0A%20%20%20text%20+%3D%20open+theBox.value.substring%28startPos%2C%20endPos%29+close%3B%0A%20%20%20text%20+%3D%20theBox.value.substring%28endPos%2C%20theBox.value.length%29%3B%0A%20%20%20theBox.value%20%3D%20text%3B%0A%20%20%20theBox.selectionStart%20%3D%20startPos%3B%0A%20%20%20theBox.selectionEnd%20%3D%20endPos%20+%20open.length%20+%20close.length%3B%0A%20%20%20var%20nHeight%20%3D%20theBox.scrollHeight%20-%20oHeight%3B%0A%20%20%20theBox.scrollTop%20%3D%20oPosition%20+%20nHeight%3B%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

Отредактировано bunda1 (27-06-2013 21:34:50)

Отсутствует

 

№652527-06-2013 22:34:12

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

Re: Custom Buttons

bunda1 пишет

А если такой шаблон:

спс... глянем.

P.S. Вродеf это фрагмент чего то... ПКМ(он должен отрабатывать вставку из буфера обмена) не работает или я что то не пронял.

Отредактировано Indomito (27-06-2013 22:46:46)


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

Отсутствует

 

Board footer

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