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

Будьте в курсе последних изменений в мире Mozilla, следя за нашим микроблогом в Twitter.

№12630-03-2012 01:12:50

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

Re: [CB]Toggle Find+

bunda1
у меня баг сохраняется уже несколько дней, мне кажется они чего-то просто изменили.
пока что кнопкой пользоваться вообще не возможно.


mzfx

Отсутствует

 

№12730-03-2012 01:25:30

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

Re: [CB]Toggle Find+

iDev.Pi пишет

bunda1
у меня баг сохраняется уже несколько дней, мне кажется они чего-то просто изменили.
пока что кнопкой пользоваться вообще не возможно.

Завтра исправлю.

Отсутствует

 

№12830-03-2012 11:07:13

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

Re: [CB]Toggle Find+

iDev.Pi пишет

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

Подтверждаю.

Отсутствует

 

№12930-03-2012 22:37:19

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

Re: [CB]Toggle Find+

iDev.Pi пишет

bunda1
у меня баг сохраняется уже несколько дней, мне кажется они чего-то просто изменили.
пока что кнопкой пользоваться вообще не возможно.

Да, они изменили код.

Код экспериментальной кнопки  Toggle  Find+3 для инициализации:

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

Выделить код

Код:

//настройка функций кликов мыши(Mouse Click settings)...................................................
this.onclick = function(event)
{
    if(event.button == 0) 
        {
        // Действие при клике ЛКМ
        gFindBar.hidden ? gFindBar.onFindCommand() : gFindBar.close();
        Find(event);
         }
    else if(event.button == 1) 
         {
        // Действие при клике СКМ
        gFindBar.hidden ? gFindBar.onFindCommand() : gFindBar.close();с
        goDoCommand("cmd_selectNone");
        goDoCommand("cmd_paste"); 
         }
};


//Объявляем .....
var prefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService);
var clipboard = Components.classes["@mozilla.org/widget/clipboardhelper;1"].  getService(Components.interfaces.nsIClipboardHelper);
var this_ = this;
var AutoHighlight ='Автовыделение'
var AutoClose ='Автоматически закрыть' 
var CloseTimer ='Закрыть через '
var ClearPref ='Сбросить текст'



//подсказка.............................................................................
this.showTFinfo = function() {
     //getting prefs Unicode value
     var prefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService);
     var Val = "\n\n"+ AutoHighlight +": "+ prefs.getComplexValue("FindBar.Highlight.value",Components.interfaces.nsISupportsString).data;
     //обрезать подсказку для "Автовыделение"
     var HValue = Val.substring(0,50);
     var HDots =(Val.length > 50) ? '....' : "";
     //....
     this.tooltipText = "Поиск по странице" +"\n" + "Л: Показать - скрыть поиск по странице" +"\n" +"С: Поиск по странице из буфера обмена" +"\n"+ "П: Mеню + CB меню" + HValue + HDots;
}
this.setAttribute("onmouseover", "this.showTFinfo()");


//справка(Help)
//this.setAttribute("Help", "event.stopPropagation(); gBrowser.selectedTab = gBrowser.addTab('https://forum.mozilla-russia.org/viewtopic.php?pid=550855#p550855]09-03-2012 19:18:31')");


//проверить наличие строк в about:config и создать если не существует(Add preferences)........................................
if (custombuttons.getPrefs("FindBar.version") !== '8')
{   
    prefs.setCharPref("FindBar.version", "8");
    prefs.setBoolPref("FindBar.Highlight", true);
    prefs.setCharPref("FindBar.Highlight.value", "??????");
    prefs.setBoolPref("FindBar.autoclear", false);
    prefs.setBoolPref("FindBar.contextFindWords", true);
    prefs.setBoolPref("FindBar.ToggleWithDoubleMiddleClick", false);
    prefs.setCharPref("ui.textHighlightBackground", "#ef0fff");//http://coloria.net/bonus/colornames.htm
  //prefs.setCharPref("ui.textHighlightForeground", "#000000");//http://coloria.net/bonus/colornames.htm
    prefs.setBoolPref("FindBar.mini", false);
    prefs.setBoolPref("FindBar.ClearButton", false);
    prefs.setBoolPref("FindBar.auto_Close", false);
    prefs.setCharPref("FindBar.CloseTimer", "7");//7 сек(7 sec)
    prefs.setCharPref("FindBar.AutohighlightNum", "1");
};



//настройка меню(CB menu settings)...................................................
//Объявляем .....
var c ='true';
var n = 'false';
//изменить нужный пункт меню(toggle menuitems)
//переключаем настройки в about:config(toggle preference)
this.CBlabel = function (mi, id)
{
//Автоматически закрыть(FB auto close)....
if(!id || id == "FBClose") {
//переключаем настройки в about:config
s = "FindBar.auto_Close";
togglePref(s);
//Запускаем функцию autohide
if (id) Autohide(event);
//изменить нужный пункт меню
var cek = (custombuttons.getPrefs(s)? c: n);
this.FBCcek = cek;
if(mi) mi.cek = cek;
};

//FB auto close timer.....
if(!id || id == "CloseTimer") {
(function () {
//Стоп, при инициализации кнопки
if (!id) return;
s = "FindBar.CloseTimer";
//switch auto close timer+"\n" +
    var URL = custombuttons.promptBox(AutoClose, CloseTimer+custombuttons.getPrefs(s) + ' секунд', '');
    if (URL[0] == false) return;
    else
    var timer = [URL[1]];
//переключаем настройки в about:config(toggle preference)
prefs.setCharPref(s, timer);
})();
//пункт меню(menuitems)
var label = CloseTimer + custombuttons.getPrefs("FindBar.CloseTimer") + ' секунд';
this.CloseTimer = label;
if(mi) mi.label = label;
};

//FindBar.mini......
if(!id || id == "FBmini") {
//переключаем настройки в about:config
s = "FindBar.mini";
togglePref(s);
//Запускаем функцию fmini(run fmini)
if (id) fmini(event);
//изменить нужный пункт меню
var cek = (custombuttons.getPrefs(s)? c : n);
this.FBcek = cek;
if(mi) mi.cek = cek;
};

//Кнопка 'очистить'......
if(!id || id == "FBbutt") {
//переключаем настройки в about:config
s = "FindBar.ClearButton";
togglePref(s);
//Запускаем функции ClearButton и fmini(run ClearButton, fmini)
if (id) ClearButton(event);
if (id) fmini(event);
//изменить нужный пункт меню
var cek = (custombuttons.getPrefs(s)? c : n);
this.FCBcek = cek;
if(mi) mi.cek = cek;
};

//Find в контекстном меню(Find in the context menu).....
if(!id || id == "FindInMenu") {
// переключаем настройки в about:config
s = "FindBar.contextFindWords";
togglePref(s);
//изменить нужный пункт меню
var cek = (custombuttons.getPrefs(s)? c : n);
this.FIMcek = cek;
if(mi) mi.cek = cek;
};

//Автоматически очищать поле текстового ввода на Findbar.....
if(!id || id == "autoClear") {
// переключаем настройки в about:config
s = "FindBar.autoclear";
togglePref(s);
//Очищистить поле текстового ввода если Findbar закрыт.
if (gFindBar.hidden && custombuttons.getPrefs("FindBar.autoclear")) gFindBar._findField.reset();
//изменить нужный пункт меню
var cek = (custombuttons.getPrefs(s)? c : n);
this.aCcek = cek;
if(mi) mi.cek = cek;
};

//Переключить двойным средним кликом(Toggle with double middle click).....
if(!id || id == "MiddleClick") {
// переключаем настройки в about:config
s = "FindBar.ToggleWithDoubleMiddleClick";
togglePref(s);
//изменить нужный пункт меню
var cek = (custombuttons.getPrefs(s)? c : n);
this.MCcek = cek;
if(mi) mi.cek = cek;
};

//Автовыделение(Switch, Auto Highlight).....
if(!id || id == "SwitchHighlight") {
// переключаем настройки в about:config
s = "FindBar.Highlight";
togglePref(s);
//Изменить иконку кнопки
if (id) ToggleImage(event);
//переключить кнопку 'Highlight'(toggle Highlight)
if (id) document.getElementById('FindToolbar').getElement('highlight').removeAttribute("checked");
//Запускаем функцию Highlight(run function Highlight)
if (id) Highlight(event);
//изменить нужный пункт меню(toggle menuitems)
var cek = (custombuttons.getPrefs(s)? c : n);
this.aHcek = cek;
if(mi) mi.cek = cek;
};

//Изменить цвет для Автовыделение.....
if(!id || id == "addColor") {
(function () {
//Стоп, при инициализации кнопки
if (!id) return;
//создаем модальное окно для ввода цвета
    var URL = custombuttons.promptBox('Изменить цвет для Автовыделение', 'По умолчанию:  #ef0fff', '');
    if (URL[0] == false) return;
    else
    var color = [URL[1]];
//переключаем настройки в about:config(toggle preference)
prefs.setCharPref("ui.textHighlightBackground", color);
})();
//пункт меню(menuitems)
var label = 'Изменить цвет' + ': ' + custombuttons.getPrefs("ui.textHighlightBackground");
this.addColor = label;
if(mi) mi.label = label;
};

//Автовыделение, добавить текст....... 
if(!id || id == "AddText") {
//Запускаем функцию HighlightAdd(run function HighlightAdd)
if (id) HighlightAdd(event);
};

//Автовыделение, сбросить .....
if(!id || id == "Clear") {
//сбросить настройки в about:config
if (id) prefs.setCharPref("FindBar.Highlight.value", ""); 
//Запускаем функцию Highlight(run function Highlight)
if (id) Highlight(event);
//всплывающая подсказка
if (id) custombuttons.alertSlide(ClearPref,'????');
};

//переключаем настройки в about:config(toggle preference)....
function togglePref(s){
//Стоп, при инициализации кнопки
if (!id) return;
//переключаем настройки
custombuttons.setPrefs(s, !custombuttons.getPrefs(s));
}
 };
//Запускаем функцию CBlabel(run CBlabel).........
this.CBlabel();


//пункти меню(Our menu items) ....
this.ss = [
  { cek: this.FBCcek, label: AutoClose, cmd: 'document.popupNode.CBlabel(this, "FBClose")', sItemId: '', type:'checkbox'},
  { label: this.CloseTimer, cmd: 'document.popupNode.CBlabel(this, "CloseTimer")', sItemId: ''},
  { label: "separator", sItemId: ''},
  { cek: this.FBcek, label: 'FindBar мини', cmd: 'document.popupNode.CBlabel(this, "FBmini")', sItemId: '', type:'checkbox'},
  { cek: this.FCBcek, label: 'Кнопка "очистить"  на FindBar', cmd: 'document.popupNode.CBlabel(this, "FBbutt")', sItemId: '', type:'checkbox'},
  { label: "separator", sItemId: ''},
  { cek: this.FIMcek, label: 'Find в контекстном меню', cmd: 'document.popupNode.CBlabel(this, "FindInMenu")', sItemId:'', type:'checkbox'},
  { cek: this.aCcek, label: 'Очищать поисковую форму', cmd: 'document.popupNode.CBlabel(this, "autoClear")', sItemId:'', type:'checkbox'},
  { cek: this.MCcek, label: 'Переключать двойным средним кликом', cmd: 'document.popupNode.CBlabel(this, "MiddleClick")', sItemId:'', type:'checkbox'},
  { label: "separator", sItemId: ''},
  { cek: this.aHcek, label: AutoHighlight, cmd: 'document.popupNode.CBlabel(this, "SwitchHighlight")', sItemId: '', type:'checkbox'},
  { label: this.addColor, cmd: 'document.popupNode.CBlabel(this, "addColor")', sItemId: ''}, 
  { label: 'Добавить текст', cmd: 'document.popupNode.CBlabel(this, "AddText")', sItemId: ''},
  { label: ClearPref, cmd: 'document.popupNode.CBlabel(this, "Clear")', sItemId: ''}];

 
// Our Initialization function for creating the context menu, setting up menuitems and telling
var Cb = custombuttons;
this.mObj = Cb.getCbContextObj(this);
this.init = function(x) {
  x.mObj.setSub();
  var nItem = {}, mItem = {};
  document.getElementById(CB2const.sCBCtxtMenu).setAttribute("oncommand", "event.stopPropagation()");
  for(var i in x.ss) {
    nItem = new x.mObj.getItem();
    nItem.id = 'Note';
    nItem.label = x.ss[i].label;
    if (nItem.label == "separator") {
        nItem = document.createElement("menuseparator");
      }
    nItem.value = String(i);
    mItem = x.mObj.insertBefore(nItem , x.mObj.oMenu.lastChild);
    this.ss[i].sItemId = mItem.id;
    mItem.setAttribute('oncommand',x.ss[i].cmd);
    if("type" in x.ss[i])
    mItem.setAttribute('type', x.ss[i].type);
    mItem.setAttribute('checked', x.ss[i].cek)
    mItem.setAttribute( 'autocheck',true)
   }
  x.mObj.getItem();
  nItem = x.mObj.getItem();
  nItem.id = 'Note';
  this.separator = x.mObj.insertBefore( nItem , x.mObj.oMenu.lastChild);
}
this.init(this);


//Стоп, при открытии настройки панелей....................................................
if (window.ToggleFindRun == 'stop') return;


//Findbar, переклучить  атрибут 'mini'(Findbar, set and remove attribute 'mini')...........
//Findbar, установить и удалить 'hits'(Findbar, set and remove  'hits')...........
function fmini(event){
//FindBar, auto find 
if (!gFindBar.hidden)
{
//Find
gFindBar.onFindCommand();
}
var findToolbar = document.getElementById("FindToolbar");
var HighBut = document.getAnonymousElementByAttribute( gFindBar, "anonid", "highlight");
if (custombuttons.getPrefs("FindBar.mini"))
{
//...
var highlightBtn = document.getElementById('FindToolbar').getElement('highlight');
if (highlightBtn.checked)
{
gFindBar._findField.style.color = prefs.getCharPref("ui.textHighlightBackground");
highlightBtn.removeAttribute("checked");
};
findToolbar.setAttribute("mini", "true");
this.hits = ' ';
var Rtext = custombuttons.getPrefs("FindBar.ClearButton") ? "Искать предыдущее" : "Очистить поле текстового ввода";
var text = "L = Искать следущее"+"\n" +"M = Поиск выделенного текста/из буфера" + "\n" + "R = " + Rtext;
HighBut.setAttribute("tooltiptext", text );
}
else
{
var highlightBtn = document.getElementById('FindToolbar').getElement('highlight');
findToolbar.removeAttribute("mini")
this.hits = ' hits';
HighBut.setAttribute("tooltiptext", "Highlight");
//...
if (!!gFindBar._findField.style.color)
{
highlightBtn.setAttribute("checked", "true");
gFindBar._findField.removeAttribute("style");
}
 }
//Findbar, убрать фокус(Findbar, hide focus) 
_content.focus();
  };

//Findbar, переклучить атрибут 'autohide'......
function Autohide(event){
var f = document.getElementById("FindToolbar");
custombuttons.getPrefs("FindBar.auto_Close") ? f.setAttribute("autohide", "true") : f.removeAttribute("autohide");
};

//Findbar, переклучить атрибут 'ClearButton'......
function ClearButton(event){
var ft = document.getElementById("FindToolbar");
custombuttons.getPrefs("FindBar.ClearButton") ? ft.setAttribute("ClearButton", "true") : ft.removeAttribute("ClearButton");
};
//Запускаем функции fmini(Run the function fmini)  
setTimeout(function(){ fmini(event); Autohide(event); ClearButton(event);}, 200)



//Изменить иконку кнопки.................................................................
function ToggleImage(event){
// toggle button image
if (custombuttonsUtils.getPrefs("FindBar.Highlight"))
{
this_.image="data:image/x-icon;base64,AAABAAEAExMAAAEAIAAYBgAAFgAAACgAAAATAAAAJgAAAAEAIAAAAAAA8AUAAAAAAAAAAAAAAAAAAAAAAAAAAAICAAAAADoHVOdAAWH/PQBd/TwAXP9AAWL/PwBf/z0AXv85AFn/MgBN/zEAS/85AFn/QgFj/zsAW/09AV7/OAdR5wAAAAAAAAACAAAAADsFWdtNAnr/TgF+/08Afv9PAH7/TwJ//0wAff9XD4T/azaN/1Emav8yAFD/RQNw/1ABgf9OAH3/TgB+/00Dev87BVnbAAAAADwIVudRAYH9VACK/1UEiv9UAYn/VACJ/1cEi/9MAIP/dzeh/+TV8P+olrH/LQBK/0sDdf9VAYj/VACJ/1QAif9UAIr/TwB9/ToHU+dEAWj/WAiM/loIkf9ZCZD/WQiP/1kIj/9dDJH/UQCI/4JAqf/68v//t6m+/zAAUP9OB3v/VwaM/1kIj/9ZCI//WgiR/1YIjP5DAmX/RQFo/V0Jlf9eB5r/XgiX/2AJnP9fCZn/Yw6b/1gAlP+DRq3/+PH+/7qsw/81AFr/UQmC/1wGlv9fCJn/XwiX/2AJmv9dCJb/RABp/UYDbf9eCJz/ZAih/2AIn/9jCaD/Ywqf/2QLnf9HAIP/aTKT/+fb8P+unLv/KABO/0gLc/9XC4r/XwmZ/18Lnv9hCaD/Xgic/0YDbv9IBnD/Yg2i/2cNqP9kDaX/Zg+n/2MHo/9dC5X/dT2Z/7ScxP/4+fv/0sbb/2g9hv9DC2n/RAVu/1QHif9hCKD/ZQuo/2INov9IBnD/SwVz/2YMqv9pDrD/aA+u/2kOrv9sGqf/p4HF/+Db5//Zy+X/yq7g/97O6//g2Oj/nH20/0sYdP9GCHT/XgeY/2gSrf9mDKr/SgVz/0oHd/9rELD/bA62/20QtP9jAa3/q3/O/+DY5/+vjsj/fziz/3wpuv+MRcT/wpvi/+jb8v+Ze7P/OABn/1MJiv9mEK7/aw+x/0oHd/9MCXz/cRW5/34nw/+AK8L/ikLE/+nZ9f+3o8b/YyKU/24Xr/9/J8T/dRy9/4Mzwv/TtOz/4Nfp/2M0if9cHYz/dSK3/3IYuP9MCXz/Twl+/4Arxf+SRdP/kEPQ/7eL4P/j1e7/hWSi/2kxmv+TT8r/lU/T/5VR0f+NQc3/sX3g/+PX7v+Vdqz/aDCU/4tCx/9/LcP/Twh+/1QSgf+QQtD/mkva/5JA1f+7i+X/2Mbp/4Bdnv9fKI3/hEG9/5NH1P+WS9j/jUHR/6t12//Yx+X/lHau/2svnv+US9P/j0HP/1QSgv9dIIn/lEbW/5tM3/+VRNv/s3zl/+7h+v+fgLn/WCeG/2w3nf+LR8P/kUXP/4I5wP+xitX/4dnp/49or/+BO7n/mUzc/5VG1v9cIIn/XyGM/5ZL2/+cUOX/mk/i/59V4//n0vv/2Mnl/4Zfqv9dL4v/ZCyV/3I3pf+NZLX/08ff/9fJ5f+CR7f/lUvV/51P5P+WS9v/XiGL/14gi/2aTeH/oVHr/6BR6P+bR+n/vIPu/+zb+v/h0ez/qYjD/4hjqP+ehLb/2dDi/+TX8P+pd9T/j0PV/55R5v+iUu3/mk3h/14gi/1kJZL/nU/n/qNU8v+gU+//pVbv/6FQ7/+3evH/3MP3//Pp/f/47///9ez//9vA9v+uceX/m0vj/6NU7v+iU+//plXy/5xP6P5iJJH/Wyt+55pR3/2mWPj/pVj3/6RY9/+nWvb/pVX1/6db9v+sZvf/rWn2/6xm9/+oXPb/pVb3/6ZZ+P+kWPf/plf3/6ZX+P+ZUN79Wyt+5wAAAABzQJ3bn1Ln/6JU9P+hV/X/oVb0/6NV9P+iV/X/olb1/6JV9P+iVfT/o1X0/6NW9P+iVfT/olX0/6NU9P+eUub/bj2W2wAAAAACAAICAAAAAGo9jeeBRa//fEOs/XxErf98RK3/fESt/3xErf98RK3/fESt/3xErf98RK3/fESt/3tDrP19RKv/az6K5wAAAAACAAICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==";
}
else
{
this_.image="data:image/x-icon;base64,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";
}
  };
