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

На IRC-канале #mozilla-ru можно получить техническую консультацию онлайн и, конечно же, порцию общения.

№5113-03-2012 00:15:05

mserv
Участник
 
Группа: Members
Зарегистрирован: 15-11-2008
Сообщений: 1025
UA: Nightly 13.0

Re: [CB]Toggle Find+

iDev.Pi пишет:

bunda1 пишет:

   

Если кликнуть средним кликом на Findbar или FindBar mini, то текст в поле текстового ввода на Findbar будет заманен текстом из буфера или на выделенный текст, не надо удалять текст который уже есть в поле текстового ввода мой код заменяет его и выделенный текст на странице искать удобно. Но можно нажимать на кнопку поиска  на FindBar mini средним кликом.

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

При СКМ в текстовое поле не происходит замены текста из буфера, поэтому я тоже считаю, что отступ слева нужен, но не такой большой и можно по цифре кликать.
Проверил на чистом профиле, действительно замещает.  Видно с чем-то конфликтует, подозреваю с Autocopy+3, но не проверял.

Отредактировано mserv (13-03-2012 00:28:31)

Отсутствует

 

№5213-03-2012 21:34:25

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

Re: [CB]Toggle Find+

mserv
1.Да, Toggle Find+3 конфликтует с Autocopy+3, я исправил это(мне кажется),
2. Я изменил внешний вид пунктов в контекстном меню, заменил точки чекбоксамы,
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()");



//проверить наличие строк в 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.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;
};

//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);
//изменить нужный пункт меню
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,'????');
};

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

//переключаем настройки в 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.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 (custombuttonsUtils.getPrefs("FindBar.mini"))
{
//...
var highlightBtn = document.getElementById('FindToolbar').getElement('highlight');
if (highlightBtn.checked)
{
gFindBar._findField.style.color = prefs.getCharPref("ui.textHighlightBackground");
};
findToolbar.setAttribute("mini", "true");
this.hits = ' ';
HighBut.setAttribute("tooltiptext", "L = Искать следущее"+"\n" +"M = Поиск выделенного текста/из буфера" + "\n" + "R = Очистить поле текстового ввода");
}
else
{
findToolbar.removeAttribute("mini")
this.hits = ' hits';
HighBut.setAttribute("tooltiptext", "Highlight");
//...
gFindBar._findField.style.color = "black";
}
//Findbar, убрать фокус(Findbar, hide focus) 
_content.focus();
  };
//Запускаем функции fmini(Run the function fmini)  
setTimeout(function() {fmini(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);


//Очистить поле текстового ввода на Findbar при закрытии..................................................
gFindBar.addEventListener("DOMAttrModified", function(event){
if (!gFindBar.hidden) return;
if (custombuttonsUtils.getPrefs("FindBar.autoclear")){gFindBar._findField.reset()};
}, false);

 

//переключить 'Поиск на странице' двойным средним кликом на странице(toggle Find Bar, if Double midlle Click in page)..........
//добавляем обработчик для обработки нажатие на кнопку мыши на странице.......
//Стоп, при открытии настройки панелей(stop, if onDestroy)
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;
        }, 400);
}, 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();
   Find(event);
   }
 else if ( event.button == 2 )
   {
   gFindBar._findField.reset();
   gFindBar.onFindAgainCommand(false);
   //....
   var findToolbar = document.getElementById("FindToolbar");
   findToolbar.removeAttribute("red");
   //...
   gFindBar._findField.focus();
   //....
   gFindBar._highlightDoc(false);
}
  };
       
        
   
//Поиск по странице из буфера обмена/выделенный текст, если кликнуть средним кликом на findbar или на иконку поиска на FindBar mini .......
//переключить кнопку 'Highlight' двойным левым кликом на на поле текстового ввода на FindBar............
//Стоп, при открытии настройки панелей(stop, if onDestroy)
if (window.ToggleFindRun !== 'stop') (function () {
//Поиск по странице из буфера обмен
  gFindBar.addEventListener("mousedown", 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;
        //переключить кнопку 'Highlight'
        toggleHighlight(event);
        //Findbar, убрать фокус(Findbar, hide focus) 
        _content.focus();
}, false);
})(); 

     
      
