Ты всё-таки решил зачем-то добавить рамку к кнопке для состояния, когда она не нажимается.
Теперь при наведении на эту кнопку в таком состоянии - панель сдвигается на 1 пиксель вверх.
У меня нет.
Отсутствует
У меня нет.
Тут понадобится подтверждение/опровержение от 3-ьего лица.
Я лично с этим багом проблем не имею, т.к. восстановил стиль из предыдущей версии кнопки.
mzfx
Отсутствует
Если речь идет про это http://rghost.ru/37171617, то да, по сравнению с предыдущей версией кнопки, появился сдвиг.
Спасыбо.
Да, на видео ясно видно что сдвиг есть. Мистика, у меня нет такого. Придется убрать рамку от кнопки поиска. Эх .
Код экспериментальной кнопки Toggle Find+3- для инициализации:
//настройка функций кликов мыши(Mouse Click settings)................................................... this.onclick = function(event) { if(event.button == 0) { // Действие при клике ЛКМ gFindBar.hidden ? gFindBar.onFindCommand() : gFindBar.close(); Find(event); } else if(event.button == 1) { // Действие при клике СКМ gFindBar.hidden ? gFindBar.onFindCommand() : gFindBar.close();с goDoCommand("cmd_selectNone"); goDoCommand("cmd_paste"); } }; //Объявляем ..... var prefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService); var clipboard = Components.classes["@mozilla.org/widget/clipboardhelper;1"]. getService(Components.interfaces.nsIClipboardHelper); var this_ = this; var AutoHighlight ='Автовыделение' var AutoClose ='Автоматически закрыть' var CloseTimer ='Закрыть через ' var ClearPref ='Сбросить текст' //подсказка............................................................................. this.showTFinfo = function() { //getting prefs Unicode value var prefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService); var Val = "\n\n"+ AutoHighlight +": "+ prefs.getComplexValue("FindBar.Highlight.value",Components.interfaces.nsISupportsString).data; //обрезать подсказку для "Автовыделение" var HValue = Val.substring(0,50); var HDots =(Val.length > 50) ? '....' : ""; //.... this.tooltipText = "Поиск по странице" +"\n" + "Л: Показать - скрыть поиск по странице" +"\n" +"С: Поиск по странице из буфера обмена" +"\n"+ "П: Mеню + CB меню" + HValue + HDots; } this.setAttribute("onmouseover", "this.showTFinfo()"); //справка(Help) //this.setAttribute("Help", "event.stopPropagation(); gBrowser.selectedTab = gBrowser.addTab('https://forum.mozilla-russia.org/viewtopic.php?pid=550855#p550855]09-03-2012 19:18:31')"); //проверить наличие строк в about:config и создать если не существует(Add preferences)........................................ if (custombuttons.getPrefs("FindBar.version") !== '8') { prefs.setCharPref("FindBar.version", "8"); prefs.setBoolPref("FindBar.Highlight", true); prefs.setCharPref("FindBar.Highlight.value", "??????"); prefs.setBoolPref("FindBar.autoclear", false); prefs.setBoolPref("FindBar.contextFindWords", true); prefs.setBoolPref("FindBar.ToggleWithDoubleMiddleClick", false); prefs.setCharPref("ui.textHighlightBackground", "#ef0fff");//http://coloria.net/bonus/colornames.htm //prefs.setCharPref("ui.textHighlightForeground", "#000000");//http://coloria.net/bonus/colornames.htm prefs.setBoolPref("FindBar.mini", false); prefs.setBoolPref("FindBar.ClearButton", false); prefs.setBoolPref("FindBar.auto_Close", false); prefs.setCharPref("FindBar.CloseTimer", "7");//7 сек(7 sec) prefs.setCharPref("FindBar.AutohighlightNum", "1"); }; //настройка меню(CB menu settings)................................................... //Объявляем ..... var c ='true'; var n = 'false'; //изменить нужный пункт меню(toggle menuitems) //переключаем настройки в about:config(toggle preference) this.CBlabel = function (mi, id) { //Автоматически закрыть(FB auto close).... if(!id || id == "FBClose") { //переключаем настройки в about:config s = "FindBar.auto_Close"; togglePref(s); //Запускаем функцию autohide if (id) Autohide(event); //изменить нужный пункт меню var cek = (custombuttons.getPrefs(s)? c: n); this.FBCcek = cek; if(mi) mi.cek = cek; }; //FB auto close timer..... if(!id || id == "CloseTimer") { (function () { //Стоп, при инициализации кнопки if (!id) return; s = "FindBar.CloseTimer"; //switch auto close timer+"\n" + var URL = custombuttons.promptBox(AutoClose, CloseTimer+custombuttons.getPrefs(s) + ' секунд', ''); if (URL[0] == false) return; else var timer = [URL[1]]; //переключаем настройки в about:config(toggle preference) prefs.setCharPref(s, timer); })(); //пункт меню(menuitems) var label = CloseTimer + custombuttons.getPrefs("FindBar.CloseTimer") + ' секунд'; this.CloseTimer = label; if(mi) mi.label = label; }; //FindBar.mini...... if(!id || id == "FBmini") { //переключаем настройки в about:config s = "FindBar.mini"; togglePref(s); //Запускаем функцию fmini(run fmini) if (id) fmini(event); //изменить нужный пункт меню var cek = (custombuttons.getPrefs(s)? c : n); this.FBcek = cek; if(mi) mi.cek = cek; }; //Кнопка 'очистить'...... if(!id || id == "FBbutt") { //переключаем настройки в about:config s = "FindBar.ClearButton"; togglePref(s); //Запускаем функции ClearButton и fmini(run ClearButton, fmini) if (id) ClearButton(event); if (id) fmini(event); //изменить нужный пункт меню var cek = (custombuttons.getPrefs(s)? c : n); this.FCBcek = cek; if(mi) mi.cek = cek; }; //Find в контекстном меню(Find in the context menu)..... if(!id || id == "FindInMenu") { // переключаем настройки в about:config s = "FindBar.contextFindWords"; togglePref(s); //изменить нужный пункт меню var cek = (custombuttons.getPrefs(s)? c : n); this.FIMcek = cek; if(mi) mi.cek = cek; }; //Автоматически очищать поле текстового ввода на Findbar..... if(!id || id == "autoClear") { // переключаем настройки в about:config s = "FindBar.autoclear"; togglePref(s); //Очищистить поле текстового ввода если Findbar закрыт. if (gFindBar.hidden && custombuttons.getPrefs("FindBar.autoclear")) gFindBar._findField.reset(); //изменить нужный пункт меню var cek = (custombuttons.getPrefs(s)? c : n); this.aCcek = cek; if(mi) mi.cek = cek; }; //Переключить двойным средним кликом(Toggle with double middle click)..... if(!id || id == "MiddleClick") { // переключаем настройки в about:config s = "FindBar.ToggleWithDoubleMiddleClick"; togglePref(s); //изменить нужный пункт меню var cek = (custombuttons.getPrefs(s)? c : n); this.MCcek = cek; if(mi) mi.cek = cek; }; //Автовыделение(Switch, Auto Highlight)..... if(!id || id == "SwitchHighlight") { // переключаем настройки в about:config s = "FindBar.Highlight"; togglePref(s); //Изменить иконку кнопки if (id) ToggleImage(event); //переключить кнопку 'Highlight'(toggle Highlight) if (id) document.getElementById('FindToolbar').getElement('highlight').removeAttribute("checked"); //Запускаем функцию Highlight(run function Highlight) if (id) Highlight(event); //изменить нужный пункт меню(toggle menuitems) var cek = (custombuttons.getPrefs(s)? c : n); this.aHcek = cek; if(mi) mi.cek = cek; }; //Изменить цвет для Автовыделение..... if(!id || id == "addColor") { (function () { //Стоп, при инициализации кнопки if (!id) return; //создаем модальное окно для ввода цвета var URL = custombuttons.promptBox('Изменить цвет для Автовыделение', 'По умолчанию: #ef0fff', ''); if (URL[0] == false) return; else var color = [URL[1]]; //переключаем настройки в about:config(toggle preference) prefs.setCharPref("ui.textHighlightBackground", color); })(); //пункт меню(menuitems) var label = 'Изменить цвет' + ': ' + custombuttons.getPrefs("ui.textHighlightBackground"); this.addColor = label; if(mi) mi.label = label; }; //Автовыделение, добавить текст....... if(!id || id == "AddText") { //Запускаем функцию HighlightAdd(run function HighlightAdd) if (id) HighlightAdd(event); }; //Автовыделение, сбросить ..... if(!id || id == "Clear") { //сбросить настройки в about:config if (id) prefs.setCharPref("FindBar.Highlight.value", ""); //Запускаем функцию Highlight(run function Highlight) if (id) Highlight(event); //всплывающая подсказка if (id) custombuttons.alertSlide(ClearPref,'????'); }; //переключаем настройки в about:config(toggle preference).... function togglePref(s){ //Стоп, при инициализации кнопки if (!id) return; //переключаем настройки custombuttons.setPrefs(s, !custombuttons.getPrefs(s)); } }; //Запускаем функцию CBlabel(run CBlabel)......... this.CBlabel(); //пункти меню(Our menu items) .... this.ss = [ { cek: this.FBCcek, label: AutoClose, cmd: 'document.popupNode.CBlabel(this, "FBClose")', sItemId: '', type:'checkbox'}, { label: this.CloseTimer, cmd: 'document.popupNode.CBlabel(this, "CloseTimer")', sItemId: ''}, { label: "separator", sItemId: ''}, { cek: this.FBcek, label: 'FindBar мини', cmd: 'document.popupNode.CBlabel(this, "FBmini")', sItemId: '', type:'checkbox'}, { cek: this.FCBcek, label: 'Кнопка "очистить" на FindBar', cmd: 'document.popupNode.CBlabel(this, "FBbutt")', sItemId: '', type:'checkbox'}, { label: "separator", sItemId: ''}, { cek: this.FIMcek, label: 'Find в контекстном меню', cmd: 'document.popupNode.CBlabel(this, "FindInMenu")', sItemId:'', type:'checkbox'}, { cek: this.aCcek, label: 'Очищать поисковую форму', cmd: 'document.popupNode.CBlabel(this, "autoClear")', sItemId:'', type:'checkbox'}, { cek: this.MCcek, label: 'Переключать двойным средним кликом', cmd: 'document.popupNode.CBlabel(this, "MiddleClick")', sItemId:'', type:'checkbox'}, { label: "separator", sItemId: ''}, { cek: this.aHcek, label: AutoHighlight, cmd: 'document.popupNode.CBlabel(this, "SwitchHighlight")', sItemId: '', type:'checkbox'}, { label: this.addColor, cmd: 'document.popupNode.CBlabel(this, "addColor")', sItemId: ''}, { label: 'Добавить текст', cmd: 'document.popupNode.CBlabel(this, "AddText")', sItemId: ''}, { label: ClearPref, cmd: 'document.popupNode.CBlabel(this, "Clear")', sItemId: ''}]; // Our Initialization function for creating the context menu, setting up menuitems and telling var Cb = custombuttons; this.mObj = Cb.getCbContextObj(this); this.init = function(x) { x.mObj.setSub(); var nItem = {}, mItem = {}; document.getElementById(CB2const.sCBCtxtMenu).setAttribute("oncommand", "event.stopPropagation()"); for(var i in x.ss) { nItem = new x.mObj.getItem(); nItem.id = 'Note'; nItem.label = x.ss[i].label; if (nItem.label == "separator") { nItem = document.createElement("menuseparator"); } nItem.value = String(i); mItem = x.mObj.insertBefore(nItem , x.mObj.oMenu.lastChild); this.ss[i].sItemId = mItem.id; mItem.setAttribute('oncommand',x.ss[i].cmd); if("type" in x.ss[i]) mItem.setAttribute('type', x.ss[i].type); mItem.setAttribute('checked', x.ss[i].cek) mItem.setAttribute( 'autocheck',true) } x.mObj.getItem(); nItem = x.mObj.getItem(); nItem.id = 'Note'; this.separator = x.mObj.insertBefore( nItem , x.mObj.oMenu.lastChild); } this.init(this); //Стоп, при открытии настройки панелей.................................................... if (window.ToggleFindRun == 'stop') return; //Findbar, переклучить атрибут 'mini'(Findbar, set and remove attribute 'mini')........... //Findbar, установить и удалить 'hits'(Findbar, set and remove 'hits')........... function fmini(event){ //FindBar, auto find if (!gFindBar.hidden) { //Find gFindBar.onFindCommand(); } var findToolbar = document.getElementById("FindToolbar"); var HighBut = document.getAnonymousElementByAttribute( gFindBar, "anonid", "highlight"); if (custombuttons.getPrefs("FindBar.mini")) { //... var highlightBtn = document.getElementById('FindToolbar').getElement('highlight'); if (highlightBtn.checked) { gFindBar._findField.style.color = prefs.getCharPref("ui.textHighlightBackground"); highlightBtn.removeAttribute("checked"); }; findToolbar.setAttribute("mini", "true"); this.hits = ' '; var Rtext = custombuttons.getPrefs("FindBar.ClearButton") ? "Искать предыдущее" : "Очистить поле текстового ввода"; var text = "L = Искать следущее"+"\n" +"M = Поиск выделенного текста/из буфера" + "\n" + "R = " + Rtext; HighBut.setAttribute("tooltiptext", text ); } else { var highlightBtn = document.getElementById('FindToolbar').getElement('highlight'); findToolbar.removeAttribute("mini") this.hits = ' hits'; HighBut.setAttribute("tooltiptext", "Highlight"); //... if (!!gFindBar._findField.style.color) { highlightBtn.setAttribute("checked", "true"); gFindBar._findField.removeAttribute("style"); } } //Findbar, убрать фокус(Findbar, hide focus) _content.focus(); }; //Findbar, переклучить атрибут 'autohide'...... function Autohide(event){ var f = document.getElementById("FindToolbar"); custombuttons.getPrefs("FindBar.auto_Close") ? f.setAttribute("autohide", "true") : f.removeAttribute("autohide"); }; //Findbar, переклучить атрибут 'ClearButton'...... function ClearButton(event){ var ft = document.getElementById("FindToolbar"); custombuttons.getPrefs("FindBar.ClearButton") ? ft.setAttribute("ClearButton", "true") : ft.removeAttribute("ClearButton"); }; //Запускаем функции fmini(Run the function fmini) setTimeout(function() {fmini(event);Autohide(event);ClearButton(event);}, 200) //Изменить иконку кнопки................................................................. function ToggleImage(event){ // toggle button image if (custombuttonsUtils.getPrefs("FindBar.Highlight")) { this_.image="data:image/x-icon;base64,AAABAAEAExMAAAEAIAAYBgAAFgAAACgAAAATAAAAJgAAAAEAIAAAAAAA8AUAAAAAAAAAAAAAAAAAAAAAAAAAAAICAAAAADoHVOdAAWH/PQBd/TwAXP9AAWL/PwBf/z0AXv85AFn/MgBN/zEAS/85AFn/QgFj/zsAW/09AV7/OAdR5wAAAAAAAAACAAAAADsFWdtNAnr/TgF+/08Afv9PAH7/TwJ//0wAff9XD4T/azaN/1Emav8yAFD/RQNw/1ABgf9OAH3/TgB+/00Dev87BVnbAAAAADwIVudRAYH9VACK/1UEiv9UAYn/VACJ/1cEi/9MAIP/dzeh/+TV8P+olrH/LQBK/0sDdf9VAYj/VACJ/1QAif9UAIr/TwB9/ToHU+dEAWj/WAiM/loIkf9ZCZD/WQiP/1kIj/9dDJH/UQCI/4JAqf/68v//t6m+/zAAUP9OB3v/VwaM/1kIj/9ZCI//WgiR/1YIjP5DAmX/RQFo/V0Jlf9eB5r/XgiX/2AJnP9fCZn/Yw6b/1gAlP+DRq3/+PH+/7qsw/81AFr/UQmC/1wGlv9fCJn/XwiX/2AJmv9dCJb/RABp/UYDbf9eCJz/ZAih/2AIn/9jCaD/Ywqf/2QLnf9HAIP/aTKT/+fb8P+unLv/KABO/0gLc/9XC4r/XwmZ/18Lnv9hCaD/Xgic/0YDbv9IBnD/Yg2i/2cNqP9kDaX/Zg+n/2MHo/9dC5X/dT2Z/7ScxP/4+fv/0sbb/2g9hv9DC2n/RAVu/1QHif9hCKD/ZQuo/2INov9IBnD/SwVz/2YMqv9pDrD/aA+u/2kOrv9sGqf/p4HF/+Db5//Zy+X/yq7g/97O6//g2Oj/nH20/0sYdP9GCHT/XgeY/2gSrf9mDKr/SgVz/0oHd/9rELD/bA62/20QtP9jAa3/q3/O/+DY5/+vjsj/fziz/3wpuv+MRcT/wpvi/+jb8v+Ze7P/OABn/1MJiv9mEK7/aw+x/0oHd/9MCXz/cRW5/34nw/+AK8L/ikLE/+nZ9f+3o8b/YyKU/24Xr/9/J8T/dRy9/4Mzwv/TtOz/4Nfp/2M0if9cHYz/dSK3/3IYuP9MCXz/Twl+/4Arxf+SRdP/kEPQ/7eL4P/j1e7/hWSi/2kxmv+TT8r/lU/T/5VR0f+NQc3/sX3g/+PX7v+Vdqz/aDCU/4tCx/9/LcP/Twh+/1QSgf+QQtD/mkva/5JA1f+7i+X/2Mbp/4Bdnv9fKI3/hEG9/5NH1P+WS9j/jUHR/6t12//Yx+X/lHau/2svnv+US9P/j0HP/1QSgv9dIIn/lEbW/5tM3/+VRNv/s3zl/+7h+v+fgLn/WCeG/2w3nf+LR8P/kUXP/4I5wP+xitX/4dnp/49or/+BO7n/mUzc/5VG1v9cIIn/XyGM/5ZL2/+cUOX/mk/i/59V4//n0vv/2Mnl/4Zfqv9dL4v/ZCyV/3I3pf+NZLX/08ff/9fJ5f+CR7f/lUvV/51P5P+WS9v/XiGL/14gi/2aTeH/oVHr/6BR6P+bR+n/vIPu/+zb+v/h0ez/qYjD/4hjqP+ehLb/2dDi/+TX8P+pd9T/j0PV/55R5v+iUu3/mk3h/14gi/1kJZL/nU/n/qNU8v+gU+//pVbv/6FQ7/+3evH/3MP3//Pp/f/47///9ez//9vA9v+uceX/m0vj/6NU7v+iU+//plXy/5xP6P5iJJH/Wyt+55pR3/2mWPj/pVj3/6RY9/+nWvb/pVX1/6db9v+sZvf/rWn2/6xm9/+oXPb/pVb3/6ZZ+P+kWPf/plf3/6ZX+P+ZUN79Wyt+5wAAAABzQJ3bn1Ln/6JU9P+hV/X/oVb0/6NV9P+iV/X/olb1/6JV9P+iVfT/o1X0/6NW9P+iVfT/olX0/6NU9P+eUub/bj2W2wAAAAACAAICAAAAAGo9jeeBRa//fEOs/XxErf98RK3/fESt/3xErf98RK3/fESt/3xErf98RK3/fESt/3tDrP19RKv/az6K5wAAAAACAAICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=="; } else { this_.image="data:image/x-icon;base64,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"; } }; ToggleImage(event); //find bar сверху (move find bar to the top)................................................ XPCOMUtils.defineLazyGetter(window, "gFindBar", function() { let XULNS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"; let findbar = document.createElementNS(XULNS, "findbar"); findbar.setAttribute("browserid", "content"); findbar.id = "FindToolbar"; gBrowser.parentNode.insertBefore(findbar, gBrowser); // Force a style flush to ensure that our binding is attached. findbar.clientTop; window.gFindBarInitialized = true; return findbar; }); //find bar, показать количество совпадений(find bar,show the number of matches)...@author slimx................. (function() { //add label to findbar var status = document.getAnonymousElementByAttribute(gFindBar, 'anonid', 'match-case-status'); var sep = document.createElement("toolbarspacer"); var count = document.createElement("label"); count.hidden = true; status.parentNode.insertBefore(sep, status); status.parentNode.insertBefore(count, status);//findbar-container gFindBar.__proto__._foundMatches = count; gFindBar.__proto__._updateMatchesCount = function(aRes) { if (!this._updateMatchCountTimeout) window.clearTimeout(this._updateMatchCountTimeout); this._updateMatchCountTimeout = window.setTimeout(function(aRes, aSelf) { aSelf._updateMatchesCountWorker(aRes); }, 0, aRes, this); } gFindBar.__proto__._updateMatchesCountWorker = function(aRes) { var word = this._findField.value; if (aRes == this.nsITypeAheadFind.FIND_NOTFOUND || !word) { this._foundMatches.hidden = true; this._foundMatches.value = ""; } else { var matchesCount = this._countMatches(word).toString(); if (matchesCount != "0") { if (matchesCount == "1") this._foundMatches.value = matchesCount + hits; else if (matchesCount == "-1") { var matchLimit = 100; this._foundMatches.value = " \>"+ matchLimit + hits; // var key = (matchLimit > 1000) ? "Decrease" : "Increase"; } else this._foundMatches.value = matchesCount + hits; this._foundMatches.hidden = false; //Findbar, удалить атрибут 'red'(Findbar, remove attribute 'red').............. var findToolbar = document.getElementById("FindToolbar"); findToolbar.removeAttribute("red"); } else { this._foundMatches.hidden = true; this._foundMatches.value = ""; //Findbar, установить атрибут 'red'(Findbar, set attribute 'red')............... var findToolbar = document.getElementById("FindToolbar"); findToolbar.setAttribute("red", "true"); } window.clearTimeout(this._updateMatchCountTimeout); } } gFindBar.__proto__._countMatches = function(aWord, aWindow) { var win = aWindow || this.browser.contentWindow; var countFound = 0; for (var i = 0, count; win.frames && i < win.frames.length; i++) { if ((count = this._countMatches(aWord, win.frames[i])) != -1) countFound += count; else return count; } var doc = win.document; if (!doc || !(doc instanceof HTMLDocument)) return countFound; var body = doc.body; var count = body.childNodes.length; var searchRange = doc.createRange(); var startPt = doc.createRange(); var endPt = doc.createRange(); searchRange.setStart(body, 0); searchRange.setEnd(body, count); startPt.setStart(body, 0); startPt.setEnd(body, 0); endPt.setStart(body, count); endPt.setEnd(body, count); var retRange = null; var finder = Components.classes["@mozilla.org/embedcomp/rangefind;1"] .createInstance() .QueryInterface(Components.interfaces.nsIFind); finder.caseSensitive = this._shouldBeCaseSensitive(aWord); var matchLimit = 100; while ((retRange = finder.Find(aWord, searchRange, startPt, endPt))) { if (this._rangeIsVisible(retRange, win)) { if (this._findMode == this.FIND_LINKS) { if (this._rangeStartsInLink(retRange)) ++ countFound; } else ++ countFound; } if (countFound == matchLimit) { countFound = -1; break; } startPt = doc.createRange(); startPt.setStart(retRange.startContainer, retRange.startOffset + 1); } return countFound; } gFindBar.__proto__._rangeIsVisible = function(aRange, aWindow) { var node = aRange.startContainer; if (node.nodeType == node.ELEMENT_NODE) { if (node.hasChildNodes) { var childNode = node.childNodes[aRange.startOffset]; if (childNode) node = childNode; } } while (node && node.nodeType != node.ELEMENT_NODE) node = node.parentNode; // There is no perfect way to check if a node is visible in JavaScript, // so use the best measures we can have if (node) { var style = aWindow.getComputedStyle(node, ""); if (style) { if (style.visibility == "hidden" || style.visibility == "collapse" || style.display == "none") return false; if (style.left != "auto" && style.width != "auto") if (style.left < 0 && style.left + style.width < 0) return false; if (style.top != "auto" && style.height != "auto") if (style.top < 0 && style.top + style.height < 0) return false; } } return true; } gFindBar.__proto__._rangeStartsInLink = function(aRange) { var isInsideLink = false; var node = aRange.startContainer; if (node.nodeType == node.ELEMENT_NODE) { if (node.hasChildNodes) { var childNode = node.childNodes[aRange.startOffset]; if (childNode) node = childNode; } } const XLink_NS = "http://www.w3.org/1999/xlink"; do { if (node instanceof HTMLAnchorElement) { isInsideLink = node.hasAttribute("href");m break; } else if (typeof node.hasAttributeNS == "function" && node.hasAttributeNS(XLink_NS, "href")) { isInsideLink = (node.getAttributeNS(XLink_NS, "type") == "simple"); break; } node = node.parentNode; } while (node); return isInsideLink; } //insert count function to original eval("gFindBar._updateCaseSensitivity=" + gFindBar._updateCaseSensitivity.toString().slice(0, -1) + "this._updateMatchesCount();}"); eval("gFindBar._updateStatusUI=" + gFindBar._updateStatusUI.toString().slice(0, -1) + "this._updateMatchesCount();}"); })(); //FindBar, поиск колесиком мыши(FindBar, Mouse Scroll find )................................................ gFindBar.addEventListener('DOMMouseScroll', function (event){ //Найти (Find) gFindBar.onFindAgainCommand(event.detail < 0); }, false); //переключить 'Поиск на странице' двойным средним кликом на странице(toggle Find Bar, if Double midlle Click in page).......... //добавляем обработчик для обработки нажатие на кнопку мыши на странице....... gBrowser.addEventListener("mouseup", function(event){ //если нажатие на среднюю кнопку мыши if (event.button !== 1) return; //если разрешено в настройках(about:config) if (!custombuttons.getPrefs("FindBar.ToggleWithDoubleMiddleClick")) return; var _this = this; //если установлен флаг if (_this.open){ //переключить 'Поиск на странице' gFindBar.hidden ? gFindBar.onFindCommand() : gFindBar.close(); Find(event); gFindBar._findField.focus(); } //устанавливаем флаг _this.open = true; //сбросить флаг по таймеру this.timer = 0; this.timer = setTimeout(function(){ _this.open = false;}, 600); }, false); //Автоматически очищать поле текстового ввода на Findbar.................................................. gFindBar.addEventListener("DOMAttrModified", function(event){ var _this = this; //устанавливаем флаг if (gFindBar.hidden){_this.clear = true} //... if (!custombuttons.getPrefs("FindBar.autoclear")) 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); } }; //кнопка 'Highlight' на FindBar.mini всегда включена................................................................... var highlightBtn = document.getElementById('FindToolbar').getElement('highlight'); highlightBtn.addEventListener("mouseover", function(event){ if (custombuttons.getPrefs("FindBar.mini")) { highlightBtn.setAttribute("disabled", "false") } }, false); //Поиск по странице из буфера обмена/выделенный текст, если кликнуть средним кликом на findbar или на иконку поиска на FindBar mini ....... //переключить кнопку '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;} #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 (23-03-2012 20:16:26)
Отсутствует
bunda1
1. Кнопка очистить лишняя. ИМХО. Было бы логично совместить её с цифрой количества совпадений.
2. Средний клик в строке вставляет ещё одно слово, не происходит замещения.
3. Двойной клик в строке писка включает автовыделение, но повторный двойной клик автовыделение не отключает.
И включенное таким способом автовыделение не сохраняется при закрытие-открытие строки поиска. Просьба, если возможно, сделать чтобы включение автовыделения через строку поиска было бы полностью аналогичным через контекстное меню кнопки.
Отсутствует
voqabuhe
1. Т.е. ты предлагаешь пожертвовать очевидной для всех кнопкой переместив её в не очевидное место и всё это ради экономии ~20 пикселей в длину? По-моему, оно того не стоит.
2. Так надо кликать не на строку, а на кнопку поиска. Либо сначала двойной клик ЛКМ по полю, а потом уже СКМ.
3. Отменяет одинарный, а не двойной. И это во всё браузере так: хоть в адресной строке проверь.
4. Надо снять галку "Очищать поисковую форму", чтобы при повторном открытии панели - в ней остался предыдущий поисковой запрос.
mzfx
Отсутствует
iDev.Pi
1. Я предлагаю, если снять галку в меню кнопки Кнопка «очистить» на FindBar, то её функцию передавать на число совпадений, а не на лупу как сейчас. А на лупе оставить назад - вперёд.
2. В предыдущих версиях было сразу замещение при СКМ, что удобнее. ИМХО
3. У меня сейчас никакой не отменяет, а в предыдущих версиях кнопки очистка работала.
4. Запрос остаётся, не сохраняется автовыделение, включенное двойным кликом в строке поиска.
Отредактировано voqabuhe (23-03-2012 16:05:11)
Отсутствует
voqabuhe
1. я это понял, просто для пользователей это немного не очевидно: откуда они будут знать, что кликать надо не на лупу, а на число совпадений? оно даже не выглядит как кнопка + у лупы и так меняющийся функционал (и меняющееся содержимое подсказки) в зависимости от выставленных настроек, но совсем уж злоупотреблять этим не надо: люди будут путаться.
Тем более выигрыш, по-моему того просто не стоит: 20 пикселей в длину панели - погоды не делают. Я даже был за то, чтобы кнопки вперёд назад не скрывать, это bunda1 такой любитель минимализма, что я его не смог переубедить.
В конце концов - решать ему, так что я всего лишь своё мнение высказываю, ему мои доводы могут показаться не столь убедительными, а твоя идея может понравиться.
2. текущее поведение - просто имитирует общие правила работы лисы с текстовыми полями. Я бы скорей bunda1 попросил бы внести такое изменение: чтобы если в форму поиска что-то вписано, то достаточно было лишь одного ЛКМ клика чтобы выделить всё что там вписано: по аналогии с адресной строкой.
3. это какая-то поломка на твоей стороне, попробуй чистый профиль - с ним всё должно работать: отмена выделения одинарным кликом.
4. Я может тебя сейчас не очень правильно понимаю, но:
Там есть минимальный лимит символов: 2, т.е. если вписать только 1 символ - то выделяться не будет, а начиная с 2-ух символов у меня выделение найденного на странице остаётся при повторном открытии.
Если же ты говорил про выделение текста в самой поисковой форме - то при открытии у меня весь ранее введённый запрос является выделенным, если у тебя нет - это опять-таки глюк на твоей стороне.
Отредактировано iDev.Pi (23-03-2012 16:16:39)
mzfx
Отсутствует
iDev.Pi
1.У пользователя будет два варианта – очевидный и неочевидный, и инструкции никто не отменял. Я и предлагаю, чтобы лупа не меняла свой функционал, зачем лишний раз запутывать? А число совпадений можно сделать кнопкой, тогда будет заметней. Мне тоже минимализм больше нравится, тут я поддерживаю bunda1. И ещё кнопки надо привести к единому стилю, а то сейчас они вместе не смотрятся. ИМХО
4. Ты наверное про автовыделение, которое включается в меню кнопки? Это у меня работает и сохраняется. А если убрать галку в меню кнопки с Автовыделение и включать выделение двойным кликом в строке поиска, вот тогда оно при закрытие-открытие не сохраняется.
Отсутствует
1. Я уже предлагаю, если галка стоит на Кнопка «очистить» на FindBar, то оставить всё как есть. А если снять галку с Кнопка «очистить» на FindBar, то её функцию передавать на число совпадений, а не на лупу как сейчас. А на лупе оставить назад - вперёд.
4. Да знаю. Заработала только после установки предыдущее версии, а потом редактировал до последней.
Короче проверил, всё также как и на основном профиле.
Отсутствует
1. А, я теперь только понял что ты предлагаешь. Ты не учёл возможное состояние, когда в поле вбито что-то, но на странице этого не найдено - в таком случае счётчик найденного не виден, если ты предлагаешь его показывать всегда - ты против минимализма, т.к. я то думал ты предлагаешь сократить панель целиком удалив кнопку найти, а оказывается ты наоборот предлагаешь увеличить панель.
4. У нас с тобой ОС разные, может в этом дело.
mzfx
Отсутствует
1. Да, состояние когда нет вариантов я не учёл. Я не предлагал удалить кнопку найти, мне просто нравится больше вариант без кнопки Очистить, вот и хочу, чтобы его немного доработали. Тогда можно, если Кнопка «очистить» на FindBar отключена, повесить на лупу следующее: ЛКМ-ПКМ (вперёд-назад), а СКМ – очистить, так даже ещё удобней будет, не надо никуда дёргаться. ИМХО. А чтобы увеличивалась панель, я наоборот не хочу.
Отсутствует
А число совпадений можно сделать кнопкой, тогда будет заметней.
Нет, это трудно для меня и не очевидно для других.
И ещё кнопки надо привести к единому стилю, а то сейчас они вместе не смотрятся. ИМХО
Согласен, найду нормальную кнопку «очистить» и заменю.
Средний клик в строке вставляет ещё одно слово, не происходит замещения.
Это же стандартная возможность браузера, если middlemouse.paste -true. Мне кажется это удобно и привычно, как уже писал iDev.Pi можно просто кликнуть СКМ на кнопку поиска.
Двойной клик в строке поиска включает автовыделение, но повторный двойной клик автовыделение не отключает.
И выключенное таким способом автовыделение не сохраняется при закрытие-открытие строки поиска. Просьба, если возможно, сделать чтобы включение автовыделения через строку поиска было бы полностью аналогичным через контекстное меню кнопки.
1. Двойной клик в строке поиска включает и выключает не автовыделение а обычную подсветку текста из панели поиска, тоже самое делает обычная кнопка Highlight на на обычном панели поиска и эта подсветка сама отключается при переключение табов или обновление страницы и так далее. Это не связано с автовыделением.
2. Переключать автовыделения двойным кликом в строке поиска - хорошо я сделаю это, но не по умолчанию, это надо будет включать через about:config
Я бы скорей bunda1 попросил бы внести такое изменение: чтобы если в форму поиска что-то вписано, то достаточно было лишь одного ЛКМ клика чтобы выделить всё что там вписано: по аналогии с адресной строкой.
Хорошая идея, я это обязательно сделаю.
Отредактировано bunda1 (23-03-2012 19:33:30)
Отсутствует
Сейчас он просто кликает СКМ по лупе и старый запрос заменяется новым, а так как он будет это делать?
Если строка пустая, то СКМ непосредственно в неё, а если занята, то на цифры или на чекбокс изменения регистра.
Добавлено 23-03-2012 19:32:21
1. Двойной клик в строке поиска включает и выключает не автовыделение а обычную подсветку текста из панели поиска
Пусть так, но как быть с тем, что в последней версии двойной клик её у меня не отключает?
Отредактировано voqabuhe (23-03-2012 19:32:21)
Отсутствует
2. Переключать автовыделения двойным кликом в строке поиска - хорошо я сделаю это, но не по умолчанию, это надо будет включать через about:config
Спасибо, а через меню кнопки нельзя?
Отсутствует
Пусть так, но как быть с тем, что в последней версии двойной клик её у меня не отключает?
Не знаю, посмотри что пишет консоль ошибок, когда двойной клик не отключает.
Добавлено 23-03-2012 19:44:26
Спасибо, а через меню кнопки нельзя?
Можно, но как будет называться пункт меню, вот в чем вопрос.
Добавлено 23-03-2012 19:47:34
Если строка пустая, то СКМ непосредственно в неё, а если занята, то на цифры или на чекбокс изменения регистра.
Да с этим СКМ на строке только проблемы, конфликтует с другими CB кнопками.
Отредактировано bunda1 (23-03-2012 19:47:34)
Отсутствует
Можно, но как будет называться пункт меню, вот в чем вопрос.
Да это вообще не вопрос, сообща чего-нибудь родим. Да так и назвать как есть Автовыделение двойным кликом.
Добавлено 23-03-2012 20:01:33
Да с этим СКМ на строке только проблемы, конфликтует с другими CB кнопками.
Так когда строка пустая, то проблем вроде нет? А вообще хватит возможности кликать по цифрам и чекбоксу.
Добавлено 23-03-2012 20:04:07
Не знаю, посмотри что пишет консоль ошибок, когда двойной клик не отключает.
Метка времени: 23.03.2012 20:03:01
Ошибка: prefs is not defined
Источник: chrome://custombuttons-context/content/button.js?windowId=Firefox&id=custombuttons-button48@init
Строка: 759
Добавлено 23-03-2012 20:10:48
bunda1
Кстати, это случилось в последних версиях. Например, в той, что в посте №2, выделение отключается.
Отредактировано voqabuhe (23-03-2012 20:10:48)
Отсутствует
Ошибка: prefs is not defined
Источник: chrome://custombuttons-context/content/button.js?windowId=Firefox&id=custombuttons-button48@init
Строка: 759
Ну тогда понятно.
Код экспериментальной кнопки Toggle Find+3- для инициализации:
//настройка функций кликов мыши(Mouse Click settings)................................................... this.onclick = function(event) { if(event.button == 0) { // Действие при клике ЛКМ gFindBar.hidden ? gFindBar.onFindCommand() : gFindBar.close(); Find(event); } else if(event.button == 1) { // Действие при клике СКМ gFindBar.hidden ? gFindBar.onFindCommand() : gFindBar.close();с goDoCommand("cmd_selectNone"); goDoCommand("cmd_paste"); } }; //Объявляем ..... var prefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService); var clipboard = Components.classes["@mozilla.org/widget/clipboardhelper;1"]. getService(Components.interfaces.nsIClipboardHelper); var this_ = this; var AutoHighlight ='Автовыделение' var AutoClose ='Автоматически закрыть' var CloseTimer ='Закрыть через ' var ClearPref ='Сбросить текст' //подсказка............................................................................. this.showTFinfo = function() { //getting prefs Unicode value var prefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService); var Val = "\n\n"+ AutoHighlight +": "+ prefs.getComplexValue("FindBar.Highlight.value",Components.interfaces.nsISupportsString).data; //обрезать подсказку для "Автовыделение" var HValue = Val.substring(0,50); var HDots =(Val.length > 50) ? '....' : ""; //.... this.tooltipText = "Поиск по странице" +"\n" + "Л: Показать - скрыть поиск по странице" +"\n" +"С: Поиск по странице из буфера обмена" +"\n"+ "П: Mеню + CB меню" + HValue + HDots; } this.setAttribute("onmouseover", "this.showTFinfo()"); //справка(Help) //this.setAttribute("Help", "event.stopPropagation(); gBrowser.selectedTab = gBrowser.addTab('https://forum.mozilla-russia.org/viewtopic.php?pid=550855#p550855]09-03-2012 19:18:31')"); //проверить наличие строк в about:config и создать если не существует(Add preferences)........................................ if (custombuttons.getPrefs("FindBar.version") !== '8') { prefs.setCharPref("FindBar.version", "8"); prefs.setBoolPref("FindBar.Highlight", true); prefs.setCharPref("FindBar.Highlight.value", "??????"); prefs.setBoolPref("FindBar.autoclear", false); prefs.setBoolPref("FindBar.contextFindWords", true); prefs.setBoolPref("FindBar.ToggleWithDoubleMiddleClick", false); prefs.setCharPref("ui.textHighlightBackground", "#ef0fff");//http://coloria.net/bonus/colornames.htm //prefs.setCharPref("ui.textHighlightForeground", "#000000");//http://coloria.net/bonus/colornames.htm prefs.setBoolPref("FindBar.mini", false); prefs.setBoolPref("FindBar.ClearButton", false); prefs.setBoolPref("FindBar.auto_Close", false); prefs.setCharPref("FindBar.CloseTimer", "7");//7 сек(7 sec) prefs.setCharPref("FindBar.AutohighlightNum", "1"); }; //настройка меню(CB menu settings)................................................... //Объявляем ..... var c ='true'; var n = 'false'; //изменить нужный пункт меню(toggle menuitems) //переключаем настройки в about:config(toggle preference) this.CBlabel = function (mi, id) { //Автоматически закрыть(FB auto close).... if(!id || id == "FBClose") { //переключаем настройки в about:config s = "FindBar.auto_Close"; togglePref(s); //Запускаем функцию autohide if (id) Autohide(event); //изменить нужный пункт меню var cek = (custombuttons.getPrefs(s)? c: n); this.FBCcek = cek; if(mi) mi.cek = cek; }; //FB auto close timer..... if(!id || id == "CloseTimer") { (function () { //Стоп, при инициализации кнопки if (!id) return; s = "FindBar.CloseTimer"; //switch auto close timer+"\n" + var URL = custombuttons.promptBox(AutoClose, CloseTimer+custombuttons.getPrefs(s) + ' секунд', ''); if (URL[0] == false) return; else var timer = [URL[1]]; //переключаем настройки в about:config(toggle preference) prefs.setCharPref(s, timer); })(); //пункт меню(menuitems) var label = CloseTimer + custombuttons.getPrefs("FindBar.CloseTimer") + ' секунд'; this.CloseTimer = label; if(mi) mi.label = label; }; //FindBar.mini...... if(!id || id == "FBmini") { //переключаем настройки в about:config s = "FindBar.mini"; togglePref(s); //Запускаем функцию fmini(run fmini) if (id) fmini(event); //изменить нужный пункт меню var cek = (custombuttons.getPrefs(s)? c : n); this.FBcek = cek; if(mi) mi.cek = cek; }; //Кнопка 'очистить'...... if(!id || id == "FBbutt") { //переключаем настройки в about:config s = "FindBar.ClearButton"; togglePref(s); //Запускаем функции ClearButton и fmini(run ClearButton, fmini) if (id) ClearButton(event); if (id) fmini(event); //изменить нужный пункт меню var cek = (custombuttons.getPrefs(s)? c : n); this.FCBcek = cek; if(mi) mi.cek = cek; }; //Find в контекстном меню(Find in the context menu)..... if(!id || id == "FindInMenu") { // переключаем настройки в about:config s = "FindBar.contextFindWords"; togglePref(s); //изменить нужный пункт меню var cek = (custombuttons.getPrefs(s)? c : n); this.FIMcek = cek; if(mi) mi.cek = cek; }; //Автоматически очищать поле текстового ввода на Findbar..... if(!id || id == "autoClear") { // переключаем настройки в about:config s = "FindBar.autoclear"; togglePref(s); //Очищистить поле текстового ввода если Findbar закрыт. if (gFindBar.hidden && custombuttons.getPrefs("FindBar.autoclear")) gFindBar._findField.reset(); //изменить нужный пункт меню var cek = (custombuttons.getPrefs(s)? c : n); this.aCcek = cek; if(mi) mi.cek = cek; }; //Переключить двойным средним кликом(Toggle with double middle click)..... if(!id || id == "MiddleClick") { // переключаем настройки в about:config s = "FindBar.ToggleWithDoubleMiddleClick"; togglePref(s); //изменить нужный пункт меню var cek = (custombuttons.getPrefs(s)? c : n); this.MCcek = cek; if(mi) mi.cek = cek; }; //Автовыделение(Switch, Auto Highlight)..... if(!id || id == "SwitchHighlight") { // переключаем настройки в about:config s = "FindBar.Highlight"; togglePref(s); //Изменить иконку кнопки if (id) ToggleImage(event); //переключить кнопку 'Highlight'(toggle Highlight) if (id) document.getElementById('FindToolbar').getElement('highlight').removeAttribute("checked"); //Запускаем функцию Highlight(run function Highlight) if (id) Highlight(event); //изменить нужный пункт меню(toggle menuitems) var cek = (custombuttons.getPrefs(s)? c : n); this.aHcek = cek; if(mi) mi.cek = cek; }; //Изменить цвет для Автовыделение..... if(!id || id == "addColor") { (function () { //Стоп, при инициализации кнопки if (!id) return; //создаем модальное окно для ввода цвета var URL = custombuttons.promptBox('Изменить цвет для Автовыделение', 'По умолчанию: #ef0fff', ''); if (URL[0] == false) return; else var color = [URL[1]]; //переключаем настройки в about:config(toggle preference) prefs.setCharPref("ui.textHighlightBackground", color); })(); //пункт меню(menuitems) var label = 'Изменить цвет' + ': ' + custombuttons.getPrefs("ui.textHighlightBackground"); this.addColor = label; if(mi) mi.label = label; }; //Автовыделение, добавить текст....... if(!id || id == "AddText") { //Запускаем функцию HighlightAdd(run function HighlightAdd) if (id) HighlightAdd(event); }; //Автовыделение, сбросить ..... if(!id || id == "Clear") { //сбросить настройки в about:config if (id) prefs.setCharPref("FindBar.Highlight.value", ""); //Запускаем функцию Highlight(run function Highlight) if (id) Highlight(event); //всплывающая подсказка if (id) custombuttons.alertSlide(ClearPref,'????'); }; //переключаем настройки в about:config(toggle preference).... function togglePref(s){ //Стоп, при инициализации кнопки if (!id) return; //переключаем настройки custombuttons.setPrefs(s, !custombuttons.getPrefs(s)); } }; //Запускаем функцию CBlabel(run CBlabel)......... this.CBlabel(); //пункти меню(Our menu items) .... this.ss = [ { cek: this.FBCcek, label: AutoClose, cmd: 'document.popupNode.CBlabel(this, "FBClose")', sItemId: '', type:'checkbox'}, { label: this.CloseTimer, cmd: 'document.popupNode.CBlabel(this, "CloseTimer")', sItemId: ''}, { label: "separator", sItemId: ''}, { cek: this.FBcek, label: 'FindBar мини', cmd: 'document.popupNode.CBlabel(this, "FBmini")', sItemId: '', type:'checkbox'}, { cek: this.FCBcek, label: 'Кнопка "очистить" на FindBar', cmd: 'document.popupNode.CBlabel(this, "FBbutt")', sItemId: '', type:'checkbox'}, { label: "separator", sItemId: ''}, { cek: this.FIMcek, label: 'Find в контекстном меню', cmd: 'document.popupNode.CBlabel(this, "FindInMenu")', sItemId:'', type:'checkbox'}, { cek: this.aCcek, label: 'Очищать поисковую форму', cmd: 'document.popupNode.CBlabel(this, "autoClear")', sItemId:'', type:'checkbox'}, { cek: this.MCcek, label: 'Переключать двойным средним кликом', cmd: 'document.popupNode.CBlabel(this, "MiddleClick")', sItemId:'', type:'checkbox'}, { label: "separator", sItemId: ''}, { cek: this.aHcek, label: AutoHighlight, cmd: 'document.popupNode.CBlabel(this, "SwitchHighlight")', sItemId: '', type:'checkbox'}, { label: this.addColor, cmd: 'document.popupNode.CBlabel(this, "addColor")', sItemId: ''}, { label: 'Добавить текст', cmd: 'document.popupNode.CBlabel(this, "AddText")', sItemId: ''}, { label: ClearPref, cmd: 'document.popupNode.CBlabel(this, "Clear")', sItemId: ''}]; // Our Initialization function for creating the context menu, setting up menuitems and telling var Cb = custombuttons; this.mObj = Cb.getCbContextObj(this); this.init = function(x) { x.mObj.setSub(); var nItem = {}, mItem = {}; document.getElementById(CB2const.sCBCtxtMenu).setAttribute("oncommand", "event.stopPropagation()"); for(var i in x.ss) { nItem = new x.mObj.getItem(); nItem.id = 'Note'; nItem.label = x.ss[i].label; if (nItem.label == "separator") { nItem = document.createElement("menuseparator"); } nItem.value = String(i); mItem = x.mObj.insertBefore(nItem , x.mObj.oMenu.lastChild); this.ss[i].sItemId = mItem.id; mItem.setAttribute('oncommand',x.ss[i].cmd); if("type" in x.ss[i]) mItem.setAttribute('type', x.ss[i].type); mItem.setAttribute('checked', x.ss[i].cek) mItem.setAttribute( 'autocheck',true) } x.mObj.getItem(); nItem = x.mObj.getItem(); nItem.id = 'Note'; this.separator = x.mObj.insertBefore( nItem , x.mObj.oMenu.lastChild); } this.init(this); //Стоп, при открытии настройки панелей.................................................... if (window.ToggleFindRun == 'stop') return; //Findbar, переклучить атрибут 'mini'(Findbar, set and remove attribute 'mini')........... //Findbar, установить и удалить 'hits'(Findbar, set and remove 'hits')........... function fmini(event){ //FindBar, auto find if (!gFindBar.hidden) { //Find gFindBar.onFindCommand(); } var findToolbar = document.getElementById("FindToolbar"); var HighBut = document.getAnonymousElementByAttribute( gFindBar, "anonid", "highlight"); if (custombuttons.getPrefs("FindBar.mini")) { //... var highlightBtn = document.getElementById('FindToolbar').getElement('highlight'); if (highlightBtn.checked) { gFindBar._findField.style.color = prefs.getCharPref("ui.textHighlightBackground"); highlightBtn.removeAttribute("checked"); }; findToolbar.setAttribute("mini", "true"); this.hits = ' '; var Rtext = custombuttons.getPrefs("FindBar.ClearButton") ? "Искать предыдущее" : "Очистить поле текстового ввода"; var text = "L = Искать следущее"+"\n" +"M = Поиск выделенного текста/из буфера" + "\n" + "R = " + Rtext; HighBut.setAttribute("tooltiptext", text ); } else { var highlightBtn = document.getElementById('FindToolbar').getElement('highlight'); findToolbar.removeAttribute("mini") this.hits = ' hits'; HighBut.setAttribute("tooltiptext", "Highlight"); //... if (!!gFindBar._findField.style.color) { highlightBtn.setAttribute("checked", "true"); gFindBar._findField.removeAttribute("style"); } } //Findbar, убрать фокус(Findbar, hide focus) _content.focus(); }; //Findbar, переклучить атрибут 'autohide'...... function Autohide(event){ var f = document.getElementById("FindToolbar"); custombuttons.getPrefs("FindBar.auto_Close") ? f.setAttribute("autohide", "true") : f.removeAttribute("autohide"); }; //Findbar, переклучить атрибут 'ClearButton'...... function ClearButton(event){ var ft = document.getElementById("FindToolbar"); custombuttons.getPrefs("FindBar.ClearButton") ? ft.setAttribute("ClearButton", "true") : ft.removeAttribute("ClearButton"); }; //Запускаем функции fmini(Run the function fmini) setTimeout(function() {fmini(event);Autohide(event);ClearButton(event);}, 200) //Изменить иконку кнопки................................................................. function ToggleImage(event){ // toggle button image if (custombuttonsUtils.getPrefs("FindBar.Highlight")) { this_.image="data:image/x-icon;base64,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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); } }; //кнопка 'Highlight' на FindBar.mini всегда включена................................................................... var highlightBtn = document.getElementById('FindToolbar').getElement('highlight'); highlightBtn.addEventListener("mouseover", function(event){ if (custombuttons.getPrefs("FindBar.mini")) { highlightBtn.setAttribute("disabled", "false") } }, false); //Поиск по странице из буфера обмена/выделенный текст, если кликнуть средним кликом на findbar или на иконку поиска на FindBar mini ....... //переключить кнопку '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;} #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
у меня тут новая идея появилась, скажи как она тебе?
То что сейчас есть настройка - очищать поисковую форму при закрытии панели - это отлично, но часто надо однократно совершить обратное действие: т.е. я люблю когда панель у меня в общем случае открывается чистой, но иногда хочется открыть её с предыдущим запросом. Т.е. единоразово открыть её с предыдущим запросом.
Или наоборот - кто-то любит чтоб всегда оставался предыдущий запрос при открытии панели поиска, но иногда хочет открыть её намеренно пустой. Однократно.
Так вот у меня родилась идея: добавить хоткей типа CTRL+ALT+F или CTRL+SHIFT+F для открытия панели альтернативным способом. Т.е. он будет делать "обратное" от выставленного в настройках действие: если стоит галка "очищать поисковую форму" - с этим хоткеем она откроется с предыдущим запросом, если галка у этой настройки снята - то с этим хоткеем панель откроется пустой.
м?
mzfx
Отсутствует
Так вот у меня родилась идея: добавить хоткей типа CTRL+ALT+F или CTRL+SHIFT+F для открытия панели альтернативным способом. Т.е. он будет делать "обратное" от выставленного в настройках действие: если стоит галка "очищать поисковую форму" - с этим хоткеем она откроется с предыдущим запросом, если галка у этой настройки снята - то с этим хоткеем панель откроется пустой.
Хорошо, это легко.
Отсутствует