ToggleImage(event); 


//find bar сверху (move find bar to the top)................................................
XPCOMUtils.defineLazyGetter(window, "gFindBar", function() {
  let XULNS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
  let findbar = document.createElementNS(XULNS, "findbar");
  findbar.setAttribute("browserid", "content");
  findbar.id = "FindToolbar";
  gBrowser.parentNode.insertBefore(findbar, gBrowser);
  // Force a style flush to ensure that our binding is attached.
  findbar.clientTop;
  window.gFindBarInitialized = true;
  return findbar;
});



//find bar, показать количество совпадений(find bar,show the number of matches)...@author slimx.................
(function() {
    //add label to findbar
    var status = document.getAnonymousElementByAttribute(gFindBar, 'anonid', 'match-case-status');
    var sep = document.createElement("toolbarspacer");
    var count = document.createElement("label");
    count.hidden = true;
    status.parentNode.insertBefore(sep, status);
    status.parentNode.insertBefore(count, status);//findbar-container
    gFindBar.__proto__._foundMatches = count;
    gFindBar.__proto__._updateMatchesCount = function(aRes) {
        if (!this._updateMatchCountTimeout)
            window.clearTimeout(this._updateMatchCountTimeout);
        this._updateMatchCountTimeout =
                window.setTimeout(function(aRes, aSelf) {
                    aSelf._updateMatchesCountWorker(aRes);
                }, 0, aRes, this);
    }

    gFindBar.__proto__._updateMatchesCountWorker = function(aRes) {
        var word = this._findField.value;
        if (aRes == this.nsITypeAheadFind.FIND_NOTFOUND || !word) {
            this._foundMatches.hidden = true;
            this._foundMatches.value = "";
        }
        else {
            var matchesCount = this._countMatches(word).toString();
                if (matchesCount != "0") {
                if (matchesCount == "1")
                    this._foundMatches.value = matchesCount + hits;
                else if (matchesCount == "-1") {
                    var matchLimit = 100;
                    this._foundMatches.value = " \>"+ matchLimit + hits;
                    //                    var key = (matchLimit > 1000) ? "Decrease" : "Increase";
                } else
                    this._foundMatches.value = matchesCount + hits;
                this._foundMatches.hidden = false;
                //Findbar, удалить атрибут 'red'(Findbar, remove attribute 'red').............. 
                var findToolbar = document.getElementById("FindToolbar");
                findToolbar.removeAttribute("red");
            }
            else {
                this._foundMatches.hidden = true;
                this._foundMatches.value = "";
                
                //Findbar, установить атрибут 'red'(Findbar, set attribute 'red')...............
                var findToolbar = document.getElementById("FindToolbar");
                findToolbar.setAttribute("red", "true");
             }

            window.clearTimeout(this._updateMatchCountTimeout);
        }
    }

    gFindBar.__proto__._countMatches = function(aWord, aWindow) {
        var win = aWindow || this.browser.contentWindow;

        var countFound = 0;
        for (var i = 0, count; win.frames && i < win.frames.length; i++) {
            if ((count = this._countMatches(aWord, win.frames[i])) != -1)
                countFound += count;
            else
                return count;
        }

        var doc = win.document;
        if (!doc || !(doc instanceof HTMLDocument))
            return countFound;

        var body = doc.body;

        var count = body.childNodes.length;
        var searchRange = doc.createRange();
        var startPt = doc.createRange();
        var endPt = doc.createRange();

        searchRange.setStart(body, 0);
        searchRange.setEnd(body, count);

        startPt.setStart(body, 0);
        startPt.setEnd(body, 0);
        endPt.setStart(body, count);
        endPt.setEnd(body, count);

        var retRange = null;
        var finder = Components.classes["@mozilla.org/embedcomp/rangefind;1"]
                .createInstance()
                .QueryInterface(Components.interfaces.nsIFind);

        finder.caseSensitive = this._shouldBeCaseSensitive(aWord);

        var matchLimit = 100;
        while ((retRange = finder.Find(aWord, searchRange, startPt, endPt))) {
            if (this._rangeIsVisible(retRange, win)) {
                if (this._findMode == this.FIND_LINKS) {
                    if (this._rangeStartsInLink(retRange))
                        ++ countFound;
                }
                else
                    ++ countFound;
            }
            if (countFound == matchLimit) {
                countFound = -1;
                break;
            }
            startPt = doc.createRange();
            startPt.setStart(retRange.startContainer, retRange.startOffset + 1);
        }

        return countFound;
    }

    gFindBar.__proto__._rangeIsVisible = function(aRange, aWindow) {
        var node = aRange.startContainer;

        if (node.nodeType == node.ELEMENT_NODE) {
            if (node.hasChildNodes) {
                var childNode = node.childNodes[aRange.startOffset];
                if (childNode)
                    node = childNode;
            }
        }

        while (node && node.nodeType != node.ELEMENT_NODE)
            node = node.parentNode;

        // There is no perfect way to check if a node is visible in JavaScript,
        // so use the best measures we can have
        if (node) {
            var style = aWindow.getComputedStyle(node, "");
            if (style) {
                if (style.visibility == "hidden" ||
                        style.visibility == "collapse" ||
                        style.display == "none")
                        return false;
                if (style.left != "auto" && style.width != "auto")
                    if (style.left < 0 && style.left + style.width < 0)
                        return false;
                if (style.top != "auto" && style.height != "auto")
                    if (style.top < 0 && style.top + style.height < 0)
                        return false;
            }
        }

        return true;
    }

    gFindBar.__proto__._rangeStartsInLink = function(aRange) {
        var isInsideLink = false;

        var node = aRange.startContainer;

        if (node.nodeType == node.ELEMENT_NODE) {
            if (node.hasChildNodes) {
                var childNode = node.childNodes[aRange.startOffset];
                if (childNode)
                    node = childNode;
            }
        }

        const XLink_NS = "http://www.w3.org/1999/xlink";
        do {
            if (node instanceof HTMLAnchorElement) {
                isInsideLink = node.hasAttribute("href");m
                break;
            }
            else if (typeof node.hasAttributeNS == "function" &&
                    node.hasAttributeNS(XLink_NS, "href")) {
                isInsideLink = (node.getAttributeNS(XLink_NS, "type") == "simple");
                break;
            }

            node = node.parentNode;
        } while (node);

        return isInsideLink;
    }

    //insert count function to original
    eval("gFindBar._updateCaseSensitivity=" + gFindBar._updateCaseSensitivity.toString().slice(0, -1) + "this._updateMatchesCount();}");
    eval("gFindBar._updateStatusUI=" + gFindBar._updateStatusUI.toString().slice(0, -1) + "this._updateMatchesCount();}");
})();



//FindBar, поиск колесиком мыши(FindBar, Mouse Scroll find )................................................
gFindBar.addEventListener('DOMMouseScroll', function (event){
    //Найти (Find)
    gFindBar.onFindAgainCommand(event.detail < 0);
}, false);

 

//переключить 'Поиск на странице' двойным средним кликом на странице(toggle Find Bar, if Double midlle Click in page)..........
//добавляем обработчик для обработки нажатие на кнопку мыши на странице.......
gBrowser.addEventListener("mouseup", function(event){
//если нажатие на среднюю кнопку мыши
if (event.button !== 1) return;
//если разрешено в настройках(about:config)
if (!custombuttons.getPrefs("FindBar.ToggleWithDoubleMiddleClick")) return;
var _this = this;
//если установлен флаг
if (_this.open){ 
//переключить 'Поиск на странице'
gFindBar.hidden ? gFindBar.onFindCommand() : gFindBar.close();
Find(event);
gFindBar._findField.focus();
}
//устанавливаем флаг
_this.open = true;
//сбросить флаг по таймеру
this.timer = 0;
this.timer = setTimeout(function(){ _this.open = false;}, 600);
}, false);



//Автоматически очищать поле текстового ввода на Findbar..................................................
gFindBar.addEventListener("DOMAttrModified", function(event){
var _this = this;
//устанавливаем флаг
if (gFindBar.hidden){_this.clear = true}
//...
if (!custombuttons.getPrefs("FindBar.autoclear")) return;
if (gFindBar.hidden){gFindBar._findField.reset()}
if (!gFindBar.hidden)
{
//Снять выделенные на странице если флаг - true
if (_this.clear){goDoCommand("cmd_selectNone")}
//сбросить флаг
_this.clear = false;
}
 }, false);
 
 

//findbar очистить, кликнуть правим кликом на findbar's label-Найти: или на иконку поиска на FindBar mini(FindBar clear findText, right click on findbar's label, else Find button)..............
//findbar поиск, кликнуть левым кликом на findbar's label-Найти: или на иконку поиска на FindBar mini(FindBar find, left click on findbar's label, else Find button)..............  
var FindButt = document.getAnonymousElementByAttribute(gFindBar, "anonid", "find-label");
FindButt.setAttribute("onclick", "event.stopPropagation(); clickFind(event);");
//....
var HighBut = document.getAnonymousElementByAttribute( gFindBar, "anonid", "highlight");
HighBut.addEventListener("click", function(event){
  if (custombuttons.getPrefs("FindBar.mini"))
  {
  gFindBar.getElement("highlight").removeAttribute("checked");
  //.......
  clickFind(event);
  }
   }, true);
//.....................
clickFind = function(event){
 if ( event.button == 0 )
   {
   event.preventDefault();
   event.stopPropagation();
   if (custombuttons.getPrefs("FindBar.Highlight")){Highlight(event)};
   //Искать следующее
   gFindBar.onFindAgainCommand(false);
   }
 else if ( event.button == 2 )
   {
   if (custombuttons.getPrefs("FindBar.Highlight")){Highlight(event)};
   //Запускаем функцию findFieldClear или искать предыдущее
   custombuttons.getPrefs("FindBar.ClearButton") ? gFindBar.onFindAgainCommand(true) : findFieldClear(event);
}
  };



//кнопка 'Highlight' на FindBar.mini всегда включена...................................................................      
var highlightBtn = document.getElementById('FindToolbar').getElement('highlight');
highlightBtn.addEventListener("mouseover", function(event){
if (custombuttons.getPrefs("FindBar.mini"))
{
highlightBtn.setAttribute("disabled", "false")
}
 }, false);  
 
 
    
//Поиск по странице из буфера обмена/выделенный текст, если кликнуть средним кликом на findbar или на иконку поиска на FindBar mini .......
//Двойной клик в строке поиска FindBar мини включает и выключает обычную подсветку текста из панели поиска...........
//Стоп, при открытии настройки панелей(stop, if onDestroy)
if (window.ToggleFindRun !== 'stop') (function () {
//Поиск по странице из буфера обмен
gFindBar.addEventListener("click", function(event){
     if ( event.button !== 1 )return; 
        event.preventDefault();
        event.stopPropagation();
        //........
        var sel = content.getSelection().toString();
        var str =(!!sel) ? sel : readFromClipboard();
        //Убираем пробелы с обоих концов текста.
        var str = str.replace(/^\s+|\s+$/g,"");
        //...
        gFindBar._findField.value = str;
        Find(event);
}, true);
//переключить кнопку 'Highlight'.........
gFindBar._findField.addEventListener("dblclick", function(event){
      if ( event.button != 0 )return;
        event.preventDefault();
        event.stopPropagation()
        //....
        if (!custombuttons.getPrefs("FindBar.mini")) return;
        if (custombuttons.getPrefs("FindBar.Highlight")) return;
        //Запускаем функцию toggleHighlight
        toggleHighlight(event);
        //Findbar, убрать фокус(Findbar, hide focus) 
        _content.focus();
}, false);
})();


 
/*//ЛКМ в форму поиска - выделить текст в форме поиска............................
gFindBar._findField.addEventListener("click", function(event){
      if ( event.button !== 0 )return;
        event.preventDefault();
        event.stopPropagation()
      gFindBar._findField.select();
}, false);*/



//ЛКМ + ПКМ очистить поле текстового ввода на Findbar........................................................
//добавляем обработчики для обработки мышиных событий на поле текстового ввода...
//нажатие на кнопку мыши, запускаем функцию 'buttonDown'
gFindBar._findField.addEventListener("mousedown", function(event){ClearFindField.buttonDown(event); }, true);
//нажатая кнопка мыши отпущена, запускаем функцию 'buttonUp'
gFindBar._findField.addEventListener("click", function(event){ ClearFindField.buttonUp(event); }, true);//mouseup
//......
var ClearFindField = {
buttonDown : function(event)
{  
   //если нажатие на левую кнопку мыши, устанавливаем флаг
   if (0 == event.button){ this.leftButtonDown = true };
   //если нажатие на правую кнопку мыши и если установлен флаг
   if (2 == event.button && this.leftButtonDown){
   //сбросить флаг, устанавить флаг
    this.leftButtonDown = false;
    this.stopMenu = true; 
    //Очистить поле текстового ввода
    setTimeout(function(){ findFieldClear(event);}, 0);
    if (custombuttons.getPrefs("FindBar.Highlight")){Highlight(event)};
    }
},
buttonUp : function(event)
{
  //если нажатая левая кнопка мыши отпущена
   if (event.button == 0)
   {
   //сбросить флаг
   this.leftButtonDown = false;
   }
  //если нажатая правая кнопка мыши отпущена и если установлен флаг
   if (event.button == 2 && this.stopMenu){
   event.preventDefault();
   event.stopPropagation();
   //сбросить флаг
   this.stopMenu = false; 
   } 
}   
                   };

     
   
//FindBar, автоматически закрыть(autohide Findbar).................................      
//Стоп, при открытии настройки панелей(stop, if onDestroy)
if (window.ToggleFindRun !== 'stop') (function () {
function go() {
  gFindBar.close();
  window.ACRun = '';
  }
function on() {
  if (!custombuttons.getPrefs("FindBar.auto_Close")) return;
  if (window.ACRun == 'stop') return;
  window.ACRun = 'stop';
  timeoutId = 0;
  timeoutId = setTimeout(go, custombuttons.getPrefs("FindBar.CloseTimer") + '000')
  }
function off() {
  if (!custombuttons.getPrefs("FindBar.auto_Close")) return;
  window.ACRun = '';
  clearTimeout(timeoutId);
  }  
gFindBar.addEventListener("DOMAttrModified", function(event){if (gFindBar.hidden) off() }, false);  
addEventListener('mouseover', function(event){ if (!gFindBar.hidden) (event.target.nodeName !== 'findbar')? on(): off() }, false);  
})();  



//FindBar, сочетания клавиш(Key config).........................................................
//Стоп, при открытии настройки панелей(stop, if onDestroy)
if (window.ToggleFindRun !== 'stop')(function () {
window.addEventListener('keydown', function (event){
//FindBar(ctrl+ F)показать - скрыть(Toggle Find Bar).........
if ((event.ctrlKey)&&(!event.altKey)&&(!event.shiftKey)&&(event.keyCode==70))
{
event.preventDefault();
event.stopPropagation();
//переключить 'Поиск на странице'
gFindBar.hidden ? gFindBar.onFindCommand() : gFindBar.close();
Find(event);
gFindBar._findField.focus();
}
//Findbar(ctrl+ALT+F), поиск по странице из буфера обмена(find from clipboard).............
if ((event.ctrlKey)&&(event.altKey)&&(event.keyCode==70))
{
gFindBar.hidden ? gFindBar.onFindCommand() : gFindBar.close();
goDoCommand("cmd_selectNone");
goDoCommand("cmd_paste");
Find(event);
}
//Findbar(ctrl+Snift+F), открывать Findbar с чистой поисковой формой(Find, clear find field).............
if ((event.ctrlKey)&&(!event.altKey)&&(event.shiftKey)&&(event.keyCode==70))
{
goDoCommand("cmd_selectNone");
findFieldClear(event);
}
//Findbar(ctrl+ALT+H), FindBar, вести слова для выделение(set Highlight words)...
if ((event.ctrlKey)&&(event.altKey)&&(event.keyCode==72))
{
//Запускаем функцию HighlightAdd(run HighlightAdd) 
HighlightAdd(event);
}
 }, false);
})();



//переключить кнопку 'Highlight'(toggle Highlight)............................................
function toggleHighlight(event) {
var highlightBtn = document.getElementById('FindToolbar').getElement('highlight');
//...
if (!gFindBar._findField.style.color)
{
gFindBar._highlightDoc(true, gFindBar._findField.value);
gFindBar._findField.style.color = prefs.getCharPref("ui.textHighlightBackground");
}
else 
{
gFindBar._highlightDoc(false);
gFindBar._findField.removeAttribute("style");
}
 };



//Автоматически выделить заранее введенные слова (auto Highlight words permanent)....................................................
Highlight = function(event) {

let console=Components.classes["@mozilla.org/consoleservice;1"]
            .getService(Components.interfaces.nsIConsoleService);
console.logStringMessage(event.target)
console.logStringMessage(event)
//устанавливаем флаги...
var m = true;
if (event =='false'){var m = false};
if (event =='[object UIEvent]'){var m = false};
if (event =='[object DragEvent]'){var m = false};
if (event =='[object MouseEvent]'){var m = false};   

//hide Highlight
gFindBar._highlightDoc(false);

//....
var FBNum = custombuttons.getPrefs("FindBar.AutohighlightNum");
var FBvalue = gFindBar._findField.value;
  
//.... 
if (!gFindBar.hidden)
{
  //...
  if (!!gFindBar._findField.style.color)
     {
     gFindBar._findField.removeAttribute("style");
     }
  //Findbar, удалить атрибут 'red'(Findbar, remove attribute 'red')..............
  if (FBvalue.length  == '0')
     {
     var findToolbar = document.getElementById("FindToolbar");
     findToolbar.removeAttribute("red");
     }
  //FindBar, auto find 
  if (m)
     {
      //Findbar, фокус(Findbar, focus)
      gFindBar._findField.focus();
  
      gFindBar.onFindCommand();
    
      //Findbar, убрать фокус(Findbar, hide focus) 
       _content.focus();
      }
}
//auto Highlight
if (custombuttonsUtils.getPrefs("FindBar.Highlight"))
{
  if (gFindBar.hidden)
     {
     //getting prefs Unicode value
     var value = prefs.getComplexValue("FindBar.Highlight.value",
     Components.interfaces.nsISupportsString).data;
     }
  if (!gFindBar.hidden)
     {
     var value =(FBvalue.length > FBNum)? FBvalue : "??????";
     }
//Highlight
gFindBar._highlightDoc(true, value);
}
 };   
if (window.ToggleFindRun !== 'stop') (function () {
//добавляем обработчики........
//отслеживаем команду Назад(back) и Вперёд(forward)...
window.addEventListener("command", function(event){
var command = String(event.target.getAttribute("oncommand"));
//фылтр..
if (command == 'BrowserBack();' || command == 'BrowserBack(event);' || command == 'BrowserForward();' || command == 'BrowserForward(event);'){
setTimeout(function() { Highlight(event)}, 0)
}}, false);
//обработчики для табов...
gBrowser.tabContainer.addEventListener("TabSelect", Highlight, false);
gBrowser.addEventListener("DOMContentLoaded", function(event){
//фылтр..
//стоп, если открыть новые таби 
if (event.target.location.href !== getBrowser().currentURI.spec) return;
//стоп, если срабатывает на фрейме
var document = event.originalTarget;
if (document instanceof HTMLDocument && this.contentWindow.document !== document) return;
Highlight(event)}, false);
//обработчики для FindBar..
gFindBar._findField.addEventListener("input", function(event){ var event = 'false'; Highlight(event)}, false);
gFindBar._findField.setAttribute("ondrop","event.stopPropagation(); Find(event); ");
gFindBar.addEventListener("DOMAttrModified", function(event){if (gFindBar.hidden){Highlight(event)}}, false);
})();