//FindBar, автоматически закрыть(autohide Findbar).................................
//Стоп, при открытии настройки панелей(stop, if onDestroy)
if (window.ToggleFindRun !== 'stop')(function () {
function go() {
  gFindBar.close();
  }
function on() {
  if (!custombuttons.getPrefs("FindBar.auto_Close")) return;
  if (gFindBar.hidden) return;
  if (window.ACRun == 'stop') return;
  window.ACRun = 'stop';
  timeoutId = setTimeout(go, custombuttons.getPrefs("FindBar.CloseTimer") + '000')
  gFindBar.addEventListener('mouseover',off, false); 
  gFindBar.addEventListener("DOMAttrModified", Modoff, false);
  }
function Modoff() {
  if (!gFindBar.hidden){
  off();
  }
    };
function off() {
  window.ACRun = '';
  gFindBar.removeEventListener('mouseover',Modoff, false); 
  gFindBar.removeEventListener("DOMAttrModified", off, false);
  clearTimeout(timeoutId);
  }
gBrowser.addEventListener('mouseover',on, 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.keyCode==70))
{
event.preventDefault();
event.stopPropagation();
gFindBar.hidden ? gFindBar.onFindCommand() : gFindBar.close();
Find(event);
}
//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+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 (!highlightBtn.checked)
{
highlightBtn.setAttribute("checked", "true");
gFindBar._highlightDoc(true, gFindBar._findField.value);
//..
gFindBar._findField.style.color = prefs.getCharPref("ui.textHighlightBackground");
}
else 
{
highlightBtn.removeAttribute("checked");
gFindBar._highlightDoc(false);
//..
gFindBar._findField.style.color = "black";
}
 };


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

//устанавливаем флаги...
var m = true;
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 highlightBtn = document.getElementById('FindToolbar').getElement('highlight');
var FBNum = custombuttons.getPrefs("FindBar.AutohighlightNum");
var FBvalue = gFindBar._findField.value;
  
//.... 
if (!gFindBar.hidden)
{
  //...
  if (!highlightBtn.checked)
     {
     gFindBar._findField.style.color = "black";
     }
  //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 () {
//добавляем обработчики.....
//обработчики для табов..
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", Highlight, false);
gFindBar._findField.setAttribute("ondrop","event.stopPropagation(); Find(event); ");
gFindBar.addEventListener("DOMAttrModified", function(event){
if (!gFindBar.hidden) return;
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);
        }     
})();


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

//Добавить текст(выделенный / из буфера обмена) для автовыделения.....................
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);


 
// FindToolbar стиль(style).......................................................................
var but = "#" +this.id;
(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="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[mini="true"] .findbar-find-fast[anonid="find-label"],
#FindToolbar[mini="true"] .findbar-find-fast[anonid="match-case-status"] 
{ display: none !important;} 


#FindToolbar[mini="true"] toolbarbutton.findbar-highlight.tabbable, #FindToolbar[mini="true"] toolbarbutton.findbar-highlight.tabbable[checked="true"]{
   -moz-appearance: none !important;
   list-style-image: none !important;
   background: url("data:image/gif;base64,R0lGODlhEAAQAMQWAJmZzJlmzGZmzGZm/2aZ/5mZ/5nM/8zM/8z//5mZmWZmmf///8yZzMzMmZlmmZmZM8zMM8zMZsz/ZsyZZpmZZmZmM////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAHoAxYALAAAAAAQABAAAAVsoCUCgQCIaCoKA1G4p7q6RmEXcQoMxYEYQEMOJSAYEL+D8jC0CG6GJTKhUtiAPiSCmlK4er7FgiGzWLGIBUJRZliVCLMi0Sg7FHhq4gGJlFUNEBIQE38pExGDFIYoFIkQi4wWjhEVkiIUFQohADs=") center no-repeat !important; 
   border: 1px solid rgba(0,0,0,0.3) !important;
   height:21px !important;}

#FindToolbar[mini="true"] checkbox{ 
  -moz-box-ordinal-group: 3 !important;}
  
#FindToolbar[mini="true"] textbox.findbar-textbox{
   -moz-box-ordinal-group: 2 !important}

#FindToolbar[mini="true"] toolbarbutton.findbar-highlight{
   -moz-box-ordinal-group: 4 !important;
   margin-left:-3px !important}
   
#FindToolbar[mini="true"] .findbar-closebutton{
   -moz-box-ordinal-group: 7 !important;
}  
]]>.toString());

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

Отредактировано bunda1 (14-03-2012 09:20:52)

Отсутствует

 

№5315-03-2012 00:18:23

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

Re: [CB]Toggle Find+

bunda1
новый баг в последней версии: не всегда при открытии файндбара он берёт фокус на себя. Иногда он открывается без фокуса.


mzfx

Отсутствует

 

№5415-03-2012 12:37:22

mserv
Участник
 
Группа: Members
Зарегистрирован: 15-11-2008
Сообщений: 1025
UA: Nightly 14.0

Re: [CB]Toggle Find+

iDev.Pi пишет:

новый баг в последней версии: не всегда при открытии файндбара он берёт фокус на себя. Иногда он открывается без фокуса.

Не подтверждаю.

Отсутствует

 

№5515-03-2012 13:25:14

mserv
Участник
 
