bunda1
у меня баг сохраняется уже несколько дней, мне кажется они чего-то просто изменили.
пока что кнопкой пользоваться вообще не возможно.
Завтра исправлю.
Отсутствует
bunda1
у меня баг сохраняется уже несколько дней, мне кажется они чего-то просто изменили.
пока что кнопкой пользоваться вообще не возможно.
Да, они изменили код.
Код экспериментальной кнопки Toggle Find+3 для инициализации:
//настройка функций кликов мыши(Mouse Click settings)................................................... this.onclick = function(event) { if(event.button == 0) { // Действие при клике ЛКМ gFindBar.hidden ? gFindBar.onFindCommand() : gFindBar.close(); Find(event); } else if(event.button == 1) { // Действие при клике СКМ gFindBar.hidden ? gFindBar.onFindCommand() : gFindBar.close();с goDoCommand("cmd_selectNone"); goDoCommand("cmd_paste"); } }; //Объявляем ..... var prefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService); var clipboard = Components.classes["@mozilla.org/widget/clipboardhelper;1"]. getService(Components.interfaces.nsIClipboardHelper); var this_ = this; var AutoHighlight ='Автовыделение' var AutoClose ='Автоматически закрыть' var CloseTimer ='Закрыть через ' var ClearPref ='Сбросить текст' //подсказка............................................................................. this.showTFinfo = function() { //getting prefs Unicode value var prefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService); var Val = "\n\n"+ AutoHighlight +": "+ prefs.getComplexValue("FindBar.Highlight.value",Components.interfaces.nsISupportsString).data; //обрезать подсказку для "Автовыделение" var HValue = Val.substring(0,50); var HDots =(Val.length > 50) ? '....' : ""; //.... this.tooltipText = "Поиск по странице" +"\n" + "Л: Показать - скрыть поиск по странице" +"\n" +"С: Поиск по странице из буфера обмена" +"\n"+ "П: Mеню + CB меню" + HValue + HDots; } this.setAttribute("onmouseover", "this.showTFinfo()"); //справка(Help) //this.setAttribute("Help", "event.stopPropagation(); gBrowser.selectedTab = gBrowser.addTab('https://forum.mozilla-russia.org/viewtopic.php?pid=550855#p550855]09-03-2012 19:18:31')"); //проверить наличие строк в about:config и создать если не существует(Add preferences)........................................ if (custombuttons.getPrefs("FindBar.version") !== '8') { prefs.setCharPref("FindBar.version", "8"); prefs.setBoolPref("FindBar.Highlight", true); prefs.setCharPref("FindBar.Highlight.value", "??????"); prefs.setBoolPref("FindBar.autoclear", false); prefs.setBoolPref("FindBar.contextFindWords", true); prefs.setBoolPref("FindBar.ToggleWithDoubleMiddleClick", false); prefs.setCharPref("ui.textHighlightBackground", "#ef0fff");//http://coloria.net/bonus/colornames.htm //prefs.setCharPref("ui.textHighlightForeground", "#000000");//http://coloria.net/bonus/colornames.htm prefs.setBoolPref("FindBar.mini", false); prefs.setBoolPref("FindBar.ClearButton", false); prefs.setBoolPref("FindBar.auto_Close", false); prefs.setCharPref("FindBar.CloseTimer", "7");//7 сек(7 sec) prefs.setCharPref("FindBar.AutohighlightNum", "1"); }; //настройка меню(CB menu settings)................................................... //Объявляем ..... var c ='true'; var n = 'false'; //изменить нужный пункт меню(toggle menuitems) //переключаем настройки в about:config(toggle preference) this.CBlabel = function (mi, id) { //Автоматически закрыть(FB auto close).... if(!id || id == "FBClose") { //переключаем настройки в about:config s = "FindBar.auto_Close"; togglePref(s); //Запускаем функцию autohide if (id) Autohide(event); //изменить нужный пункт меню var cek = (custombuttons.getPrefs(s)? c: n); this.FBCcek = cek; if(mi) mi.cek = cek; }; //FB auto close timer..... if(!id || id == "CloseTimer") { (function () { //Стоп, при инициализации кнопки if (!id) return; s = "FindBar.CloseTimer"; //switch auto close timer+"\n" + var URL = custombuttons.promptBox(AutoClose, CloseTimer+custombuttons.getPrefs(s) + ' секунд', ''); if (URL[0] == false) return; else var timer = [URL[1]]; //переключаем настройки в about:config(toggle preference) prefs.setCharPref(s, timer); })(); //пункт меню(menuitems) var label = CloseTimer + custombuttons.getPrefs("FindBar.CloseTimer") + ' секунд'; this.CloseTimer = label; if(mi) mi.label = label; }; //FindBar.mini...... if(!id || id == "FBmini") { //переключаем настройки в about:config s = "FindBar.mini"; togglePref(s); //Запускаем функцию fmini(run fmini) if (id) fmini(event); //изменить нужный пункт меню var cek = (custombuttons.getPrefs(s)? c : n); this.FBcek = cek; if(mi) mi.cek = cek; }; //Кнопка 'очистить'...... if(!id || id == "FBbutt") { //переключаем настройки в about:config s = "FindBar.ClearButton"; togglePref(s); //Запускаем функции ClearButton и fmini(run ClearButton, fmini) if (id) ClearButton(event); if (id) fmini(event); //изменить нужный пункт меню var cek = (custombuttons.getPrefs(s)? c : n); this.FCBcek = cek; if(mi) mi.cek = cek; }; //Find в контекстном меню(Find in the context menu)..... if(!id || id == "FindInMenu") { // переключаем настройки в about:config s = "FindBar.contextFindWords"; togglePref(s); //изменить нужный пункт меню var cek = (custombuttons.getPrefs(s)? c : n); this.FIMcek = cek; if(mi) mi.cek = cek; }; //Автоматически очищать поле текстового ввода на Findbar..... if(!id || id == "autoClear") { // переключаем настройки в about:config s = "FindBar.autoclear"; togglePref(s); //Очищистить поле текстового ввода если Findbar закрыт. if (gFindBar.hidden && custombuttons.getPrefs("FindBar.autoclear")) gFindBar._findField.reset(); //изменить нужный пункт меню var cek = (custombuttons.getPrefs(s)? c : n); this.aCcek = cek; if(mi) mi.cek = cek; }; //Переключить двойным средним кликом(Toggle with double middle click)..... if(!id || id == "MiddleClick") { // переключаем настройки в about:config s = "FindBar.ToggleWithDoubleMiddleClick"; togglePref(s); //изменить нужный пункт меню var cek = (custombuttons.getPrefs(s)? c : n); this.MCcek = cek; if(mi) mi.cek = cek; }; //Автовыделение(Switch, Auto Highlight)..... if(!id || id == "SwitchHighlight") { // переключаем настройки в about:config s = "FindBar.Highlight"; togglePref(s); //Изменить иконку кнопки if (id) ToggleImage(event); //переключить кнопку 'Highlight'(toggle Highlight) if (id) document.getElementById('FindToolbar').getElement('highlight').removeAttribute("checked"); //Запускаем функцию Highlight(run function Highlight) if (id) Highlight(event); //изменить нужный пункт меню(toggle menuitems) var cek = (custombuttons.getPrefs(s)? c : n); this.aHcek = cek; if(mi) mi.cek = cek; }; //Изменить цвет для Автовыделение..... if(!id || id == "addColor") { (function () { //Стоп, при инициализации кнопки if (!id) return; //создаем модальное окно для ввода цвета var URL = custombuttons.promptBox('Изменить цвет для Автовыделение', 'По умолчанию: #ef0fff', ''); if (URL[0] == false) return; else var color = [URL[1]]; //переключаем настройки в about:config(toggle preference) prefs.setCharPref("ui.textHighlightBackground", color); })(); //пункт меню(menuitems) var label = 'Изменить цвет' + ': ' + custombuttons.getPrefs("ui.textHighlightBackground"); this.addColor = label; if(mi) mi.label = label; }; //Автовыделение, добавить текст....... if(!id || id == "AddText") { //Запускаем функцию HighlightAdd(run function HighlightAdd) if (id) HighlightAdd(event); }; //Автовыделение, сбросить ..... if(!id || id == "Clear") { //сбросить настройки в about:config if (id) prefs.setCharPref("FindBar.Highlight.value", ""); //Запускаем функцию Highlight(run function Highlight) if (id) Highlight(event); //всплывающая подсказка if (id) custombuttons.alertSlide(ClearPref,'????'); }; //переключаем настройки в about:config(toggle preference).... function togglePref(s){ //Стоп, при инициализации кнопки if (!id) return; //переключаем настройки custombuttons.setPrefs(s, !custombuttons.getPrefs(s)); } }; //Запускаем функцию CBlabel(run CBlabel)......... this.CBlabel(); //пункти меню(Our menu items) .... this.ss = [ { cek: this.FBCcek, label: AutoClose, cmd: 'document.popupNode.CBlabel(this, "FBClose")', sItemId: '', type:'checkbox'}, { label: this.CloseTimer, cmd: 'document.popupNode.CBlabel(this, "CloseTimer")', sItemId: ''}, { label: "separator", sItemId: ''}, { cek: this.FBcek, label: 'FindBar мини', cmd: 'document.popupNode.CBlabel(this, "FBmini")', sItemId: '', type:'checkbox'}, { cek: this.FCBcek, label: 'Кнопка "очистить" на FindBar', cmd: 'document.popupNode.CBlabel(this, "FBbutt")', sItemId: '', type:'checkbox'}, { label: "separator", sItemId: ''}, { cek: this.FIMcek, label: 'Find в контекстном меню', cmd: 'document.popupNode.CBlabel(this, "FindInMenu")', sItemId:'', type:'checkbox'}, { cek: this.aCcek, label: 'Очищать поисковую форму', cmd: 'document.popupNode.CBlabel(this, "autoClear")', sItemId:'', type:'checkbox'}, { cek: this.MCcek, label: 'Переключать двойным средним кликом', cmd: 'document.popupNode.CBlabel(this, "MiddleClick")', sItemId:'', type:'checkbox'}, { label: "separator", sItemId: ''}, { cek: this.aHcek, label: AutoHighlight, cmd: 'document.popupNode.CBlabel(this, "SwitchHighlight")', sItemId: '', type:'checkbox'}, { label: this.addColor, cmd: 'document.popupNode.CBlabel(this, "addColor")', sItemId: ''}, { label: 'Добавить текст', cmd: 'document.popupNode.CBlabel(this, "AddText")', sItemId: ''}, { label: ClearPref, cmd: 'document.popupNode.CBlabel(this, "Clear")', sItemId: ''}]; // Our Initialization function for creating the context menu, setting up menuitems and telling var Cb = custombuttons; this.mObj = Cb.getCbContextObj(this); this.init = function(x) { x.mObj.setSub(); var nItem = {}, mItem = {}; document.getElementById(CB2const.sCBCtxtMenu).setAttribute("oncommand", "event.stopPropagation()"); for(var i in x.ss) { nItem = new x.mObj.getItem(); nItem.id = 'Note'; nItem.label = x.ss[i].label; if (nItem.label == "separator") { nItem = document.createElement("menuseparator"); } nItem.value = String(i); mItem = x.mObj.insertBefore(nItem , x.mObj.oMenu.lastChild); this.ss[i].sItemId = mItem.id; mItem.setAttribute('oncommand',x.ss[i].cmd); if("type" in x.ss[i]) mItem.setAttribute('type', x.ss[i].type); mItem.setAttribute('checked', x.ss[i].cek) mItem.setAttribute( 'autocheck',true) } x.mObj.getItem(); nItem = x.mObj.getItem(); nItem.id = 'Note'; this.separator = x.mObj.insertBefore( nItem , x.mObj.oMenu.lastChild); } this.init(this); //Стоп, при открытии настройки панелей.................................................... if (window.ToggleFindRun == 'stop') return; //Findbar, переклучить атрибут 'mini'(Findbar, set and remove attribute 'mini')........... //Findbar, установить и удалить 'hits'(Findbar, set and remove 'hits')........... function fmini(event){ //FindBar, auto find if (!gFindBar.hidden) { //Find gFindBar.onFindCommand(); } var findToolbar = document.getElementById("FindToolbar"); var HighBut = document.getAnonymousElementByAttribute( gFindBar, "anonid", "highlight"); if (custombuttons.getPrefs("FindBar.mini")) { //... var highlightBtn = document.getElementById('FindToolbar').getElement('highlight'); if (highlightBtn.checked) { gFindBar._findField.style.color = prefs.getCharPref("ui.textHighlightBackground"); highlightBtn.removeAttribute("checked"); }; findToolbar.setAttribute("mini", "true"); this.hits = ' '; var Rtext = custombuttons.getPrefs("FindBar.ClearButton") ? "Искать предыдущее" : "Очистить поле текстового ввода"; var text = "L = Искать следущее"+"\n" +"M = Поиск выделенного текста/из буфера" + "\n" + "R = " + Rtext; HighBut.setAttribute("tooltiptext", text ); } else { var highlightBtn = document.getElementById('FindToolbar').getElement('highlight'); findToolbar.removeAttribute("mini") this.hits = ' hits'; HighBut.setAttribute("tooltiptext", "Highlight"); //... if (!!gFindBar._findField.style.color) { highlightBtn.setAttribute("checked", "true"); gFindBar._findField.removeAttribute("style"); } } //Findbar, убрать фокус(Findbar, hide focus) _content.focus(); }; //Findbar, переклучить атрибут 'autohide'...... function Autohide(event){ var f = document.getElementById("FindToolbar"); custombuttons.getPrefs("FindBar.auto_Close") ? f.setAttribute("autohide", "true") : f.removeAttribute("autohide"); }; //Findbar, переклучить атрибут 'ClearButton'...... function ClearButton(event){ var ft = document.getElementById("FindToolbar"); custombuttons.getPrefs("FindBar.ClearButton") ? ft.setAttribute("ClearButton", "true") : ft.removeAttribute("ClearButton"); }; //Запускаем функции fmini(Run the function fmini) setTimeout(function(){ fmini(event); Autohide(event); ClearButton(event);}, 200) //Изменить иконку кнопки................................................................. function ToggleImage(event){ // toggle button image if (custombuttonsUtils.getPrefs("FindBar.Highlight")) { this_.image="data:image/x-icon;base64,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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")) return; if (gFindBar.hidden){gFindBar._findField.reset()} if (!gFindBar.hidden) { //Снять выделенные на странице если флаг - true if (_this.clear){goDoCommand("cmd_selectNone")} //сбросить флаг _this.clear = false; } }, false); //findbar очистить, кликнуть правим кликом на findbar's label-Найти: или на иконку поиска на FindBar mini(FindBar clear findText, right click on findbar's label, else Find button).............. //findbar поиск, кликнуть левым кликом на findbar's label-Найти: или на иконку поиска на FindBar mini(FindBar find, left click on findbar's label, else Find button).............. var FindButt = document.getAnonymousElementByAttribute(gFindBar, "anonid", "find-label"); FindButt.setAttribute("onclick", "event.stopPropagation(); clickFind(event);"); //.... var HighBut = document.getAnonymousElementByAttribute( gFindBar, "anonid", "highlight"); HighBut.addEventListener("click", function(event){ if (custombuttons.getPrefs("FindBar.mini")) { gFindBar.getElement("highlight").removeAttribute("checked"); //....... clickFind(event); } }, true); //..................... clickFind = function(event){ if ( event.button == 0 ) { event.preventDefault(); event.stopPropagation(); if (custombuttons.getPrefs("FindBar.Highlight")){Highlight(event)}; //Искать следующее gFindBar.onFindAgainCommand(false); } else if ( event.button == 2 ) { if (custombuttons.getPrefs("FindBar.Highlight")){Highlight(event)}; //Запускаем функцию findFieldClear или искать предыдущее custombuttons.getPrefs("FindBar.ClearButton") ? gFindBar.onFindAgainCommand(true) : findFieldClear(event); } }; //кнопка 'Highlight' на FindBar.mini всегда включена................................................................... var highlightBtn = document.getElementById('FindToolbar').getElement('highlight'); highlightBtn.addEventListener("mouseover", function(event){ if (custombuttons.getPrefs("FindBar.mini")) { highlightBtn.setAttribute("disabled", "false") } }, false); //Поиск по странице из буфера обмена/выделенный текст, если кликнуть средним кликом на findbar или на иконку поиска на FindBar mini ....... //Двойной клик в строке поиска FindBar мини включает и выключает обычную подсветку текста из панели поиска........... //Стоп, при открытии настройки панелей(stop, if onDestroy) if (window.ToggleFindRun !== 'stop') (function () { //Поиск по странице из буфера обмен gFindBar.addEventListener("click", function(event){ if ( event.button !== 1 )return; event.preventDefault(); event.stopPropagation(); //........ var sel = content.getSelection().toString(); var str =(!!sel) ? sel : readFromClipboard(); //Убираем пробелы с обоих концов текста. var str = str.replace(/^\s+|\s+$/g,""); //... gFindBar._findField.value = str; Find(event); }, true); //переключить кнопку 'Highlight'......... gFindBar._findField.addEventListener("dblclick", function(event){ if ( event.button != 0 )return; event.preventDefault(); event.stopPropagation() //.... if (!custombuttons.getPrefs("FindBar.mini")) return; if (custombuttons.getPrefs("FindBar.Highlight")) return; //Запускаем функцию toggleHighlight toggleHighlight(event); //Findbar, убрать фокус(Findbar, hide focus) _content.focus(); }, false); })(); /*//ЛКМ в форму поиска - выделить текст в форме поиска............................ gFindBar._findField.addEventListener("click", function(event){ if ( event.button !== 0 )return; event.preventDefault(); event.stopPropagation() gFindBar._findField.select(); }, false);*/ //ЛКМ + ПКМ очистить поле текстового ввода на Findbar........................................................ //добавляем обработчики для обработки мышиных событий на поле текстового ввода... //нажатие на кнопку мыши, запускаем функцию 'buttonDown' gFindBar._findField.addEventListener("mousedown", function(event){ClearFindField.buttonDown(event); }, true); //нажатая кнопка мыши отпущена, запускаем функцию 'buttonUp' gFindBar._findField.addEventListener("click", function(event){ ClearFindField.buttonUp(event); }, true);//mouseup //...... var ClearFindField = { buttonDown : function(event) { //если нажатие на левую кнопку мыши, устанавливаем флаг if (0 == event.button){ this.leftButtonDown = true }; //если нажатие на правую кнопку мыши и если установлен флаг if (2 == event.button && this.leftButtonDown){ //сбросить флаг, устанавить флаг this.leftButtonDown = false; this.stopMenu = true; //Очистить поле текстового ввода setTimeout(function(){ findFieldClear(event);}, 0); if (custombuttons.getPrefs("FindBar.Highlight")){Highlight(event)}; } }, buttonUp : function(event) { //если нажатая левая кнопка мыши отпущена if (event.button == 0) { //сбросить флаг this.leftButtonDown = false; } //если нажатая правая кнопка мыши отпущена и если установлен флаг if (event.button == 2 && this.stopMenu){ event.preventDefault(); event.stopPropagation(); //сбросить флаг this.stopMenu = false; } } }; //FindBar, автоматически закрыть(autohide Findbar)................................. //Стоп, при открытии настройки панелей(stop, if onDestroy) if (window.ToggleFindRun !== 'stop') (function () { function go() { gFindBar.close(); window.ACRun = ''; } function on() { if (!custombuttons.getPrefs("FindBar.auto_Close")) return; if (window.ACRun == 'stop') return; window.ACRun = 'stop'; timeoutId = 0; timeoutId = setTimeout(go, custombuttons.getPrefs("FindBar.CloseTimer") + '000') } function off() { if (!custombuttons.getPrefs("FindBar.auto_Close")) return; window.ACRun = ''; clearTimeout(timeoutId); } gFindBar.addEventListener("DOMAttrModified", function(event){if (gFindBar.hidden) off() }, false); addEventListener('mouseover', function(event){ if (!gFindBar.hidden) (event.target.nodeName !== 'findbar')? on(): off() }, false); })(); //FindBar, сочетания клавиш(Key config)......................................................... //Стоп, при открытии настройки панелей(stop, if onDestroy) if (window.ToggleFindRun !== 'stop')(function () { window.addEventListener('keydown', function (event){ //FindBar(ctrl+ F)показать - скрыть(Toggle Find Bar)......... if ((event.ctrlKey)&&(!event.altKey)&&(!event.shiftKey)&&(event.keyCode==70)) { event.preventDefault(); event.stopPropagation(); //переключить 'Поиск на странице' gFindBar.hidden ? gFindBar.onFindCommand() : gFindBar.close(); Find(event); gFindBar._findField.focus(); } //Findbar(ctrl+ALT+F), поиск по странице из буфера обмена(find from clipboard)............. if ((event.ctrlKey)&&(event.altKey)&&(event.keyCode==70)) { gFindBar.hidden ? gFindBar.onFindCommand() : gFindBar.close(); goDoCommand("cmd_selectNone"); goDoCommand("cmd_paste"); Find(event); } //Findbar(ctrl+Snift+F), открывать Findbar с чистой поисковой формой(Find, clear find field)............. if ((event.ctrlKey)&&(!event.altKey)&&(event.shiftKey)&&(event.keyCode==70)) { goDoCommand("cmd_selectNone"); findFieldClear(event); } //Findbar(ctrl+ALT+H), FindBar, вести слова для выделение(set Highlight words)... if ((event.ctrlKey)&&(event.altKey)&&(event.keyCode==72)) { //Запускаем функцию HighlightAdd(run HighlightAdd) HighlightAdd(event); } }, false); })(); //переключить кнопку 'Highlight'(toggle Highlight)............................................ function toggleHighlight(event) { var highlightBtn = document.getElementById('FindToolbar').getElement('highlight'); //... if (!gFindBar._findField.style.color) { gFindBar._highlightDoc(true, gFindBar._findField.value); gFindBar._findField.style.color = prefs.getCharPref("ui.textHighlightBackground"); } else { gFindBar._highlightDoc(false); gFindBar._findField.removeAttribute("style"); } }; //Автоматически выделить заранее введенные слова (auto Highlight words permanent).................................................... Highlight = function(event) { let console=Components.classes["@mozilla.org/consoleservice;1"] .getService(Components.interfaces.nsIConsoleService); console.logStringMessage(event.target) console.logStringMessage(event) //устанавливаем флаги... var m = true; if (event =='false'){var m = false}; if (event =='[object UIEvent]'){var m = false}; if (event =='[object DragEvent]'){var m = false}; if (event =='[object MouseEvent]'){var m = false}; //hide Highlight gFindBar._highlightDoc(false); //.... var FBNum = custombuttons.getPrefs("FindBar.AutohighlightNum"); var FBvalue = gFindBar._findField.value; //.... if (!gFindBar.hidden) { //... if (!!gFindBar._findField.style.color) { gFindBar._findField.removeAttribute("style"); } //Findbar, удалить атрибут 'red'(Findbar, remove attribute 'red').............. if (FBvalue.length == '0') { var findToolbar = document.getElementById("FindToolbar"); findToolbar.removeAttribute("red"); } //FindBar, auto find if (m) { //Findbar, фокус(Findbar, focus) gFindBar._findField.focus(); gFindBar.onFindCommand(); //Findbar, убрать фокус(Findbar, hide focus) _content.focus(); } } //auto Highlight if (custombuttonsUtils.getPrefs("FindBar.Highlight")) { if (gFindBar.hidden) { //getting prefs Unicode value var value = prefs.getComplexValue("FindBar.Highlight.value", Components.interfaces.nsISupportsString).data; } if (!gFindBar.hidden) { var value =(FBvalue.length > FBNum)? FBvalue : "??????"; } //Highlight gFindBar._highlightDoc(true, value); } }; if (window.ToggleFindRun !== 'stop') (function () { //добавляем обработчики........ //отслеживаем команду Назад(back) и Вперёд(forward)... window.addEventListener("command", function(event){ var command = String(event.target.getAttribute("oncommand")); //фылтр.. if (command == 'BrowserBack();' || command == 'BrowserBack(event);' || command == 'BrowserForward();' || command == 'BrowserForward(event);'){ setTimeout(function() { Highlight(event)}, 0) }}, false); //обработчики для табов... gBrowser.tabContainer.addEventListener("TabSelect", Highlight, false); gBrowser.addEventListener("DOMContentLoaded", function(event){ //фылтр.. //стоп, если открыть новые таби if (event.target.location.href !== getBrowser().currentURI.spec) return; //стоп, если срабатывает на фрейме var document = event.originalTarget; if (document instanceof HTMLDocument && this.contentWindow.document !== document) return; Highlight(event)}, false); //обработчики для FindBar.. gFindBar._findField.addEventListener("input", function(event){ var event = 'false'; Highlight(event)}, false); gFindBar._findField.setAttribute("ondrop","event.stopPropagation(); Find(event); "); gFindBar.addEventListener("DOMAttrModified", function(event){if (gFindBar.hidden){Highlight(event)}}, false); })(); //FindBar. контекстного меню (context Menu)....................................... (function contextFindWords(){ // выходим, если функция уже выполнялась if (document.getElementById("contextFindWords")) return; const kXULNS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"; var contextMenu = document.getElementById("contentAreaContextMenu"); var separator = document.getElementById("context-sep-properties"); var eventTarget = null; var menu = document.createElementNS(kXULNS, "menu"); menu.id = "contextFindWords"; menu.setAttribute("label", "Find"); menu.hidden = true; contextMenu.insertBefore(menu, separator); var menuPopup = document.createElementNS(kXULNS, "menupopup"); menu.appendChild(menuPopup); var lst = [ { label:"Найти на странице", command:ContexFind }, { label:"Поиск по сайту(google)", command:Search }, { label:"Выделить текст на странице", command:HighlightSel }, { label:"Автовыделение, добавить текст", command:addSel } ]; for(var i = 0, m; m = lst[i]; i++){ var menuItem = document.createElementNS(kXULNS, "menuitem"); menuItem.setAttribute("label", m.label); menuItem.setAttribute("type", "m.radio"); if ("accesskey" in m) menuItem.setAttribute("accesskey", m.accesskey); menuItem.addEventListener("command", m.command, false); menuItem.id = "context-Find-Words-" + m.label.toString(); menuPopup.appendChild(menuItem); } var contextFind = document.getElementById("contextFindWords") contextMenu.addEventListener("popupshowing", setMenuDisplay, false); function setMenuDisplay(aEvent) { if (gContextMenu.isTextSelected) { if (custombuttons.getPrefs("FindBar.contextFindWords")) { contextFind.hidden = false; } else { contextFind.hidden = true; } } } function ContexFind(){ gFindBar.onFindCommand(); //Запускаем функцию Find Find(event); } function Search(){ var focusedWindow = document. commandDispatcher. focusedWindow; var text = focusedWindow. getSelection (). toString (); var doc = getBrowser (). contentDocument; try { var url = doc. location. hostname; } catch(e) { var url = ""; } text = escape (convertFromUnicode ("UTF-8", text)); url = encodeURIComponent (url); var searchUrl = "http://www.google.com/search?as_q=" + text + "&as_sitesearch=" + url; gBrowser.selectedTab = gBrowser.addTab(searchUrl); } function HighlightSel(){ gFindBar.toggleHighlight(false); var text = document.commandDispatcher.focusedWindow.getSelection(); gFindBar._highlightDoc(true, text); goDoCommand("cmd_selectNone"); } function addSel(){ //Запускаем функцию HighlightAdd HighlightAdd(event); } })(); //Если нажать в главном меню Firefox на пункт меню 'Найти'............................................. document.getElementById("cmd_find").setAttribute("oncommand", "gFindBar.onFindCommand(); Find(event);"); //Найти на странице.................................................... Find = function(event){ if (custombuttons.getPrefs("FindBar.Highlight")){Highlight(event)}; if (!gFindBar.hidden) gFindBar._find(gFindBar._findField.value); }; //Добавить текст(выделенный / из буфера обмена) для автовыделения....................................... function HighlightAdd(event){ //Копируем выделенный текст в буфер document.getElementById("cmd_copy").doCommand(); // Get the root branch var prefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch); //setting Unicode value var str = Components.classes["@mozilla.org/supports-string;1"].createInstance(Components.interfaces.nsISupportsString); //читаем из буфера обмена и добавляем текст для автовыделения в 'about:config' str.data = readFromClipboard(); prefs.setComplexValue("FindBar.Highlight.value", Components.interfaces.nsISupportsString, str); //всплывающая подсказка custombuttons.alertSlide(AutoHighlight, str.data); //... goDoCommand("cmd_selectNone"); //Запускаем функцию Highlight(run Highlight) Highlight(event); }; //Поле текстового ввода на Findbar мигает желтим............................ function fflash(event){ var findToolbar = document.getElementById("FindToolbar"); //Следим за иконкой статуса на FindBar var findstatus = gFindBar.getElement("find-status-icon"); findstatus.addEventListener("DOMAttrModified",function(e){ if(findstatus.getAttribute("status")=="wrapped") { findToolbar.setAttribute("flash", "true"); setTimeout(function() {findToolbar.removeAttribute("flash");}, 700)}; }, false)}; //Запускаем функции fflash, fmini(Run the function fflash) document.addEventListener( "DOMContentLoaded", fflash(event), false); //Создать кнопку "Clear" на Findbar......................................................... var ubc=document.getAnonymousElementByAttribute( gFindBar, "anonid", "findbar-textbox"); var btn=document.createElementNS("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul", "toolbarbutton"); btn.setAttribute("id", "ClearButton"); btn.setAttribute("tooltiptext", "L = Очистить поле текстового ввода"); ubc.parentNode.insertBefore(btn, ubc.nextSibling); btn.addEventListener("click", function(event) { if ( event.button != 0 ) return; //Запускаем функцию findFieldClear findFieldClear(event); }, false); //Очистить поле текстового ввода на Findbar.................................................. function findFieldClear(event){ gFindBar._findField.reset(); //.... var findToolbar = document.getElementById("FindToolbar"); findToolbar.removeAttribute("red"); //... gFindBar.onFindCommand(); //.... gFindBar._highlightDoc(false); }; // FindToolbar стиль(style)....................................................................... (function(css) { var pi = document.createProcessingInstruction( 'xml-stylesheet', 'type="text/css" href="data:text/css;utf-8,' + encodeURIComponent(css) + '"' ); return document.insertBefore(pi, document.documentElement); } )(<![CDATA[ @namespace url(http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul); /*Find Toolbar.................*/ #FindToolbar { border-bottom: 1px solid grey !important; } #FindToolbar > .findbar-container > * { display: -moz-box !important; } #FindToolbar > hbox > label{-moz-appearance: none !important;font-weight: bold !important;} #find-field,.findbar-textbox{width: 250px !important;} #FindToolbar .findbar-find-fast.findbar-find-status, #FindToolbar .findbar-container>image, #FindToolbar[autohide] .findbar-closebutton {display: none !important;} #FindToolbar[red="true"] .findbar-textbox{box-shadow: 0 0 0 1em #f66 inset;} #FindToolbar:not([red="true"]) .findbar-textbox[status="notfound"]{ background: rgba(207,219,236,0.99) !important; color: black !important; box-shadow: none !important;} /*Find Toolbar, mini......................................... */ #FindToolbar[mini="true"] .findbar-textbox{ width: 16em !important; height:21px!important; padding-right: 20px !important; margin-right: 2px!important; margin-left:-4px!important} #FindToolbar[mini] { position: fixed; right: 18px; background: menu !important; box-shadow: 0px 10px 5px -10px rgba(0,0,0,.3) !important; border: 1px solid grey !important; border-top: 0 !important; border-radius: 0 0 8px 8px !important;} #FindToolbar[mini="true"] .findbar-container>checkbox{ margin-left:-24px !important; margin-right: -3px !important} #FindToolbar[mini] toolbarspacer, #FindToolbar[mini="true"] label[class="checkbox-label"], #FindToolbar[mini="true"] toolbarbutton.findbar-find-next, #FindToolbar[mini="true"] toolbarbutton.findbar-find-previous, #FindToolbar[mini="true"] .findbar-highlight label, #FindToolbar[mini="true"] .findbar-closebutton, #FindToolbar:not([ClearButton="true"]) #ClearButton, #FindToolbar[mini="true"] .findbar-find-fast[anonid="find-label"], #FindToolbar[mini="true"] .findbar-find-fast[anonid="match-case-status"] { display: none !important;} #FindToolbar[mini] .findbar-highlight, #FindToolbar[mini] .findbar-highlight[checked] { list-style-image: url("data:image/gif;base64,R0lGODlhEAAQAMQWAJmZzJlmzGZmzGZm/2aZ/5mZ/5nM/8zM/8z//5mZmWZmmf///8yZzMzMmZlmmZmZM8zMM8zMZsz/ZsyZZpmZZmZmM////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAHoAxYALAAAAAAQABAAAAVsoCUCgQCIaCoKA1G4p7q6RmEXcQoMxYEYQEMOJSAYEL+D8jC0CG6GJTKhUtiAPiSCmlK4er7FgiGzWLGIBUJRZliVCLMi0Sg7FHhq4gGJlFUNEBIQE38pExGDFIYoFIkQi4wWjhEVkiIUFQohADs=") !important; -moz-image-region: auto !important;} #ClearButton{ list-style-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAFgSURBVHjaYv7//z/j69evWR8+fMj19etXHgYGBhjmxoK5gJhDTEyMOT4+/v+pU6f+AwQQM1Azy5o1a/hevXolC5RUAmIFIJYHYlksWBKIhYEWsQEt/PXgwYPfAAHEADQNZKr21KlTD7x8+fLbfwIApAakFqQHpBcggIA0gwAQOxKjGdkQkB6QXoAAYgISzCC/AU3jZMADTExMwBgEoGpBLmcGCCCQAYxQQ/BqxgJAehgBAogJymEkUTNcD0AAMZFhMwoACCAmSjSDAEAAMTGQAM6cOYMhBhBAMAP+o9uelpZGSDNYD0AAgQJCGIgtgNG7BZvmWbNmYRgG4jMyMvoAmScAAogFSPwF4m/ApPwdlhZAmpAVo2sGqQXpAekFCCCKkzJAADFmZWXBMpMUUFAUmsJYcITjH6jNr4Gan4WEhHwCCCAGUHYGGsIKFABlYSGoIWI4MEhOCKQWpAekFyDAAO0k7MPVi8ODAAAAAElF") !important; -moz-image-region: auto !important; margin-right: 1px!important;} #FindToolbar[mini="true"] textbox.findbar-textbox{ -moz-box-ordinal-group: 2 !important} #FindToolbar[mini="true"] checkbox{ -moz-box-ordinal-group: 3 !important;} #FindToolbar[mini="true"] toolbarbutton.findbar-highlight{ -moz-box-ordinal-group: 4 !important;} #FindToolbar[mini="true"] #ClearButton{ -moz-box-ordinal-group: 4 !important;} #FindToolbar[mini="true"] .findbar-closebutton{ -moz-box-ordinal-group: 7 !important;} ]]>.toString()); //устанавливаем флаг window.ToggleFindRun = 'stop';
Отредактировано bunda1 (30-03-2012 22:40:36)
Отсутствует
bunda1
спасибо большое!
баг исчез.
новая фича с очисткой ЛКМ>ПКМ - очень понравилась.
очень бы хотелось всё-таки ещё сделать так, чтобы первый клик по поисковой форме - выделял бы всё содержимое (как адресная строка)
mzfx
Отсутствует
Добавил новые возможности:
Теперъ можна переключать автовыделения двойным кликом в строке поиска, но не по умолчанию, это надо включать через меню кнопки.
Поменял кнопку "очистить" на кнопку "Вставить и искать" на FindBar, для поиска выделенного на странице текста или текста из буфера обмена. Удобно для тех у кого нет средней мыши кнопки.
очень бы хотелось всё-таки ещё сделать так, чтобы первый клик по поисковой форме - выделял бы всё содержимое (как адресная строка)
Код экспериментальной кнопки Toggle Find+3 для инициализации:
//настройка функций кликов мыши(Mouse Click settings)................................................... this.onclick = function(event) { if(event.button == 0) { // Действие при клике ЛКМ gFindBar.hidden ? gFindBar.onFindCommand() : gFindBar.close(); Find(event); } else if(event.button == 1) { // Действие при клике СКМ gFindBar.hidden ? gFindBar.onFindCommand() : gFindBar.close(); goDoCommand("cmd_selectNone"); goDoCommand("cmd_paste"); } }; //Объявляем ..... var prefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService); var clipboard = Components.classes["@mozilla.org/widget/clipboardhelper;1"]. getService(Components.interfaces.nsIClipboardHelper); var this_ = this; var AutoHighlight ='Автовыделение' var AutoClose ='Автоматически закрыть' var CloseTimer ='Закрыть через ' var ClearPref ='Сбросить текст' //подсказка............................................................................. this.showTFinfo = function() { //getting prefs Unicode value var prefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService); var Val = "\n\n"+ AutoHighlight +": "+ prefs.getComplexValue("FindBar.Highlight.value",Components.interfaces.nsISupportsString).data; //обрезать подсказку для "Автовыделение" var HValue = Val.substring(0,50); var HDots =(Val.length > 50) ? '....' : ""; //.... this.tooltipText = "Поиск по странице" +"\n" + "Л: Показать - скрыть поиск по странице" +"\n" +"С: Поиск по странице из буфера обмена" +"\n"+ "П: Mеню + CB меню" + HValue + HDots; } this.setAttribute("onmouseover", "this.showTFinfo()"); //справка(Help) //this.setAttribute("Help", "event.stopPropagation(); gBrowser.selectedTab = gBrowser.addTab('https://forum.mozilla-russia.org/viewtopic.php?pid=550855#p550855]09-03-2012 19:18:31')"); //проверить наличие строк в about:config и создать если не существует(Add preferences)........................................ if (custombuttons.getPrefs("FindBar.version") !== '10') { prefs.setCharPref("FindBar.version", "10"); prefs.setBoolPref("FindBar.Highlight", true); prefs.setCharPref("FindBar.Highlight.value", "??????"); prefs.setBoolPref("FindBar.autoclear", false); prefs.setBoolPref("FindBar.contextFindWords", true); prefs.setBoolPref("FindBar.ToggleWithDoubleMiddleClick", false); prefs.setCharPref("ui.textHighlightBackground", "#ef0fff");//http://coloria.net/bonus/colornames.htm //prefs.setCharPref("ui.textHighlightForeground", "#000000");//http://coloria.net/bonus/colornames.htm prefs.setBoolPref("FindBar.mini", false); custombuttons.clearPrefs("FindBar.ClearButton"); prefs.setBoolPref("FindBar.pasteButton", false); prefs.setBoolPref("FindBar.auto_Close", false); prefs.setCharPref("FindBar.CloseTimer", "7");//7 сек(7 sec) prefs.setCharPref("FindBar.AutohighlightNum", "1"); prefs.setBoolPref("FindBar.Autohighlight.ToggleWithDoubleClick", false); }; //настройка меню(CB menu settings)................................................... //Объявляем ..... var c ='true'; var n = 'false'; //изменить нужный пункт меню(toggle menuitems) //переключаем настройки в about:config(toggle preference) this.CBlabel = function (mi, id) { //Автоматически закрыть(FB auto close).... if(!id || id == "FBClose") { //переключаем настройки в about:config s = "FindBar.auto_Close"; togglePref(s); //Запускаем функцию autohide if (id) Autohide(event); //изменить нужный пункт меню var cek = (custombuttons.getPrefs(s)? c: n); this.FBCcek = cek; if(mi) mi.cek = cek; }; //FB auto close timer..... if(!id || id == "CloseTimer") { (function () { //Стоп, при инициализации кнопки if (!id) return; s = "FindBar.CloseTimer"; //switch auto close timer+"\n" + var URL = custombuttons.promptBox(AutoClose, CloseTimer+custombuttons.getPrefs(s) + ' секунд', ''); if (URL[0] == false) return; else var timer = [URL[1]]; //переключаем настройки в about:config(toggle preference) prefs.setCharPref(s, timer); })(); //пункт меню(menuitems) var label = CloseTimer + custombuttons.getPrefs("FindBar.CloseTimer") + ' секунд'; this.CloseTimer = label; if(mi) mi.label = label; }; //FindBar.mini...... if(!id || id == "FBmini") { //переключаем настройки в about:config s = "FindBar.mini"; togglePref(s); //Запускаем функцию fmini(run fmini) if (id) fmini(event); //изменить нужный пункт меню var cek = (custombuttons.getPrefs(s)? c : n); this.FBcek = cek; if(mi) mi.cek = cek; }; //Кнопка 'Вставить и искать'...... if(!id || id == "FBbutt") { //переключаем настройки в about:config s = "FindBar.pasteButton"; togglePref(s); //Запускаем функции pasteButton и fmini(run pasteButton, fmini) if (id) pasteButton(event); if (id) fmini(event); //изменить нужный пункт меню var cek = (custombuttons.getPrefs(s)? c : n); this.FpBcek = cek; if(mi) mi.cek = cek; }; //Find в контекстном меню(Find in the context menu)..... if(!id || id == "FindInMenu") { // переключаем настройки в about:config s = "FindBar.contextFindWords"; togglePref(s); //изменить нужный пункт меню var cek = (custombuttons.getPrefs(s)? c : n); this.FIMcek = cek; if(mi) mi.cek = cek; }; //Автоматически очищать поле текстового ввода на Findbar..... if(!id || id == "autoClear") { // переключаем настройки в about:config s = "FindBar.autoclear"; togglePref(s); //Очищистить поле текстового ввода если Findbar закрыт. if (gFindBar.hidden && custombuttons.getPrefs("FindBar.autoclear")) gFindBar._findField.reset(); //изменить нужный пункт меню var cek = (custombuttons.getPrefs(s)? c : n); this.aCcek = cek; if(mi) mi.cek = cek; }; //Переключить двойным средним кликом(Toggle with double middle click)..... if(!id || id == "MiddleClick") { // переключаем настройки в about:config s = "FindBar.ToggleWithDoubleMiddleClick"; togglePref(s); //изменить нужный пункт меню var cek = (custombuttons.getPrefs(s)? c : n); this.MCcek = cek; if(mi) mi.cek = cek; }; //Автовыделение двойным кликом..... if(!id || id == "dblclikHighlight") { // переключаем настройки в about:config s = "FindBar.Autohighlight.ToggleWithDoubleClick"; togglePref(s); //изменить нужный пункт меню(toggle menuitems) var cek = (custombuttons.getPrefs(s)? c : n); this.dbcHcek = cek; if(mi) mi.cek = cek; }; //Автовыделение(Switch, Auto Highlight)..... if(!id || id == "SwitchHighlight") { // переключаем настройки в about:config s = "FindBar.Highlight"; togglePref(s); //Изменить иконку кнопки if (id) ToggleImage(event); //переключить кнопку 'Highlight'(toggle Highlight) if (id) document.getElementById('FindToolbar').getElement('highlight').removeAttribute("checked"); //Запускаем функцию Highlight(run function Highlight) if (id) Highlight(event); //изменить нужный пункт меню(toggle menuitems) var cek = (custombuttons.getPrefs(s)? c : n); this.aHcek = cek; if(mi) mi.cek = cek; }; //Изменить цвет для Автовыделение..... if(!id || id == "addColor") { (function () { //Стоп, при инициализации кнопки if (!id) return; //создаем модальное окно для ввода цвета var URL = custombuttons.promptBox('Изменить цвет для Автовыделение', 'По умолчанию: #ef0fff', ''); if (URL[0] == false) return; else var color = [URL[1]]; //переключаем настройки в about:config(toggle preference) prefs.setCharPref("ui.textHighlightBackground", color); })(); //пункт меню(menuitems) var label = 'Изменить цвет' + ': ' + custombuttons.getPrefs("ui.textHighlightBackground"); this.addColor = label; if(mi) mi.label = label; }; //Автовыделение, добавить текст....... if(!id || id == "AddText") { //Запускаем функцию HighlightAdd(run function HighlightAdd) if (id) HighlightAdd(event); }; //Автовыделение, сбросить ..... if(!id || id == "Clear") { //сбросить настройки в about:config if (id) prefs.setCharPref("FindBar.Highlight.value", ""); //Запускаем функцию Highlight(run function Highlight) if (id) Highlight(event); //всплывающая подсказка if (id) custombuttons.alertSlide(ClearPref,'????'); }; //переключаем настройки в about:config(toggle preference).... function togglePref(s){ //Стоп, при инициализации кнопки if (!id) return; //переключаем настройки custombuttons.setPrefs(s, !custombuttons.getPrefs(s)); } }; //Запускаем функцию CBlabel(run CBlabel)......... this.CBlabel(); //пункти меню(Our menu items) .... this.ss = [ { cek: this.FBCcek, label: AutoClose, cmd: 'document.popupNode.CBlabel(this, "FBClose")', sItemId: '', type:'checkbox'}, { label: this.CloseTimer, cmd: 'document.popupNode.CBlabel(this, "CloseTimer")', sItemId: ''}, { label: "separator", sItemId: ''}, { cek: this.FBcek, label: 'FindBar мини', cmd: 'document.popupNode.CBlabel(this, "FBmini")', sItemId: '', type:'checkbox'}, { cek: this.FpBcek, label: 'Кнопка "Вставить и искать" на FindBar', cmd: 'document.popupNode.CBlabel(this, "FBbutt")', sItemId: '', type:'checkbox'}, { label: "separator", sItemId: ''}, { cek: this.FIMcek, label: 'Find в контекстном меню', cmd: 'document.popupNode.CBlabel(this, "FindInMenu")', sItemId:'', type:'checkbox'}, { cek: this.aCcek, label: 'Всегда открывать пустую поисковую форму', cmd: 'document.popupNode.CBlabel(this, "autoClear")', sItemId:'', type:'checkbox'}, { cek: this.MCcek, label: 'Переключать двойным средним кликом', cmd: 'document.popupNode.CBlabel(this, "MiddleClick")', sItemId:'', type:'checkbox'}, { label: "separator", sItemId: ''}, { cek: this.dbcHcek, label: 'Автовыделение двойным кликом на поисковой форме', cmd: 'document.popupNode.CBlabel(this, "dblclikHighlight")', sItemId: '', type:'checkbox'}, { cek: this.aHcek, label: AutoHighlight, cmd: 'document.popupNode.CBlabel(this, "SwitchHighlight")', sItemId: '', type:'checkbox'}, { label: this.addColor, cmd: 'document.popupNode.CBlabel(this, "addColor")', sItemId: ''}, { label: 'Добавить текст', cmd: 'document.popupNode.CBlabel(this, "AddText")', sItemId: ''}, { label: ClearPref, cmd: 'document.popupNode.CBlabel(this, "Clear")', sItemId: ''}]; // Our Initialization function for creating the context menu, setting up menuitems and telling var Cb = custombuttons; this.mObj = Cb.getCbContextObj(this); this.init = function(x) { x.mObj.setSub(); var nItem = {}, mItem = {}; document.getElementById(CB2const.sCBCtxtMenu).setAttribute("oncommand", "event.stopPropagation()"); for(var i in x.ss) { nItem = new x.mObj.getItem(); nItem.id = 'Note'; nItem.label = x.ss[i].label; if (nItem.label == "separator") { nItem = document.createElement("menuseparator"); } nItem.value = String(i); mItem = x.mObj.insertBefore(nItem , x.mObj.oMenu.lastChild); this.ss[i].sItemId = mItem.id; mItem.setAttribute('oncommand',x.ss[i].cmd); if("type" in x.ss[i]) mItem.setAttribute('type', x.ss[i].type); mItem.setAttribute('checked', x.ss[i].cek) mItem.setAttribute( 'autocheck',true) } x.mObj.getItem(); nItem = x.mObj.getItem(); nItem.id = 'Note'; this.separator = x.mObj.insertBefore( nItem , x.mObj.oMenu.lastChild); } this.init(this); //Стоп, при открытии настройки панелей.................................................... if (window.ToggleFindRun == 'stop') return; //Findbar, переклучить атрибут 'mini'(Findbar, set and remove attribute 'mini')........... //Findbar, установить и удалить 'hits'(Findbar, set and remove 'hits')........... function fmini(event){ //FindBar, auto find if (!gFindBar.hidden) { //Find gFindBar.onFindCommand(); } var findToolbar = document.getElementById("FindToolbar"); var HighBut = document.getAnonymousElementByAttribute( gFindBar, "anonid", "highlight"); if (custombuttons.getPrefs("FindBar.mini")) { //... var highlightBtn = document.getElementById('FindToolbar').getElement('highlight'); if (highlightBtn.checked) { gFindBar._findField.style.color = prefs.getCharPref("ui.textHighlightBackground"); highlightBtn.removeAttribute("checked"); }; findToolbar.setAttribute("mini", "true"); this.hits = ' '; var text = "L = Искать следущее"+"\n" +"M = Поиск выделенного текста/из буфера" + "\n" + "R = Искать предыдущее"; HighBut.setAttribute("tooltiptext", text ); } else { var highlightBtn = document.getElementById('FindToolbar').getElement('highlight'); findToolbar.removeAttribute("mini") this.hits = ' hits'; HighBut.setAttribute("tooltiptext", "Highlight"); //... if (!!gFindBar._findField.style.color) { highlightBtn.setAttribute("checked", "true"); gFindBar._findField.removeAttribute("style"); } } //Findbar, убрать фокус(Findbar, hide focus) _content.focus(); }; //Findbar, переклучить атрибут 'autohide'...... function Autohide(event){ var f = document.getElementById("FindToolbar"); custombuttons.getPrefs("FindBar.auto_Close") ? f.setAttribute("autohide", "true") : f.removeAttribute("autohide"); }; //Findbar, переклучить атрибут 'pasteButton'...... function pasteButton(event){ var ft = document.getElementById("FindToolbar"); custombuttons.getPrefs("FindBar.pasteButton") ? ft.setAttribute("pasteButton", "true") : ft.removeAttribute("pasteButton"); }; //Запускаем функции fmini(Run the function fmini) setTimeout(function(){ fmini(event); Autohide(event); pasteButton(event);}, 200) //Изменить иконку кнопки................................................................. function ToggleImage(event){ // toggle button image if (custombuttonsUtils.getPrefs("FindBar.Highlight")) { this_.image="data:image/x-icon;base64,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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")) return; if (gFindBar.hidden){gFindBar._findField.reset()} if (!gFindBar.hidden) { //Снять выделенные на странице если флаг - true if (_this.clear){goDoCommand("cmd_selectNone")} //сбросить флаг _this.clear = false; } }, false); //findbar очистить, кликнуть правим кликом на findbar's label-Найти: или на иконку поиска на FindBar mini(FindBar clear findText, right click on findbar's label, else Find button).............. //findbar поиск, кликнуть левым кликом на findbar's label-Найти: или на иконку поиска на FindBar mini(FindBar find, left click on findbar's label, else Find button).............. var FindButt = document.getAnonymousElementByAttribute(gFindBar, "anonid", "find-label"); FindButt.setAttribute("onclick", "event.stopPropagation(); clickFind(event);"); //.... var HighBut = document.getAnonymousElementByAttribute( gFindBar, "anonid", "highlight"); HighBut.addEventListener("click", function(event){ if (custombuttons.getPrefs("FindBar.mini")) { gFindBar.getElement("highlight").removeAttribute("checked"); //....... clickFind(event); } }, true); //..................... clickFind = function(event){ if ( event.button == 0 ) { event.preventDefault(); event.stopPropagation(); if (custombuttons.getPrefs("FindBar.Highlight")){Highlight(event)}; //Искать следующее gFindBar.onFindAgainCommand(false); } else if ( event.button == 2 ) { if (custombuttons.getPrefs("FindBar.Highlight")){Highlight(event)}; //Запускаем функцию findFieldClear или искать предыдущее custombuttons.getPrefs("FindBar.mini") ? gFindBar.onFindAgainCommand(true) : findFieldClear(event); } }; //кнопка 'Highlight' на FindBar.mini всегда включена................................................................... var highlightBtn = document.getElementById('FindToolbar').getElement('highlight'); highlightBtn.addEventListener("mouseover", function(event){ if (custombuttons.getPrefs("FindBar.mini")){ highlightBtn.setAttribute("disabled", "false")} }, false); //Поиск по странице из буфера обмена/выделенный текст, если кликнуть средним кликом на findbar или на иконку поиска на FindBar mini ....... //Двойной клик в строке поиска FindBar мини включает и выключает обычную подсветку текста из панели поиска........... //Стоп, при открытии настройки панелей(stop, if onDestroy) if (window.ToggleFindRun !== 'stop') (function () { //Поиск по странице из буфера обмена/выделенный текст gFindBar.addEventListener("click", function(event){ if ( event.button !== 1 )return; event.preventDefault(); event.stopPropagation(); //........ var sel = content.getSelection().toString(); var str =(!!sel) ? sel : readFromClipboard(); //Убираем пробелы с обоих концов текста. var str = str.replace(/^\s+|\s+$/g,""); //... gFindBar._findField.value = str; Find(event); }, true); //переключить кнопку 'Highlight'......... gFindBar._findField.addEventListener("dblclick", function(event){ if ( event.button != 0 )return; event.preventDefault(); event.stopPropagation() //.... if (!custombuttons.getPrefs("FindBar.mini")) return; if (custombuttons.getPrefs("FindBar.Autohighlight.ToggleWithDoubleClick")){ // переключаем настройки в about:config s = "FindBar.Highlight"; custombuttons.setPrefs(s, !custombuttons.getPrefs(s)); //Изменить иконку кнопки ToggleImage(event); //переключить кнопку 'Highlight'(toggle Highlight) document.getElementById('FindToolbar').getElement('highlight').removeAttribute("checked"); //Запускаем функцию Highlight(run function Highlight) Highlight(event); } else{ if (custombuttonsUtils. getPrefs ("FindBar.Highlight")) return; //Запускаем функцию toggleHighlight toggleHighlight(event); } //Findbar, убрать фокус(Findbar, hide focus) _content.focus(); }, false); })(); //ЛКМ в форму поиска - выделить текст в форме поиска............................ gFindBar._findField.addEventListener("click", function(event){ if ( event.button !== 0 )return; if(!this.FB_fFselect){ gFindBar._findField.select();} this.FB_fFselect = true; }, false); gFindBar._findField.addEventListener("blur", function(event){ this.FB_fFselect = false; }, false); //ЛКМ + ПКМ очистить поле текстового ввода на Findbar........................................................ //добавляем обработчики для обработки мышиных событий на поле текстового ввода... //нажатие на кнопку мыши, запускаем функцию 'buttonDown' gFindBar._findField.addEventListener("mousedown", function(event){ClearFindField.buttonDown(event); }, true); //нажатая кнопка мыши отпущена, запускаем функцию 'buttonUp' gFindBar._findField.addEventListener("click", function(event){ ClearFindField.buttonUp(event); }, true);//mouseup //...... var ClearFindField = { buttonDown : function(event) { //если нажатие на левую кнопку мыши, устанавливаем флаг if (0 == event.button){ this.leftButtonDown = true }; //если нажатие на правую кнопку мыши и если установлен флаг if (2 == event.button && this.leftButtonDown){ //сбросить флаг, устанавить флаг this.leftButtonDown = false; this.stopMenu = true; //Очистить поле текстового ввода setTimeout(function(){ findFieldClear(event);}, 0); if (custombuttons.getPrefs("FindBar.Highlight")){Highlight(event)}; } }, buttonUp : function(event) { //если нажатая левая кнопка мыши отпущена if (event.button == 0) { //сбросить флаг this.leftButtonDown = false; } //если нажатая правая кнопка мыши отпущена и если установлен флаг if (event.button == 2 && this.stopMenu){ event.preventDefault(); event.stopPropagation(); //сбросить флаг this.stopMenu = false; } } }; //FindBar, автоматически закрыть(autohide Findbar)................................. //Стоп, при открытии настройки панелей(stop, if onDestroy) if (window.ToggleFindRun !== 'stop') (function () { function go() { gFindBar.close(); window.ACRun = ''; } function on() { if (!custombuttons.getPrefs("FindBar.auto_Close")) return; if (window.ACRun == 'stop') return; window.ACRun = 'stop'; timeoutId = 0; timeoutId = setTimeout(go, custombuttons.getPrefs("FindBar.CloseTimer") + '000') } function off() { if (!custombuttons.getPrefs("FindBar.auto_Close")) return; window.ACRun = ''; clearTimeout(timeoutId); } gFindBar.addEventListener("DOMAttrModified", function(event){if (gFindBar.hidden) off() }, false); addEventListener('mouseover', function(event){ if (!gFindBar.hidden) (event.target.nodeName !== 'findbar')? on(): off() }, false); })(); //FindBar, сочетания клавиш(Key config)......................................................... //Стоп, при открытии настройки панелей(stop, if onDestroy) if (window.ToggleFindRun !== 'stop')(function () { window.addEventListener('keydown', function (event){ //FindBar(ctrl+ F)показать - скрыть(Toggle Find Bar)......... if ((event.ctrlKey)&&(!event.altKey)&&(!event.shiftKey)&&(event.keyCode==70)) { event.preventDefault(); event.stopPropagation(); //переключить 'Поиск на странице' gFindBar.hidden ? gFindBar.onFindCommand() : gFindBar.close(); Find(event); gFindBar._findField.focus(); } //Findbar(ctrl+ALT+F), поиск по странице из буфера обмена(find from clipboard)............. if ((event.ctrlKey)&&(event.altKey)&&(event.keyCode==70)) { gFindBar.hidden ? gFindBar.onFindCommand() : gFindBar.close(); goDoCommand("cmd_selectNone"); goDoCommand("cmd_paste"); Find(event); } //Findbar(ctrl+Snift+F), открывать Findbar с чистой поисковой формой(Find, clear find field)............. if ((event.ctrlKey)&&(!event.altKey)&&(event.shiftKey)&&(event.keyCode==70)) { goDoCommand("cmd_selectNone"); findFieldClear(event); } //Findbar(ctrl+ALT+H), FindBar, вести слова для выделение(set Highlight words)... if ((event.ctrlKey)&&(event.altKey)&&(event.keyCode==72)) { //Запускаем функцию HighlightAdd(run HighlightAdd) HighlightAdd(event); } }, false); })(); //переключить кнопку 'Highlight'(toggle Highlight)............................................ function toggleHighlight(event) { var highlightBtn = document.getElementById('FindToolbar').getElement('highlight'); //... if (!gFindBar._findField.style.color) { gFindBar._highlightDoc(true, gFindBar._findField.value); gFindBar._findField.style.color = prefs.getCharPref("ui.textHighlightBackground"); } else { gFindBar._highlightDoc(false); gFindBar._findField.removeAttribute("style"); } }; //Автоматически выделить заранее введенные слова (auto Highlight words permanent).................................................... Highlight = function(event) { let console=Components.classes["@mozilla.org/consoleservice;1"] .getService(Components.interfaces.nsIConsoleService); console.logStringMessage(event) //устанавливаем флаги... var m = true; if (event =='false' || event =='[object UIEvent]' || event =='[object DragEvent]' || event =='[object MouseEvent]'){ var m = false }; //hide Highlight gFindBar._highlightDoc(false); //.... var FBNum = custombuttons.getPrefs("FindBar.AutohighlightNum"); var FBvalue = gFindBar._findField.value; //.... if (!gFindBar.hidden) { //... if (!!gFindBar._findField.style.color) { gFindBar._findField.removeAttribute("style"); } //Findbar, удалить атрибут 'red'(Findbar, remove attribute 'red').............. if (FBvalue.length == '0') { var findToolbar = document.getElementById("FindToolbar"); findToolbar.removeAttribute("red"); } //FindBar, auto find if (m) { //Findbar, фокус(Findbar, focus) gFindBar._findField.focus(); gFindBar.onFindCommand(); //Findbar, убрать фокус(Findbar, hide focus) _content.focus(); } } //auto Highlight if (custombuttonsUtils.getPrefs("FindBar.Highlight")) { if (gFindBar.hidden) { //getting prefs Unicode value var value = prefs.getComplexValue("FindBar.Highlight.value", Components.interfaces.nsISupportsString).data; } if (!gFindBar.hidden) { var value =(FBvalue.length > FBNum)? FBvalue : "??????"; } //Highlight gFindBar._highlightDoc(true, value); } }; if (window.ToggleFindRun !== 'stop') (function () { //добавляем обработчики........ //отслеживаем команду Назад(back) и Вперёд(forward)... window.addEventListener("command", function(event){ var command = String(event.target.getAttribute("oncommand")); //фылтр.. if (command == 'BrowserBack();' || command == 'BrowserBack(event);' || command == 'BrowserForward();' || command == 'BrowserForward(event);'){ setTimeout(function() { Highlight(event)}, 0) }}, false); //обработчики для табов... gBrowser.tabContainer.addEventListener("TabSelect", Highlight, false); gBrowser.addEventListener("DOMContentLoaded", function(event){ //фылтр.. //стоп, если открыть новые таби if (event.target.location.href !== getBrowser().currentURI.spec) return; //стоп, если срабатывает на фрейме var document = event.originalTarget; if (document instanceof HTMLDocument && this.contentWindow.document !== document) return; Highlight(event)}, false); //обработчики для FindBar.. gFindBar._findField.addEventListener("input", function(event){ Highlight("false")}, false); gFindBar._findField.setAttribute("ondrop","event.stopPropagation(); Find(event); "); gFindBar.addEventListener("DOMAttrModified", function(event){if (gFindBar.hidden){Highlight(event)}}, false); })(); //FindBar. контекстного меню (context Menu)....................................... (function contextFindWords(){ // выходим, если функция уже выполнялась if (document.getElementById("contextFindWords")) return; const kXULNS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"; var contextMenu = document.getElementById("contentAreaContextMenu"); var separator = document.getElementById("context-sep-properties"); var eventTarget = null; var menu = document.createElementNS(kXULNS, "menu"); menu.id = "contextFindWords"; menu.setAttribute("label", "Find"); menu.hidden = true; contextMenu.insertBefore(menu, separator); var menuPopup = document.createElementNS(kXULNS, "menupopup"); menu.appendChild(menuPopup); var lst = [ { label:"Найти на странице", command:ContexFind }, { label:"Поиск по сайту(google)", command:Search }, { label:"Выделить текст на странице", command:HighlightSel }, { label:"Автовыделение, добавить текст", command:addSel } ]; for(var i = 0, m; m = lst[i]; i++){ var menuItem = document.createElementNS(kXULNS, "menuitem"); menuItem.setAttribute("label", m.label); menuItem.setAttribute("type", "m.radio"); if ("accesskey" in m) menuItem.setAttribute("accesskey", m.accesskey); menuItem.addEventListener("command", m.command, false); menuItem.id = "context-Find-Words-" + m.label.toString(); menuPopup.appendChild(menuItem); } var contextFind = document.getElementById("contextFindWords") contextMenu.addEventListener("popupshowing", setMenuDisplay, false); function setMenuDisplay(aEvent) { if (gContextMenu.isTextSelected) { if (custombuttons.getPrefs("FindBar.contextFindWords")) { contextFind.hidden = false; } else { contextFind.hidden = true; } } } function ContexFind(){ gFindBar.onFindCommand(); //Запускаем функцию Find Find(event); } function Search(){ var focusedWindow = document. commandDispatcher. focusedWindow; var text = focusedWindow. getSelection (). toString (); var doc = getBrowser (). contentDocument; try { var url = doc. location. hostname; } catch(e) { var url = ""; } text = escape (convertFromUnicode ("UTF-8", text)); url = encodeURIComponent (url); var searchUrl = "http://www.google.com/search?as_q=" + text + "&as_sitesearch=" + url; gBrowser.selectedTab = gBrowser.addTab(searchUrl); } function HighlightSel(){ gFindBar.toggleHighlight(false); var text = document.commandDispatcher.focusedWindow.getSelection(); gFindBar._highlightDoc(true, text); goDoCommand("cmd_selectNone"); } function addSel(){ //Запускаем функцию HighlightAdd HighlightAdd(event); } })(); //Если нажать в главном меню Firefox на пункт меню 'Найти'............................................. document.getElementById("cmd_find").setAttribute("oncommand", "gFindBar.onFindCommand(); Find(event);"); //Найти на странице.................................................... Find = function(event){ if (custombuttons.getPrefs("FindBar.Highlight")){Highlight(event)}; if (!gFindBar.hidden) gFindBar._find(gFindBar._findField.value); }; //Добавить текст(выделенный / из буфера обмена) для автовыделения....................................... function HighlightAdd(event){ //Копируем выделенный текст в буфер document.getElementById("cmd_copy").doCommand(); // Get the root branch var prefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch); //setting Unicode value var str = Components.classes["@mozilla.org/supports-string;1"].createInstance(Components.interfaces.nsISupportsString); //читаем из буфера обмена и добавляем текст для автовыделения в 'about:config' str.data = readFromClipboard(); prefs.setComplexValue("FindBar.Highlight.value", Components.interfaces.nsISupportsString, str); //всплывающая подсказка custombuttons.alertSlide(AutoHighlight, str.data); //... goDoCommand("cmd_selectNone"); //Запускаем функцию Highlight(run Highlight) Highlight(event); }; //Поле текстового ввода на Findbar мигает желтим............................ function fflash(event){ var findToolbar = document.getElementById("FindToolbar"); //Следим за иконкой статуса на FindBar var findstatus = gFindBar.getElement("find-status-icon"); findstatus.addEventListener("DOMAttrModified",function(e){ if(findstatus.getAttribute("status")=="wrapped") { findToolbar.setAttribute("flash", "true"); setTimeout(function() {findToolbar.removeAttribute("flash");}, 700)}; }, false)}; //Запускаем функции fflash, fmini(Run the function fflash) document.addEventListener( "DOMContentLoaded", fflash(event), false); //Создать кнопку "Вставить и искать" на Findbar......................................................... var ubc=document.getAnonymousElementByAttribute( gFindBar, "anonid", "findbar-textbox"); var btn=document.createElementNS("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul", "toolbarbutton"); btn.setAttribute("id", "pasteButton"); btn.setAttribute("tooltiptext", "Поиск выделенного текста/из буфера"); ubc.parentNode.insertBefore(btn, ubc.nextSibling); btn.addEventListener("click", function(event){ if ( event.button == 0 ){ //Поиск по странице из буфера обмена/выделенный текст... //event.preventDefault(); //event.stopPropagation(); var sel = content.getSelection().toString(); var str =(!!sel) ? sel : readFromClipboard(); //Убираем пробелы с обоих концов текста. var str = str.replace(/^\s+|\s+$/g,""); //... gFindBar._findField.value = str; Find(event); } }, false); //Очистить поле текстового ввода на Findbar.................................................. function findFieldClear(event){ gFindBar._findField.reset(); //.... var findToolbar = document.getElementById("FindToolbar"); findToolbar.removeAttribute("red"); //... gFindBar.onFindCommand(); //.... gFindBar._highlightDoc(false); }; // FindToolbar стиль(style)....................................................................... (function(css) { var pi = document.createProcessingInstruction( 'xml-stylesheet', 'type="text/css" href="data:text/css;utf-8,' + encodeURIComponent(css) + '"' ); return document.insertBefore(pi, document.documentElement); } )(<![CDATA[ @namespace url(http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul); /*Find Toolbar.................*/ #FindToolbar { border-bottom: 1px solid grey !important; } #FindToolbar > .findbar-container > * { display: -moz-box !important; } #FindToolbar > hbox > label{-moz-appearance: none !important;font-weight: bold !important;} #find-field,.findbar-textbox{width: 250px !important;} #FindToolbar .findbar-find-fast.findbar-find-status, #FindToolbar .findbar-container>image, #FindToolbar[autohide] .findbar-closebutton {display: none !important;} #FindToolbar[red="true"] .findbar-textbox{box-shadow: 0 0 0 1em #f66 inset;} #FindToolbar:not([red="true"]) .findbar-textbox[status="notfound"]{ background: rgba(207,219,236,0.99) !important; color: black !important; box-shadow: none !important;} /*Find Toolbar, mini......................................... */ #FindToolbar[mini="true"] .findbar-textbox{ width: 16em !important; height:21px!important; padding-right: 20px !important; margin-right: 2px!important; margin-left:-4px!important} #FindToolbar[mini] { position: fixed; right: 18px; background: menu !important; box-shadow: 0px 10px 5px -10px rgba(0,0,0,.3) !important; border: 1px solid grey !important; border-top: 0 !important; border-radius: 0 0 8px 8px !important;} #FindToolbar[mini="true"] .findbar-container>checkbox{ margin-left:-24px !important; margin-right: -3px !important} #FindToolbar[mini] toolbarspacer, #FindToolbar[mini="true"] label[class="checkbox-label"], #FindToolbar[mini="true"] toolbarbutton.findbar-find-next, #FindToolbar[mini="true"] toolbarbutton.findbar-find-previous, #FindToolbar[mini="true"] .findbar-highlight label, #FindToolbar[mini="true"] .findbar-closebutton, #FindToolbar:not([pasteButton="true"]) #pasteButton, #FindToolbar[mini="true"] .findbar-find-fast[anonid="find-label"], #FindToolbar[mini="true"] .findbar-find-fast[anonid="match-case-status"] { display: none !important;} #FindToolbar[mini] .findbar-highlight, #FindToolbar[mini] .findbar-highlight[checked] { list-style-image: url("data:image/gif;base64,R0lGODlhEAAQAMQWAJmZzJlmzGZmzGZm/2aZ/5mZ/5nM/8zM/8z//5mZmWZmmf///8yZzMzMmZlmmZmZM8zMM8zMZsz/ZsyZZpmZZmZmM////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAHoAxYALAAAAAAQABAAAAVsoCUCgQCIaCoKA1G4p7q6RmEXcQoMxYEYQEMOJSAYEL+D8jC0CG6GJTKhUtiAPiSCmlK4er7FgiGzWLGIBUJRZliVCLMi0Sg7FHhq4gGJlFUNEBIQE38pExGDFIYoFIkQi4wWjhEVkiIUFQohADs=") !important; -moz-image-region: auto !important;} #pasteButton{ list-style-image: url("chrome://browser/skin/appmenu-icons.png"); -moz-image-region: rect(0 48px 16px 32px); margin-right: 3px! important;} #FindToolbar[mini="true"] textbox.findbar-textbox{ -moz-box-ordinal-group: 2 !important} #FindToolbar[mini="true"] checkbox{ -moz-box-ordinal-group: 3 !important;} #FindToolbar[mini="true"] toolbarbutton.findbar-highlight{ -moz-box-ordinal-group: 4 !important;} #FindToolbar[mini="true"] #pasteButton{ -moz-box-ordinal-group: 4 !important;} #FindToolbar[mini="true"] .findbar-closebutton{ -moz-box-ordinal-group: 7 !important;} ]]>.toString()); //устанавливаем флаг window.ToggleFindRun = 'stop';
Отредактировано bunda1 (01-04-2012 06:10:35)
Отсутствует
Добавил новые возможности:
Кнопка стала просто шикарная
PS ты бы ещё [CB]Memory Monitor восстановил, совсем бы хорошо стало.
Отсутствует
Код экспериментальной кнопки Toggle Find+3 для инициализации:
спасибо, выделение работает просто замечательно.
может всё-таки можно приделать умный хоткей ctrl+SHIFT+f который будет действовать в зависимости от состояния настройки "очищать поисковую форму"?
mzfx
Отсутствует
может всё-таки можно приделать умный хоткей ctrl+SHIFT+f который будет действовать в зависимости от состояния настройки "очищать поисковую форму"?
Хорошо, я сделаю. Тут проблема как запомнить текст из поисковой формы, можно записать в about:config но это не интересно, мне хочется другое. Хочу сделать красиво.
Отредактировано bunda1 (01-04-2012 20:26:12)
Отсутствует
bunda1
погоди, лиса же по умолчанию и так это сама запоминает.
Тебе в кнопке надо лишь правильно указать случаи, когда надо это очищать.
Случаев таких будет всего два:
1. При открытии файндбара по ctrl+f, если в настройках кнопки стоит галка у "Всегда открывать пустую поисковую форму" - это уже сделано, но как я понял - очищение срабатывает сразу же при закрытии файндбара, а надо сделать так, чтобы оно срабатывало при открытии файндбара: сначала нужно выполнить проверку: как была вызвана панель? и
.
2. При открытии файндбара по ctrl+
+f, если в настройках кнопки
стоит галка у "Всегда открывать пустую поисковую форму".
Отредактировано iDev.Pi (01-04-2012 20:10:45)
mzfx
Отсутствует
погоди, лиса же по умолчанию и так это сама запоминает.
Точно. Надо это использовать.
Тебе в кнопке надо лишь правильно указать случаи, когда надо это очищать.
Случаев таких будет всего два:
А вот и нет.
1. При открытии файндбара по ctrl+f, если в настройках кнопки стоит галка у "Всегда открывать пустую поисковую форму" - это уже сделано, но как я понял - очищение срабатывает сразу же при закрытии файндбара, а надо сделать так, чтобы оно срабатывало при открытии файндбара: сначала нужно выполнить проверку: как была вызвана панель? и
если с shift - то очищать НЕ надо
.
2. При открытии файндбара по ctrl+shift
+f, если в настройках кнопки
не
стоит галка у "Всегда открывать пустую поисковую форму".
Да ты кругом прав но так не хочется переделывать проверенный код, много кода.
Ну в общем скоро сделаю.
Отредактировано bunda1 (01-04-2012 22:02:45)
Отсутствует
А можно сделать поиск по ссылкам на странице, но не по тексту ссылки, а по её адресу?
Поясню. Обычный поиск по слову "mozilla" находит на этой странице 3 совпадения - в простом тексте и в тексте ссылки.
А на самом деле, любая ссылка на этой странице содержит в себе mozilla-russia.org
Для Оперы есть скрипт, который делает то что я хочу. Можно его как-то приспособить к ФФ?
Если что, я скрипт предоставлю.
Отсутствует
Чайник
нажми ctrl+u на странице и там и ищи
Добавлено 03-04-2012 18:41:34
А можно сделать поиск по ссылкам на странице, но не по тексту ссылки, а по её адресу? Поясню. Обычный поиск по слову "mozilla" находит на этой странице 3 совпадения - в простом тексте и в тексте ссылки.А на самом деле, любая ссылка на этой странице содержит в себе mozilla-russia.orgДля Оперы есть скрипт, который делает то что я хочу. Можно его как-то приспособить к ФФ?Если что, я скрипт предоставлю.
неа, ссылки бывают и относительные которые не будут содержать имя домена.
Отредактировано iDev.Pi (03-04-2012 18:41:34)
mzfx
Отсутствует
Чайникнажми ctrl+u на странице и там и ищи
Это можно и вместо кнопки Toggle Find искать слово в исходнике страницы.
Однако же сделали кнопку и пользуются ею. Потому что удобно.
Отсутствует
Чайник
Поиск ссылок по мере ввода ' + текст
Поиск текста по мере ввода / + текст
Горячие клавиши - Mozilla Firefox
Отредактировано bunda1 (03-04-2012 19:17:49)
Отсутствует
Чайник
Поиск ссылок по мере ввода ' ' + текстПоиск текста по мере ввода / + текстГорячие клавиши - Mozilla Firefox
Отредактировано bunda1 (Сегодня 18:04:24)
Это я знаю (кстати, поиск ссылок - там только один апостроф)
В том-то и дело, что "Поиск ссылок по мере ввода ' ' + текст" ищет не в адресе, а в тексте ссылки.
Этот поиск не найдёт на странице 555619 хотя это число есть в каждой ссылке "Сообщить модератору"
Отредактировано Чайник (03-04-2012 19:17:18)
Отсутствует
ЧайникПонятно, дай скрипт Оперы. Как ты представляешь такой поиск или как там в Опере это устроена.
Это сам скрипт
http://ompldr.org/vZDh6MQ
А это код кнопки, которая его активизирует:
Если я правильно понял, Go to page это как в ФФ loadUri
Отредактировано Чайник (03-04-2012 21:52:12)
Отсутствует
может всё-таки можно приделать умный хоткей ctrl+SHIFT+f который будет действовать в зависимости от состояния настройки "очищать поисковую форму"?
Принимай работу. Ctrl+Snift+F также работает при открытом файндбаре.
Код экспериментальной кнопки Toggle Find+3 для инициализации:
//настройка функций кликов мыши(Mouse Click settings)................................................... this.onclick = function(event) { if(event.button == 0) { // Действие при клике ЛКМ gFindBar.hidden ? gFindBar.onFindCommand() : gFindBar.close(); Find(event); } else if(event.button == 1) { // Действие при клике СКМ gFindBar.hidden ? gFindBar.onFindCommand() : gFindBar.close(); goDoCommand("cmd_selectNone"); goDoCommand("cmd_paste"); } }; //Объявляем ..... var prefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService); var clipboard = Components.classes["@mozilla.org/widget/clipboardhelper;1"]. getService(Components.interfaces.nsIClipboardHelper); var this_ = this; var AutoHighlight ='Автовыделение' var AutoClose ='Автоматически закрыть' var CloseTimer ='Закрыть через ' var ClearPref ='Сбросить текст' //подсказка............................................................................. this.showTFinfo = function() { //getting prefs Unicode value var prefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService); var r = custombuttons.getPrefs("FindBar.Highlight")? prefs.getComplexValue("FindBar.Highlight.value",Components.interfaces.nsISupportsString).data : 'выключена'; var Val = "\n\n"+ AutoHighlight +": "+ r; //обрезать подсказку для "Автовыделение" var HValue = Val.substring(0,50); var HDots =(Val.length > 50) ? '....' : ""; //.... this.tooltipText = "Поиск по странице" +"\n" + "Л: Показать - скрыть поиск по странице" +"\n" +"С: Поиск по странице из буфера обмена" +"\n"+ "П: Mеню + CB меню" + HValue + HDots; } this.setAttribute("onmouseover", "this.showTFinfo()"); //справка(Help) //this.setAttribute("Help", "event.stopPropagation(); gBrowser.selectedTab = gBrowser.addTab('https://forum.mozilla-russia.org/viewtopic.php?pid=550855#p550855]09-03-2012 19:18:31')"); //проверить наличие строк в about:config и создать если не существует(Add preferences)........................................ if (custombuttons.getPrefs("FindBar.version") !== '10') { prefs.setCharPref("FindBar.version", "10"); prefs.setBoolPref("FindBar.Highlight", true); prefs.setCharPref("FindBar.Highlight.value", "??????"); prefs.setBoolPref("FindBar.autoclear", false); prefs.setBoolPref("FindBar.contextFindWords", true); prefs.setBoolPref("FindBar.ToggleWithDoubleMiddleClick", false); prefs.setCharPref("ui.textHighlightBackground", "#ef0fff");//http://coloria.net/bonus/colornames.htm //prefs.setCharPref("ui.textHighlightForeground", "#000000");//http://coloria.net/bonus/colornames.htm prefs.setBoolPref("FindBar.mini", false); custombuttons.clearPrefs("FindBar.ClearButton"); prefs.setBoolPref("FindBar.pasteButton", false); prefs.setBoolPref("FindBar.auto_Close", false); prefs.setCharPref("FindBar.CloseTimer", "7");//7 сек(7 sec) prefs.setCharPref("FindBar.AutohighlightNum", "1"); prefs.setBoolPref("FindBar.Autohighlight.ToggleWithDoubleClick", false); }; //настройка меню(CB menu settings)................................................... //Объявляем ..... var c ='true'; var n = 'false'; //изменить нужный пункт меню(toggle menuitems) //переключаем настройки в about:config(toggle preference) this.CBlabel = function (mi, id) { //Автоматически закрыть(FB auto close).... if(!id || id == "FBClose") { //переключаем настройки в about:config s = "FindBar.auto_Close"; togglePref(s); //Запускаем функцию autohide if (id) Autohide(event); //изменить нужный пункт меню var cek = (custombuttons.getPrefs(s)? c: n); this.FBCcek = cek; if(mi) mi.cek = cek; }; //FB auto close timer..... if(!id || id == "CloseTimer") { (function () { //Стоп, при инициализации кнопки if (!id) return; s = "FindBar.CloseTimer"; //switch auto close timer+"\n" + var URL = custombuttons.promptBox(AutoClose, CloseTimer+custombuttons.getPrefs(s) + ' секунд', ''); if (URL[0] == false) return; else var timer = [URL[1]]; //переключаем настройки в about:config(toggle preference) prefs.setCharPref(s, timer); })(); //пункт меню(menuitems) var label = CloseTimer + custombuttons.getPrefs("FindBar.CloseTimer") + ' секунд'; this.CloseTimer = label; if(mi) mi.label = label; }; //FindBar.mini...... if(!id || id == "FBmini") { //переключаем настройки в about:config s = "FindBar.mini"; togglePref(s); //Запускаем функцию fmini(run fmini) if (id) fmini(event); //изменить нужный пункт меню var cek = (custombuttons.getPrefs(s)? c : n); this.FBcek = cek; if(mi) mi.cek = cek; }; //Кнопка 'Вставить и искать'...... if(!id || id == "FBbutt") { //переключаем настройки в about:config s = "FindBar.pasteButton"; togglePref(s); //Запускаем функции pasteButton и fmini(run pasteButton, fmini) if (id) pasteButton(event); //изменить нужный пункт меню var cek = (custombuttons.getPrefs(s)? c : n); this.FpBcek = cek; if(mi) mi.cek = cek; }; //Find в контекстном меню(Find in the context menu)..... if(!id || id == "FindInMenu") { // переключаем настройки в about:config s = "FindBar.contextFindWords"; togglePref(s); //изменить нужный пункт меню var cek = (custombuttons.getPrefs(s)? c : n); this.FIMcek = cek; if(mi) mi.cek = cek; }; //Автоматически очищать поле текстового ввода на Findbar..... if(!id || id == "autoClear") { // переключаем настройки в about:config s = "FindBar.autoclear"; togglePref(s); //Очищистить поле текстового ввода если Findbar закрыт. if (gFindBar.hidden && custombuttons.getPrefs("FindBar.autoclear")) gFindBar._findField.value = ''; //изменить нужный пункт меню var cek = (custombuttons.getPrefs(s)? c : n); this.aCcek = cek; if(mi) mi.cek = cek; }; //Переключить двойным средним кликом(Toggle with double middle click)..... if(!id || id == "MiddleClick") { // переключаем настройки в about:config s = "FindBar.ToggleWithDoubleMiddleClick"; togglePref(s); //изменить нужный пункт меню var cek = (custombuttons.getPrefs(s)? c : n); this.MCcek = cek; if(mi) mi.cek = cek; }; //Автовыделение двойным кликом..... if(!id || id == "dblclikHighlight") { // переключаем настройки в about:config s = "FindBar.Autohighlight.ToggleWithDoubleClick"; togglePref(s); //изменить нужный пункт меню(toggle menuitems) var cek = (custombuttons.getPrefs(s)? c : n); this.dbcHcek = cek; if(mi) mi.cek = cek; }; //Автовыделение(Switch, Auto Highlight)..... if(!id || id == "SwitchHighlight") { // переключаем настройки в about:config s = "FindBar.Highlight"; togglePref(s); //Изменить иконку кнопки if (id) ToggleImage(event); //переключить кнопку 'Highlight'(toggle Highlight) if (id) document.getElementById('FindToolbar').getElement('highlight').removeAttribute("checked"); //Запускаем функцию Highlight(run function Highlight) if (id) Highlight(event); //изменить нужный пункт меню(toggle menuitems) var cek = (custombuttons.getPrefs(s)? c : n); this.aHcek = cek; if(mi) mi.cek = cek; }; //Изменить цвет для Автовыделение..... if(!id || id == "addColor") { (function () { //Стоп, при инициализации кнопки if (!id) return; //создаем модальное окно для ввода цвета var URL = custombuttons.promptBox('Изменить цвет для Автовыделение', 'По умолчанию: #ef0fff', ''); if (URL[0] == false) return; else var color = [URL[1]]; //переключаем настройки в about:config(toggle preference) prefs.setCharPref("ui.textHighlightBackground", color); })(); //пункт меню(menuitems) var label = 'Изменить цвет' + ': ' + custombuttons.getPrefs("ui.textHighlightBackground"); this.addColor = label; if(mi) mi.label = label; }; //Автовыделение, добавить текст....... if(!id || id == "AddText") { //Запускаем функцию HighlightAdd(run function HighlightAdd) if (id) HighlightAdd(event); }; //Автовыделение, сбросить ..... if(!id || id == "Clear") { //сбросить настройки в about:config if (id) prefs.setCharPref("FindBar.Highlight.value", ""); //Запускаем функцию Highlight(run function Highlight) if (id) Highlight(event); //всплывающая подсказка if (id) custombuttons.alertSlide(ClearPref,'????'); }; //переключаем настройки в about:config(toggle preference).... function togglePref(s){ //Стоп, при инициализации кнопки if (!id) return; //переключаем настройки custombuttons.setPrefs(s, !custombuttons.getPrefs(s)); } }; //Запускаем функцию CBlabel(run CBlabel)......... this.CBlabel(); //пункти меню(Our menu items) .... this.ss = [ { cek: this.FBCcek, label: AutoClose, cmd: 'document.popupNode.CBlabel(this, "FBClose")', sItemId: '', type:'checkbox'}, { label: this.CloseTimer, cmd: 'document.popupNode.CBlabel(this, "CloseTimer")', sItemId: ''}, { label: "separator", sItemId: ''}, { cek: this.FBcek, label: 'FindBar мини', cmd: 'document.popupNode.CBlabel(this, "FBmini")', sItemId: '', type:'checkbox'}, { cek: this.FpBcek, label: 'Кнопка "Вставить и искать" на FindBar', cmd: 'document.popupNode.CBlabel(this, "FBbutt")', sItemId: '', type:'checkbox'}, { label: "separator", sItemId: ''}, { cek: this.FIMcek, label: 'Find в контекстном меню', cmd: 'document.popupNode.CBlabel(this, "FindInMenu")', sItemId:'', type:'checkbox'}, { cek: this.aCcek, label: 'Всегда открывать пустую поисковую форму', cmd: 'document.popupNode.CBlabel(this, "autoClear")', sItemId:'', type:'checkbox'}, { cek: this.MCcek, label: 'Переключать двойным средним кликом', cmd: 'document.popupNode.CBlabel(this, "MiddleClick")', sItemId:'', type:'checkbox'}, { label: "separator", sItemId: ''}, { cek: this.dbcHcek, label: 'Автовыделение двойным кликом на поисковой форме', cmd: 'document.popupNode.CBlabel(this, "dblclikHighlight")', sItemId: '', type:'checkbox'}, { cek: this.aHcek, label: AutoHighlight, cmd: 'document.popupNode.CBlabel(this, "SwitchHighlight")', sItemId: '', type:'checkbox'}, { label: this.addColor, cmd: 'document.popupNode.CBlabel(this, "addColor")', sItemId: ''}, { label: 'Добавить текст', cmd: 'document.popupNode.CBlabel(this, "AddText")', sItemId: ''}, { label: ClearPref, cmd: 'document.popupNode.CBlabel(this, "Clear")', sItemId: ''}]; // Our Initialization function for creating the context menu, setting up menuitems and telling var Cb = custombuttons; this.mObj = Cb.getCbContextObj(this); this.init = function(x) { x.mObj.setSub(); var nItem = {}, mItem = {}; document.getElementById(CB2const.sCBCtxtMenu).setAttribute("oncommand", "event.stopPropagation()"); for(var i in x.ss) { nItem = new x.mObj.getItem(); nItem.id = 'Note'; nItem.label = x.ss[i].label; if (nItem.label == "separator") { nItem = document.createElement("menuseparator"); } nItem.value = String(i); mItem = x.mObj.insertBefore(nItem , x.mObj.oMenu.lastChild); this.ss[i].sItemId = mItem.id; mItem.setAttribute('oncommand',x.ss[i].cmd); if("type" in x.ss[i]) mItem.setAttribute('type', x.ss[i].type); mItem.setAttribute('checked', x.ss[i].cek) mItem.setAttribute( 'autocheck',true) } x.mObj.getItem(); nItem = x.mObj.getItem(); nItem.id = 'Note'; this.separator = x.mObj.insertBefore( nItem , x.mObj.oMenu.lastChild); } this.init(this); //Стоп, при открытии настройки панелей.................................................... if (window.ToggleFindRun == 'stop') return; //Findbar, переклучить атрибут 'mini'(Findbar, set and remove attribute 'mini')........... //Findbar, установить и удалить 'hits'(Findbar, set and remove 'hits')........... function fmini(event){ //FindBar, auto find if (!gFindBar.hidden) { //Findbar, фокус(Findbar, focus) gFindBar._findField.focus(); gFindBar.onFindCommand(); } var findToolbar = document.getElementById("FindToolbar"); var HighBut = document.getAnonymousElementByAttribute( gFindBar, "anonid", "highlight"); if (custombuttons.getPrefs("FindBar.mini")) { //... var highlightBtn = document.getElementById('FindToolbar').getElement('highlight'); if (highlightBtn.checked) { gFindBar._findField.style.color = prefs.getCharPref("ui.textHighlightBackground"); highlightBtn.removeAttribute("checked"); }; findToolbar.setAttribute("mini", "true"); this.hits = ' '; var text = "L = Искать следущее"+"\n" +"M = Поиск выделенного текста/из буфера" + "\n" + "R = Искать предыдущее"; HighBut.setAttribute("tooltiptext", text ); } else { var highlightBtn = document.getElementById('FindToolbar').getElement('highlight'); findToolbar.removeAttribute("mini") this.hits = ' hits'; HighBut.setAttribute("tooltiptext", "Highlight"); //... if (!!gFindBar._findField.style.color) { highlightBtn.setAttribute("checked", "true"); gFindBar._findField.removeAttribute("style"); } } //Findbar, убрать фокус(Findbar, hide focus) _content.focus(); }; //Findbar, переклучить атрибут 'autohide'...... function Autohide(event){ var f = document.getElementById("FindToolbar"); custombuttons.getPrefs("FindBar.auto_Close") ? f.setAttribute("autohide", "true") : f.removeAttribute("autohide"); }; //Findbar, переклучить атрибут 'pasteButton'...... function pasteButton(event){ var ft = document.getElementById("FindToolbar"); custombuttons.getPrefs("FindBar.pasteButton") ? ft.setAttribute("pasteButton", "true") : ft.removeAttribute("pasteButton"); }; //Запускаем функции fmini, Autohide, pasteButton setTimeout(function(){ fmini(event); Autohide(event); pasteButton(event);}, 200) //Изменить иконку кнопки................................................................. function ToggleImage(event){ // toggle button image if (custombuttonsUtils.getPrefs("FindBar.Highlight")) { this_.image="data:image/x-icon;base64,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"; } else { this_.image="data:image/x-icon;base64,AAABAAEAExMAAAEAIAAYBgAAFgAAACgAAAATAAAAJgAAAAEAIAAAAAAA8AUAAAAAAAAAAAAAAAAAAAAAAAAAAgACAAAAAAdUOucBYUD/AF09/QBcPP8BYkD/AF8//wBePf8AWTn/AE0y/wBLMf8AWTn/AWNC/wBbO/0BXj3/B1E45wAAAAAAAAACAAAAAAVZO9sCek3/AX5O/wB+T/8Afk//An9P/wB9TP8PhFf/No1r/yZqUf8AUDL/A3BF/wGBUP8AfU7/AH5O/wN6Tf8FWTvbAAAAAAhWPOcBgVH9AIpU/wSKVf8BiVT/AIlU/wSLV/8Ag0z/N6F3/9Xw5P+Wsaj/AEot/wN1S/8BiFX/AIlU/wCJVP8AilT/AH1P/QdTOucBaET/CIxY/giRWv8JkFn/CI9Z/wiPWf8MkV3/AIhR/0Cpgv/y//r/qb63/wBQMP8He07/BoxX/wiPWf8Ij1n/CJFa/wiMVv4CZUP/AWhF/QmVXf8Hml7/CJde/wmcYP8JmV//Dptj/wCUWP9GrYP/8f74/6zDuv8AWjX/CYJR/waWXP8ImV//CJdf/wmaYP8Ill3/AGlE/QNtRv8InF7/CKFk/wifYP8JoGP/Cp9j/wudZP8Ag0f/MpNp/9vw5/+cu67/AE4o/wtzSP8Lilf/CZlf/wueX/8JoGH/CJxe/wNuRv8GcEj/DaJi/w2oZ/8NpWT/D6dm/wejY/8LlV3/PZl1/5zEtP/5+/j/xtvS/z2GaP8LaUP/BW5E/weJVP8IoGH/C6hl/w2iYv8GcEj/BXNL/wyqZv8OsGn/D65o/w6uaf8ap2z/gcWn/9vn4P/L5dn/ruDK/87r3v/Y6OD/fbSc/xh0S/8IdEb/B5he/xKtaP8Mqmb/BXNK/wd3Sv8QsGv/DrZs/xC0bf8BrWP/f86r/9jn4P+OyK//OLN//ym6fP9FxIz/m+LC/9vy6P97s5n/AGc4/wmKU/8Qrmb/D7Fr/wd3Sv8JfEz/Fblx/yfDfv8rwoD/QsSK/9n16f+jxrf/IpRj/xevbv8nxH//HL11/zPCg/+07NP/1+ng/zSJY/8djFz/Ird1/xi4cv8JfEz/CX5P/yvFgP9F05L/Q9CQ/4vgt//V7uP/ZKKF/zGaaf9PypP/T9OV/1HRlf9BzY3/feCx/9fu4/92rJX/MJRo/0LHi/8tw3//CH5P/xKBVP9C0JD/S9qa/0DVkv+L5bv/xunY/12egP8ojV//Qb2E/0fUk/9L2Jb/QdGN/3Xbq//H5dj/dq6U/y+ea/9L05T/Qc+P/xKCVP8giV3/RtaU/0zfm/9E25X/fOWz/+H67v+AuZ//J4ZY/zedbP9Hw4v/Rc+R/znAgv+K1bH/2enh/2ivj/87uYH/TNyZ/0bWlf8giVz/IYxf/0vblv9Q5Zz/T+Ka/1Xjn//S++f/yeXY/1+qhv8vi13/LJVk/zelcv9ktY3/x9/T/8nl1/9Ht4L/S9WV/0/knf9L25b/IYte/yCLXv1N4Zr/Ueuh/1HooP9H6Zv/g+68/9v67P/R7OH/iMOp/2OoiP+Etp7/0OLZ/9fw5P931Kn/Q9WP/1Hmnv9S7aL/TeGa/yCLXv0lkmT/T+ed/lTyo/9T76D/Vu+l/1Dvof968bf/w/fc/+n98//v//j/7P/1/8D22/9x5a7/S+Ob/1Tuo/9T76L/VfKm/0/onP4kkWL/K35b51Hfmv1Y+Kb/WPel/1j3pP9a9qf/VfWl/1v2p/9m96z/afat/2b3rP9c9qj/Vvel/1n4pv9Y96T/V/em/1f4pv9Q3pn9K35b5wAAAABAnXPbUuef/1T0ov9X9aH/VvSh/1X0o/9X9aL/VvWi/1X0ov9V9KL/VfSj/1b0o/9V9KL/VfSi/1T0o/9S5p7/PZZu2wAAAAAAAgICAAAAAD2NaudFr4H/Q6x8/UStfP9ErXz/RK18/0StfP9ErXz/RK18/0StfP9ErXz/RK18/0Ose/1Eq33/Popr5wAAAAAAAgICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=="; } }; ToggleImage(event); //find bar сверху (move find bar to the top)................................................ XPCOMUtils.defineLazyGetter(window, "gFindBar", function() { let XULNS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"; let findbar = document.createElementNS(XULNS, "findbar"); findbar.setAttribute("browserid", "content"); findbar.id = "FindToolbar"; gBrowser.parentNode.insertBefore(findbar, gBrowser); // Force a style flush to ensure that our binding is attached. findbar.clientTop; window.gFindBarInitialized = true; return findbar; }); //find bar, показать количество совпадений(find bar,show the number of matches)...@author slimx................. (function() { //add label to findbar var status = document.getAnonymousElementByAttribute(gFindBar, 'anonid', 'match-case-status'); var sep = document.createElement("toolbarspacer"); var count = document.createElement("label"); count.hidden = true; status.parentNode.insertBefore(sep, status); status.parentNode.insertBefore(count, status);//findbar-container gFindBar.__proto__._foundMatches = count; gFindBar.__proto__._updateMatchesCount = function(aRes) { if (!this._updateMatchCountTimeout) window.clearTimeout(this._updateMatchCountTimeout); this._updateMatchCountTimeout = window.setTimeout(function(aRes, aSelf) { aSelf._updateMatchesCountWorker(aRes); }, 0, aRes, this); } gFindBar.__proto__._updateMatchesCountWorker = function(aRes) { var word = this._findField.value; if (aRes == this.nsITypeAheadFind.FIND_NOTFOUND || !word) { this._foundMatches.hidden = true; this._foundMatches.value = ""; } else { var matchesCount = this._countMatches(word).toString(); if (matchesCount != "0") { if (matchesCount == "1") this._foundMatches.value = matchesCount + hits; else if (matchesCount == "-1") { var matchLimit = 100; this._foundMatches.value = " \>"+ matchLimit + hits; // var key = (matchLimit > 1000) ? "Decrease" : "Increase"; } else this._foundMatches.value = matchesCount + hits; this._foundMatches.hidden = false; //Findbar, удалить атрибут 'red'(Findbar, remove attribute 'red').............. var findToolbar = document.getElementById("FindToolbar"); findToolbar.removeAttribute("red"); } else { this._foundMatches.hidden = true; this._foundMatches.value = ""; //Findbar, установить атрибут 'red'(Findbar, set attribute 'red')............... var findToolbar = document.getElementById("FindToolbar"); findToolbar.setAttribute("red", "true"); } window.clearTimeout(this._updateMatchCountTimeout); } } gFindBar.__proto__._countMatches = function(aWord, aWindow) { var win = aWindow || this.browser.contentWindow; var countFound = 0; for (var i = 0, count; win.frames && i < win.frames.length; i++) { if ((count = this._countMatches(aWord, win.frames[i])) != -1) countFound += count; else return count; } var doc = win.document; if (!doc || !(doc instanceof HTMLDocument)) return countFound; var body = doc.body; var count = body.childNodes.length; var searchRange = doc.createRange(); var startPt = doc.createRange(); var endPt = doc.createRange(); searchRange.setStart(body, 0); searchRange.setEnd(body, count); startPt.setStart(body, 0); startPt.setEnd(body, 0); endPt.setStart(body, count); endPt.setEnd(body, count); var retRange = null; var finder = Components.classes["@mozilla.org/embedcomp/rangefind;1"] .createInstance() .QueryInterface(Components.interfaces.nsIFind); finder.caseSensitive = this._shouldBeCaseSensitive(aWord); var matchLimit = 100; while ((retRange = finder.Find(aWord, searchRange, startPt, endPt))) { if (this._rangeIsVisible(retRange, win)) { if (this._findMode == this.FIND_LINKS) { if (this._rangeStartsInLink(retRange)) ++ countFound; } else ++ countFound; } if (countFound == matchLimit) { countFound = -1; break; } startPt = doc.createRange(); startPt.setStart(retRange.startContainer, retRange.startOffset + 1); } return countFound; } gFindBar.__proto__._rangeIsVisible = function(aRange, aWindow) { var node = aRange.startContainer; if (node.nodeType == node.ELEMENT_NODE) { if (node.hasChildNodes) { var childNode = node.childNodes[aRange.startOffset]; if (childNode) node = childNode; } } while (node && node.nodeType != node.ELEMENT_NODE) node = node.parentNode; // There is no perfect way to check if a node is visible in JavaScript, // so use the best measures we can have if (node) { var style = aWindow.getComputedStyle(node, ""); if (style) { if (style.visibility == "hidden" || style.visibility == "collapse" || style.display == "none") return false; if (style.left != "auto" && style.width != "auto") if (style.left < 0 && style.left + style.width < 0) return false; if (style.top != "auto" && style.height != "auto") if (style.top < 0 && style.top + style.height < 0) return false; } } return true; } gFindBar.__proto__._rangeStartsInLink = function(aRange) { var isInsideLink = false; var node = aRange.startContainer; if (node.nodeType == node.ELEMENT_NODE) { if (node.hasChildNodes) { var childNode = node.childNodes[aRange.startOffset]; if (childNode) node = childNode; } } const XLink_NS = "http://www.w3.org/1999/xlink"; do { if (node instanceof HTMLAnchorElement) { isInsideLink = node.hasAttribute("href");m break; } else if (typeof node.hasAttributeNS == "function" && node.hasAttributeNS(XLink_NS, "href")) { isInsideLink = (node.getAttributeNS(XLink_NS, "type") == "simple"); break; } node = node.parentNode; } while (node); return isInsideLink; } //insert count function to original eval("gFindBar._updateCaseSensitivity=" + gFindBar._updateCaseSensitivity.toString().slice(0, -1) + "this._updateMatchesCount();}"); eval("gFindBar._updateStatusUI=" + gFindBar._updateStatusUI.toString().slice(0, -1) + "this._updateMatchesCount();}"); })(); //FindBar, поиск колесиком мыши(FindBar, Mouse Scroll find )................................................ gFindBar.addEventListener('DOMMouseScroll', function (event){ //Найти (Find) gFindBar.onFindAgainCommand(event.detail < 0); }, false); //переключить 'Поиск на странице' двойным средним кликом на странице(toggle Find Bar, if Double midlle Click in page).......... //добавляем обработчик для обработки нажатие на кнопку мыши на странице....... gBrowser.addEventListener("mouseup", function(event){ //если нажатие на среднюю кнопку мыши if (event.button !== 1) return; //если разрешено в настройках(about:config) if (!custombuttons.getPrefs("FindBar.ToggleWithDoubleMiddleClick")) return; var _this = this; //если установлен флаг if (_this.open){ //переключить 'Поиск на странице' gFindBar.hidden ? gFindBar.onFindCommand() : gFindBar.close(); Find(event); gFindBar._findField.focus(); } //устанавливаем флаг _this.open = true; //сбросить флаг по таймеру this.timer = 0; this.timer = setTimeout(function(){ _this.open = false;}, 600); }, false); //Автоматически очищать поле текстового ввода на Findbar............................................ gFindBar.addEventListener("DOMAttrModified", function(event){ if (gFindBar.hidden){ gFindBar.removeAttribute("red"); this.clear = true }; if (!custombuttons.getPrefs("FindBar.autoclear")) return; if (!this.clear) return; if (gFindBar.hidden) { if (gFindBar._findField.value){ window.FB_fFval = gFindBar._findField.value }; gFindBar._findField.value = ''; } if (!gFindBar.hidden) { findFieldClear(event); this.clear = false; } }, false); //findbar очистить, кликнуть правим кликом на findbar's label-Найти: или на иконку поиска на FindBar mini(FindBar clear findText, right click on findbar's label, else Find button).............. //findbar поиск, кликнуть левым кликом на findbar's label-Найти: или на иконку поиска на FindBar mini(FindBar find, left click on findbar's label, else Find button).............. var FindButt = document.getAnonymousElementByAttribute(gFindBar, "anonid", "find-label"); FindButt.setAttribute("onclick", "event.stopPropagation(); clickFind(event);"); //.... var HighBut = document.getAnonymousElementByAttribute( gFindBar, "anonid", "highlight"); HighBut.addEventListener("click", function(event){ if (custombuttons.getPrefs("FindBar.mini")) { gFindBar.getElement("highlight").removeAttribute("checked"); //....... clickFind(event); } }, true); //..................... clickFind = function(event){ if ( event.button == 0 ) { event.preventDefault(); event.stopPropagation(); if (custombuttons.getPrefs("FindBar.Highlight")){Highlight(event)}; //Искать следующее gFindBar.onFindAgainCommand(false); } else if ( event.button == 2 ) { if (custombuttons.getPrefs("FindBar.Highlight")){Highlight(event)}; //Запускаем функцию findFieldClear или искать предыдущее custombuttons.getPrefs("FindBar.mini") ? gFindBar.onFindAgainCommand(true) : findFieldClear(event); } }; //кнопка 'Highlight' на FindBar.mini всегда включена................................................................... var highlightBtn = document.getElementById('FindToolbar').getElement('highlight'); highlightBtn.addEventListener("mouseover", function(event){ if (custombuttons.getPrefs("FindBar.mini")){ highlightBtn.setAttribute("disabled", "false")} }, false); //Поиск по странице из буфера обмена/выделенный текст, если кликнуть средним кликом на findbar или на иконку поиска на FindBar mini ....... //Двойной клик в строке поиска FindBar мини включает и выключает обычную подсветку текста из панели поиска........... //Стоп, при открытии настройки панелей(stop, if onDestroy) if (window.ToggleFindRun !== 'stop') (function () { //Поиск по странице из буфера обмена/выделенный текст gFindBar.addEventListener("click", function(event){ if ( event.button !== 1 )return; event.preventDefault(); event.stopPropagation(); //........ var sel = content.getSelection().toString(); var str =(!!sel) ? sel : readFromClipboard(); //Убираем пробелы с обоих концов текста. var str = str.replace(/^\s+|\s+$/g,""); //... gFindBar._findField.value = str; Find(event); }, true); //переключить кнопку 'Highlight'......... gFindBar._findField.addEventListener("dblclick", function(event){ if ( event.button != 0 )return; event.preventDefault(); event.stopPropagation() //.... if (!custombuttons.getPrefs("FindBar.mini")) return; if (custombuttons.getPrefs("FindBar.Autohighlight.ToggleWithDoubleClick")){ // переключаем настройки в about:config s = "FindBar.Highlight"; custombuttons.setPrefs(s, !custombuttons.getPrefs(s)); //Изменить иконку кнопки ToggleImage(event); //переключить кнопку 'Highlight'(toggle Highlight) document.getElementById('FindToolbar').getElement('highlight').removeAttribute("checked"); //Запускаем функцию Highlight(run function Highlight) Highlight(event); } else{ if (custombuttonsUtils. getPrefs ("FindBar.Highlight")) return; //Запускаем функцию toggleHighlight toggleHighlight(event); } //Findbar, убрать фокус(Findbar, hide focus) _content.focus(); }, false); })(); //ЛКМ в форму поиска - выделить текст в форме поиска............................ gFindBar._findField.addEventListener("click", function(event){ if ( event.button !== 0 )return; if(!this.FB_fFselect){ gFindBar._findField.select();} this.FB_fFselect = true; }, false); gFindBar._findField.addEventListener("blur", function(event){ this.FB_fFselect = false; }, false); //ЛКМ + ПКМ очистить поле текстового ввода на Findbar........................................................ //добавляем обработчики для обработки мышиных событий на поле текстового ввода... //нажатие на кнопку мыши, запускаем функцию 'buttonDown' gFindBar._findField.addEventListener("mousedown", function(event){ClearFindField.buttonDown(event); }, true); //нажатая кнопка мыши отпущена, запускаем функцию 'buttonUp' gFindBar._findField.addEventListener("click", function(event){ ClearFindField.buttonUp(event); }, true);//mouseup //...... var ClearFindField = { buttonDown : function(event) { //если нажатие на левую кнопку мыши, устанавливаем флаг if (0 == event.button){ this.leftButtonDown = true }; //если нажатие на правую кнопку мыши и если установлен флаг if (2 == event.button && this.leftButtonDown){ //сбросить флаг, устанавить флаг this.leftButtonDown = false; this.stopMenu = true; //Очистить поле текстового ввода setTimeout(function(){ findFieldClear(event);}, 0); if (custombuttons.getPrefs("FindBar.Highlight")){Highlight(event)}; } }, buttonUp : function(event) { //если нажатая левая кнопка мыши отпущена if (event.button == 0) { //сбросить флаг this.leftButtonDown = false; } //если нажатая правая кнопка мыши отпущена и если установлен флаг if (event.button == 2 && this.stopMenu){ event.preventDefault(); event.stopPropagation(); //сбросить флаг this.stopMenu = false; } } }; //FindBar, автоматически закрыть(autohide Findbar)................................. //Стоп, при открытии настройки панелей(stop, if onDestroy) if (window.ToggleFindRun !== 'stop') (function () { function go() { gFindBar.close(); window.ACRun = ''; } function on() { if (!custombuttons.getPrefs("FindBar.auto_Close")) return; if (window.ACRun == 'stop') return; window.ACRun = 'stop'; timeoutId = 0; timeoutId = setTimeout(go, custombuttons.getPrefs("FindBar.CloseTimer") + '000') } function off() { if (!custombuttons.getPrefs("FindBar.auto_Close")) return; window.ACRun = ''; clearTimeout(timeoutId); } gFindBar.addEventListener("DOMAttrModified", function(event){if (gFindBar.hidden) off() }, false); addEventListener('mouseover', function(event){ if (!gFindBar.hidden) (event.target.nodeName !== 'findbar')? on(): off() }, false); })(); //FindBar, сочетания клавиш(Key config)......................................................... //Стоп, при открытии настройки панелей(stop, if onDestroy) if (window.ToggleFindRun !== 'stop')(function () { window.addEventListener('keydown', function (event){ //FindBar(ctrl+ F)показать - скрыть(Toggle Find Bar)......... if ((event.ctrlKey)&&(!event.altKey)&&(!event.shiftKey)&&(event.keyCode==70)) { event.preventDefault(); event.stopPropagation(); //переключить 'Поиск на странице' gFindBar.hidden ? gFindBar.onFindCommand() : gFindBar.close(); Find(event); gFindBar._findField.focus(); } //Findbar(ctrl+ALT+F), поиск по странице из буфера обмена(find from clipboard)............. if ((event.ctrlKey)&&(event.altKey)&&(event.keyCode==70)) { gFindBar.hidden ? gFindBar.onFindCommand() : gFindBar.close(); goDoCommand("cmd_selectNone"); goDoCommand("cmd_paste"); Find(event); } //Findbar(ctrl+Snift+F), открывать Findbar с чистой формой/обычный поиск (Find, clear/normal find)............. if ((event.ctrlKey)&&(!event.altKey)&&(event.shiftKey)&&(event.keyCode==70)) { var val = (window.FB_fFval)? window.FB_fFval: ''; var sel = document.commandDispatcher.focusedWindow.getSelection().toString(); if (sel.length !== 0){ val = sel} gFindBar.onFindCommand() custombuttons.getPrefs("FindBar.autoclear")? gFindBar._findField.value = val : findFieldClear(event); Find(event); } //Findbar(ctrl+ALT+H), FindBar, вести слова для выделение(set Highlight words)... if ((event.ctrlKey)&&(event.altKey)&&(event.keyCode==72)) { //Запускаем функцию HighlightAdd(run HighlightAdd) HighlightAdd(event); } }, false); })(); //переключить кнопку 'Highlight'(toggle Highlight)............................................ function toggleHighlight(event) { var highlightBtn = document.getElementById('FindToolbar').getElement('highlight'); //... if (!gFindBar._findField.style.color) { gFindBar._highlightDoc(true, gFindBar._findField.value); gFindBar._findField.style.color = prefs.getCharPref("ui.textHighlightBackground"); } else { gFindBar._highlightDoc(false); gFindBar._findField.removeAttribute("style"); } }; //Автоматически выделить заранее введенные слова (auto Highlight words permanent).................................................... Highlight = function(event) { //устанавливаем флаги... var m = true; if (event =='false' || event =='[object UIEvent]' || event =='[object DragEvent]' || event =='[object MouseEvent]'){var m = false }; //hide Highlight gFindBar._highlightDoc(false); //.... var FBNum = custombuttons.getPrefs("FindBar.AutohighlightNum"); var FBvalue = gFindBar._findField.value; //.... if (!gFindBar.hidden) { //... if (!!gFindBar._findField.style.color) { gFindBar._findField.removeAttribute("style"); } //Findbar, удалить атрибут 'red'(Findbar, remove attribute 'red').............. if (FBvalue.length == '0') { var findToolbar = document.getElementById("FindToolbar"); findToolbar.removeAttribute("red"); } //FindBar, auto find if (m) { //Findbar, фокус(Findbar, focus) gFindBar._findField.focus(); gFindBar.onFindCommand(); //Findbar, убрать фокус(Findbar, hide focus) _content.focus(); } } //auto Highlight if (custombuttonsUtils.getPrefs("FindBar.Highlight")) { if (gFindBar.hidden) { //getting prefs Unicode value var value = prefs.getComplexValue("FindBar.Highlight.value", Components.interfaces.nsISupportsString).data; } if (!gFindBar.hidden) { var value =(FBvalue.length > FBNum)? FBvalue : "??????"; } //Highlight gFindBar._highlightDoc(true, value); } }; if (window.ToggleFindRun !== 'stop') (function () { //добавляем обработчики........ //отслеживаем команду Назад(back) и Вперёд(forward)... window.addEventListener("command", function(event){ var command = String(event.target.getAttribute("oncommand")); //фылтр.. if (command == 'BrowserBack();' || command == 'BrowserBack(event);' || command == 'BrowserForward();' || command == 'BrowserForward(event);'){ setTimeout(function() { Highlight(event)}, 0) }}, false); //обработчики для табов... gBrowser.tabContainer.addEventListener("TabSelect", Highlight, false); gBrowser.addEventListener("DOMContentLoaded", function(event){ //фылтр.. //стоп, если открыть новые таби if (event.target.location.href !== getBrowser().currentURI.spec) return; //стоп, если срабатывает на фрейме var document = event.originalTarget; if (document instanceof HTMLDocument && this.contentWindow.document !== document) return; Highlight(event)}, false); //обработчики для FindBar.. gFindBar._findField.addEventListener("input", function(event){ Highlight("false")}, false); gFindBar._findField.setAttribute("ondrop","event.stopPropagation(); Find(event); "); gFindBar.addEventListener("DOMAttrModified", function(event){if (gFindBar.hidden){Highlight(event)}}, false); })(); //FindBar. контекстного меню (context Menu)....................................... (function contextFindWords(){ // выходим, если функция уже выполнялась if (document.getElementById("contextFindWords")) return; const kXULNS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"; var contextMenu = document.getElementById("contentAreaContextMenu"); var separator = document.getElementById("context-sep-properties"); var eventTarget = null; var menu = document.createElementNS(kXULNS, "menu"); menu.id = "contextFindWords"; menu.setAttribute("label", "Find"); menu.hidden = true; contextMenu.insertBefore(menu, separator); var menuPopup = document.createElementNS(kXULNS, "menupopup"); menu.appendChild(menuPopup); var lst = [ { label:"Найти на странице", command:ContexFind }, { label:"Поиск по сайту(google)", command:Search }, { label:"Выделить текст на странице", command:HighlightSel }, { label:"Автовыделение, добавить текст", command:addSel } ]; for(var i = 0, m; m = lst[i]; i++){ var menuItem = document.createElementNS(kXULNS, "menuitem"); menuItem.setAttribute("label", m.label); menuItem.setAttribute("type", "m.radio"); if ("accesskey" in m) menuItem.setAttribute("accesskey", m.accesskey); menuItem.addEventListener("command", m.command, false); menuItem.id = "context-Find-Words-" + m.label.toString(); menuPopup.appendChild(menuItem); } var contextFind = document.getElementById("contextFindWords") contextMenu.addEventListener("popupshowing", setMenuDisplay, false); function setMenuDisplay(aEvent) { custombuttons.getPrefs("FindBar.contextFindWords") ? contextFind.hidden = !gContextMenu.isTextSelected : contextFind.hidden = true; } function ContexFind(){ gFindBar.onFindCommand(); //Запускаем функцию Find Find(event); } function Search(){ var focusedWindow = document. commandDispatcher. focusedWindow; var text = focusedWindow. getSelection (). toString (); var doc = getBrowser (). contentDocument; try { var url = doc. location. hostname; } catch(e) { var url = ""; } text = escape (convertFromUnicode ("UTF-8", text)); url = encodeURIComponent (url); var searchUrl = "http://www.google.com/search?as_q=" + text + "&as_sitesearch=" + url; gBrowser.selectedTab = gBrowser.addTab(searchUrl); } function HighlightSel(){ gFindBar.toggleHighlight(false); var text = document.commandDispatcher.focusedWindow.getSelection(); gFindBar._highlightDoc(true, text); goDoCommand("cmd_selectNone"); } function addSel(){ //Запускаем функцию HighlightAdd HighlightAdd(event); } })(); //Если нажать в главном меню Firefox на пункт меню 'Найти'............................................. document.getElementById("cmd_find").setAttribute("oncommand", "gFindBar.onFindCommand(); Find(event);"); //Найти на странице.................................................... Find = function(event){ event.preventDefault(); event.stopPropagation(); if (custombuttons.getPrefs("FindBar.Highlight")){Highlight(event)}; if (!gFindBar.hidden) gFindBar._find(gFindBar._findField.value); }; //Добавить текст(выделенный / из буфера обмена) для автовыделения....................................... function HighlightAdd(event){ //Копируем выделенный текст в буфер document.getElementById("cmd_copy").doCommand(); // Get the root branch var prefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch); //setting Unicode value var str = Components.classes["@mozilla.org/supports-string;1"].createInstance(Components.interfaces.nsISupportsString); //читаем из буфера обмена и добавляем текст для автовыделения в 'about:config' str.data = readFromClipboard(); prefs.setComplexValue("FindBar.Highlight.value", Components.interfaces.nsISupportsString, str); //всплывающая подсказка custombuttons.alertSlide(AutoHighlight, str.data); //... goDoCommand("cmd_selectNone"); //Запускаем функцию Highlight(run Highlight) Highlight(event); }; //Поле текстового ввода на Findbar мигает желтим............................ function fflash(event){ var findToolbar = document.getElementById("FindToolbar"); //Следим за иконкой статуса на FindBar var findstatus = gFindBar.getElement("find-status-icon"); findstatus.addEventListener("DOMAttrModified",function(e){ if(findstatus.getAttribute("status")=="wrapped") { findToolbar.setAttribute("flash", "true"); setTimeout(function() {findToolbar.removeAttribute("flash");}, 700)}; }, false)}; //Запускаем функции fflash(Run the function fflash) document.addEventListener( "DOMContentLoaded", fflash(event), false); //Создать кнопку "Вставить и искать" на Findbar......................................................... var ubc=document.getAnonymousElementByAttribute( gFindBar, "anonid", "findbar-textbox"); var btn=document.createElementNS("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul", "toolbarbutton"); btn.setAttribute("id", "pasteButton"); btn.setAttribute("tooltiptext", "Поиск выделенного текста/из буфера"); ubc.parentNode.insertBefore(btn, ubc.nextSibling); btn.addEventListener("click", function(event){ if ( event.button == 0 ){ //Поиск по странице из буфера обмена/выделенный текст... //event.preventDefault(); //event.stopPropagation(); var sel = content.getSelection().toString(); var str =(!!sel) ? sel : readFromClipboard(); //Убираем пробелы с обоих концов текста. var str = str.replace(/^\s+|\s+$/g,""); //... gFindBar._findField.value = str; Find(event); } }, false); //Очистить поле текстового ввода на Findbar.................................................. function findFieldClear(event){ if (gFindBar._findField.value){ window.FB_fFval = gFindBar._findField.value }; gFindBar._findField.value = ''; //.... var findToolbar = document.getElementById("FindToolbar"); findToolbar.removeAttribute("red"); //... gFindBar.onFindCommand(); //.... gFindBar._highlightDoc(false); }; // FindToolbar стиль(style)....................................................................... (function(css) { var pi = document.createProcessingInstruction( 'xml-stylesheet', 'type="text/css" href="data:text/css;utf-8,' + encodeURIComponent(css) + '"' ); return document.insertBefore(pi, document.documentElement); } )(<![CDATA[ @namespace url(http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul); /*Find Toolbar.................*/ #FindToolbar { border-bottom: 1px solid grey !important; } #FindToolbar > .findbar-container > * { display: -moz-box !important; } #FindToolbar > hbox > label{-moz-appearance: none !important;font-weight: bold !important;} #find-field,.findbar-textbox{width: 250px !important;} #FindToolbar .findbar-find-fast.findbar-find-status, #FindToolbar .findbar-container>image, #FindToolbar[autohide] .findbar-closebutton {display: none !important;} #FindToolbar[red="true"] .findbar-textbox{box-shadow: 0 0 0 1em #f66 inset;} #FindToolbar:not([red="true"]) .findbar-textbox[status="notfound"]{ background: rgba(207,219,236,0.99) !important; color: black !important; box-shadow: none !important;} /*Find Toolbar, mini......................................... */ #FindToolbar[mini="true"] .findbar-textbox{ width: 16em !important; height:21px!important; padding-right: 20px !important; margin-right: 2px!important; margin-left:-4px!important} #FindToolbar[mini] { position: fixed; right: 18px; background: menu !important; box-shadow: 0px 10px 5px -10px rgba(0,0,0,.3) !important; border: 1px solid grey !important; border-top: 0 !important; border-radius: 0 0 8px 8px !important;} #FindToolbar[mini="true"] .findbar-container>checkbox{ margin-left:-24px !important; margin-right: -3px !important} #FindToolbar[mini] toolbarspacer, #FindToolbar[mini="true"] label[class="checkbox-label"], #FindToolbar[mini="true"] toolbarbutton.findbar-find-next, #FindToolbar[mini="true"] toolbarbutton.findbar-find-previous, #FindToolbar[mini="true"] .findbar-highlight label, #FindToolbar[mini="true"] .findbar-closebutton, #FindToolbar:not([pasteButton="true"]) #pasteButton, #FindToolbar[mini="true"] .findbar-find-fast[anonid="find-label"], #FindToolbar[mini="true"] .findbar-find-fast[anonid="match-case-status"] { display: none !important;} #FindToolbar[mini] .findbar-highlight, #FindToolbar[mini] .findbar-highlight[checked] { list-style-image: url("data:image/gif;base64,R0lGODlhEAAQAMQWAJmZzJlmzGZmzGZm/2aZ/5mZ/5nM/8zM/8z//5mZmWZmmf///8yZzMzMmZlmmZmZM8zMM8zMZsz/ZsyZZpmZZmZmM////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAHoAxYALAAAAAAQABAAAAVsoCUCgQCIaCoKA1G4p7q6RmEXcQoMxYEYQEMOJSAYEL+D8jC0CG6GJTKhUtiAPiSCmlK4er7FgiGzWLGIBUJRZliVCLMi0Sg7FHhq4gGJlFUNEBIQE38pExGDFIYoFIkQi4wWjhEVkiIUFQohADs=") !important; -moz-image-region: auto !important;} #pasteButton{ list-style-image: url("chrome://browser/skin/appmenu-icons.png"); -moz-image-region: rect(0 48px 16px 32px); margin-right: 3px! important;} #FindToolbar[mini="true"] textbox.findbar-textbox{ -moz-box-ordinal-group: 2 !important} #FindToolbar[mini="true"] checkbox{ -moz-box-ordinal-group: 3 !important;} #FindToolbar[mini="true"] toolbarbutton.findbar-highlight{ -moz-box-ordinal-group: 4 !important;} #FindToolbar[mini="true"] #pasteButton{ -moz-box-ordinal-group: 4 !important;} #FindToolbar[mini="true"] .findbar-closebutton{ -moz-box-ordinal-group: 7 !important;} ]]>.toString()); //устанавливаем флаг window.ToggleFindRun = 'stop';
Отредактировано bunda1 (06-04-2012 15:34:26)
Отсутствует
bunda1
уииии! работает отлично
спасибо большое!
правда оказалось, что ctrl+shift+f уже используется адблоком, но я посмотрел по коду твоей кнопки - ты правильно сделал что и ctrl+alt+f приделал, буду им пользоваться.
мой список тает на глазах
mzfx
Отсутствует
Только что в консоли ошибок заметил такую ошибку:
Error: TypeError: body is null
Source File: chrome://custombuttons-context/content/button.js?windowId=Firefox&id=custombuttons-button22@init
Line: 466
Которая указывает на строку:
mzfx
Отсутствует
iDev.Pi
Это не критично.
Пожалуйста подумай как сделать красивый таймер закрытия на панель поиска(в CSS коде), вот я сделал код который постепено делает панель поиска прозрачным, можешь попробовать, но это не есть хорошо:
var CloseIndicator = function(){ if (!arguments.callee.runTimes) arguments.callee.runTimes = 0; arguments.callee.runTimes++; var findBar = document.getElementById('FindToolbar'); findBar.style.opacity = "0."+ (9 - arguments.callee.runTimes); if (arguments.callee.runTimes == custombuttons.getPrefs("FindBar.CloseTimer")) return; setTimeout(arguments.callee, 1000); }; CloseIndicator();
Я думаю надо что то вроде этого Progress Bar on Tab :: Дополнения Firefox
Отредактировано bunda1 (21-04-2012 18:26:29)
Отсутствует