bunda1 пишет:
Если кликнуть средним кликом на Findbar или FindBar mini, то текст в поле текстового ввода на Findbar будет заманен текстом из буфера или на выделенный текст, не надо удалять текст который уже есть в поле текстового ввода мой код заменяет его и выделенный текст на странице искать удобно. Но можно нажимать на кнопку поиска на FindBar mini средним кликом.
так ты попробуй кликнуть прям в текстовое поле - срабатывает так же, а значит и отступ не нужен.
При СКМ в текстовое поле не происходит замены текста из буфера, поэтому я тоже считаю, что отступ слева нужен, но не такой большой и можно по цифре кликать.
Проверил на чистом профиле, действительно замещает. Видно с чем-то конфликтует, подозреваю с Autocopy+3, но не проверял.
Отредактировано mserv (13-03-2012 00:28:31)
Отсутствует
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,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); //Очистить поле текстового ввода на 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)
Отсутствует
новый баг в последней версии: не всегда при открытии файндбара он берёт фокус на себя. Иногда он открывается без фокуса.
У меня нет. Что ты нажимал.
Ещё одна вылезла. Вставляем СКМ слово, очищаем текстовое поле, вставляем это же слово из буфера повторно, получаем сразу два слова.
Это я не удачно питался заблокировать Autocopy+3 и middlemouse.paste для поле текстового ввода на Findbar. Может поиск по странице из буфера обмена запускать средним кликом только на кнопку поиска на FindBar mini или на Findbar?
Отсутствует
Что ты нажимал.
я выяснил STR к багу:
0. включить настройку "Очищать поле текстового ввода"
1. ctrl+f - панель откроется.
2. вписать что-то.
3. ctrl+f - панель закроется.
4. ctrl+f - панель открывается, но уже без фокуса в ней.
mzfx
Отсутствует
Ого. Да это уже фактически серьезное дополнение. Спс автору.
Могу подкинуть идею. Сделать поле скролируемым. Т.е. наводишь мыша на поле и крутишь колесо. Если текст большой происходит прокрутка. Можно попопробовать сделать это стилем через overflow (сам элемент скрол, полосу скрыть стилем).
И еще если возможно поле ресайзящимся, тоже сиилем через resize.
Добавлено 16-03-2012 10:34:35
Былобы отлично запихнуть кнопку в jetpack
Отредактировано Mr.Rik (16-03-2012 10:34:35)
Удачи, котик.
Отсутствует
Могу подкинуть идею. Сделать поле скролируемым. Т.е. наводишь мыша на поле и крутишь колесо. Если текст большой происходит прокрутка. Можно попопробовать сделать это стилем через overflow (сам элемент скрол, полосу скрыть стилем).
Можно скролить лупу
Добавлено 16-03-2012 16:21:54
Может поиск по странице из буфера обмена запускать средним кликом только на кнопку поиска на FindBar mini или на Findbar?
Да без проблем, я и не знал о другой возможности, пока iDev.Pi не указал. Просто раз нашёл баг, то и решил сообщить.
Отредактировано mserv (16-03-2012 16:21:54)
Отсутствует
Баги:
3. Невозможно пользоваться mini на девайсах без колеса прокрутки.
Теперь L=Назад(back) R= Вперёд(Forward) на лупе если в настройках включена Кнопка - очистить
Мне бы хотелось, чтобы это можно было настройкой, т.е. чтобы я мог отключить эту функцию и было так:
1. выделить на странице какое-то слово
2. нажать ctrl+F
то будет такой результат:
файндбар открывается ЧИСТЫМ.
Я сделал.
в общем ладно, хрен с моим стилем - я тогда прошу тебя внести в свой стиль некоторые изменения:
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';
Отсутствует
Теперь L=Назад(back) R= Вперёд(Forward) на лупе если в настройках включена Кнопка - очистить
Спасибо, это конечно работает, но если честно, вся эта экономии нескольких пикселей не стоит тех ухищрений, на которые пришлось пойти.
Тем не менее, такой вариант меня удовлетворяет.
переделать кнопку из background: url("base64_image") в list-style-image: url("base64_image"); -moz-image-region: auto; чтобы она выглядела по-человечески, особенно при наведении на неё курсором
Я сделал.
Странно, у меня в стиле после этого кнопка выглядит как кнопка, а у тебя даже после исправления - как фоновая картинка: при наведении на кнопку почему-то не появляется свойственная всем кнопкам рамочка. Попозже посмотрю в чём там дело.
Мне бы хотелось, чтобы это можно было настройкой, т.е. чтобы я мог отключить эту функцию и было так:
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
Отсутствует
Странно, у меня в стиле после этого кнопка выглядит как кнопка, а у тебя даже после исправления - как фоновая картинка: при наведении на кнопку почему-то не появляется свойственная всем кнопкам рамочка. Попозже посмотрю в чём там дело.
Очень хорошо.
Очень непонятно из названий некоторых настроек то, что они делают.
Да согласен, и потому думаю позже сделать подробное описание настроек кнопки в 09-03-2012 19:18:31
Проблема ещё в том, что кратко объяснить что они делают - тоже тяжело, возможно стоит добавить подсказки при наведении на них?
Мысль хорошая, но для этого есть описание кнопки где это все будет более подробно и если честно не хочется загромождать код кнопки. За подсказки спасыбо, использую их при описание настроек кнопки.
"Очищать поле текстового ввода" переименовать в "Очищать поисковую форму"
ok
"Автовыделение" - "Автоматически подсвечивать найденное"
ok
Баги:
2. Auto Highlight иногда начинает подсвечивать искомые слова на странице даже если панель поиска уже закрыта.
3. Иногда файндбар открывается не перенимая на себя фокус.
У меня не наблюдается.
Отсутствует
Мысль хорошая, но для этого есть описание кнопки где это все будет более подробно и если честно не хочется загромождать код кнопки. За подсказки спасыбо, использую их при описание настроек кнопки.
Ок, особенно если потом это всё осядет в разделе "help" у кнопки.
iDev.Pi пишет3. Иногда файндбар открывается не перенимая на себя фокус.
У меня не наблюдается.
Я уже писал STR:
я выяснил STR к багу:
0. включить настройку "Очищать поле текстового ввода"
1. ctrl+f - панель откроется.
2. вписать что-то.
3. ctrl+f - панель закроется.
4. ctrl+f - панель открывается, но уже без фокуса в ней.
у тебя и после выполнения этих шагов баг не воспроизводится?
просто у меня он воспроизводится стабильно, и в предыдущей версии тоже был.
надо тогда собирать дальше информацию: у меня , а у тебя? (неужто старый 3.6?)
iDev.Pi пишет2. Auto Highlight иногда начинает подсвечивать искомые слова на странице даже если панель поиска уже закрыта.
У меня не наблюдается.
Баг происходит не всегда. Попробую и для него STR вычислить.
Странно, у меня в стиле после этого кнопка выглядит как кнопка, а у тебя даже после исправления - как фоновая картинка: при наведении на кнопку почему-то не появляется свойственная всем кнопкам рамочка. Попозже посмотрю в чём там дело.
Ничего не трогал и у меня сам собой исчез этот баг. Магия какая-то :-/
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
Отсутствует
0. включить настройку "Очищать поле текстового ввода"
1. ctrl+f - панель откроется.
2. вписать что-то.
3. ctrl+f - панель закроется.
4. ctrl+f - панель открывается, но уже без фокуса в ней.
у тебя и после выполнения этих шагов баг не воспроизводится?
просто у меня он воспроизводится стабильно, и в предыдущей версии тоже был.
надо тогда собирать дальше информацию: у меня , а у тебя? (неужто старый 3.6?)
Да есть такой баг, буду исправлять. Кнопку я обычно проверяю на nightly но тут наверно что то напутал.
Или ещё и обесцветив её, что мне больше нравится. Вот код для обесцвечивания + полупрозрачности:
ok
Ок, особенно если потом это всё осядет в разделе "help" у кнопки.
ok
Добавлено 21-03-2012 23:19:09
Иногда файндбар открывается не перенимая на себя фокус.
Исправил.
//настройка функций кликов мыши(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,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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(); 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)
Отсутствует
Исправил.
Подтверждаю.
p.s.: добавь всё-таки
к неактивной кнопке, так лучше выглядит.
mzfx
Отсутствует
[
p.s.: добавь всё-такик неактивной кнопке, так лучше выглядит.
Нет, на кнопке можно нажимать СКМ, а прозрачная кнопка водит в заблуждение.
Отредактировано bunda1 (21-03-2012 23:36:15)
Отсутствует
Я пожалуй сформулирую ещё один баг, хотя ты, скорей всего, не согласишься со мной, что это баг:
Твоя кнопка всегда выполняет действие "найти", т.е. совсем всегда, даже когда пользователь этого не ожидает.
Такое поведение приносит некий дискомфорт:
Случай 1.
Если ты что-то искал на одной странице и не закрыл за собой панель поиска (т.к. ты надеешься, что он сам закроется по истечению таймера), то ты вовсе не ожидаешь, что переключившись на другую вкладку, страница автоматически прокрутится докуда-то донизу, т.к. при переключении вкладки - панель поиска выполнит действие "найти", и найденный на странице поисковый запрос может оказаться где-то внизу, а потому и страница будет прокручена до того момента.
Случай 2.
Открывая-закрывая панель (если не включена настройка "Очищать поисковую форму") - при каждом повторном открытии происходит переход к следующему найденному на странице варианту, а не будь этого бага - я бы даже и не заметил тот:
1. Иногда искомое может измениться с верхнего на нижний регистр (и наоборот). Подробности в отдельном сообщении.
Добавлено 21-03-2012 23:47:02
Нет, на кнопке можно нажимать СКМ, а прозрачная кнопка водит в заблуждение.
так она неактивна только тогда, когда в поисковую форму ничего не вписано, а значит СКМ можно кликать прям на эту текстовую форму.
Ну да ладно, это мелочь на самом деле. Тем более, что себе-то я эту строку дописал
Отредактировано iDev.Pi (21-03-2012 23:47:11)
mzfx
Отсутствует
Если ты что-то искал на одной странице и не закрыл за собой панель поиска (т.к. ты надеешься, что он сам закроется по истечению таймера), то ты вовсе не ожидаешь, что переключившись на другую вкладку, страница автоматически прокрутится докуда-то донизу, т.к. при переключении вкладки - панель поиска выполнит действие "найти", и найденный на странице поисковый запрос может оказаться где-то внизу, а потому и страница будет прокручена до того момента.
Это же галимый баг, но у меня не наблюдается.
Открывая-закрывая панель (если не включена настройка "Очищать поисковую форму") - при каждом повторном открытии происходит переход к следующему найденному на странице варианту, а не будь этого бага - я бы даже и не заметил тот:
Так задумано но я попробую исправить.
так она неактивна только тогда, когда в поисковую форму ничего не вписано, а значит СКМ можно кликать прям на эту текстовую форму.
Ну да ладно, это мелочь на самом деле. Тем более, что себе-то я эту строку дописал
Как дабавыть рамку к неактывной?
Отсутствует
Как дабавыть рамку к неактывной?
так у неактивной не должно быть рамки. Я даже не знаю код для добавления рамки, т.к. он где-то внутри лисы прописан. В ДОМи глянул - между состояниями обычным и :hover - разница лишь в цвете рамки (в обычном состоянии - она прозрачная). Попробовал выставить ей цвет через stylish - никакого результата. То ли рестарт просто нужен, то ли - я даже не знаю в чём дело.
mzfx
Отсутствует
Если ты что-то искал на одной странице и не закрыл за собой панель поиска (т.к. ты надеешься, что он сам закроется по истечению таймера), то ты вовсе не ожидаешь, что переключившись на другую вкладку, страница автоматически прокрутится докуда-то донизу, т.к. при переключении вкладки - панель поиска выполнит действие "найти", и найденный на странице поисковый запрос может оказаться где-то внизу, а потому и страница будет прокручена до того момента.
У меня не наблюдается, нужен пример.
Отсутствует
bunda1
хм, и правда бага такого нет. Описал ситуацию не проверив.
Однако поиск всё равно всегда выполняется: если включить таймер закрытия панели, открыть панель поиска, ввести что-то в поиск и начать постоянное переключение между вкладками - поиск не закроется никогда, хотя фактически пользователь уже давно ничего не ищет, а занят другими делами (чтением разных страниц).
mzfx
Отсутствует
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,iVBORw0KGgoAAAANSUhEUgAAABEAAAAYCAYAAAAcYhYyAAAACGFjVEwAAAAFAAAAATaqf/YAAAAaZmNUTAAAAAAAAAARAAAAGAAAAAAAAAAAAC0D6AAAx8/q3wAAAUdJREFUeNrMlEtqg1AUhu/D1lhfCZYuQMFpyBKylWTiVNyBGxAycjcuQRw4d1wqtIpQmtTbc9Im2Jn3ZtD+cLgP/D/+e4TDCShNUwuWh6ZpdFgXc2q73Rq73U4riuKDJkniLEBxHNue5zEyU23bjlmW9e8gGgTBsqqqpWmaCBjIfJnDMIzr9fqVwsEVQjzC+kbk5VJKX7Sfg4A6KUDQRy6QEepTATJOIeJycWuS8V8kEZcLFQibHv4Ucn5OXdc8z3MmS4iiiE97QgzDUE3zDeGcE8uypM3ou0J0XReu60pD0PcrCUDETUlgDCglQd8VwhjDnkgnQR/qPE+6rjNt236WhfR9/+Q4zqBN3qbcExaGIT0ej7hfSTJW6EM/3+/392VZss1mcwe/zMR+zSlogXY4HE6+758TEJz4OLCxP3MLv0cf+r8EGAA3DWn813ih8QAAABpmY1RMAAAAAQAAABEAAAAYAAAAAAAAAAAALQPoAABcvAALAAABXGZkQVQAAAACeNqslM1qg0AQx3dVokHRphJoIfQjgj36DDn4Ip68iQTyAHmB4M238Rk8eOip0ksPRQJ+QEL8yE5AsTd304FhmF3/P2Zn1+ERsf1+/0TCMk1TjcSHKb7ZbB4dx5GiKCrxdrtdSZK08H3/Wdd1AU20LMvqw+HwczqdjtgwjLc4jt9lWebJ3i+absuqqhrLsr4wSV67rvsg8RvR2wvG+LMvvyV+ZoCADvWQmhFSjyFtv3BPJQ0jpPl3SNuXxnIcbpzc2xNIursgSZLMwjAUaAmu687GlaD5fI5Y7QbheR4pikJ9HNANEFEUW03TqCGgG1eCWSCgGyBkDDQEQt0L0A0QjuMwS09AN0AEQehs26Z+9kVRdH9uh+Wx9bfDmaaJL5cLlLUmjil8DTrQ491utyL9WHieJ6qqOvkfyvOcC4LgXJbl8bYAEx8GNszbqQ7fgw70VwEGACFYbgynCCTpAAAAGmZjVEwAAAADAAAAEQAAABgAAAAAAAAAAAAtA+gAALEq0+IAAAFsZmRBVAAAAAR42qSUsWqDUBSG7/VKY1DiILTg0oJgyZK0WTtlyJ5ncHITEXyA7CFk8zF8A6fuTSGUDgG7ZJOCNq1FjT03UJFM3psDh4PD//GfXz0EQS0WCwPGXRzH1zBvuvR0OtUty5KjKPrEnucNJUnSXde91zRNRB0rSZJytVq953m+x4ZhPG42mwdZlingA3Wv28PhUI7H4xcMD6O6rp9gviL2GmGMn//tl9DfHBCqQ23Iz6WQAjrngBTnTspLnVTQvxyQ6nydI+86Qpt4qZMjp5NjA9lut1IQBFesBNu2pbYT3O/3aw4nuIEQQmpFUZghVNdAer1eraoqM4Tq2k4QD4TqGgicgQogzG+H6hqIIAiIJxOqayCiKKLZbFawQrIsQ+1M6Co8mZwiEEzTJEVRUF8TRsaE6qge+74/hDx0x3GUwWDQ+R9K05Ss1+svqP3pi6MXPwxDabfbdYbAgSfz+TxfLpdvfwIMAKvbeVdx++foAAAAGmZjVEwAAAAFAAAAEQAAABgAAAAAAAAAAAAtA+gAAFzgoZgAAAF4ZmRBVAAAAAZ42qyUMWuDQBiGPc82pgYdnEsHIVA6OHTI1IKErMXf4OQmQcgPyB5CNn+G9A84dOrQIUPoJGTt4FBNUskluXwXjJVOeukHx/kp78P7vXKHBajxeGzC9rBcLm9hv6uzLMsyHMdRoyj6Qr7v92RZNobD4aOu69dCzUqSZDudTj/yPI+RYRjWfD63FEW5gm+fQv26X6/XxDTNCEHzTCl9gf1NaF5PCKFXqWgIrIwDwnTCGbLlhGz/QjaXQsj5xSXjsObnPzLZ844jFs1O4Ktd1cme08m+hCwWCyUIArkpwXVdpeoEtdttnnFQCcEY006nc2hKYLoS0mq1DpqmNYYwXdUJAgjlcPI7DlwDhMcJ05UQURQRZNLYCdOVEEmS6GAwyJtCsiyj1UzYKDyZnCIQu90uJoRgeO4X/73u6jMd06PRaNSDPAzP8zRVVWufoTRNpdls9r1areJTMOzGD8PwJo7j2ucHLnhs2/ZmMpm8HwUYAL3oexPNwE7OAAAAGmZjVEwAAAAHAAAAEQAAABgAAAAAAAAAAAAtA+gAALF2cnEAAAF4ZmRBVAAAAAh42qSUsW6CUBSGuYABK8GBwQcwYXFg6dalDGxtoolP0MnNGBJHB3di3Jz6CmXo1oEu3bowMPIAHUgbhfQq2ttzDCWkE1xPcsI9If+Xn5/cQwSo5XJ5EwRBDzoXapZt2y3oj8Vi8UZc13VUVR3MZrNbwzDUupAkSehqtXqllEak3++PwjAcdTodBd69C/XrOsuyvWVZTwSGe8bYAzyfheZ1Rwh5lIvhAP3JAUGd8Aeh0F8cEFqF7KFTDsj+P4ReCsFvyy7NBIlHXidiMeQCX+VVJ+jixAE5lpAoivTNZnPVlDCZTPSqE9JutxmHE1JCJElimqb9NCWgroQoinLqdruNIairOiE8ENSVEFgDBx4I6kqIKIqEJxPUlRBZlpnjON9NIbvdjlUzQRc8mZw1ommacp7nEpzHxX+v22PUoZ7M53MH8hhMp1ND1/Xad2i73bbW63WSpml0DgY3vu/7WhzHtW8yLHh5OBymnue9/AowAHHnfTqxRuxEAAAAE3RFWHRTb2Z0d2FyZQBKYXBuZyByMTE5J+izYQAAAABJRU5ErkJggg==") 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';
Отсутствует
Я исправил.
Подтверждаю, спасибо.
Добавлено 23-03-2012 04:33:34
Ты всё-таки решил зачем-то добавить рамку к кнопке для состояния, когда она не нажимается.
Теперь при наведении на эту кнопку в таком состоянии - панель сдвигается на 1 пиксель вверх.
Отредактировано iDev.Pi (23-03-2012 04:33:34)
mzfx
Отсутствует