Группа: Members
Зарегистрирован: 15-11-2008
Сообщений: 1025
UA: Nightly 14.0

Re: [CB]Toggle Find+

3. Исправил проблемы с двойным мидл-кликом.

Ещё одна вылезла. Вставляем СКМ слово, очищаем текстовое поле, вставляем это же слово из буфера повторно, получаем сразу два слова.

Отсутствует

 

№5615-03-2012 13:28:47

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

Re: [CB]Toggle Find+

mserv
такое чувство, что просто вставка срабатывает при onmousedown и onmouseup


mzfx

Отсутствует

 

№5715-03-2012 23:26:40

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

Re: [CB]Toggle Find+

iDev.Pi пишет:

новый баг в последней версии: не всегда при открытии файндбара он берёт фокус на себя. Иногда он открывается без фокуса.

У меня нет. Что ты нажимал.

mserv пишет:

Ещё одна вылезла. Вставляем СКМ слово, очищаем текстовое поле, вставляем это же слово из буфера повторно, получаем сразу два слова.

Это я не удачно питался заблокировать Autocopy+3 и middlemouse.paste для поле текстового ввода на Findbar. Может поиск по странице из буфера обмена запускать средним кликом только на кнопку поиска на FindBar mini или на Findbar?

Отсутствует

 

№5816-03-2012 01:05:49

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

Re: [CB]Toggle Find+

bunda1 пишет:

Что ты нажимал.

я выяснил STR к багу:
0. включить настройку "Очищать поле текстового ввода"
1. ctrl+f - панель откроется.
2. вписать что-то.
3. ctrl+f - панель закроется.
4. ctrl+f - панель открывается, но уже без фокуса в ней.


mzfx

Отсутствует

 

№5916-03-2012 10:32:02

Mr.Rik
Участник
 
Группа: Members
Зарегистрирован: 10-02-2012
Сообщений: 195
UA: Firefox 10.0

Re: [CB]Toggle Find+

Ого. Да это уже фактически серьезное дополнение. Спс автору.

Могу подкинуть идею. Сделать поле скролируемым. Т.е. наводишь мыша на поле и крутишь колесо. Если текст большой происходит прокрутка. Можно попопробовать сделать это стилем через overflow   (сам элемент скрол, полосу скрыть стилем).

И еще если возможно поле ресайзящимся, тоже сиилем через resize.

Добавлено 16-03-2012 10:34:35
Былобы отлично запихнуть кнопку в jetpack

Отредактировано Mr.Rik (16-03-2012 10:34:35)


Удачи, котик.

Отсутствует

 

№6016-03-2012 16:18:32

mserv
Участник
 
Группа: Members
Зарегистрирован: 15-11-2008
Сообщений: 1025
UA: Nightly 14.0

Re: [CB]Toggle Find+

Mr.Rik пишет:

Могу подкинуть идею. Сделать поле скролируемым. Т.е. наводишь мыша на поле и крутишь колесо. Если текст большой происходит прокрутка. Можно попопробовать сделать это стилем через overflow   (сам элемент скрол, полосу скрыть стилем).

Можно скролить лупу

Добавлено 16-03-2012 16:21:54

bunda1 пишет:

Может поиск по странице из буфера обмена запускать средним кликом только на кнопку поиска на FindBar mini или на Findbar?

Да без проблем, я и не знал о другой возможности, пока iDev.Pi не указал.  Просто раз нашёл баг, то и решил сообщить. :)

Отредактировано mserv (16-03-2012 16:21:54)

Отсутствует

 

№6120-03-2012 23:55:53

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

Re: [CB]Toggle Find+

iDev.Pi пишет:

Баги:
3. Невозможно пользоваться mini на девайсах без колеса прокрутки.

Теперь L=Назад(back) R= Вперёд(Forward) на лупе если в настройках включена Кнопка - очистить

iDev.Pi пишет:

Мне бы хотелось, чтобы это можно было настройкой, т.е. чтобы я мог отключить эту функцию и было так:
1. выделить на странице какое-то слово
2. нажать ctrl+F
то будет такой результат:
файндбар открывается ЧИСТЫМ.

Я сделал.

iDev.Pi пишет:

в общем ладно, хрен с моим стилем - я тогда прошу тебя внести в свой стиль некоторые изменения:
2. переделать кнопку из background: url("base64_image") в list-style-image: url("base64_image"); -moz-image-region: auto; чтобы она выглядела по-человечески, особенно при наведении на неё курсором
3. удалить ненужный отступ слева (добавить к правилу display:none такой вот селектор - #FindToolbar[mini] toolbarspacer )

Я сделал.

Код экспериментальной кнопки  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()");



//проверить наличие строк в 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: 'Кнопка - очистить', 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 (custombuttonsUtils.getPrefs("FindBar.mini"))
{
//...
var highlightBtn = document.getElementById('FindToolbar').getElement('highlight');
if (highlightBtn.checked)
{
gFindBar._findField.style.color = prefs.getCharPref("ui.textHighlightBackground");
};
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
{
findToolbar.removeAttribute("mini")
this.hits = ' hits';
HighBut.setAttribute("tooltiptext", "Highlight");
//...
gFindBar._findField.style.color = "black";
}
//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,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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;}, 400);
}, false);