//FindBar. контекстного меню (context Menu).......................................
(function contextFindWords(){
// выходим, если функция уже выполнялась
    if (document.getElementById("contextFindWords")) return;
 
    const kXULNS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";

    var contextMenu = document.getElementById("contentAreaContextMenu");
    var separator = document.getElementById("context-sep-properties");
    var eventTarget = null;

    var menu = document.createElementNS(kXULNS, "menu");
    menu.id = "contextFindWords";
           
    menu.setAttribute("label", "Find");
    menu.hidden = true;
    contextMenu.insertBefore(menu, separator);

    var menuPopup = document.createElementNS(kXULNS, "menupopup");
    menu.appendChild(menuPopup);

    var lst = [
        { 
          label:"Найти на странице",
          command:ContexFind
        },
        {
          label:"Поиск по сайту(google)",
          command:Search
        },
        {
          label:"Выделить текст на странице",
          command:HighlightSel
        },
        {
          label:"Автовыделение, добавить текст",
          command:addSel
        }
        ];
    
    for(var i = 0, m; m = lst[i]; i++){
        var menuItem = document.createElementNS(kXULNS, "menuitem");
        menuItem.setAttribute("label", m.label);
        menuItem.setAttribute("type", "m.radio");
        if ("accesskey" in m) menuItem.setAttribute("accesskey", m.accesskey);
        menuItem.addEventListener("command", m.command, false);
        menuItem.id = "context-Find-Words-" + m.label.toString();
        menuPopup.appendChild(menuItem);
        
    }
    var contextFind = document.getElementById("contextFindWords")
    contextMenu.addEventListener("popupshowing", setMenuDisplay, false);

    function setMenuDisplay(aEvent) {
        if (gContextMenu.isTextSelected)
        {
          if (custombuttons.getPrefs("FindBar.contextFindWords"))
          {
          contextFind.hidden = false;
          }
          else   
          {
          contextFind.hidden = true;
          }
        }
      }
     function ContexFind(){
         gFindBar.onFindCommand();
         //Запускаем функцию Find
         Find(event);
         }
     function Search(){
        var focusedWindow = document. commandDispatcher. focusedWindow;
        var text = focusedWindow. getSelection (). toString ();
        var doc = getBrowser (). contentDocument;
        try { var url = doc. location. hostname; }
        catch(e)
        { var url = ""; }
        text = escape (convertFromUnicode ("UTF-8", text));
        url = encodeURIComponent (url);
        var searchUrl = "http://www.google.com/search?as_q=" + text + "&as_sitesearch=" + url;
        gBrowser.selectedTab = gBrowser.addTab(searchUrl);
        }
     function HighlightSel(){
        gFindBar.toggleHighlight(false);
        var text = document.commandDispatcher.focusedWindow.getSelection();
        gFindBar._highlightDoc(true, text);
        goDoCommand("cmd_selectNone");
        }
     function addSel(){
        //Запускаем функцию HighlightAdd 
        HighlightAdd(event);
        }     
})();


//Если нажать в главном меню Firefox на пункт меню 'Найти'.............................................
document.getElementById("cmd_find").setAttribute("oncommand", "gFindBar.onFindCommand(); Find(event);");


//Найти на странице....................................................  
Find = function(event){
if (custombuttons.getPrefs("FindBar.Highlight")){Highlight(event)};
if (!gFindBar.hidden) gFindBar._find(gFindBar._findField.value);
};

        

//Добавить текст(выделенный / из буфера обмена) для автовыделения.......................................
function HighlightAdd(event){
//Копируем выделенный текст в буфер
document.getElementById("cmd_copy").doCommand();
// Get the root branch
var prefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch);
//setting Unicode value
var str = Components.classes["@mozilla.org/supports-string;1"].createInstance(Components.interfaces.nsISupportsString);
//читаем из буфера обмена и добавляем текст для автовыделения в 'about:config'
str.data = readFromClipboard();
prefs.setComplexValue("FindBar.Highlight.value", 
Components.interfaces.nsISupportsString, str);
//всплывающая подсказка
custombuttons.alertSlide(AutoHighlight, str.data);
//...
goDoCommand("cmd_selectNone");
//Запускаем функцию Highlight(run Highlight) 
Highlight(event);
      };  



//Поле текстового ввода на Findbar мигает желтим............................
function fflash(event){
var findToolbar = document.getElementById("FindToolbar");
//Следим за иконкой статуса на FindBar
var findstatus = gFindBar.getElement("find-status-icon");
findstatus.addEventListener("DOMAttrModified",function(e){
if(findstatus.getAttribute("status")=="wrapped")
{
findToolbar.setAttribute("flash", "true");
setTimeout(function() {findToolbar.removeAttribute("flash");}, 700)};
}, false)};
//Запускаем функции fflash, fmini(Run the function fflash)
document.addEventListener( "DOMContentLoaded", fflash(event), false);



//Создать кнопку "Clear" на Findbar.........................................................
var ubc=document.getAnonymousElementByAttribute( gFindBar, "anonid", "findbar-textbox");
var btn=document.createElementNS("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul", "toolbarbutton");
btn.setAttribute("id", "ClearButton");
btn.setAttribute("tooltiptext", "L = Очистить поле текстового ввода");
ubc.parentNode.insertBefore(btn, ubc.nextSibling);
btn.addEventListener("click", function(event)
{
  if ( event.button != 0 ) return;
 //Запускаем функцию findFieldClear
  findFieldClear(event);
}, false);



//Очистить поле текстового ввода на Findbar..................................................
function findFieldClear(event){
gFindBar._findField.reset();
//....
var findToolbar = document.getElementById("FindToolbar");
findToolbar.removeAttribute("red");
//...
gFindBar.onFindCommand();
//....
gFindBar._highlightDoc(false);
};

 
// FindToolbar стиль(style).......................................................................
(function(css) {
      var pi = document.createProcessingInstruction(
      'xml-stylesheet',
      'type="text/css" href="data:text/css;utf-8,' + encodeURIComponent(css) + '"'
    );
    return document.insertBefore(pi, document.documentElement);
  }
)(<![CDATA[
@namespace url(http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul);

/*Find Toolbar.................*/
#FindToolbar {
    border-bottom: 1px solid grey !important; }

#FindToolbar > .findbar-container > * { display: -moz-box !important; }
#FindToolbar > hbox > label{-moz-appearance: none !important;font-weight: bold  !important;}
#find-field,.findbar-textbox{width: 250px !important;}

#FindToolbar .findbar-find-fast.findbar-find-status,
#FindToolbar .findbar-container>image,
#FindToolbar[autohide] .findbar-closebutton
{display: none !important;}

#FindToolbar[red="true"] .findbar-textbox{box-shadow: 0 0 0 1em #f66 inset;}

#FindToolbar:not([red="true"]) .findbar-textbox[status="notfound"]{
   background: rgba(207,219,236,0.99) !important;
   color: black !important;
   box-shadow: none !important;}


/*Find Toolbar, mini......................................... */

#FindToolbar[mini="true"] .findbar-textbox{
   width: 16em !important; 
   height:21px!important;  
   padding-right: 20px !important;
   margin-right: 2px!important;
   margin-left:-4px!important}
   
#FindToolbar[mini] {
    position: fixed;
    right: 18px;
    background: menu !important;
    box-shadow: 0px 10px 5px -10px rgba(0,0,0,.3) !important;
    border: 1px solid grey !important;
    border-top: 0 !important;
    border-radius: 0 0 8px 8px !important;}
   
#FindToolbar[mini="true"] .findbar-container>checkbox{
   margin-left:-24px !important;
   margin-right: -3px !important}

#FindToolbar[mini] toolbarspacer,
#FindToolbar[mini="true"]  label[class="checkbox-label"],
#FindToolbar[mini="true"]  toolbarbutton.findbar-find-next, 
#FindToolbar[mini="true"]  toolbarbutton.findbar-find-previous,
#FindToolbar[mini="true"] .findbar-highlight label,
#FindToolbar[mini="true"] .findbar-closebutton,
#FindToolbar:not([ClearButton="true"]) #ClearButton,
#FindToolbar[mini="true"] .findbar-find-fast[anonid="find-label"],
#FindToolbar[mini="true"] .findbar-find-fast[anonid="match-case-status"] 
{ display: none !important;} 

    
#FindToolbar[mini] .findbar-highlight,
#FindToolbar[mini] .findbar-highlight[checked] {
    list-style-image: url("data:image/gif;base64,R0lGODlhEAAQAMQWAJmZzJlmzGZmzGZm/2aZ/5mZ/5nM/8zM/8z//5mZmWZmmf///8yZzMzMmZlmmZmZM8zMM8zMZsz/ZsyZZpmZZmZmM////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAHoAxYALAAAAAAQABAAAAVsoCUCgQCIaCoKA1G4p7q6RmEXcQoMxYEYQEMOJSAYEL+D8jC0CG6GJTKhUtiAPiSCmlK4er7FgiGzWLGIBUJRZliVCLMi0Sg7FHhq4gGJlFUNEBIQE38pExGDFIYoFIkQi4wWjhEVkiIUFQohADs=") !important;
    -moz-image-region: auto !important;}
 
    

#ClearButton{
    list-style-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAFgSURBVHjaYv7//z/j69evWR8+fMj19etXHgYGBhjmxoK5gJhDTEyMOT4+/v+pU6f+AwQQM1Azy5o1a/hevXolC5RUAmIFIJYHYlksWBKIhYEWsQEt/PXgwYPfAAHEADQNZKr21KlTD7x8+fLbfwIApAakFqQHpBcggIA0gwAQOxKjGdkQkB6QXoAAYgISzCC/AU3jZMADTExMwBgEoGpBLmcGCCCQAYxQQ/BqxgJAehgBAogJymEkUTNcD0AAMZFhMwoACCAmSjSDAEAAMTGQAM6cOYMhBhBAMAP+o9uelpZGSDNYD0AAgQJCGIgtgNG7BZvmWbNmYRgG4jMyMvoAmScAAogFSPwF4m/ApPwdlhZAmpAVo2sGqQXpAekFCCCKkzJAADFmZWXBMpMUUFAUmsJYcITjH6jNr4Gan4WEhHwCCCAGUHYGGsIKFABlYSGoIWI4MEhOCKQWpAekFyDAAO0k7MPVi8ODAAAAAElF") !important;
    -moz-image-region: auto !important;
    margin-right: 1px!important;}    
     
#FindToolbar[mini="true"] textbox.findbar-textbox{
   -moz-box-ordinal-group: 2 !important}
#FindToolbar[mini="true"] checkbox{ 
  -moz-box-ordinal-group: 3 !important;}
#FindToolbar[mini="true"] toolbarbutton.findbar-highlight{
   -moz-box-ordinal-group: 4 !important;}
#FindToolbar[mini="true"] #ClearButton{
   -moz-box-ordinal-group: 4 !important;}
#FindToolbar[mini="true"] .findbar-closebutton{
   -moz-box-ordinal-group: 7 !important;}
]]>.toString());


//устанавливаем флаг
window.ToggleFindRun = 'stop';

Отредактировано bunda1 (30-03-2012 22:40:36)

Отсутствует

 

№13031-03-2012 03:46:44

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

Re: [CB]Toggle Find+

bunda1
спасибо большое!
баг исчез.
новая фича с очисткой ЛКМ>ПКМ - очень понравилась.
очень бы хотелось всё-таки ещё сделать так, чтобы первый клик по поисковой форме - выделял бы всё содержимое (как адресная строка)


mzfx

Отсутствует

 

№13131-03-2012 05:38:07

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

Re: [CB]Toggle Find+

iDev.Pi пишет

очень бы хотелось всё-таки ещё сделать так, чтобы первый клик по поисковой форме - выделял бы всё содержимое (как адресная строка)

Ok

Отсутствует

 

№13231-03-2012 23:52:12

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

Re: [CB]Toggle Find+

Добавил новые возможности:
Теперъ можна переключать автовыделения двойным кликом в строке поиска, но не по умолчанию, это надо включать через меню кнопки.

Поменял кнопку "очистить" на кнопку "Вставить и искать"  на FindBar, для поиска выделенного на странице текста или текста из буфера обмена. Удобно для тех у кого нет средней мыши кнопки.

iDev.Pi пишет

очень бы хотелось всё-таки ещё сделать так, чтобы первый клик по поисковой форме - выделял бы всё содержимое (как адресная строка)

Код экспериментальной кнопки  Toggle  Find+3 для инициализации:

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

Выделить код

Код:

//настройка функций кликов мыши(Mouse Click settings)...................................................
this.onclick = function(event)
{
    if(event.button == 0) 
        {
        // Действие при клике ЛКМ
        gFindBar.hidden ? gFindBar.onFindCommand() : gFindBar.close();
        Find(event);
         }
    else if(event.button == 1) 
         {
        // Действие при клике СКМ
        gFindBar.hidden ? gFindBar.onFindCommand() : gFindBar.close();
        goDoCommand("cmd_selectNone");
        goDoCommand("cmd_paste"); 
         }
};


//Объявляем .....
var prefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService);
var clipboard = Components.classes["@mozilla.org/widget/clipboardhelper;1"].  getService(Components.interfaces.nsIClipboardHelper);
var this_ = this;
var AutoHighlight ='Автовыделение'
var AutoClose ='Автоматически закрыть' 
var CloseTimer ='Закрыть через '
var ClearPref ='Сбросить текст'



//подсказка.............................................................................
this.showTFinfo = function() {
     //getting prefs Unicode value
     var prefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService);
     var Val = "\n\n"+ AutoHighlight +": "+ prefs.getComplexValue("FindBar.Highlight.value",Components.interfaces.nsISupportsString).data;
     //обрезать подсказку для "Автовыделение"
     var HValue = Val.substring(0,50);
     var HDots =(Val.length > 50) ? '....' : "";
     //....
     this.tooltipText = "Поиск по странице" +"\n" + "Л: Показать - скрыть поиск по странице" +"\n" +"С: Поиск по странице из буфера обмена" +"\n"+ "П: Mеню + CB меню" + HValue + HDots;
}
this.setAttribute("onmouseover", "this.showTFinfo()");


//справка(Help)
//this.setAttribute("Help", "event.stopPropagation(); gBrowser.selectedTab = gBrowser.addTab('https://forum.mozilla-russia.org/viewtopic.php?pid=550855#p550855]09-03-2012 19:18:31')");


//проверить наличие строк в about:config и создать если не существует(Add preferences)........................................
if (custombuttons.getPrefs("FindBar.version") !== '10')
{   
    prefs.setCharPref("FindBar.version", "10");
    prefs.setBoolPref("FindBar.Highlight", true);
    prefs.setCharPref("FindBar.Highlight.value", "??????");
    prefs.setBoolPref("FindBar.autoclear", false);
    prefs.setBoolPref("FindBar.contextFindWords", true);
    prefs.setBoolPref("FindBar.ToggleWithDoubleMiddleClick", false);
    prefs.setCharPref("ui.textHighlightBackground", "#ef0fff");//http://coloria.net/bonus/colornames.htm
  //prefs.setCharPref("ui.textHighlightForeground", "#000000");//http://coloria.net/bonus/colornames.htm
    prefs.setBoolPref("FindBar.mini", false);
    custombuttons.clearPrefs("FindBar.ClearButton");
    prefs.setBoolPref("FindBar.pasteButton", false);
    prefs.setBoolPref("FindBar.auto_Close", false);
    prefs.setCharPref("FindBar.CloseTimer", "7");//7 сек(7 sec)
    prefs.setCharPref("FindBar.AutohighlightNum", "1");
    prefs.setBoolPref("FindBar.Autohighlight.ToggleWithDoubleClick", false);
};



//настройка меню(CB menu settings)...................................................
//Объявляем .....
var c ='true';
var n = 'false';
//изменить нужный пункт меню(toggle menuitems)
//переключаем настройки в about:config(toggle preference)
this.CBlabel = function (mi, id)
{
//Автоматически закрыть(FB auto close)....
if(!id || id == "FBClose") {
//переключаем настройки в about:config
s = "FindBar.auto_Close";
togglePref(s);
//Запускаем функцию autohide
if (id) Autohide(event);
//изменить нужный пункт меню
var cek = (custombuttons.getPrefs(s)? c: n);
this.FBCcek = cek;
if(mi) mi.cek = cek;
};

//FB auto close timer.....
if(!id || id == "CloseTimer") {
(function () {
//Стоп, при инициализации кнопки
if (!id) return;
s = "FindBar.CloseTimer";
//switch auto close timer+"\n" +
    var URL = custombuttons.promptBox(AutoClose, CloseTimer+custombuttons.getPrefs(s) + ' секунд', '');
    if (URL[0] == false) return;
    else
    var timer = [URL[1]];
//переключаем настройки в about:config(toggle preference)
prefs.setCharPref(s, timer);
})();
//пункт меню(menuitems)
var label = CloseTimer + custombuttons.getPrefs("FindBar.CloseTimer") + ' секунд';
this.CloseTimer = label;
if(mi) mi.label = label;
};

//FindBar.mini......
if(!id || id == "FBmini") {
//переключаем настройки в about:config
s = "FindBar.mini";
togglePref(s);
//Запускаем функцию fmini(run fmini)
if (id) fmini(event);
//изменить нужный пункт меню
var cek = (custombuttons.getPrefs(s)? c : n);
this.FBcek = cek;
if(mi) mi.cek = cek;
};

//Кнопка 'Вставить и искать'......
if(!id || id == "FBbutt") {
//переключаем настройки в about:config
s = "FindBar.pasteButton";
togglePref(s);
//Запускаем функции pasteButton и fmini(run pasteButton, fmini)
if (id) pasteButton(event);
if (id) fmini(event);
//изменить нужный пункт меню
var cek = (custombuttons.getPrefs(s)? c : n);
this.FpBcek = cek;
if(mi) mi.cek = cek;
};

//Find в контекстном меню(Find in the context menu).....
if(!id || id == "FindInMenu") {
// переключаем настройки в about:config
s = "FindBar.contextFindWords";
togglePref(s);
//изменить нужный пункт меню
var cek = (custombuttons.getPrefs(s)? c : n);
this.FIMcek = cek;
if(mi) mi.cek = cek;
};

//Автоматически очищать поле текстового ввода на Findbar.....
if(!id || id == "autoClear") {
// переключаем настройки в about:config
s = "FindBar.autoclear";
togglePref(s);
//Очищистить поле текстового ввода если Findbar закрыт.
if (gFindBar.hidden && custombuttons.getPrefs("FindBar.autoclear")) gFindBar._findField.reset();
//изменить нужный пункт меню
var cek = (custombuttons.getPrefs(s)? c : n);
this.aCcek = cek;
if(mi) mi.cek = cek;
};

//Переключить двойным средним кликом(Toggle with double middle click).....
if(!id || id == "MiddleClick") {
// переключаем настройки в about:config
s = "FindBar.ToggleWithDoubleMiddleClick";
togglePref(s);
//изменить нужный пункт меню
var cek = (custombuttons.getPrefs(s)? c : n);
this.MCcek = cek;
if(mi) mi.cek = cek;
};

//Автовыделение двойным кликом.....
if(!id || id == "dblclikHighlight") {
// переключаем настройки в about:config
s = "FindBar.Autohighlight.ToggleWithDoubleClick";
togglePref(s);
//изменить нужный пункт меню(toggle menuitems)
var cek = (custombuttons.getPrefs(s)? c : n);
this.dbcHcek = cek;
if(mi) mi.cek = cek;
};

//Автовыделение(Switch, Auto Highlight).....
if(!id || id == "SwitchHighlight") {
// переключаем настройки в about:config
s = "FindBar.Highlight";
togglePref(s);
//Изменить иконку кнопки
if (id) ToggleImage(event);
//переключить кнопку 'Highlight'(toggle Highlight)
if (id) document.getElementById('FindToolbar').getElement('highlight').removeAttribute("checked");
//Запускаем функцию Highlight(run function Highlight)
if (id) Highlight(event);
//изменить нужный пункт меню(toggle menuitems)
var cek = (custombuttons.getPrefs(s)? c : n);
this.aHcek = cek;
if(mi) mi.cek = cek;
};

//Изменить цвет для Автовыделение.....
if(!id || id == "addColor") {
(function () {
//Стоп, при инициализации кнопки
if (!id) return;
//создаем модальное окно для ввода цвета
    var URL = custombuttons.promptBox('Изменить цвет для Автовыделение', 'По умолчанию:  #ef0fff', '');
    if (URL[0] == false) return;
    else
    var color = [URL[1]];
//переключаем настройки в about:config(toggle preference)
prefs.setCharPref("ui.textHighlightBackground", color);
})();
//пункт меню(menuitems)
var label = 'Изменить цвет' + ': ' + custombuttons.getPrefs("ui.textHighlightBackground");
this.addColor = label;
if(mi) mi.label = label;
};

//Автовыделение, добавить текст....... 
if(!id || id == "AddText") {
//Запускаем функцию HighlightAdd(run function HighlightAdd)
if (id) HighlightAdd(event);
};

//Автовыделение, сбросить .....
if(!id || id == "Clear") {
//сбросить настройки в about:config
if (id) prefs.setCharPref("FindBar.Highlight.value", ""); 
//Запускаем функцию Highlight(run function Highlight)
if (id) Highlight(event);
//всплывающая подсказка
if (id) custombuttons.alertSlide(ClearPref,'????');
};

//переключаем настройки в about:config(toggle preference)....
function togglePref(s){
//Стоп, при инициализации кнопки
if (!id) return;
//переключаем настройки
custombuttons.setPrefs(s, !custombuttons.getPrefs(s));
}
 };