//Автоматически очищать поле текстового ввода на Findbar..................................................
gFindBar.addEventListener("DOMAttrModified", function(event){
var _this = this;
//устанавливаем флаг
if (gFindBar.hidden){_this.clear = true}
//...
if (!custombuttons.getPrefs("FindBar.autoclear")) reset;
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();
   Find(event);
   }
 else if ( event.button == 2 )
   {
   if (custombuttons.getPrefs("FindBar.Highlight")){Highlight(event)};
  //Запускаем функцию findFieldClear или искать предыдущее
  custombuttons.getPrefs("FindBar.ClearButton") ? gFindBar.onFindAgainCommand(true) : findFieldClear(event);
}
  };
       
        
   
//Поиск по странице из буфера обмена/выделенный текст, если кликнуть средним кликом на findbar или на иконку поиска на FindBar mini .......
//переключить кнопку 'Highlight' двойным левым кликом на на поле текстового ввода на 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);
})(); 

     
      
//FindBar, автоматически закрыть(autohide Findbar).................................
//Стоп, при открытии настройки панелей(stop, if onDestroy)
if (window.ToggleFindRun !== 'stop')(function () {
function go() {
  gFindBar.close();
  }
function on() {
  if (!custombuttons.getPrefs("FindBar.auto_Close")) return;
  if (gFindBar.hidden) return;
  if (window.ACRun == 'stop') return;
  window.ACRun = 'stop';
  timeoutId = setTimeout(go, custombuttons.getPrefs("FindBar.CloseTimer") + '000')
  gFindBar.addEventListener('mouseover',off, false); 
  gFindBar.addEventListener("DOMAttrModified", Modoff, false);
  }
function Modoff() {
  if (!gFindBar.hidden){
  off();
  }
    };
function off() {
  window.ACRun = '';
  gFindBar.removeEventListener('mouseover',Modoff, false); 
  gFindBar.removeEventListener("DOMAttrModified", off, false);
  clearTimeout(timeoutId);
  }
gBrowser.addEventListener('mouseover',on, 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.keyCode==70))
{
event.preventDefault();
event.stopPropagation();
gFindBar.hidden ? gFindBar.onFindCommand() : gFindBar.close();
Find(event);
}
//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+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 (!highlightBtn.checked)
{
highlightBtn.setAttribute("checked", "true");
gFindBar._highlightDoc(true, gFindBar._findField.value);
//..
gFindBar._findField.style.color = prefs.getCharPref("ui.textHighlightBackground");
}
else 
{
highlightBtn.removeAttribute("checked");
gFindBar._highlightDoc(false);
//..
gFindBar._findField.style.color = "black";
}
 };


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

//устанавливаем флаги...
var m = true;
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 highlightBtn = document.getElementById('FindToolbar').getElement('highlight');
var FBNum = custombuttons.getPrefs("FindBar.AutohighlightNum");
var FBvalue = gFindBar._findField.value;
  
//.... 
if (!gFindBar.hidden)
{
  //...
  if (!highlightBtn.checked)
     {
     gFindBar._findField.style.color = "black";
     }
  //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 () {
//добавляем обработчики.....
//обработчики для табов..
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", Highlight, false);
gFindBar._findField.setAttribute("ondrop","event.stopPropagation(); Find(event); ");
gFindBar.addEventListener("DOMAttrModified", function(event){
if (!gFindBar.hidden) return;
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);
        }     
})();


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

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


//Добавить текст(выделенный / из буфера обмена) для автовыделения.......................................
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);


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

Отсутствует

 

№6221-03-2012 01:47:17

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

Re: [CB]Toggle Find+

bunda1 пишет:

Теперь L=Назад(back) R= Вперёд(Forward) на лупе если в настройках включена Кнопка - очистить

Спасибо, это конечно работает, но если честно, вся эта экономии нескольких пикселей не стоит тех ухищрений, на которые пришлось пойти.
Тем не менее, такой вариант меня удовлетворяет.

bunda1 пишет:

переделать кнопку из background: url("base64_image") в list-style-image: url("base64_image"); -moz-image-region: auto; чтобы она выглядела по-человечески, особенно при наведении на неё курсором

Я сделал.

Странно, у меня в стиле после этого кнопка выглядит как кнопка, а у тебя даже после исправления - как фоновая картинка: при наведении на кнопку почему-то не появляется свойственная всем кнопкам рамочка. Попозже посмотрю в чём там дело.

bunda1 пишет:

Мне бы хотелось, чтобы это можно было настройкой, т.е. чтобы я мог отключить эту функцию и было так:
    1. выделить на странице какое-то слово
    2. нажать ctrl+F
    то будет такой результат:
    файндбар открывается ЧИСТЫМ.

Я сделал.

Спасибо, работает. Я правда думал, что ты сделаешь эти 2 настройки отдельными друг от друга ("Очищать поле текстового ввода" и "автоматически искать выделенное при открытии поиска"), хотя лично меня это удовлетворяет, так как у меня всё равно выставлена галка "очищать поле текстового ввода".



Кстати, а можно переформулировать некоторые вещи? Это конечно мелочи, но ведь дьявол в мелочах...
Очень непонятно из названий некоторых настроек то, что они делают.
Проблема ещё в том, что кратко объяснить что они делают - тоже тяжело, возможно стоит добавить подсказки при наведении на них? И в подсказки вписать, например:
"Очищать поле текстового ввода" переименовать в "Очищать поисковую форму" и добавить подсказку: "Всегда открывать панель поиска только с пустой поисковой формой". "Поисковая форма" - это такой устоявшийся термин.
"Автоматически закрыть".
"Автовыделение" - "Автоматически подсвечивать найденное" - в русской локализации лисы "highlight" перевели не как "выделение" (что было бы более уместно, ведь маркер, которым текст в тетради выделяют - в английском называют "highlighter (pen)" и он "highlights", а в русском он называется "выделитель" и он "выделяет", а не "подсвечивает"), а как "подсветку", поэтому для консистентности предлагаю использовать такой же перевод (это мнение вслух, я на нём не настаиваю). + Подсказку сюда можно добавить

К "Переключать двойным средним кликом" нужно пояснение типа: "Открывать и закрывать панель поиска двойным кликом средней кнопкой мыши", т.к. не очень очевидно значение слова "переключать" (это в английском "toggle" имеет более очевидное значение: переключение чего-то между его возможными состояниями). Т.к. хоть немного более точного перевода одним словом "toggle" в этом случае, кажется, нет, то предлагаю его так и оставить, т.к. замена на "Открывать/закрывать" слишком долго, а "Откр./Закр." выглядит убого.

Добавлено 21-03-2012 01:51:41
обновил список

Отредактировано iDev.Pi (21-03-2012 01:51:41)


mzfx

Отсутствует

 

№6321-03-2012 22:37:01

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

Re: [CB]Toggle Find+

iDev.Pi пишет:

Странно, у меня в стиле после этого кнопка выглядит как кнопка, а у тебя даже после исправления - как фоновая картинка: при наведении на кнопку почему-то не появляется свойственная всем кнопкам рамочка. Попозже посмотрю в чём там дело.

Очень хорошо.

iDev.Pi пишет:

Очень непонятно из названий некоторых настроек то, что они делают.

Да согласен, и потому думаю позже сделать подробное описание настроек кнопки в 09-03-2012 19:18:31

iDev.Pi пишет:

Проблема ещё в том, что кратко объяснить что они делают - тоже тяжело, возможно стоит добавить подсказки при наведении на них?

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

iDev.Pi пишет:

"Очищать поле текстового ввода" переименовать в "Очищать поисковую форму"

ok

iDev.Pi пишет:

"Автовыделение" - "Автоматически подсвечивать найденное"

ok

iDev.Pi пишет:

Баги:
2. Auto Highlight иногда начинает подсвечивать искомые слова на странице даже если панель поиска уже закрыта.
3. Иногда файндбар открывается не перенимая на себя фокус.