//Запускаем функцию CBlabel(run CBlabel).........
this.CBlabel();


//пункти меню(Our menu items) ....
this.ss = [
  { cek: this.FBCcek, label: AutoClose, cmd: 'document.popupNode.CBlabel(this, "FBClose")', sItemId: '', type:'checkbox'},
  { label: this.CloseTimer, cmd: 'document.popupNode.CBlabel(this, "CloseTimer")', sItemId: ''},
  { label: "separator", sItemId: ''},
  { cek: this.FBcek, label: 'FindBar мини', cmd: 'document.popupNode.CBlabel(this, "FBmini")', sItemId: '', type:'checkbox'},
  { cek: this.FpBcek, label: 'Кнопка "Вставить и искать"  на FindBar', cmd: 'document.popupNode.CBlabel(this, "FBbutt")', sItemId: '', type:'checkbox'},
  { label: "separator", sItemId: ''},
  { cek: this.FIMcek, label: 'Find в контекстном меню', cmd: 'document.popupNode.CBlabel(this, "FindInMenu")', sItemId:'', type:'checkbox'},
  { cek: this.aCcek, label: 'Всегда открывать пустую поисковую форму', cmd: 'document.popupNode.CBlabel(this, "autoClear")', sItemId:'', type:'checkbox'},
  { cek: this.MCcek, label: 'Переключать двойным средним кликом', cmd: 'document.popupNode.CBlabel(this, "MiddleClick")', sItemId:'', type:'checkbox'},
  { label: "separator", sItemId: ''},
  { cek: this.dbcHcek, label: 'Автовыделение двойным кликом на поисковой форме', cmd: 'document.popupNode.CBlabel(this, "dblclikHighlight")', sItemId: '', type:'checkbox'},
  { cek: this.aHcek, label: AutoHighlight, cmd: 'document.popupNode.CBlabel(this, "SwitchHighlight")', sItemId: '', type:'checkbox'},
  { label: this.addColor, cmd: 'document.popupNode.CBlabel(this, "addColor")', sItemId: ''}, 
  { label: 'Добавить текст', cmd: 'document.popupNode.CBlabel(this, "AddText")', sItemId: ''},
  { label: ClearPref, cmd: 'document.popupNode.CBlabel(this, "Clear")', sItemId: ''}];

 
// Our Initialization function for creating the context menu, setting up menuitems and telling
var Cb = custombuttons;
this.mObj = Cb.getCbContextObj(this);
this.init = function(x) {
  x.mObj.setSub();
  var nItem = {}, mItem = {};
  document.getElementById(CB2const.sCBCtxtMenu).setAttribute("oncommand", "event.stopPropagation()");
  for(var i in x.ss) {
    nItem = new x.mObj.getItem();
    nItem.id = 'Note';
    nItem.label = x.ss[i].label;
    if (nItem.label == "separator") {
        nItem = document.createElement("menuseparator");
      }
    nItem.value = String(i);
    mItem = x.mObj.insertBefore(nItem , x.mObj.oMenu.lastChild);
    this.ss[i].sItemId = mItem.id;
    mItem.setAttribute('oncommand',x.ss[i].cmd);
    if("type" in x.ss[i])
    mItem.setAttribute('type', x.ss[i].type);
    mItem.setAttribute('checked', x.ss[i].cek)
    mItem.setAttribute( 'autocheck',true)
   }
  x.mObj.getItem();
  nItem = x.mObj.getItem();
  nItem.id = 'Note';
  this.separator = x.mObj.insertBefore( nItem , x.mObj.oMenu.lastChild);
}
this.init(this);


//Стоп, при открытии настройки панелей....................................................
if (window.ToggleFindRun == 'stop') return;


//Findbar, переклучить  атрибут 'mini'(Findbar, set and remove attribute 'mini')...........
//Findbar, установить и удалить 'hits'(Findbar, set and remove  'hits')...........
function fmini(event){
//FindBar, auto find 
if (!gFindBar.hidden)
{
//Find
gFindBar.onFindCommand();
}
var findToolbar = document.getElementById("FindToolbar");
var HighBut = document.getAnonymousElementByAttribute( gFindBar, "anonid", "highlight");
if (custombuttons.getPrefs("FindBar.mini"))
{
//...
var highlightBtn = document.getElementById('FindToolbar').getElement('highlight');
if (highlightBtn.checked)
{
gFindBar._findField.style.color = prefs.getCharPref("ui.textHighlightBackground");
highlightBtn.removeAttribute("checked");
};
findToolbar.setAttribute("mini", "true");
this.hits = ' ';
var text = "L = Искать следущее"+"\n" +"M = Поиск выделенного текста/из буфера" + "\n" + "R = Искать предыдущее";
HighBut.setAttribute("tooltiptext", text );
}
else
{
var highlightBtn = document.getElementById('FindToolbar').getElement('highlight');
findToolbar.removeAttribute("mini")
this.hits = ' hits';
HighBut.setAttribute("tooltiptext", "Highlight");
//...
if (!!gFindBar._findField.style.color)
{
highlightBtn.setAttribute("checked", "true");
gFindBar._findField.removeAttribute("style");
}
 }
//Findbar, убрать фокус(Findbar, hide focus) 
_content.focus();
  };

//Findbar, переклучить атрибут 'autohide'......
function Autohide(event){
var f = document.getElementById("FindToolbar");
custombuttons.getPrefs("FindBar.auto_Close") ? f.setAttribute("autohide", "true") : f.removeAttribute("autohide");
};

//Findbar, переклучить атрибут 'pasteButton'......
function pasteButton(event){
var ft = document.getElementById("FindToolbar");
custombuttons.getPrefs("FindBar.pasteButton") ? ft.setAttribute("pasteButton", "true") : ft.removeAttribute("pasteButton");
};
//Запускаем функции fmini(Run the function fmini)  
setTimeout(function(){ fmini(event); Autohide(event); pasteButton(event);}, 200)



//Изменить иконку кнопки.................................................................
function ToggleImage(event){
// toggle button image
if (custombuttonsUtils.getPrefs("FindBar.Highlight"))
{
this_.image="data:image/x-icon;base64,AAABAAEAExMAAAEAIAAYBgAAFgAAACgAAAATAAAAJgAAAAEAIAAAAAAA8AUAAAAAAAAAAAAAAAAAAAAAAAAAAAICAAAAADoHVOdAAWH/PQBd/TwAXP9AAWL/PwBf/z0AXv85AFn/MgBN/zEAS/85AFn/QgFj/zsAW/09AV7/OAdR5wAAAAAAAAACAAAAADsFWdtNAnr/TgF+/08Afv9PAH7/TwJ//0wAff9XD4T/azaN/1Emav8yAFD/RQNw/1ABgf9OAH3/TgB+/00Dev87BVnbAAAAADwIVudRAYH9VACK/1UEiv9UAYn/VACJ/1cEi/9MAIP/dzeh/+TV8P+olrH/LQBK/0sDdf9VAYj/VACJ/1QAif9UAIr/TwB9/ToHU+dEAWj/WAiM/loIkf9ZCZD/WQiP/1kIj/9dDJH/UQCI/4JAqf/68v//t6m+/zAAUP9OB3v/VwaM/1kIj/9ZCI//WgiR/1YIjP5DAmX/RQFo/V0Jlf9eB5r/XgiX/2AJnP9fCZn/Yw6b/1gAlP+DRq3/+PH+/7qsw/81AFr/UQmC/1wGlv9fCJn/XwiX/2AJmv9dCJb/RABp/UYDbf9eCJz/ZAih/2AIn/9jCaD/Ywqf/2QLnf9HAIP/aTKT/+fb8P+unLv/KABO/0gLc/9XC4r/XwmZ/18Lnv9hCaD/Xgic/0YDbv9IBnD/Yg2i/2cNqP9kDaX/Zg+n/2MHo/9dC5X/dT2Z/7ScxP/4+fv/0sbb/2g9hv9DC2n/RAVu/1QHif9hCKD/ZQuo/2INov9IBnD/SwVz/2YMqv9pDrD/aA+u/2kOrv9sGqf/p4HF/+Db5//Zy+X/yq7g/97O6//g2Oj/nH20/0sYdP9GCHT/XgeY/2gSrf9mDKr/SgVz/0oHd/9rELD/bA62/20QtP9jAa3/q3/O/+DY5/+vjsj/fziz/3wpuv+MRcT/wpvi/+jb8v+Ze7P/OABn/1MJiv9mEK7/aw+x/0oHd/9MCXz/cRW5/34nw/+AK8L/ikLE/+nZ9f+3o8b/YyKU/24Xr/9/J8T/dRy9/4Mzwv/TtOz/4Nfp/2M0if9cHYz/dSK3/3IYuP9MCXz/Twl+/4Arxf+SRdP/kEPQ/7eL4P/j1e7/hWSi/2kxmv+TT8r/lU/T/5VR0f+NQc3/sX3g/+PX7v+Vdqz/aDCU/4tCx/9/LcP/Twh+/1QSgf+QQtD/mkva/5JA1f+7i+X/2Mbp/4Bdnv9fKI3/hEG9/5NH1P+WS9j/jUHR/6t12//Yx+X/lHau/2svnv+US9P/j0HP/1QSgv9dIIn/lEbW/5tM3/+VRNv/s3zl/+7h+v+fgLn/WCeG/2w3nf+LR8P/kUXP/4I5wP+xitX/4dnp/49or/+BO7n/mUzc/5VG1v9cIIn/XyGM/5ZL2/+cUOX/mk/i/59V4//n0vv/2Mnl/4Zfqv9dL4v/ZCyV/3I3pf+NZLX/08ff/9fJ5f+CR7f/lUvV/51P5P+WS9v/XiGL/14gi/2aTeH/oVHr/6BR6P+bR+n/vIPu/+zb+v/h0ez/qYjD/4hjqP+ehLb/2dDi/+TX8P+pd9T/j0PV/55R5v+iUu3/mk3h/14gi/1kJZL/nU/n/qNU8v+gU+//pVbv/6FQ7/+3evH/3MP3//Pp/f/47///9ez//9vA9v+uceX/m0vj/6NU7v+iU+//plXy/5xP6P5iJJH/Wyt+55pR3/2mWPj/pVj3/6RY9/+nWvb/pVX1/6db9v+sZvf/rWn2/6xm9/+oXPb/pVb3/6ZZ+P+kWPf/plf3/6ZX+P+ZUN79Wyt+5wAAAABzQJ3bn1Ln/6JU9P+hV/X/oVb0/6NV9P+iV/X/olb1/6JV9P+iVfT/o1X0/6NW9P+iVfT/olX0/6NU9P+eUub/bj2W2wAAAAACAAICAAAAAGo9jeeBRa//fEOs/XxErf98RK3/fESt/3xErf98RK3/fESt/3xErf98RK3/fESt/3tDrP19RKv/az6K5wAAAAACAAICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==";
}
else
{
this_.image="data:image/x-icon;base64,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";
}
  };
ToggleImage(event); 



//find bar сверху (move find bar to the top)................................................
XPCOMUtils.defineLazyGetter(window, "gFindBar", function() {
  let XULNS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
  let findbar = document.createElementNS(XULNS, "findbar");
  findbar.setAttribute("browserid", "content");
  findbar.id = "FindToolbar";
  gBrowser.parentNode.insertBefore(findbar, gBrowser);
  // Force a style flush to ensure that our binding is attached.
  findbar.clientTop;
  window.gFindBarInitialized = true;
  return findbar;
});



//find bar, показать количество совпадений(find bar,show the number of matches)...@author slimx.................
(function() {
    //add label to findbar
    var status = document.getAnonymousElementByAttribute(gFindBar, 'anonid', 'match-case-status');
    var sep = document.createElement("toolbarspacer");
    var count = document.createElement("label");
    count.hidden = true;
    status.parentNode.insertBefore(sep, status);
    status.parentNode.insertBefore(count, status);//findbar-container
    gFindBar.__proto__._foundMatches = count;
    gFindBar.__proto__._updateMatchesCount = function(aRes) {
        if (!this._updateMatchCountTimeout)
            window.clearTimeout(this._updateMatchCountTimeout);
        this._updateMatchCountTimeout =
                window.setTimeout(function(aRes, aSelf) {
                    aSelf._updateMatchesCountWorker(aRes);
                }, 0, aRes, this);
    }

    gFindBar.__proto__._updateMatchesCountWorker = function(aRes) {
        var word = this._findField.value;
        if (aRes == this.nsITypeAheadFind.FIND_NOTFOUND || !word) {
            this._foundMatches.hidden = true;
            this._foundMatches.value = "";
        }
        else {
            var matchesCount = this._countMatches(word).toString();
                if (matchesCount != "0") {
                if (matchesCount == "1")
                    this._foundMatches.value = matchesCount + hits;
                else if (matchesCount == "-1") {
                    var matchLimit = 100;
                    this._foundMatches.value = " \>"+ matchLimit + hits;
                    //                    var key = (matchLimit > 1000) ? "Decrease" : "Increase";
                } else
                    this._foundMatches.value = matchesCount + hits;
                this._foundMatches.hidden = false;
                //Findbar, удалить атрибут 'red'(Findbar, remove attribute 'red').............. 
                var findToolbar = document.getElementById("FindToolbar");
                findToolbar.removeAttribute("red");
            }
            else {
                this._foundMatches.hidden = true;
                this._foundMatches.value = "";
                
                //Findbar, установить атрибут 'red'(Findbar, set attribute 'red')...............
                var findToolbar = document.getElementById("FindToolbar");
                findToolbar.setAttribute("red", "true");
             }

            window.clearTimeout(this._updateMatchCountTimeout);
        }
    }

    gFindBar.__proto__._countMatches = function(aWord, aWindow) {
        var win = aWindow || this.browser.contentWindow;

        var countFound = 0;
        for (var i = 0, count; win.frames && i < win.frames.length; i++) {
            if ((count = this._countMatches(aWord, win.frames[i])) != -1)
                countFound += count;
            else
                return count;
        }

        var doc = win.document;
        if (!doc || !(doc instanceof HTMLDocument))
            return countFound;

        var body = doc.body;

        var count = body.childNodes.length;
        var searchRange = doc.createRange();
        var startPt = doc.createRange();
        var endPt = doc.createRange();

        searchRange.setStart(body, 0);
        searchRange.setEnd(body, count);

        startPt.setStart(body, 0);
        startPt.setEnd(body, 0);
        endPt.setStart(body, count);
        endPt.setEnd(body, count);

        var retRange = null;
        var finder = Components.classes["@mozilla.org/embedcomp/rangefind;1"]
                .createInstance()
                .QueryInterface(Components.interfaces.nsIFind);

        finder.caseSensitive = this._shouldBeCaseSensitive(aWord);

        var matchLimit = 100;
        while ((retRange = finder.Find(aWord, searchRange, startPt, endPt))) {
            if (this._rangeIsVisible(retRange, win)) {
                if (this._findMode == this.FIND_LINKS) {
                    if (this._rangeStartsInLink(retRange))
                        ++ countFound;
                }
                else
                    ++ countFound;
            }
            if (countFound == matchLimit) {
                countFound = -1;
                break;
            }
            startPt = doc.createRange();
            startPt.setStart(retRange.startContainer, retRange.startOffset + 1);
        }

        return countFound;
    }

    gFindBar.__proto__._rangeIsVisible = function(aRange, aWindow) {
        var node = aRange.startContainer;

        if (node.nodeType == node.ELEMENT_NODE) {
            if (node.hasChildNodes) {
                var childNode = node.childNodes[aRange.startOffset];
                if (childNode)
                    node = childNode;
            }
        }

        while (node && node.nodeType != node.ELEMENT_NODE)
            node = node.parentNode;

        // There is no perfect way to check if a node is visible in JavaScript,
        // so use the best measures we can have
        if (node) {
            var style = aWindow.getComputedStyle(node, "");
            if (style) {
                if (style.visibility == "hidden" ||
                        style.visibility == "collapse" ||
                        style.display == "none")
                        return false;
                if (style.left != "auto" && style.width != "auto")
                    if (style.left < 0 && style.left + style.width < 0)
                        return false;
                if (style.top != "auto" && style.height != "auto")
                    if (style.top < 0 && style.top + style.height < 0)
                        return false;
            }
        }

        return true;
    }

    gFindBar.__proto__._rangeStartsInLink = function(aRange) {
        var isInsideLink = false;

        var node = aRange.startContainer;

        if (node.nodeType == node.ELEMENT_NODE) {
            if (node.hasChildNodes) {
                var childNode = node.childNodes[aRange.startOffset];
                if (childNode)
                    node = childNode;
            }
        }

        const XLink_NS = "http://www.w3.org/1999/xlink";
        do {
            if (node instanceof HTMLAnchorElement) {
                isInsideLink = node.hasAttribute("href");m
                break;
            }
            else if (typeof node.hasAttributeNS == "function" &&
                    node.hasAttributeNS(XLink_NS, "href")) {
                isInsideLink = (node.getAttributeNS(XLink_NS, "type") == "simple");
                break;
            }

            node = node.parentNode;
        } while (node);

        return isInsideLink;
    }

    //insert count function to original
    eval("gFindBar._updateCaseSensitivity=" + gFindBar._updateCaseSensitivity.toString().slice(0, -1) + "this._updateMatchesCount();}");
    eval("gFindBar._updateStatusUI=" + gFindBar._updateStatusUI.toString().slice(0, -1) + "this._updateMatchesCount();}");
})();



//FindBar, поиск колесиком мыши(FindBar, Mouse Scroll find )................................................
gFindBar.addEventListener('DOMMouseScroll', function (event){
    //Найти (Find)
    gFindBar.onFindAgainCommand(event.detail < 0);
}, false);

 