У меня не наблюдается. :(

Отсутствует

 

№6421-03-2012 22:51:37

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

Re: [CB]Toggle Find+

bunda1 пишет:

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

Ок, особенно если потом это всё осядет в разделе "help" у кнопки.


bunda1 пишет:

iDev.Pi пишет:

3. Иногда файндбар открывается не перенимая на себя фокус.

У меня не наблюдается. :(

Я уже писал STR:

iDev.Pi пишет:

я выяснил STR к багу:
0. включить настройку "Очищать поле текстового ввода"
1. ctrl+f - панель откроется.
2. вписать что-то.
3. ctrl+f - панель закроется.
4. ctrl+f - панель открывается, но уже без фокуса в ней.

у тебя и после выполнения этих шагов баг не воспроизводится?
просто у меня он воспроизводится стабильно, и в предыдущей версии тоже был.
надо тогда собирать дальше информацию: у меня [nightly], а у тебя? (неужто старый 3.6?)


bunda1 пишет:

iDev.Pi пишет:

2. Auto Highlight иногда начинает подсвечивать искомые слова на странице даже если панель поиска уже закрыта.

У меня не наблюдается. :(

Баг происходит не всегда. Попробую и для него STR вычислить.

iDev.Pi пишет:

Странно, у меня в стиле после этого кнопка выглядит как кнопка, а у тебя даже после исправления - как фоновая картинка: при наведении на кнопку почему-то не появляется свойственная всем кнопкам рамочка. Попозже посмотрю в чём там дело.

Ничего не трогал и у меня сам собой исчез этот баг. Магия какая-то :-/

Edit: ааа, понял: я ошибся, когда этот баг описывал - на самом деле всё в порядке, кнопка не имеет рамку, если в форму поиска ничего не вписано (соответственно, нечего искать, а значит и кнопка неактивна).
Меня смутило то, что она неактивная выглядит так же как и активная, это можно исправить, добавив ей, например, прозрачности.
Или ещё и обесцветив её, что мне больше нравится. Вот код для обесцвечивания + полупрозрачности:

Выделить код

Код:

#FindToolbar[mini] .findbar-highlight[disabled] {
    opacity: 0.3 !important;
    filter: url("chrome://mozapps/skin/extensions/extensions.svg#greyscale") !important; }

Отредактировано iDev.Pi (21-03-2012 23:12:21)


mzfx

Отсутствует

 

№6521-03-2012 23:10:11

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

Re: [CB]Toggle Find+

iDev.Pi пишет:

0. включить настройку "Очищать поле текстового ввода"
1. ctrl+f - панель откроется.
2. вписать что-то.
3. ctrl+f - панель закроется.
4. ctrl+f - панель открывается, но уже без фокуса в ней.
у тебя и после выполнения этих шагов баг не воспроизводится?
просто у меня он воспроизводится стабильно, и в предыдущей версии тоже был.
надо тогда собирать дальше информацию: у меня [nightly], а у тебя? (неужто старый 3.6?)

Да есть такой баг, буду исправлять. Кнопку я обычно проверяю на nightly но тут наверно что то напутал.


iDev.Pi пишет:

Или ещё и обесцветив её, что мне больше нравится. Вот код для обесцвечивания + полупрозрачности:

ok

iDev.Pi пишет:

Ок, особенно если потом это всё осядет в разделе "help" у кнопки.

ok

Добавлено 21-03-2012 23:19:09

iDev.Pi пишет:

Иногда файндбар открывается не перенимая на себя фокус.

Исправил.

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

Выделить код

Код:

//настройка функций кликов мыши(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", '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 (custombuttonsUtils.getPrefs("FindBar.mini"))
{
//...
var highlightBtn = document.getElementById('FindToolbar').getElement('highlight');
if (highlightBtn.checked)
{
gFindBar._findField.style.color = prefs.getCharPref("ui.textHighlightBackground");
};
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
{
findToolbar.removeAttribute("mini")
this.hits = ' hits';
HighBut.setAttribute("tooltiptext", "Highlight");
//...
gFindBar._findField.style.color = "black";
}
//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")) reset;
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();
   Find(event);
   }
 else if ( event.button == 2 )
   {
   if (custombuttons.getPrefs("FindBar.Highlight")){Highlight(event)};
  //Запускаем функцию findFieldClear или искать предыдущее
  custombuttons.getPrefs("FindBar.ClearButton") ? gFindBar.onFindAgainCommand(true) : findFieldClear(event);
}
  };
       
        
   
//Поиск по странице из буфера обмена/выделенный текст, если кликнуть средним кликом на findbar или на иконку поиска на FindBar mini .......
//переключить кнопку 'Highlight' двойным левым кликом на на поле текстового ввода на 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);
})(); 

     
      
//FindBar, автоматически закрыть(autohide Findbar).................................
//Стоп, при открытии настройки панелей(stop, if onDestroy)
if (window.ToggleFindRun !== 'stop')(function () {
function go() {
  gFindBar.close();
  }
function on() {
  if (!custombuttons.getPrefs("FindBar.auto_Close")) return;
  if (gFindBar.hidden) return;
  if (window.ACRun == 'stop') return;
  window.ACRun = 'stop';
  timeoutId = setTimeout(go, custombuttons.getPrefs("FindBar.CloseTimer") + '000')
  gFindBar.addEventListener('mouseover',off, false); 
  gFindBar.addEventListener("DOMAttrModified", Modoff, false);
  }
function Modoff() {
  if (!gFindBar.hidden){
  off();
  }
    };
function off() {
  window.ACRun = '';
  gFindBar.removeEventListener('mouseover',Modoff, false); 
  gFindBar.removeEventListener("DOMAttrModified", off, false);
  clearTimeout(timeoutId);
  }
gBrowser.addEventListener('mouseover',on, 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.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+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 (!highlightBtn.checked)
{
highlightBtn.setAttribute("checked", "true");
gFindBar._highlightDoc(true, gFindBar._findField.value);
//..
gFindBar._findField.style.color = prefs.getCharPref("ui.textHighlightBackground");
}
else 
{
highlightBtn.removeAttribute("checked");
gFindBar._highlightDoc(false);
//..
gFindBar._findField.style.color = "black";
}
 };


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

//устанавливаем флаги...
var m = true;
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 highlightBtn = document.getElementById('FindToolbar').getElement('highlight');
var FBNum = custombuttons.getPrefs("FindBar.AutohighlightNum");
var FBvalue = gFindBar._findField.value;
  
//.... 
if (!gFindBar.hidden)
{
  //...
  if (!highlightBtn.checked)
     {
     gFindBar._findField.style.color = "black";
     }
  //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 () {
//добавляем обработчики.....
//обработчики для табов..
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", Highlight, false);
gFindBar._findField.setAttribute("ondrop","event.stopPropagation(); Find(event); ");
gFindBar.addEventListener("DOMAttrModified", function(event){
if (!gFindBar.hidden) return;
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);
        }     
})();


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

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


//Добавить текст(выделенный / из буфера обмена) для автовыделения.......................................
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);


 
// 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;}
#FindToolbar[mini] .findbar-highlight[disabled] {
    filter: url("chrome://mozapps/skin/extensions/extensions.svg#greyscale") !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 (21-03-2012 23:19:48)

Отсутствует

 

№6621-03-2012 23:26:08

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

Re: [CB]Toggle Find+

bunda1 пишет:

Исправил.

Подтверждаю.
p.s.: добавь всё-таки

Выделить код

Код:

opacity: 0.3 !important;

к неактивной кнопке, так лучше выглядит.


mzfx

Отсутствует

 

№6721-03-2012 23:35:38

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

Re: [CB]Toggle Find+

iDev.Pi пишет:

[
p.s.: добавь всё-таки

Выделить код

Код:

opacity: 0.3 !important;

к неактивной кнопке, так лучше выглядит.

Нет, на кнопке можно нажимать СКМ, а прозрачная кнопка водит в заблуждение.

Отредактировано bunda1 (21-03-2012 23:36:15)

Отсутствует

 

№6821-03-2012 23:45:30

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

Re: [CB]Toggle Find+

Я пожалуй сформулирую ещё один баг, хотя ты, скорей всего, не согласишься со мной, что это баг:

Твоя кнопка всегда выполняет действие "найти", т.е. совсем всегда, даже когда пользователь этого не ожидает.
Такое поведение приносит некий дискомфорт:
Случай 1.
Если ты что-то искал на одной странице и не закрыл за собой панель поиска (т.к. ты надеешься, что он сам закроется по истечению таймера), то ты вовсе не ожидаешь, что переключившись на другую вкладку, страница автоматически прокрутится докуда-то донизу, т.к. при переключении вкладки - панель поиска выполнит действие "найти", и найденный на странице поисковый запрос может оказаться где-то внизу, а потому и страница будет прокручена до того момента.

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

iDev.Pi пишет:

1. Иногда искомое может измениться с верхнего на нижний регистр (и наоборот). Подробности в отдельном сообщении.

Добавлено 21-03-2012 23:47:02

bunda1 пишет:

Нет, на кнопке можно нажимать СКМ, а прозрачная кнопка водит в заблуждение.

так она неактивна только тогда, когда в поисковую форму ничего не вписано, а значит СКМ можно кликать прям на эту текстовую форму.
Ну да ладно, это мелочь на самом деле. Тем более, что себе-то я эту строку дописал :)

Отредактировано iDev.Pi (21-03-2012 23:47:11)


mzfx

Отсутствует

 

№6922-03-2012 00:01:33

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

Re: [CB]Toggle Find+

iDev.Pi пишет:

Если ты что-то искал на одной странице и не закрыл за собой панель поиска (т.к. ты надеешься, что он сам закроется по истечению таймера), то ты вовсе не ожидаешь, что переключившись на другую вкладку, страница автоматически прокрутится докуда-то донизу, т.к. при переключении вкладки - панель поиска выполнит действие "найти", и найденный на странице поисковый запрос может оказаться где-то внизу, а потому и страница будет прокручена до того момента.