//переключить 'Поиск на странице' двойным средним кликом на странице(toggle Find Bar, if Double midlle Click in page)..........
//добавляем обработчик для обработки нажатие на кнопку мыши на странице.......
gBrowser.addEventListener("mouseup", function(event){
//если нажатие на среднюю кнопку мыши
if (event.button !== 1) return;
//если разрешено в настройках(about:config)
if (!custombuttons.getPrefs("FindBar.ToggleWithDoubleMiddleClick")) return;
var _this = this;
//если установлен флаг
if (_this.open){ 
//переключить 'Поиск на странице'
gFindBar.hidden ? gFindBar.onFindCommand() : gFindBar.close();
Find(event);
gFindBar._findField.focus();
}
//устанавливаем флаг
_this.open = true;
//сбросить флаг по таймеру
this.timer = 0;
this.timer = setTimeout(function(){ _this.open = false;}, 600);
}, false);



//Автоматически очищать поле текстового ввода на Findbar..................................................
gFindBar.addEventListener("DOMAttrModified", function(event){
var _this = this;
//устанавливаем флаг
if (gFindBar.hidden){_this.clear = true}
//...
if (!custombuttons.getPrefs("FindBar.autoclear")) return;
if (gFindBar.hidden){gFindBar._findField.reset()}
if (!gFindBar.hidden)
{
//Снять выделенные на странице если флаг - true
if (_this.clear){goDoCommand("cmd_selectNone")}
//сбросить флаг
_this.clear = false;
}
 }, false);
 
 

//findbar очистить, кликнуть правим кликом на findbar's label-Найти: или на иконку поиска на FindBar mini(FindBar clear findText, right click on findbar's label, else Find button)..............
//findbar поиск, кликнуть левым кликом на findbar's label-Найти: или на иконку поиска на FindBar mini(FindBar find, left click on findbar's label, else Find button)..............  
var FindButt = document.getAnonymousElementByAttribute(gFindBar, "anonid", "find-label");
FindButt.setAttribute("onclick", "event.stopPropagation(); clickFind(event);");
//....
var HighBut = document.getAnonymousElementByAttribute( gFindBar, "anonid", "highlight");
HighBut.addEventListener("click", function(event){
  if (custombuttons.getPrefs("FindBar.mini"))
  {
  gFindBar.getElement("highlight").removeAttribute("checked");
  //.......
  clickFind(event);
  }
   }, true);
//.....................
clickFind = function(event){
 if ( event.button == 0 )
   {
   event.preventDefault();
   event.stopPropagation();
   if (custombuttons.getPrefs("FindBar.Highlight")){Highlight(event)};
   //Искать следующее
   gFindBar.onFindAgainCommand(false);
   }
 else if ( event.button == 2 )
   {
   if (custombuttons.getPrefs("FindBar.Highlight")){Highlight(event)};
   //Запускаем функцию findFieldClear или искать предыдущее
   custombuttons.getPrefs("FindBar.mini") ? gFindBar.onFindAgainCommand(true) : findFieldClear(event);
}
  };



//кнопка 'Highlight' на FindBar.mini всегда включена...................................................................      
var highlightBtn = document.getElementById('FindToolbar').getElement('highlight');
highlightBtn.addEventListener("mouseover", function(event){
if (custombuttons.getPrefs("FindBar.mini")){ highlightBtn.setAttribute("disabled", "false")}
}, false);
  
 
 
    
//Поиск по странице из буфера обмена/выделенный текст, если кликнуть средним кликом на findbar или на иконку поиска на FindBar mini .......
//Двойной клик в строке поиска FindBar мини включает и выключает обычную подсветку текста из панели поиска...........
//Стоп, при открытии настройки панелей(stop, if onDestroy)
if (window.ToggleFindRun !== 'stop') (function () {
//Поиск по странице из буфера обмена/выделенный текст
gFindBar.addEventListener("click", function(event){
     if ( event.button !== 1 )return; 
        event.preventDefault();
        event.stopPropagation();
        //........
        var sel = content.getSelection().toString();
        var str =(!!sel) ? sel : readFromClipboard();
        //Убираем пробелы с обоих концов текста.
        var str = str.replace(/^\s+|\s+$/g,"");
        //...
        gFindBar._findField.value = str;
        Find(event);
}, true);
//переключить кнопку 'Highlight'.........
gFindBar._findField.addEventListener("dblclick", function(event){
      if ( event.button != 0 )return;
        event.preventDefault();
        event.stopPropagation()
        //....
        if (!custombuttons.getPrefs("FindBar.mini")) return;
        if (custombuttons.getPrefs("FindBar.Autohighlight.ToggleWithDoubleClick")){
        // переключаем настройки в about:config
        s = "FindBar.Highlight";
    custombuttons.setPrefs(s, !custombuttons.getPrefs(s));
    //Изменить иконку кнопки
    ToggleImage(event);
    //переключить кнопку 'Highlight'(toggle Highlight)
    document.getElementById('FindToolbar').getElement('highlight').removeAttribute("checked");
    //Запускаем функцию Highlight(run function Highlight)
    Highlight(event);
    }
    else{
    if (custombuttonsUtils. getPrefs ("FindBar.Highlight")) return;
        //Запускаем функцию toggleHighlight
        toggleHighlight(event);
        }
        //Findbar, убрать фокус(Findbar, hide focus) 
        _content.focus(); 
  }, false);
})();


 
//ЛКМ в форму поиска - выделить текст в форме поиска............................
gFindBar._findField.addEventListener("click", function(event){
      if ( event.button !== 0 )return;
      if(!this.FB_fFselect){ gFindBar._findField.select();}
      this.FB_fFselect = true;
}, false);
gFindBar._findField.addEventListener("blur", function(event){ this.FB_fFselect = false;
}, false);



//ЛКМ + ПКМ очистить поле текстового ввода на Findbar........................................................
//добавляем обработчики для обработки мышиных событий на поле текстового ввода...
//нажатие на кнопку мыши, запускаем функцию 'buttonDown'
gFindBar._findField.addEventListener("mousedown", function(event){ClearFindField.buttonDown(event); }, true);
//нажатая кнопка мыши отпущена, запускаем функцию 'buttonUp'
gFindBar._findField.addEventListener("click", function(event){ ClearFindField.buttonUp(event); }, true);//mouseup
//......
var ClearFindField = {
buttonDown : function(event)
{  
   //если нажатие на левую кнопку мыши, устанавливаем флаг
   if (0 == event.button){ this.leftButtonDown = true };
   //если нажатие на правую кнопку мыши и если установлен флаг
   if (2 == event.button && this.leftButtonDown){
   //сбросить флаг, устанавить флаг
    this.leftButtonDown = false;
    this.stopMenu = true; 
    //Очистить поле текстового ввода
    setTimeout(function(){ findFieldClear(event);}, 0);
    if (custombuttons.getPrefs("FindBar.Highlight")){Highlight(event)};
    }
},
buttonUp : function(event)
{
  //если нажатая левая кнопка мыши отпущена
   if (event.button == 0)
   {
   //сбросить флаг
   this.leftButtonDown = false;
   }
  //если нажатая правая кнопка мыши отпущена и если установлен флаг
   if (event.button == 2 && this.stopMenu){
   event.preventDefault();
   event.stopPropagation();
   //сбросить флаг
   this.stopMenu = false; 
   } 
}   
                   };

     
   
//FindBar, автоматически закрыть(autohide Findbar).................................      
//Стоп, при открытии настройки панелей(stop, if onDestroy)
if (window.ToggleFindRun !== 'stop') (function () {
function go() {
  gFindBar.close();
  window.ACRun = '';
  }
function on() {
  if (!custombuttons.getPrefs("FindBar.auto_Close")) return;
  if (window.ACRun == 'stop') return;
  window.ACRun = 'stop';
  timeoutId = 0;
  timeoutId = setTimeout(go, custombuttons.getPrefs("FindBar.CloseTimer") + '000')
  }
function off() {
  if (!custombuttons.getPrefs("FindBar.auto_Close")) return;
  window.ACRun = '';
  clearTimeout(timeoutId);
  }  
gFindBar.addEventListener("DOMAttrModified", function(event){if (gFindBar.hidden) off() }, false);  
addEventListener('mouseover', function(event){ if (!gFindBar.hidden) (event.target.nodeName !== 'findbar')? on(): off() }, false);  
})();  



//FindBar, сочетания клавиш(Key config).........................................................
//Стоп, при открытии настройки панелей(stop, if onDestroy)
if (window.ToggleFindRun !== 'stop')(function () {
window.addEventListener('keydown', function (event){
//FindBar(ctrl+ F)показать - скрыть(Toggle Find Bar).........
if ((event.ctrlKey)&&(!event.altKey)&&(!event.shiftKey)&&(event.keyCode==70))
{
event.preventDefault();
event.stopPropagation();
//переключить 'Поиск на странице'
gFindBar.hidden ? gFindBar.onFindCommand() : gFindBar.close();
Find(event);
gFindBar._findField.focus();
}
//Findbar(ctrl+ALT+F), поиск по странице из буфера обмена(find from clipboard).............
if ((event.ctrlKey)&&(event.altKey)&&(event.keyCode==70))
{
gFindBar.hidden ? gFindBar.onFindCommand() : gFindBar.close();
goDoCommand("cmd_selectNone");
goDoCommand("cmd_paste");
Find(event);
}
//Findbar(ctrl+Snift+F), открывать Findbar с чистой поисковой формой(Find, clear find field).............
if ((event.ctrlKey)&&(!event.altKey)&&(event.shiftKey)&&(event.keyCode==70))
{
goDoCommand("cmd_selectNone");
findFieldClear(event);
}
//Findbar(ctrl+ALT+H), FindBar, вести слова для выделение(set Highlight words)...
if ((event.ctrlKey)&&(event.altKey)&&(event.keyCode==72))
{
//Запускаем функцию HighlightAdd(run HighlightAdd) 
HighlightAdd(event);
}
 }, false);
})();



//переключить кнопку 'Highlight'(toggle Highlight)............................................
function toggleHighlight(event) {
var highlightBtn = document.getElementById('FindToolbar').getElement('highlight');
//...
if (!gFindBar._findField.style.color)
{
gFindBar._highlightDoc(true, gFindBar._findField.value);
gFindBar._findField.style.color = prefs.getCharPref("ui.textHighlightBackground");
}
else 
{
gFindBar._highlightDoc(false);
gFindBar._findField.removeAttribute("style");
}
 };



//Автоматически выделить заранее введенные слова (auto Highlight words permanent)....................................................
Highlight = function(event) {

let console=Components.classes["@mozilla.org/consoleservice;1"]
            .getService(Components.interfaces.nsIConsoleService);
console.logStringMessage(event)
//устанавливаем флаги...
var m = true;
if (event =='false' || event =='[object UIEvent]' || event =='[object DragEvent]' || event =='[object MouseEvent]'){
var m = false
};   

//hide Highlight
gFindBar._highlightDoc(false);

//....
var FBNum = custombuttons.getPrefs("FindBar.AutohighlightNum");
var FBvalue = gFindBar._findField.value;
  
//.... 
if (!gFindBar.hidden)
{
  //...
  if (!!gFindBar._findField.style.color)
     {
     gFindBar._findField.removeAttribute("style");
     }
  //Findbar, удалить атрибут 'red'(Findbar, remove attribute 'red')..............
  if (FBvalue.length  == '0')
     {
     var findToolbar = document.getElementById("FindToolbar");
     findToolbar.removeAttribute("red");
     }
  //FindBar, auto find 
  if (m)
     {
      //Findbar, фокус(Findbar, focus)
      gFindBar._findField.focus();
  
      gFindBar.onFindCommand();
    
      //Findbar, убрать фокус(Findbar, hide focus) 
       _content.focus();
      }
}
//auto Highlight
if (custombuttonsUtils.getPrefs("FindBar.Highlight"))
{
  if (gFindBar.hidden)
     {
     //getting prefs Unicode value
     var value = prefs.getComplexValue("FindBar.Highlight.value",
     Components.interfaces.nsISupportsString).data;
     }
  if (!gFindBar.hidden)
     {
     var value =(FBvalue.length > FBNum)? FBvalue : "??????";
     }
//Highlight
gFindBar._highlightDoc(true, value);
}
 };   
if (window.ToggleFindRun !== 'stop') (function () {
//добавляем обработчики........
//отслеживаем команду Назад(back) и Вперёд(forward)...
window.addEventListener("command", function(event){
var command = String(event.target.getAttribute("oncommand"));
//фылтр..
if (command == 'BrowserBack();' || command == 'BrowserBack(event);' || command == 'BrowserForward();' || command == 'BrowserForward(event);'){
setTimeout(function() { Highlight(event)}, 0)
}}, false);
//обработчики для табов...
gBrowser.tabContainer.addEventListener("TabSelect", Highlight, false);
gBrowser.addEventListener("DOMContentLoaded", function(event){
//фылтр..
//стоп, если открыть новые таби 
if (event.target.location.href !== getBrowser().currentURI.spec) return;
//стоп, если срабатывает на фрейме
var document = event.originalTarget;
if (document instanceof HTMLDocument && this.contentWindow.document !== document) return;
Highlight(event)}, false);
//обработчики для FindBar..
gFindBar._findField.addEventListener("input", function(event){ Highlight("false")}, false);
gFindBar._findField.setAttribute("ondrop","event.stopPropagation(); Find(event); ");
gFindBar.addEventListener("DOMAttrModified", function(event){if (gFindBar.hidden){Highlight(event)}}, false);
})();



//FindBar. контекстного меню (context Menu).......................................
(function contextFindWords(){
// выходим, если функция уже выполнялась
    if (document.getElementById("contextFindWords")) return;
 
    const kXULNS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";

    var contextMenu = document.getElementById("contentAreaContextMenu");
    var separator = document.getElementById("context-sep-properties");
    var eventTarget = null;

    var menu = document.createElementNS(kXULNS, "menu");
    menu.id = "contextFindWords";
           
    menu.setAttribute("label", "Find");
    menu.hidden = true;
    contextMenu.insertBefore(menu, separator);

    var menuPopup = document.createElementNS(kXULNS, "menupopup");
    menu.appendChild(menuPopup);

    var lst = [
        { 
          label:"Найти на странице",
          command:ContexFind
        },
        {
          label:"Поиск по сайту(google)",
          command:Search
        },
        {
          label:"Выделить текст на странице",
          command:HighlightSel
        },
        {
          label:"Автовыделение, добавить текст",
          command:addSel
        }
        ];
    
    for(var i = 0, m; m = lst[i]; i++){
        var menuItem = document.createElementNS(kXULNS, "menuitem");
        menuItem.setAttribute("label", m.label);
        menuItem.setAttribute("type", "m.radio");
        if ("accesskey" in m) menuItem.setAttribute("accesskey", m.accesskey);
        menuItem.addEventListener("command", m.command, false);
        menuItem.id = "context-Find-Words-" + m.label.toString();
        menuPopup.appendChild(menuItem);
        
    }
    var contextFind = document.getElementById("contextFindWords")
    contextMenu.addEventListener("popupshowing", setMenuDisplay, false);

    function setMenuDisplay(aEvent) {
        if (gContextMenu.isTextSelected)
        {
          if (custombuttons.getPrefs("FindBar.contextFindWords"))
          {
          contextFind.hidden = false;
          }
          else   
          {
          contextFind.hidden = true;
          }
        }
      }
     function ContexFind(){
         gFindBar.onFindCommand();
         //Запускаем функцию Find
         Find(event);
         }
     function Search(){
        var focusedWindow = document. commandDispatcher. focusedWindow;
        var text = focusedWindow. getSelection (). toString ();
        var doc = getBrowser (). contentDocument;
        try { var url = doc. location. hostname; }
        catch(e)
        { var url = ""; }
        text = escape (convertFromUnicode ("UTF-8", text));
        url = encodeURIComponent (url);
        var searchUrl = "http://www.google.com/search?as_q=" + text + "&as_sitesearch=" + url;
        gBrowser.selectedTab = gBrowser.addTab(searchUrl);
        }
     function HighlightSel(){
        gFindBar.toggleHighlight(false);
        var text = document.commandDispatcher.focusedWindow.getSelection();
        gFindBar._highlightDoc(true, text);
        goDoCommand("cmd_selectNone");
        }
     function addSel(){
        //Запускаем функцию HighlightAdd 
        HighlightAdd(event);
        }     
})();


//Если нажать в главном меню Firefox на пункт меню 'Найти'.............................................
document.getElementById("cmd_find").setAttribute("oncommand", "gFindBar.onFindCommand(); Find(event);");


//Найти на странице....................................................  
Find = function(event){
if (custombuttons.getPrefs("FindBar.Highlight")){Highlight(event)};
if (!gFindBar.hidden) gFindBar._find(gFindBar._findField.value);
};

        

//Добавить текст(выделенный / из буфера обмена) для автовыделения.......................................
function HighlightAdd(event){
//Копируем выделенный текст в буфер
document.getElementById("cmd_copy").doCommand();
// Get the root branch
var prefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch);
//setting Unicode value
var str = Components.classes["@mozilla.org/supports-string;1"].createInstance(Components.interfaces.nsISupportsString);
//читаем из буфера обмена и добавляем текст для автовыделения в 'about:config'
str.data = readFromClipboard();
prefs.setComplexValue("FindBar.Highlight.value", 
Components.interfaces.nsISupportsString, str);
//всплывающая подсказка
custombuttons.alertSlide(AutoHighlight, str.data);
//...
goDoCommand("cmd_selectNone");
//Запускаем функцию Highlight(run Highlight) 
Highlight(event);
      };  



//Поле текстового ввода на Findbar мигает желтим............................
function fflash(event){
var findToolbar = document.getElementById("FindToolbar");
//Следим за иконкой статуса на FindBar
var findstatus = gFindBar.getElement("find-status-icon");
findstatus.addEventListener("DOMAttrModified",function(e){
if(findstatus.getAttribute("status")=="wrapped")
{
findToolbar.setAttribute("flash", "true");
setTimeout(function() {findToolbar.removeAttribute("flash");}, 700)};
}, false)};
//Запускаем функции fflash, fmini(Run the function fflash)
document.addEventListener( "DOMContentLoaded", fflash(event), false);



//Создать кнопку "Вставить и искать" на Findbar.........................................................
var ubc=document.getAnonymousElementByAttribute( gFindBar, "anonid", "findbar-textbox");
var btn=document.createElementNS("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul", "toolbarbutton");
btn.setAttribute("id", "pasteButton");
btn.setAttribute("tooltiptext", "Поиск выделенного текста/из буфера");
ubc.parentNode.insertBefore(btn, ubc.nextSibling);
btn.addEventListener("click", function(event){
  if ( event.button == 0 ){
        //Поиск по странице из буфера обмена/выделенный текст...
        //event.preventDefault();
        //event.stopPropagation();
        var sel = content.getSelection().toString();
        var str =(!!sel) ? sel : readFromClipboard();
        //Убираем пробелы с обоих концов текста.
        var str = str.replace(/^\s+|\s+$/g,"");
        //...
        gFindBar._findField.value = str;
        Find(event);
}
  }, false);



//Очистить поле текстового ввода на Findbar..................................................
function findFieldClear(event){
gFindBar._findField.reset();
//....
var findToolbar = document.getElementById("FindToolbar");
findToolbar.removeAttribute("red");
//...
gFindBar.onFindCommand();
//....
gFindBar._highlightDoc(false);
};

 
 