Это же галимый баг, но у меня не наблюдается. :(

iDev.Pi пишет:

Открывая-закрывая панель (если не включена настройка "Очищать поисковую форму") - при каждом повторном открытии происходит переход к следующему найденному на странице варианту, а не будь этого бага - я бы даже и не заметил тот:

Так задумано но я попробую исправить.

iDev.Pi пишет:

так она неактивна только тогда, когда в поисковую форму ничего не вписано, а значит СКМ можно кликать прям на эту текстовую форму.
Ну да ладно, это мелочь на самом деле. Тем более, что себе-то я эту строку дописал

Как дабавыть рамку к неактывной?

Отсутствует

 

№7022-03-2012 00:37:52

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

Re: [CB]Toggle Find+

bunda1 пишет:

Как дабавыть рамку к неактывной?

так у неактивной не должно быть рамки. Я даже не знаю код для добавления рамки, т.к. он где-то внутри лисы прописан. В ДОМи глянул - между состояниями обычным и :hover - разница лишь в цвете рамки (в обычном состоянии - она прозрачная). Попробовал выставить ей цвет через stylish - никакого результата. То ли рестарт просто нужен, то ли - я даже не знаю в чём дело.


mzfx

Отсутствует

 

№7122-03-2012 20:22:36

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

Re: [CB]Toggle Find+

iDev.Pi пишет:

Если ты что-то искал на одной странице и не закрыл за собой панель поиска (т.к. ты надеешься, что он сам закроется по истечению таймера), то ты вовсе не ожидаешь, что переключившись на другую вкладку, страница автоматически прокрутится докуда-то донизу, т.к. при переключении вкладки - панель поиска выполнит действие "найти", и найденный на странице поисковый запрос может оказаться где-то внизу, а потому и страница будет прокручена до того момента.

У меня не наблюдается, нужен пример.

Отсутствует

 

№7222-03-2012 20:52:57

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

Re: [CB]Toggle Find+

bunda1
хм, и правда бага такого нет. Описал ситуацию не проверив.
Однако поиск всё равно всегда выполняется: если включить таймер закрытия панели, открыть панель поиска, ввести что-то в поиск и начать постоянное переключение между вкладками - поиск не закроется никогда, хотя фактически пользователь уже давно ничего не ищет, а занят другими делами (чтением разных страниц).


mzfx

Отсутствует

 

№7322-03-2012 21:07:40

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

Re: [CB]Toggle Find+

iDev.Pi
Таймер запускается если курсор на странице

Выделить код

Код:

gBrowser.addEventListener('mouseover'.........

попробую исправить.

Отсутствует

 

№7423-03-2012 03:27:26

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

Re: [CB]Toggle Find+

iDev.Pi пишет:

Однако поиск всё равно всегда выполняется: если включить таймер закрытия панели, открыть панель поиска, ввести что-то в поиск и начать постоянное переключение между вкладками - поиск не закроется никогда, хотя фактически пользователь уже давно ничего не ищет, а занят другими делами (чтением разных страниц).

iDev.Pi пишет:

Открывая-закрывая панель (если не включена настройка "Очищать поисковую форму") - при каждом повторном открытии происходит переход к следующему найденному на странице варианту, а не будь этого бага - я бы даже и не заметил тот:

Я исправил.

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

Выделить код

Код:

//настройка функций кликов мыши(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,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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){
var _this = this;
//устанавливаем флаг
if (gFindBar.hidden){_this.clear = true}
//...
if (!custombuttons.getPrefs("FindBar.autoclear")) reset;
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);
}
  };
       
        
   
//Поиск по странице из буфера обмена/выделенный текст, если кликнуть средним кликом на findbar или на иконку поиска на FindBar mini .......
//переключить кнопку 'Highlight' двойным левым кликом на на поле текстового ввода на 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);
})(); 

     
   
//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.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+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 =='[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 () {
//добавляем обработчики.....
//обработчики для табов..
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", Highlight, false);
gFindBar._findField.setAttribute("ondrop","event.stopPropagation(); Find(event); ");
gFindBar.addEventListener("DOMAttrModified", function(event){
if (!gFindBar.hidden) return;
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);
};

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


//Добавить текст(выделенный / из буфера обмена) для автовыделения.......................................
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);


 
// 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;}
    
   
#FindToolbar[mini] .findbar-highlight[disabled="true"]:hover{
-moz-appearance: none !important;
-moz-border-image: url("data:image/png;base64,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") 3 / 3px stretch stretch  !important;
padding: 2px 2px 1px 2px !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';

Отсутствует

 

№7523-03-2012 04:04:42

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

Re: [CB]Toggle Find+

bunda1 пишет:

Я исправил.

Подтверждаю, спасибо.

Добавлено 23-03-2012 04:33:34
Ты всё-таки решил зачем-то добавить рамку к кнопке для состояния, когда она не нажимается.
Теперь при наведении на эту кнопку в таком состоянии - панель сдвигается на 1 пиксель вверх.

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


mzfx

Отсутствует

 

Board footer

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