// FindToolbar стиль(style).......................................................................
(function(css) {
      var pi = document.createProcessingInstruction(
      'xml-stylesheet',
      'type="text/css" href="data:text/css;utf-8,' + encodeURIComponent(css) + '"'
    );
    return document.insertBefore(pi, document.documentElement);
  }
)(<![CDATA[
@namespace url(http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul);

/*Find Toolbar.................*/
#FindToolbar {
    border-bottom: 1px solid grey !important; }

#FindToolbar > .findbar-container > * { display: -moz-box !important; }
#FindToolbar > hbox > label{-moz-appearance: none !important;font-weight: bold  !important;}
#find-field,.findbar-textbox{width: 250px !important;}

#FindToolbar .findbar-find-fast.findbar-find-status,
#FindToolbar .findbar-container>image,
#FindToolbar[autohide] .findbar-closebutton
{display: none !important;}

#FindToolbar[red="true"] .findbar-textbox{box-shadow: 0 0 0 1em #f66 inset;}

#FindToolbar:not([red="true"]) .findbar-textbox[status="notfound"]{
   background: rgba(207,219,236,0.99) !important;
   color: black !important;
   box-shadow: none !important;}


/*Find Toolbar, mini......................................... */

#FindToolbar[mini="true"] .findbar-textbox{
   width: 16em !important; 
   height:21px!important;  
   padding-right: 20px !important;
   margin-right: 2px!important;
   margin-left:-4px!important}
   
#FindToolbar[mini] {
    position: fixed;
    right: 18px;
    background: menu !important;
    box-shadow: 0px 10px 5px -10px rgba(0,0,0,.3) !important;
    border: 1px solid grey !important;
    border-top: 0 !important;
    border-radius: 0 0 8px 8px !important;}
   
#FindToolbar[mini="true"] .findbar-container>checkbox{
   margin-left:-24px !important;
   margin-right: -3px !important}

#FindToolbar[mini] toolbarspacer,
#FindToolbar[mini="true"]  label[class="checkbox-label"],
#FindToolbar[mini="true"]  toolbarbutton.findbar-find-next, 
#FindToolbar[mini="true"]  toolbarbutton.findbar-find-previous,
#FindToolbar[mini="true"] .findbar-highlight label,
#FindToolbar[mini="true"] .findbar-closebutton,
#FindToolbar:not([pasteButton="true"]) #pasteButton,
#FindToolbar[mini="true"] .findbar-find-fast[anonid="find-label"],
#FindToolbar[mini="true"] .findbar-find-fast[anonid="match-case-status"] 
{ display: none !important;} 

    
#FindToolbar[mini] .findbar-highlight,
#FindToolbar[mini] .findbar-highlight[checked] {
    list-style-image: url("data:image/gif;base64,R0lGODlhEAAQAMQWAJmZzJlmzGZmzGZm/2aZ/5mZ/5nM/8zM/8z//5mZmWZmmf///8yZzMzMmZlmmZmZM8zMM8zMZsz/ZsyZZpmZZmZmM////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAHoAxYALAAAAAAQABAAAAVsoCUCgQCIaCoKA1G4p7q6RmEXcQoMxYEYQEMOJSAYEL+D8jC0CG6GJTKhUtiAPiSCmlK4er7FgiGzWLGIBUJRZliVCLMi0Sg7FHhq4gGJlFUNEBIQE38pExGDFIYoFIkQi4wWjhEVkiIUFQohADs=") !important;
    -moz-image-region: auto !important;}
 

#pasteButton{
    list-style-image: url("chrome://browser/skin/appmenu-icons.png");
    -moz-image-region: rect(0 48px 16px 32px);
    margin-right: 3px! important;} 
       
     
#FindToolbar[mini="true"] textbox.findbar-textbox{
   -moz-box-ordinal-group: 2 !important}
#FindToolbar[mini="true"] checkbox{ 
  -moz-box-ordinal-group: 3 !important;}
#FindToolbar[mini="true"] toolbarbutton.findbar-highlight{
   -moz-box-ordinal-group: 4 !important;}
#FindToolbar[mini="true"] #pasteButton{
   -moz-box-ordinal-group: 4 !important;}
#FindToolbar[mini="true"] .findbar-closebutton{
   -moz-box-ordinal-group: 7 !important;}
]]>.toString());


//устанавливаем флаг
window.ToggleFindRun = 'stop';

Отредактировано bunda1 (01-04-2012 06:10:35)

Отсутствует

 

№13301-04-2012 11:59:25

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

Re: [CB]Toggle Find+

bunda1 пишет

Добавил новые возможности:

Кнопка стала просто шикарная :beer:
PS ты бы ещё [CB]Memory Monitor восстановил, совсем бы хорошо стало. :)

Отсутствует

 

№13401-04-2012 12:23:29

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

Re: [CB]Toggle Find+

voqabuhe
Спасыбо.
Я пока не знаю как восстановить Memory Monitor, код не мой, но буду думать.

Отсутствует

 

№13501-04-2012 17:11:56

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

Re: [CB]Toggle Find+

bunda1 пишет

Код экспериментальной кнопки  Toggle  Find+3 для инициализации:

спасибо, выделение работает просто замечательно.
может всё-таки можно приделать умный хоткей ctrl+SHIFT+f который будет действовать в зависимости от состояния настройки "очищать поисковую форму"?


mzfx

Отсутствует

 

№13601-04-2012 18:16:13

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

Re: [CB]Toggle Find+

iDev.Pi пишет

может всё-таки можно приделать умный хоткей ctrl+SHIFT+f который будет действовать в зависимости от состояния настройки "очищать поисковую форму"?

Хорошо, я сделаю. Тут проблема как запомнить текст из поисковой формы, можно записать в about:config но это не интересно, мне хочется другое. Хочу сделать красиво.

Отредактировано bunda1 (01-04-2012 20:26:12)

Отсутствует

 

№13701-04-2012 20:07:27

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

Re: [CB]Toggle Find+

bunda1
погоди, лиса же по умолчанию и так это сама запоминает.
Тебе в кнопке надо лишь правильно указать случаи, когда надо это очищать.
Случаев таких будет всего два:
1. При открытии файндбара по ctrl+f, если в настройках кнопки стоит галка у "Всегда открывать пустую поисковую форму" - это уже сделано, но как я понял - очищение срабатывает сразу же при закрытии файндбара, а надо сделать так, чтобы оно срабатывало при открытии файндбара: сначала нужно выполнить проверку: как была вызвана панель? и

если с shift - то очищать НЕ надо

.
2. При открытии файндбара по ctrl+

shift

+f, если в настройках кнопки

не

стоит галка у "Всегда открывать пустую поисковую форму".

Отредактировано iDev.Pi (01-04-2012 20:10:45)


mzfx

Отсутствует

 

№13801-04-2012 21:43:29

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

Re: [CB]Toggle Find+

iDev.Pi пишет

погоди, лиса же по умолчанию и так это сама запоминает.

Точно. Надо это использовать.

iDev.Pi пишет

Тебе в кнопке надо лишь правильно указать случаи, когда надо это очищать.
Случаев таких будет всего два:

А вот и нет.

iDev.Pi пишет

1. При открытии файндбара по ctrl+f, если в настройках кнопки стоит галка у "Всегда открывать пустую поисковую форму" - это уже сделано, но как я понял - очищение срабатывает сразу же при закрытии файндбара, а надо сделать так, чтобы оно срабатывало при открытии файндбара: сначала нужно выполнить проверку: как была вызвана панель? и

если с shift - то очищать НЕ надо

.
2. При открытии файндбара по ctrl+

shift

+f, если в настройках кнопки

не

стоит галка у "Всегда открывать пустую поисковую форму".

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

Отредактировано bunda1 (01-04-2012 22:02:45)

Отсутствует

 

№13903-04-2012 18:24:24

Чайник
Участник
 
Группа: Members
Зарегистрирован: 15-04-2008
Сообщений: 268
UA: Firefox 9.0

Re: [CB]Toggle Find+

А можно сделать поиск по ссылкам на странице, но не по тексту ссылки, а по её адресу?

Поясню. Обычный поиск по слову "mozilla" находит на этой странице 3 совпадения - в простом тексте и в тексте ссылки.
А на самом деле, любая ссылка на этой странице содержит в себе mozilla-russia.org

Для Оперы есть скрипт, который делает то что я хочу. Можно его как-то приспособить к ФФ?
Если что, я скрипт предоставлю.

Отсутствует

 

№14003-04-2012 18:34:54

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

Re: [CB]Toggle Find+

Чайник
нажми ctrl+u на странице и там и ищи

Добавлено 03-04-2012 18:41:34

Чайник пишет

А можно сделать поиск по ссылкам на странице, но не по тексту ссылки, а по её адресу? Поясню. Обычный поиск по слову "mozilla" находит на этой странице 3 совпадения - в простом тексте и в тексте ссылки.А на самом деле, любая ссылка на этой странице содержит в себе mozilla-russia.orgДля Оперы есть скрипт, который делает то что я хочу. Можно его как-то приспособить к ФФ?Если что, я скрипт предоставлю.

неа, ссылки бывают и относительные которые не будут содержать имя домена.

Отредактировано iDev.Pi (03-04-2012 18:41:34)


mzfx

Отсутствует

 

№14103-04-2012 19:03:39

Чайник
Участник
 
Группа: Members
Зарегистрирован: 15-04-2008
Сообщений: 268
UA: unknown 0.0

Re: [CB]Toggle Find+

iDev.Pi пишет

Чайникнажми ctrl+u на странице и там и ищи

Это можно и вместо кнопки Toggle  Find искать слово в исходнике страницы.

Однако же сделали кнопку и пользуются ею. Потому что удобно.

Отсутствует

 

№14203-04-2012 19:03:54

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

Re: [CB]Toggle Find+

Чайник
Поиск ссылок по мере ввода    '  + текст
Поиск текста по мере ввода    /  + текст
Горячие клавиши - Mozilla Firefox

Отредактировано bunda1 (03-04-2012 19:17:49)

Отсутствует

 

№14303-04-2012 19:13:44

Чайник
Участник
 
Группа: Members
Зарегистрирован: 15-04-2008
Сообщений: 268
UA: unknown 0.0

Re: [CB]Toggle Find+

bunda1 пишет

Чайник
Поиск ссылок по мере ввода    ' ' + текстПоиск текста по мере ввода    /  + текстГорячие клавиши - Mozilla Firefox
                    Отредактировано bunda1 (Сегодня 18:04:24)

:D
Это я знаю (кстати, поиск ссылок - там только один апостроф)
В том-то и дело, что "Поиск ссылок по мере ввода    ' ' + текст" ищет не в адресе, а в тексте ссылки.

Этот поиск не найдёт на странице 555619 хотя это число есть в каждой ссылке "Сообщить модератору"

Отредактировано Чайник (03-04-2012 19:17:18)

Отсутствует

 

№14403-04-2012 19:23:08

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

Re: [CB]Toggle Find+

Чайник
Понятно, дай скрипт Оперы. Как ты представляешь такой поиск или как там в Опере это устроена.

Отсутствует

 

№14503-04-2012 21:51:51

Чайник
Участник
 
Группа: Members
Зарегистрирован: 15-04-2008
Сообщений: 268
UA: unknown 0.0

Re: [CB]Toggle Find+

bunda1 пишет

ЧайникПонятно, дай скрипт Оперы. Как ты представляешь такой поиск или как там в Опере это устроена.

Это сам скрипт
http://ompldr.org/vZDh6MQ

А это код кнопки, которая его активизирует:

Выделить код

Код:

Go to page, "javascript:ujs__SearcherToggle();

Если я правильно понял, Go to page это как в ФФ loadUri

Отредактировано Чайник (03-04-2012 21:52:12)

Отсутствует

 

№14603-04-2012 23:13:05

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

Re: [CB]Toggle Find+

Чайник
Ужас, скрипт на 889 строк. Я подумаю над этим.

Отсутствует

 

№14706-04-2012 14:59:40

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

Re: [CB]Toggle Find+

iDev.Pi пишет

может всё-таки можно приделать умный хоткей ctrl+SHIFT+f который будет действовать в зависимости от состояния настройки "очищать поисковую форму"?

Принимай работу. Ctrl+Snift+F также работает при открытом файндбаре.

Код экспериментальной кнопки  Toggle  Find+3 для инициализации:

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

Выделить код

Код:

//настройка функций кликов мыши(Mouse Click settings)...................................................
this.onclick = function(event)
{
    if(event.button == 0) 
        {
        // Действие при клике ЛКМ
        gFindBar.hidden ? gFindBar.onFindCommand() : gFindBar.close();
        Find(event);
         }
    else if(event.button == 1) 
         {
        // Действие при клике СКМ
        gFindBar.hidden ? gFindBar.onFindCommand() : gFindBar.close();
        goDoCommand("cmd_selectNone");
        goDoCommand("cmd_paste"); 
         }
};


//Объявляем .....
var prefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService);
var clipboard = Components.classes["@mozilla.org/widget/clipboardhelper;1"].  getService(Components.interfaces.nsIClipboardHelper);
var this_ = this;
var AutoHighlight ='Автовыделение'
var AutoClose ='Автоматически закрыть' 
var CloseTimer ='Закрыть через '
var ClearPref ='Сбросить текст'




//подсказка.............................................................................
this.showTFinfo = function() {
     //getting prefs Unicode value
     var prefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService);
     var r = custombuttons.getPrefs("FindBar.Highlight")? prefs.getComplexValue("FindBar.Highlight.value",Components.interfaces.nsISupportsString).data : 'выключена';
     var Val = "\n\n"+ AutoHighlight +": "+ r;
     //обрезать подсказку для "Автовыделение"
     var HValue = Val.substring(0,50);
     var HDots =(Val.length > 50) ? '....' : "";
     //....
     this.tooltipText = "Поиск по странице" +"\n" + "Л: Показать - скрыть поиск по странице" +"\n" +"С: Поиск по странице из буфера обмена" +"\n"+ "П: Mеню + CB меню" + HValue + HDots;
}
this.setAttribute("onmouseover", "this.showTFinfo()");



//справка(Help)
//this.setAttribute("Help", "event.stopPropagation(); gBrowser.selectedTab = gBrowser.addTab('https://forum.mozilla-russia.org/viewtopic.php?pid=550855#p550855]09-03-2012 19:18:31')");


//проверить наличие строк в about:config и создать если не существует(Add preferences)........................................
if (custombuttons.getPrefs("FindBar.version") !== '10')
{   
    prefs.setCharPref("FindBar.version", "10");
    prefs.setBoolPref("FindBar.Highlight", true);
    prefs.setCharPref("FindBar.Highlight.value", "??????");
    prefs.setBoolPref("FindBar.autoclear", false);
    prefs.setBoolPref("FindBar.contextFindWords", true);
    prefs.setBoolPref("FindBar.ToggleWithDoubleMiddleClick", false);
    prefs.setCharPref("ui.textHighlightBackground", "#ef0fff");//http://coloria.net/bonus/colornames.htm
  //prefs.setCharPref("ui.textHighlightForeground", "#000000");//http://coloria.net/bonus/colornames.htm
    prefs.setBoolPref("FindBar.mini", false);
    custombuttons.clearPrefs("FindBar.ClearButton");
    prefs.setBoolPref("FindBar.pasteButton", false);
    prefs.setBoolPref("FindBar.auto_Close", false);
    prefs.setCharPref("FindBar.CloseTimer", "7");//7 сек(7 sec)
    prefs.setCharPref("FindBar.AutohighlightNum", "1");
    prefs.setBoolPref("FindBar.Autohighlight.ToggleWithDoubleClick", false);
};



//настройка меню(CB menu settings)...................................................
//Объявляем .....
var c ='true';
var n = 'false';
//изменить нужный пункт меню(toggle menuitems)
//переключаем настройки в about:config(toggle preference)
this.CBlabel = function (mi, id)
{
//Автоматически закрыть(FB auto close)....
if(!id || id == "FBClose") {
//переключаем настройки в about:config
s = "FindBar.auto_Close";
togglePref(s);
//Запускаем функцию autohide
if (id) Autohide(event);
//изменить нужный пункт меню
var cek = (custombuttons.getPrefs(s)? c: n);
this.FBCcek = cek;
if(mi) mi.cek = cek;
};

//FB auto close timer.....
if(!id || id == "CloseTimer") {
(function () {
//Стоп, при инициализации кнопки
if (!id) return;
s = "FindBar.CloseTimer";
//switch auto close timer+"\n" +
    var URL = custombuttons.promptBox(AutoClose, CloseTimer+custombuttons.getPrefs(s) + ' секунд', '');
    if (URL[0] == false) return;
    else
    var timer = [URL[1]];
//переключаем настройки в about:config(toggle preference)
prefs.setCharPref(s, timer);
})();
//пункт меню(menuitems)
var label = CloseTimer + custombuttons.getPrefs("FindBar.CloseTimer") + ' секунд';
this.CloseTimer = label;
if(mi) mi.label = label;
};

//FindBar.mini......
if(!id || id == "FBmini") {
//переключаем настройки в about:config
s = "FindBar.mini";
togglePref(s);
//Запускаем функцию fmini(run fmini)
if (id) fmini(event);
//изменить нужный пункт меню
var cek = (custombuttons.getPrefs(s)? c : n);
this.FBcek = cek;
if(mi) mi.cek = cek;
};

//Кнопка 'Вставить и искать'......
if(!id || id == "FBbutt") {
//переключаем настройки в about:config
s = "FindBar.pasteButton";
togglePref(s);
//Запускаем функции pasteButton и fmini(run pasteButton, fmini)
if (id) pasteButton(event);
//изменить нужный пункт меню
var cek = (custombuttons.getPrefs(s)? c : n);
this.FpBcek = cek;
if(mi) mi.cek = cek;
};

//Find в контекстном меню(Find in the context menu).....
if(!id || id == "FindInMenu") {
// переключаем настройки в about:config
s = "FindBar.contextFindWords";
togglePref(s);
//изменить нужный пункт меню
var cek = (custombuttons.getPrefs(s)? c : n);
this.FIMcek = cek;
if(mi) mi.cek = cek;
};

//Автоматически очищать поле текстового ввода на Findbar.....
if(!id || id == "autoClear") {
// переключаем настройки в about:config
s = "FindBar.autoclear";
togglePref(s);
//Очищистить поле текстового ввода если Findbar закрыт.
if (gFindBar.hidden && custombuttons.getPrefs("FindBar.autoclear")) gFindBar._findField.value = '';
//изменить нужный пункт меню
var cek = (custombuttons.getPrefs(s)? c : n);
this.aCcek = cek;
if(mi) mi.cek = cek;
};

//Переключить двойным средним кликом(Toggle with double middle click).....
if(!id || id == "MiddleClick") {
// переключаем настройки в about:config
s = "FindBar.ToggleWithDoubleMiddleClick";
togglePref(s);
//изменить нужный пункт меню
var cek = (custombuttons.getPrefs(s)? c : n);
this.MCcek = cek;
if(mi) mi.cek = cek;
};

//Автовыделение двойным кликом.....
if(!id || id == "dblclikHighlight") {
// переключаем настройки в about:config
s = "FindBar.Autohighlight.ToggleWithDoubleClick";
togglePref(s);
//изменить нужный пункт меню(toggle menuitems)
var cek = (custombuttons.getPrefs(s)? c : n);
this.dbcHcek = cek;
if(mi) mi.cek = cek;
};

//Автовыделение(Switch, Auto Highlight).....
if(!id || id == "SwitchHighlight") {
// переключаем настройки в about:config
s = "FindBar.Highlight";
togglePref(s);
//Изменить иконку кнопки
if (id) ToggleImage(event);
//переключить кнопку 'Highlight'(toggle Highlight)
if (id) document.getElementById('FindToolbar').getElement('highlight').removeAttribute("checked");
//Запускаем функцию Highlight(run function Highlight)
if (id) Highlight(event);
//изменить нужный пункт меню(toggle menuitems)
var cek = (custombuttons.getPrefs(s)? c : n);
this.aHcek = cek;
if(mi) mi.cek = cek;
};

//Изменить цвет для Автовыделение.....
if(!id || id == "addColor") {
(function () {
//Стоп, при инициализации кнопки
if (!id) return;
//создаем модальное окно для ввода цвета
    var URL = custombuttons.promptBox('Изменить цвет для Автовыделение', 'По умолчанию:  #ef0fff', '');
    if (URL[0] == false) return;
    else
    var color = [URL[1]];
//переключаем настройки в about:config(toggle preference)
prefs.setCharPref("ui.textHighlightBackground", color);
})();
//пункт меню(menuitems)
var label = 'Изменить цвет' + ': ' + custombuttons.getPrefs("ui.textHighlightBackground");
this.addColor = label;
if(mi) mi.label = label;
};

//Автовыделение, добавить текст....... 
if(!id || id == "AddText") {
//Запускаем функцию HighlightAdd(run function HighlightAdd)
if (id) HighlightAdd(event);
};

//Автовыделение, сбросить .....
if(!id || id == "Clear") {
//сбросить настройки в about:config
if (id) prefs.setCharPref("FindBar.Highlight.value", ""); 
//Запускаем функцию Highlight(run function Highlight)
if (id) Highlight(event);
//всплывающая подсказка
if (id) custombuttons.alertSlide(ClearPref,'????');
};

//переключаем настройки в about:config(toggle preference)....
function togglePref(s){
//Стоп, при инициализации кнопки
if (!id) return;
//переключаем настройки
custombuttons.setPrefs(s, !custombuttons.getPrefs(s));
}
 };
//Запускаем функцию CBlabel(run CBlabel).........
this.CBlabel();


//пункти меню(Our menu items) ....
this.ss = [
  { cek: this.FBCcek, label: AutoClose, cmd: 'document.popupNode.CBlabel(this, "FBClose")', sItemId: '', type:'checkbox'},
  { label: this.CloseTimer, cmd: 'document.popupNode.CBlabel(this, "CloseTimer")', sItemId: ''},
  { label: "separator", sItemId: ''},
  { cek: this.FBcek, label: 'FindBar мини', cmd: 'document.popupNode.CBlabel(this, "FBmini")', sItemId: '', type:'checkbox'},
  { cek: this.FpBcek, label: 'Кнопка "Вставить и искать"  на FindBar', cmd: 'document.popupNode.CBlabel(this, "FBbutt")', sItemId: '', type:'checkbox'},
  { label: "separator", sItemId: ''},
  { cek: this.FIMcek, label: 'Find в контекстном меню', cmd: 'document.popupNode.CBlabel(this, "FindInMenu")', sItemId:'', type:'checkbox'},
  { cek: this.aCcek, label: 'Всегда открывать пустую поисковую форму', cmd: 'document.popupNode.CBlabel(this, "autoClear")', sItemId:'', type:'checkbox'},
  { cek: this.MCcek, label: 'Переключать двойным средним кликом', cmd: 'document.popupNode.CBlabel(this, "MiddleClick")', sItemId:'', type:'checkbox'},
  { label: "separator", sItemId: ''},
  { cek: this.dbcHcek, label: 'Автовыделение двойным кликом на поисковой форме', cmd: 'document.popupNode.CBlabel(this, "dblclikHighlight")', sItemId: '', type:'checkbox'},
  { cek: this.aHcek, label: AutoHighlight, cmd: 'document.popupNode.CBlabel(this, "SwitchHighlight")', sItemId: '', type:'checkbox'},
  { label: this.addColor, cmd: 'document.popupNode.CBlabel(this, "addColor")', sItemId: ''}, 
  { label: 'Добавить текст', cmd: 'document.popupNode.CBlabel(this, "AddText")', sItemId: ''},
  { label: ClearPref, cmd: 'document.popupNode.CBlabel(this, "Clear")', sItemId: ''}];

 
// Our Initialization function for creating the context menu, setting up menuitems and telling
var Cb = custombuttons;
this.mObj = Cb.getCbContextObj(this);
this.init = function(x) {
  x.mObj.setSub();
  var nItem = {}, mItem = {};
  document.getElementById(CB2const.sCBCtxtMenu).setAttribute("oncommand", "event.stopPropagation()");
  for(var i in x.ss) {
    nItem = new x.mObj.getItem();
    nItem.id = 'Note';
    nItem.label = x.ss[i].label;
    if (nItem.label == "separator") {
        nItem = document.createElement("menuseparator");
      }
    nItem.value = String(i);
    mItem = x.mObj.insertBefore(nItem , x.mObj.oMenu.lastChild);
    this.ss[i].sItemId = mItem.id;
    mItem.setAttribute('oncommand',x.ss[i].cmd);
    if("type" in x.ss[i])
    mItem.setAttribute('type', x.ss[i].type);
    mItem.setAttribute('checked', x.ss[i].cek)
    mItem.setAttribute( 'autocheck',true)
   }
  x.mObj.getItem();
  nItem = x.mObj.getItem();
  nItem.id = 'Note';
  this.separator = x.mObj.insertBefore( nItem , x.mObj.oMenu.lastChild);
}
this.init(this);


//Стоп, при открытии настройки панелей....................................................
if (window.ToggleFindRun == 'stop') return;


//Findbar, переклучить  атрибут 'mini'(Findbar, set and remove attribute 'mini')...........
//Findbar, установить и удалить 'hits'(Findbar, set and remove  'hits')...........
function fmini(event){
//FindBar, auto find 
if (!gFindBar.hidden)
{
//Findbar, фокус(Findbar, focus)
gFindBar._findField.focus();
gFindBar.onFindCommand();
}
var findToolbar = document.getElementById("FindToolbar");
var HighBut = document.getAnonymousElementByAttribute( gFindBar, "anonid", "highlight");
if (custombuttons.getPrefs("FindBar.mini"))
{
//...
var highlightBtn = document.getElementById('FindToolbar').getElement('highlight');
if (highlightBtn.checked)
{
gFindBar._findField.style.color = prefs.getCharPref("ui.textHighlightBackground");
highlightBtn.removeAttribute("checked");
};
findToolbar.setAttribute("mini", "true");
this.hits = ' ';
var text = "L = Искать следущее"+"\n" +"M = Поиск выделенного текста/из буфера" + "\n" + "R = Искать предыдущее";
HighBut.setAttribute("tooltiptext", text );
}
else
{
var highlightBtn = document.getElementById('FindToolbar').getElement('highlight');
findToolbar.removeAttribute("mini")
this.hits = ' hits';
HighBut.setAttribute("tooltiptext", "Highlight");
//...
if (!!gFindBar._findField.style.color)
{
highlightBtn.setAttribute("checked", "true");
gFindBar._findField.removeAttribute("style");
}
 }
//Findbar, убрать фокус(Findbar, hide focus) 
_content.focus();
  };

//Findbar, переклучить атрибут 'autohide'......
function Autohide(event){
var f = document.getElementById("FindToolbar");
custombuttons.getPrefs("FindBar.auto_Close") ? f.setAttribute("autohide", "true") : f.removeAttribute("autohide");
};

//Findbar, переклучить атрибут 'pasteButton'......
function pasteButton(event){
var ft = document.getElementById("FindToolbar");
custombuttons.getPrefs("FindBar.pasteButton") ? ft.setAttribute("pasteButton", "true") : ft.removeAttribute("pasteButton");
};
//Запускаем функции fmini, Autohide, pasteButton
setTimeout(function(){ fmini(event); Autohide(event); pasteButton(event);}, 200)



//Изменить иконку кнопки.................................................................
function ToggleImage(event){
// toggle button image
if (custombuttonsUtils.getPrefs("FindBar.Highlight"))
{
this_.image="data:image/x-icon;base64,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";
}
else
{
this_.image="data:image/x-icon;base64,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";
}
  };
ToggleImage(event); 



//find bar сверху (move find bar to the top)................................................
XPCOMUtils.defineLazyGetter(window, "gFindBar", function() {
  let XULNS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
  let findbar = document.createElementNS(XULNS, "findbar");
  findbar.setAttribute("browserid", "content");
  findbar.id = "FindToolbar";
  gBrowser.parentNode.insertBefore(findbar, gBrowser);
  // Force a style flush to ensure that our binding is attached.
  findbar.clientTop;
  window.gFindBarInitialized = true;
  return findbar;
});



//find bar, показать количество совпадений(find bar,show the number of matches)...@author slimx.................
(function() {
    //add label to findbar
    var status = document.getAnonymousElementByAttribute(gFindBar, 'anonid', 'match-case-status');
    var sep = document.createElement("toolbarspacer");
    var count = document.createElement("label");
    count.hidden = true;
    status.parentNode.insertBefore(sep, status);
    status.parentNode.insertBefore(count, status);//findbar-container
    gFindBar.__proto__._foundMatches = count;
    gFindBar.__proto__._updateMatchesCount = function(aRes) {
        if (!this._updateMatchCountTimeout)
            window.clearTimeout(this._updateMatchCountTimeout);
        this._updateMatchCountTimeout =
                window.setTimeout(function(aRes, aSelf) {
                    aSelf._updateMatchesCountWorker(aRes);
                }, 0, aRes, this);
    }

    gFindBar.__proto__._updateMatchesCountWorker = function(aRes) {
        var word = this._findField.value;
        if (aRes == this.nsITypeAheadFind.FIND_NOTFOUND || !word) {
            this._foundMatches.hidden = true;
            this._foundMatches.value = "";
        }
        else {
            var matchesCount = this._countMatches(word).toString();
                if (matchesCount != "0") {
                if (matchesCount == "1")
                    this._foundMatches.value = matchesCount + hits;
                else if (matchesCount == "-1") {
                    var matchLimit = 100;
                    this._foundMatches.value = " \>"+ matchLimit + hits;
                    //                    var key = (matchLimit > 1000) ? "Decrease" : "Increase";
                } else
                    this._foundMatches.value = matchesCount + hits;
                this._foundMatches.hidden = false;
                //Findbar, удалить атрибут 'red'(Findbar, remove attribute 'red').............. 
                var findToolbar = document.getElementById("FindToolbar");
                findToolbar.removeAttribute("red");
            }
            else {
                this._foundMatches.hidden = true;
                this._foundMatches.value = "";
                
                //Findbar, установить атрибут 'red'(Findbar, set attribute 'red')...............
                var findToolbar = document.getElementById("FindToolbar");
                findToolbar.setAttribute("red", "true");
             }

            window.clearTimeout(this._updateMatchCountTimeout);
        }
    }

    gFindBar.__proto__._countMatches = function(aWord, aWindow) {
        var win = aWindow || this.browser.contentWindow;

        var countFound = 0;
        for (var i = 0, count; win.frames && i < win.frames.length; i++) {
            if ((count = this._countMatches(aWord, win.frames[i])) != -1)
                countFound += count;
            else
                return count;
        }

        var doc = win.document;
        if (!doc || !(doc instanceof HTMLDocument))
            return countFound;

        var body = doc.body;

        var count = body.childNodes.length;
        var searchRange = doc.createRange();
        var startPt = doc.createRange();
        var endPt = doc.createRange();

        searchRange.setStart(body, 0);
        searchRange.setEnd(body, count);

        startPt.setStart(body, 0);
        startPt.setEnd(body, 0);
        endPt.setStart(body, count);
        endPt.setEnd(body, count);

        var retRange = null;
        var finder = Components.classes["@mozilla.org/embedcomp/rangefind;1"]
                .createInstance()
                .QueryInterface(Components.interfaces.nsIFind);

        finder.caseSensitive = this._shouldBeCaseSensitive(aWord);

        var matchLimit = 100;
        while ((retRange = finder.Find(aWord, searchRange, startPt, endPt))) {
            if (this._rangeIsVisible(retRange, win)) {
                if (this._findMode == this.FIND_LINKS) {
                    if (this._rangeStartsInLink(retRange))
                        ++ countFound;
                }
                else
                    ++ countFound;
            }
            if (countFound == matchLimit) {
                countFound = -1;
                break;
            }
            startPt = doc.createRange();
            startPt.setStart(retRange.startContainer, retRange.startOffset + 1);
        }

        return countFound;
    }

    gFindBar.__proto__._rangeIsVisible = function(aRange, aWindow) {
        var node = aRange.startContainer;

        if (node.nodeType == node.ELEMENT_NODE) {
            if (node.hasChildNodes) {
                var childNode = node.childNodes[aRange.startOffset];
                if (childNode)
                    node = childNode;
            }
        }

        while (node && node.nodeType != node.ELEMENT_NODE)
            node = node.parentNode;

        // There is no perfect way to check if a node is visible in JavaScript,
        // so use the best measures we can have
        if (node) {
            var style = aWindow.getComputedStyle(node, "");
            if (style) {
                if (style.visibility == "hidden" ||
                        style.visibility == "collapse" ||
                        style.display == "none")
                        return false;
                if (style.left != "auto" && style.width != "auto")
                    if (style.left < 0 && style.left + style.width < 0)
                        return false;
                if (style.top != "auto" && style.height != "auto")
                    if (style.top < 0 && style.top + style.height < 0)
                        return false;
            }
        }

        return true;
    }

    gFindBar.__proto__._rangeStartsInLink = function(aRange) {
        var isInsideLink = false;

        var node = aRange.startContainer;

        if (node.nodeType == node.ELEMENT_NODE) {
            if (node.hasChildNodes) {
                var childNode = node.childNodes[aRange.startOffset];
                if (childNode)
                    node = childNode;
            }
        }

        const XLink_NS = "http://www.w3.org/1999/xlink";
        do {
            if (node instanceof HTMLAnchorElement) {
                isInsideLink = node.hasAttribute("href");m
                break;
            }
            else if (typeof node.hasAttributeNS == "function" &&
                    node.hasAttributeNS(XLink_NS, "href")) {
                isInsideLink = (node.getAttributeNS(XLink_NS, "type") == "simple");
                break;
            }

            node = node.parentNode;
        } while (node);

        return isInsideLink;
    }

    //insert count function to original
    eval("gFindBar._updateCaseSensitivity=" + gFindBar._updateCaseSensitivity.toString().slice(0, -1) + "this._updateMatchesCount();}");
    eval("gFindBar._updateStatusUI=" + gFindBar._updateStatusUI.toString().slice(0, -1) + "this._updateMatchesCount();}");
})();



//FindBar, поиск колесиком мыши(FindBar, Mouse Scroll find )................................................
gFindBar.addEventListener('DOMMouseScroll', function (event){
    //Найти (Find)
    gFindBar.onFindAgainCommand(event.detail < 0);
}, false);

 

//переключить 'Поиск на странице' двойным средним кликом на странице(toggle Find Bar, if Double midlle Click in page)..........
//добавляем обработчик для обработки нажатие на кнопку мыши на странице.......
gBrowser.addEventListener("mouseup", function(event){
//если нажатие на среднюю кнопку мыши
if (event.button !== 1) return;
//если разрешено в настройках(about:config)
if (!custombuttons.getPrefs("FindBar.ToggleWithDoubleMiddleClick")) return;
var _this = this;
//если установлен флаг
if (_this.open){ 
//переключить 'Поиск на странице'
gFindBar.hidden ? gFindBar.onFindCommand() : gFindBar.close();
Find(event);
gFindBar._findField.focus();
}
//устанавливаем флаг
_this.open = true;
//сбросить флаг по таймеру
this.timer = 0;
this.timer = setTimeout(function(){ _this.open = false;}, 600);
}, false);



//Автоматически очищать поле текстового ввода на Findbar............................................
gFindBar.addEventListener("DOMAttrModified", function(event){
if (gFindBar.hidden){ gFindBar.removeAttribute("red"); this.clear = true };
if (!custombuttons.getPrefs("FindBar.autoclear")) return;
if (!this.clear) return;
if (gFindBar.hidden)
   {
   if (gFindBar._findField.value){ window.FB_fFval = gFindBar._findField.value };
   gFindBar._findField.value = '';
   }
if (!gFindBar.hidden)
   {
   findFieldClear(event);
   this.clear = false;
   }
}, false);
 
 
 
 
//findbar очистить, кликнуть правим кликом на findbar's label-Найти: или на иконку поиска на FindBar mini(FindBar clear findText, right click on findbar's label, else Find button)..............
//findbar поиск, кликнуть левым кликом на findbar's label-Найти: или на иконку поиска на FindBar mini(FindBar find, left click on findbar's label, else Find button)..............  
var FindButt = document.getAnonymousElementByAttribute(gFindBar, "anonid", "find-label");
FindButt.setAttribute("onclick", "event.stopPropagation(); clickFind(event);");
//....
var HighBut = document.getAnonymousElementByAttribute( gFindBar, "anonid", "highlight");
HighBut.addEventListener("click", function(event){
  if (custombuttons.getPrefs("FindBar.mini"))
  {
  gFindBar.getElement("highlight").removeAttribute("checked");
  //.......
  clickFind(event);
  }
   }, true);
//.....................
clickFind = function(event){
 if ( event.button == 0 )
   {
   event.preventDefault();
   event.stopPropagation();
   if (custombuttons.getPrefs("FindBar.Highlight")){Highlight(event)};
   //Искать следующее
   gFindBar.onFindAgainCommand(false);
   }
 else if ( event.button == 2 )
   {
   if (custombuttons.getPrefs("FindBar.Highlight")){Highlight(event)};
   //Запускаем функцию findFieldClear или искать предыдущее
   custombuttons.getPrefs("FindBar.mini") ? gFindBar.onFindAgainCommand(true) : findFieldClear(event);
}
  };



//кнопка 'Highlight' на FindBar.mini всегда включена...................................................................      
var highlightBtn = document.getElementById('FindToolbar').getElement('highlight');
highlightBtn.addEventListener("mouseover", function(event){
if (custombuttons.getPrefs("FindBar.mini")){ highlightBtn.setAttribute("disabled", "false")}
}, false);
  
 
 
    
//Поиск по странице из буфера обмена/выделенный текст, если кликнуть средним кликом на findbar или на иконку поиска на FindBar mini .......
//Двойной клик в строке поиска FindBar мини включает и выключает обычную подсветку текста из панели поиска...........
//Стоп, при открытии настройки панелей(stop, if onDestroy)
if (window.ToggleFindRun !== 'stop') (function () {
//Поиск по странице из буфера обмена/выделенный текст
gFindBar.addEventListener("click", function(event){
     if ( event.button !== 1 )return; 
        event.preventDefault();
        event.stopPropagation();
        //........
        var sel = content.getSelection().toString();
        var str =(!!sel) ? sel : readFromClipboard();
        //Убираем пробелы с обоих концов текста.
        var str = str.replace(/^\s+|\s+$/g,"");
        //...
        gFindBar._findField.value = str;
        Find(event);
}, true);
//переключить кнопку 'Highlight'.........
gFindBar._findField.addEventListener("dblclick", function(event){
      if ( event.button != 0 )return;
        event.preventDefault();
        event.stopPropagation()
        //....
        if (!custombuttons.getPrefs("FindBar.mini")) return;
        if (custombuttons.getPrefs("FindBar.Autohighlight.ToggleWithDoubleClick")){
        // переключаем настройки в about:config
        s = "FindBar.Highlight";
    custombuttons.setPrefs(s, !custombuttons.getPrefs(s));
    //Изменить иконку кнопки
    ToggleImage(event);
    //переключить кнопку 'Highlight'(toggle Highlight)
    document.getElementById('FindToolbar').getElement('highlight').removeAttribute("checked");
    //Запускаем функцию Highlight(run function Highlight)
    Highlight(event);
    }
    else{
    if (custombuttonsUtils. getPrefs ("FindBar.Highlight")) return;
        //Запускаем функцию toggleHighlight
        toggleHighlight(event);
        }
        //Findbar, убрать фокус(Findbar, hide focus) 
        _content.focus(); 
  }, false);
})();


 
//ЛКМ в форму поиска - выделить текст в форме поиска............................
gFindBar._findField.addEventListener("click", function(event){
      if ( event.button !== 0 )return;
      if(!this.FB_fFselect){ gFindBar._findField.select();}
      this.FB_fFselect = true;
}, false);
gFindBar._findField.addEventListener("blur", function(event){ this.FB_fFselect = false;
}, false);



//ЛКМ + ПКМ очистить поле текстового ввода на Findbar........................................................
//добавляем обработчики для обработки мышиных событий на поле текстового ввода...
//нажатие на кнопку мыши, запускаем функцию 'buttonDown'
gFindBar._findField.addEventListener("mousedown", function(event){ClearFindField.buttonDown(event); }, true);
//нажатая кнопка мыши отпущена, запускаем функцию 'buttonUp'
gFindBar._findField.addEventListener("click", function(event){ ClearFindField.buttonUp(event); }, true);//mouseup
//......
var ClearFindField = {
buttonDown : function(event)
{  
   //если нажатие на левую кнопку мыши, устанавливаем флаг
   if (0 == event.button){ this.leftButtonDown = true };
   //если нажатие на правую кнопку мыши и если установлен флаг
   if (2 == event.button && this.leftButtonDown){
   //сбросить флаг, устанавить флаг
    this.leftButtonDown = false;
    this.stopMenu = true; 
    //Очистить поле текстового ввода
    setTimeout(function(){ findFieldClear(event);}, 0);
    if (custombuttons.getPrefs("FindBar.Highlight")){Highlight(event)};
    }
},
buttonUp : function(event)
{
  //если нажатая левая кнопка мыши отпущена
   if (event.button == 0)
   {
   //сбросить флаг
   this.leftButtonDown = false;
   }
  //если нажатая правая кнопка мыши отпущена и если установлен флаг
   if (event.button == 2 && this.stopMenu){
   event.preventDefault();
   event.stopPropagation();
   //сбросить флаг
   this.stopMenu = false; 
   } 
}   
                   };

     
   
//FindBar, автоматически закрыть(autohide Findbar).................................      
//Стоп, при открытии настройки панелей(stop, if onDestroy)
if (window.ToggleFindRun !== 'stop') (function () {
function go() {
  gFindBar.close();
  window.ACRun = '';
  }
function on() {
  if (!custombuttons.getPrefs("FindBar.auto_Close")) return;
  if (window.ACRun == 'stop') return;
  window.ACRun = 'stop';
  timeoutId = 0;
  timeoutId = setTimeout(go, custombuttons.getPrefs("FindBar.CloseTimer") + '000')
  }
function off() {
  if (!custombuttons.getPrefs("FindBar.auto_Close")) return;
  window.ACRun = '';
  clearTimeout(timeoutId);
  }  
gFindBar.addEventListener("DOMAttrModified", function(event){if (gFindBar.hidden) off() }, false);  
addEventListener('mouseover', function(event){ if (!gFindBar.hidden) (event.target.nodeName !== 'findbar')? on(): off() }, false);  
})();  



//FindBar, сочетания клавиш(Key config).........................................................
//Стоп, при открытии настройки панелей(stop, if onDestroy)
if (window.ToggleFindRun !== 'stop')(function () {
window.addEventListener('keydown', function (event){
//FindBar(ctrl+ F)показать - скрыть(Toggle Find Bar).........
if ((event.ctrlKey)&&(!event.altKey)&&(!event.shiftKey)&&(event.keyCode==70))
{
event.preventDefault();
event.stopPropagation();
//переключить 'Поиск на странице'
gFindBar.hidden ? gFindBar.onFindCommand() : gFindBar.close();
Find(event);
gFindBar._findField.focus();
}
//Findbar(ctrl+ALT+F), поиск по странице из буфера обмена(find from clipboard).............
if ((event.ctrlKey)&&(event.altKey)&&(event.keyCode==70))
{
gFindBar.hidden ? gFindBar.onFindCommand() : gFindBar.close();
goDoCommand("cmd_selectNone");
goDoCommand("cmd_paste");
Find(event);
}
//Findbar(ctrl+Snift+F), открывать Findbar с чистой формой/обычный поиск (Find, clear/normal find).............
if ((event.ctrlKey)&&(!event.altKey)&&(event.shiftKey)&&(event.keyCode==70))
{
var val = (window.FB_fFval)? window.FB_fFval: '';
var sel = document.commandDispatcher.focusedWindow.getSelection().toString();
if (sel.length  !== 0){ val = sel}  
gFindBar.onFindCommand()
custombuttons.getPrefs("FindBar.autoclear")? gFindBar._findField.value = val : findFieldClear(event);
Find(event);
}
//Findbar(ctrl+ALT+H), FindBar, вести слова для выделение(set Highlight words)...
if ((event.ctrlKey)&&(event.altKey)&&(event.keyCode==72))
{
//Запускаем функцию HighlightAdd(run HighlightAdd) 
HighlightAdd(event);
}
 }, false);
})();


//переключить кнопку 'Highlight'(toggle Highlight)............................................
function toggleHighlight(event) {
var highlightBtn = document.getElementById('FindToolbar').getElement('highlight');
//...
if (!gFindBar._findField.style.color)
{
gFindBar._highlightDoc(true, gFindBar._findField.value);
gFindBar._findField.style.color = prefs.getCharPref("ui.textHighlightBackground");
}
else 
{
gFindBar._highlightDoc(false);
gFindBar._findField.removeAttribute("style");
}
 };



//Автоматически выделить заранее введенные слова (auto Highlight words permanent)....................................................
Highlight = function(event) {

//устанавливаем флаги...
var m = true;
if (event =='false' || event =='[object UIEvent]' || event =='[object DragEvent]' || event =='[object MouseEvent]'){var m = false
};   
//hide Highlight
gFindBar._highlightDoc(false);
//....
var FBNum = custombuttons.getPrefs("FindBar.AutohighlightNum");
var FBvalue = gFindBar._findField.value;
//.... 
if (!gFindBar.hidden)
{
  //...
  if (!!gFindBar._findField.style.color)
     {
     gFindBar._findField.removeAttribute("style");
     }
  //Findbar, удалить атрибут 'red'(Findbar, remove attribute 'red')..............
  if (FBvalue.length  == '0')
     {
     var findToolbar = document.getElementById("FindToolbar");
     findToolbar.removeAttribute("red");
     }
  //FindBar, auto find 
  if (m)
     {
      //Findbar, фокус(Findbar, focus)
      gFindBar._findField.focus();
  
      gFindBar.onFindCommand();
    
      //Findbar, убрать фокус(Findbar, hide focus) 
       _content.focus();
      }
}
//auto Highlight
if (custombuttonsUtils.getPrefs("FindBar.Highlight"))
{
  if (gFindBar.hidden)
     {
     //getting prefs Unicode value
     var value = prefs.getComplexValue("FindBar.Highlight.value",
     Components.interfaces.nsISupportsString).data;
     }
  if (!gFindBar.hidden)
     {
     var value =(FBvalue.length > FBNum)? FBvalue : "??????";
     }
//Highlight
gFindBar._highlightDoc(true, value);
}
 };   
if (window.ToggleFindRun !== 'stop') (function () {
//добавляем обработчики........
//отслеживаем команду Назад(back) и Вперёд(forward)...
window.addEventListener("command", function(event){
var command = String(event.target.getAttribute("oncommand"));
//фылтр..
if (command == 'BrowserBack();' || command == 'BrowserBack(event);' || command == 'BrowserForward();' || command == 'BrowserForward(event);'){
setTimeout(function() { Highlight(event)}, 0)
}}, false);
//обработчики для табов...
gBrowser.tabContainer.addEventListener("TabSelect", Highlight, false);
gBrowser.addEventListener("DOMContentLoaded", function(event){
//фылтр..
//стоп, если открыть новые таби 
if (event.target.location.href !== getBrowser().currentURI.spec) return;
//стоп, если срабатывает на фрейме
var document = event.originalTarget;
if (document instanceof HTMLDocument && this.contentWindow.document !== document) return;
Highlight(event)}, false);
//обработчики для FindBar..
gFindBar._findField.addEventListener("input", function(event){ Highlight("false")}, false);
gFindBar._findField.setAttribute("ondrop","event.stopPropagation(); Find(event); ");
gFindBar.addEventListener("DOMAttrModified", function(event){if (gFindBar.hidden){Highlight(event)}}, false);
})();



//FindBar. контекстного меню (context Menu).......................................
(function contextFindWords(){
// выходим, если функция уже выполнялась
    if (document.getElementById("contextFindWords")) return;
 
    const kXULNS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";

    var contextMenu = document.getElementById("contentAreaContextMenu");
    var separator = document.getElementById("context-sep-properties");
    var eventTarget = null;

    var menu = document.createElementNS(kXULNS, "menu");
    menu.id = "contextFindWords";
           
    menu.setAttribute("label", "Find");
    menu.hidden = true;
    contextMenu.insertBefore(menu, separator);

    var menuPopup = document.createElementNS(kXULNS, "menupopup");
    menu.appendChild(menuPopup);

    var lst = [
        { 
          label:"Найти на странице",
          command:ContexFind
        },
        {
          label:"Поиск по сайту(google)",
          command:Search
        },
        {
          label:"Выделить текст на странице",
          command:HighlightSel
        },
        {
          label:"Автовыделение, добавить текст",
          command:addSel
        }
        ];
    
    for(var i = 0, m; m = lst[i]; i++){
        var menuItem = document.createElementNS(kXULNS, "menuitem");
        menuItem.setAttribute("label", m.label);
        menuItem.setAttribute("type", "m.radio");
        if ("accesskey" in m) menuItem.setAttribute("accesskey", m.accesskey);
        menuItem.addEventListener("command", m.command, false);
        menuItem.id = "context-Find-Words-" + m.label.toString();
        menuPopup.appendChild(menuItem);
        
    }
    var contextFind = document.getElementById("contextFindWords")
    contextMenu.addEventListener("popupshowing", setMenuDisplay, false);
    
    function setMenuDisplay(aEvent) {
         custombuttons.getPrefs("FindBar.contextFindWords") ? contextFind.hidden = !gContextMenu.isTextSelected : contextFind.hidden = true;
         }
     function ContexFind(){
         gFindBar.onFindCommand();
         //Запускаем функцию Find
         Find(event);
         }
     function Search(){
        var focusedWindow = document. commandDispatcher. focusedWindow;
        var text = focusedWindow. getSelection (). toString ();
        var doc = getBrowser (). contentDocument;
        try { var url = doc. location. hostname; }
        catch(e)
        { var url = ""; }
        text = escape (convertFromUnicode ("UTF-8", text));
        url = encodeURIComponent (url);
        var searchUrl = "http://www.google.com/search?as_q=" + text + "&as_sitesearch=" + url;
        gBrowser.selectedTab = gBrowser.addTab(searchUrl);
        }
     function HighlightSel(){
        gFindBar.toggleHighlight(false);
        var text = document.commandDispatcher.focusedWindow.getSelection();
        gFindBar._highlightDoc(true, text);
        goDoCommand("cmd_selectNone");
        }
     function addSel(){
        //Запускаем функцию HighlightAdd 
        HighlightAdd(event);
        }     
})();


//Если нажать в главном меню Firefox на пункт меню 'Найти'.............................................
document.getElementById("cmd_find").setAttribute("oncommand", "gFindBar.onFindCommand(); Find(event);");


//Найти на странице....................................................  
Find = function(event){
event.preventDefault();
event.stopPropagation();
if (custombuttons.getPrefs("FindBar.Highlight")){Highlight(event)};
if (!gFindBar.hidden) gFindBar._find(gFindBar._findField.value);
};

        

//Добавить текст(выделенный / из буфера обмена) для автовыделения.......................................
function HighlightAdd(event){
//Копируем выделенный текст в буфер
document.getElementById("cmd_copy").doCommand();
// Get the root branch
var prefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch);
//setting Unicode value
var str = Components.classes["@mozilla.org/supports-string;1"].createInstance(Components.interfaces.nsISupportsString);
//читаем из буфера обмена и добавляем текст для автовыделения в 'about:config'
str.data = readFromClipboard();
prefs.setComplexValue("FindBar.Highlight.value", 
Components.interfaces.nsISupportsString, str);
//всплывающая подсказка
custombuttons.alertSlide(AutoHighlight, str.data);
//...
goDoCommand("cmd_selectNone");
//Запускаем функцию Highlight(run Highlight) 
Highlight(event);
      };  



//Поле текстового ввода на Findbar мигает желтим............................
function fflash(event){
var findToolbar = document.getElementById("FindToolbar");
//Следим за иконкой статуса на FindBar
var findstatus = gFindBar.getElement("find-status-icon");
findstatus.addEventListener("DOMAttrModified",function(e){
if(findstatus.getAttribute("status")=="wrapped")
{
findToolbar.setAttribute("flash", "true");
setTimeout(function() {findToolbar.removeAttribute("flash");}, 700)};
}, false)};
//Запускаем функции fflash(Run the function fflash)
document.addEventListener( "DOMContentLoaded", fflash(event), false);



//Создать кнопку "Вставить и искать" на Findbar.........................................................
var ubc=document.getAnonymousElementByAttribute( gFindBar, "anonid", "findbar-textbox");
var btn=document.createElementNS("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul", "toolbarbutton");
btn.setAttribute("id", "pasteButton");
btn.setAttribute("tooltiptext", "Поиск выделенного текста/из буфера");
ubc.parentNode.insertBefore(btn, ubc.nextSibling);
btn.addEventListener("click", function(event){
  if ( event.button == 0 ){
        //Поиск по странице из буфера обмена/выделенный текст...
        //event.preventDefault();
        //event.stopPropagation();
        var sel = content.getSelection().toString();
        var str =(!!sel) ? sel : readFromClipboard();
        //Убираем пробелы с обоих концов текста.
        var str = str.replace(/^\s+|\s+$/g,"");
        //...
        gFindBar._findField.value = str;
        Find(event);
}
  }, false);



//Очистить поле текстового ввода на Findbar..................................................
function findFieldClear(event){
if (gFindBar._findField.value){ window.FB_fFval = gFindBar._findField.value };
gFindBar._findField.value = '';
//....
var findToolbar = document.getElementById("FindToolbar");
findToolbar.removeAttribute("red");
//...
gFindBar.onFindCommand();
//....
gFindBar._highlightDoc(false);
};

 
 
// FindToolbar стиль(style).......................................................................
(function(css) {
      var pi = document.createProcessingInstruction(
      'xml-stylesheet',
      'type="text/css" href="data:text/css;utf-8,' + encodeURIComponent(css) + '"'
    );
    return document.insertBefore(pi, document.documentElement);
  }
)(<![CDATA[
@namespace url(http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul);


/*Find Toolbar.................*/
#FindToolbar {
    border-bottom: 1px solid grey !important; }

#FindToolbar > .findbar-container > * { display: -moz-box !important; }
#FindToolbar > hbox > label{-moz-appearance: none !important;font-weight: bold  !important;}
#find-field,.findbar-textbox{width: 250px !important;}

#FindToolbar .findbar-find-fast.findbar-find-status,
#FindToolbar .findbar-container>image,
#FindToolbar[autohide] .findbar-closebutton
{display: none !important;}

#FindToolbar[red="true"] .findbar-textbox{box-shadow: 0 0 0 1em #f66 inset;}

#FindToolbar:not([red="true"]) .findbar-textbox[status="notfound"]{
   background: rgba(207,219,236,0.99) !important;
   color: black !important;
   box-shadow: none !important;}


/*Find Toolbar, mini......................................... */

#FindToolbar[mini="true"] .findbar-textbox{
   width: 16em !important; 
   height:21px!important;  
   padding-right: 20px !important;
   margin-right: 2px!important;
   margin-left:-4px!important}
   
#FindToolbar[mini] {
    position: fixed;
    right: 18px;
    background: menu !important;
    box-shadow: 0px 10px 5px -10px rgba(0,0,0,.3) !important;
    border: 1px solid grey !important;
    border-top: 0 !important;
    border-radius: 0 0 8px 8px !important;}
   
#FindToolbar[mini="true"] .findbar-container>checkbox{
   margin-left:-24px !important;
   margin-right: -3px !important}

#FindToolbar[mini] toolbarspacer,
#FindToolbar[mini="true"]  label[class="checkbox-label"],
#FindToolbar[mini="true"]  toolbarbutton.findbar-find-next, 
#FindToolbar[mini="true"]  toolbarbutton.findbar-find-previous,
#FindToolbar[mini="true"] .findbar-highlight label,
#FindToolbar[mini="true"] .findbar-closebutton,
#FindToolbar:not([pasteButton="true"]) #pasteButton,
#FindToolbar[mini="true"] .findbar-find-fast[anonid="find-label"],
#FindToolbar[mini="true"] .findbar-find-fast[anonid="match-case-status"] 
{ display: none !important;} 

    
#FindToolbar[mini] .findbar-highlight,
#FindToolbar[mini] .findbar-highlight[checked] {
    list-style-image: url("data:image/gif;base64,R0lGODlhEAAQAMQWAJmZzJlmzGZmzGZm/2aZ/5mZ/5nM/8zM/8z//5mZmWZmmf///8yZzMzMmZlmmZmZM8zMM8zMZsz/ZsyZZpmZZmZmM////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAHoAxYALAAAAAAQABAAAAVsoCUCgQCIaCoKA1G4p7q6RmEXcQoMxYEYQEMOJSAYEL+D8jC0CG6GJTKhUtiAPiSCmlK4er7FgiGzWLGIBUJRZliVCLMi0Sg7FHhq4gGJlFUNEBIQE38pExGDFIYoFIkQi4wWjhEVkiIUFQohADs=") !important;
    -moz-image-region: auto !important;}
 

#pasteButton{
    list-style-image: url("chrome://browser/skin/appmenu-icons.png");
    -moz-image-region: rect(0 48px 16px 32px);
    margin-right: 3px! important;} 
       
     
#FindToolbar[mini="true"] textbox.findbar-textbox{
   -moz-box-ordinal-group: 2 !important}
#FindToolbar[mini="true"] checkbox{ 
  -moz-box-ordinal-group: 3 !important;}
#FindToolbar[mini="true"] toolbarbutton.findbar-highlight{
   -moz-box-ordinal-group: 4 !important;}
#FindToolbar[mini="true"] #pasteButton{
   -moz-box-ordinal-group: 4 !important;}
#FindToolbar[mini="true"] .findbar-closebutton{
   -moz-box-ordinal-group: 7 !important;}
]]>.toString());


//устанавливаем флаг
window.ToggleFindRun = 'stop';

Отредактировано bunda1 (06-04-2012 15:34:26)

Отсутствует

 

№14806-04-2012 16:11:53

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

Re: [CB]Toggle Find+

bunda1
уииии! работает отлично :)
спасибо большое!
правда оказалось, что ctrl+shift+f уже используется адблоком, но я посмотрел по коду твоей кнопки - ты правильно сделал что и ctrl+alt+f приделал, буду им пользоваться.

мой список тает на глазах :)


mzfx

Отсутствует

 

№14921-04-2012 14:07:21

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

Re: [CB]Toggle Find+

Только что в консоли ошибок заметил такую ошибку:

Error: TypeError: body is null
Source File: chrome://custombuttons-context/content/button.js?windowId=Firefox&id=custombuttons-button22@init
Line: 466

Которая указывает на строку:

Выделить код

Код:

var count = body.childNodes.length;

mzfx

Отсутствует

 

№15021-04-2012 18:17:55

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

Re: [CB]Toggle Find+

iDev.Pi
Это не критично.
Пожалуйста подумай как сделать красивый таймер закрытия на панель поиска(в CSS коде), вот я сделал код который постепено делает панель поиска прозрачным, можешь попробовать, но это не есть хорошо:

Выделить код

Код:

var CloseIndicator = function(){
    if (!arguments.callee.runTimes) arguments.callee.runTimes = 0;
    arguments.callee.runTimes++;
        
    var findBar = document.getElementById('FindToolbar');
        findBar.style.opacity = "0."+ (9 - arguments.callee.runTimes);
            
    if (arguments.callee.runTimes == custombuttons.getPrefs("FindBar.CloseTimer")) return;
    setTimeout(arguments.callee, 1000);
};
CloseIndicator();

Я думаю надо что то вроде этого Progress Bar on Tab :: Дополнения Firefox

Отредактировано bunda1 (21-04-2012 18:26:29)

Отсутствует

 

Board footer

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