>Форум Mozilla Россия http://forum.mozilla-russia.org/index.php >Сustom Buttons http://forum.mozilla-russia.org/viewforum.php?id=34 >[CB]Toggle Find+ http://forum.mozilla-russia.org/viewtopic.php?id=54089 |
bunda1 > 09-03-2012 20:18:31 |
Toggle Find+ ( Firefox 24+ ) Настройки кнопки в меню кнопки: Если в настройках кнопки включено автовыделение автоматически на всех страницах выделяет заранее введенный текст или текст из поля вода на панели поиска, если это включена в настройках кнопки автоматически выделяет ссылки на страницах если адресс ссылки содержит текст для автовыделение. Можно менять цвет автовыделения в настройках кнопки. При наведении курсором на кнопку в сплывающей подсказке(тултипе) отображается текст для автовыделение вместе с подсказкой по кнопке: Показывает количество найденных совпадений на панели поиска. Добавляет в контекстное меню выделенного текста дополнительные пункты, если это включено в настройках кнопки: Клики на кнопке: Сочетания клавиш добавляемые кнопкой: Управление панелью поиска мышью: |
bunda1 > 09-03-2012 20:55:07 |
Код инициализации кнопки Toggle Find+: Выделить код Код:// Настройка функций кликов мыши для кнопки ............. this.onclick =e=> { if ( e.button == 0 ) gFindBar.hidden ? gFindBar.onFindCommand() : gFindBar.close(); if ( e.button == 1 ) { gFindBar.hidden ? gFindBar.onFindCommand() : gFindBar.close(); goDoCommand("cmd_paste"); }; if ( e.button == 2 && !e.ctrlKey && !e.shiftKey && !e.altKey && !e.metaKey ) { e.preventDefault(); menu.showPopup( this, -1, -1, "popup", "bottomleft", "topleft"); } }; // Настройки и переменные для кнопки ............. var findbarRight = 18; // отступ справа у мини панели поиска var addKeyboardShortcuts = true; // разрешить дополнительные сочетания клавиш для панели поиска var finder = (gBrowser.finder || gFindBar); var lighted = (finder._highlightDoc || finder._highlight || finder.highlight).bind(finder); var alertsService = Cc["@mozilla.org/alerts-service;1"].getService(Ci.nsIAlertsService); // Проверить наличие строк в about:config и создать если не существует ............. if ( cbu.getPrefs("FindBar.version") != '15') { ["FindBar.top","FindBar.mini","FindBar.right","FindBar.auto_Close","FindBar.autoclear","FindBar.Highlight", "FindBar.Highlight.Link","FindBar.pasteButton","FindBar.contextFindWords","FindBar.ToggleWithDoubleMiddleClick", "FindBar.Autohighlight.ToggleWithDoubleClick","FindBar.auto_Find"].forEach(pref=> cbu.setPrefs(pref, false) ); ["FindBar.version,15", "FindBar.CloseTimer,7", "ui.textHighlightBackground,#ef0fff", "FindBar.Highlight.value,"] .forEach(pref=> cbu.setPrefs(pref.split(",")[0], pref.split(",")[1]) ); }; // Подсказка для кнопки ............. this.onmouseover =()=> { // получить и обрезать подсказку для автовыделение .... var val = gPrefService.getComplexValue("FindBar.Highlight.value", Ci.nsISupportsString).data; var value = val.substring(0,50) + ( (val.length > 50) ? '....' : "" ); this.tooltipText = "Поиск по странице \nЛ: Показать - скрыть поиск по странице \nС: Поиск по странице из буфера обмена\ \nП: Mеню кнопки \nДП: CB меню \n\nАвтовыделение: " + value; }; // Создать меню с настройками для кнопки ............. var array = [ { label: 'Автоматически закрыть', value: 'FindBar.auto_Close', func: autoClose, cek:''}, { label: 'Закрыть через: |7| секунд', value: 'FindBar.CloseTimer', change:''}, { separator: '' }, { label: 'FindBar мини', value: 'FindBar.mini', func: toggleAttribute, cek:''}, { label: 'FindBar сверху', value: 'FindBar.top', func: toggleAttribute, cek:''}, { label: 'FindBar справа', value: 'FindBar.right', func: toggleAttribute, cek:''}, { label: 'Кнопка "Вставить и искать" на FindBar', value: 'FindBar.pasteButton', func: toggleAttribute, cek:''}, { separator: '' }, { label: 'Find в контекстном меню', value: 'FindBar.contextFindWords', cek:''}, { label: 'Запуск поиска выделением текста', value: 'FindBar.auto_Find', cek:''}, { label: 'Быстрый поиск по мере набора текста', value: 'accessibility.typeaheadfind', cek:''}, { label: 'Открыть панель поиска с поиском по старому запросу', value: 'FindBar.autoclear', cek:''}, { label: 'Переключать FindBar двойным средним кликом на странице', value: 'FindBar.ToggleWithDoubleMiddleClick', cek:''}, { label: 'Переключать aвтовыделение двойным кликом на панели поиска', value: 'FindBar.Autohighlight.ToggleWithDoubleClick', cek:''}, { separator: '' }, { label: 'Автовыделение', value: 'FindBar.Highlight', func: toggleAttribute, cek:''}, { label: 'Автовыделение в ссылках', value: 'FindBar.Highlight.Link', func: Highlight, cek:''}, { label: 'Добавить текст для автовыделения', value: 'add', func: toggleHighlightValue }, { label: 'Сбросить текст для автовыделения', value: 'clear', func: toggleHighlightValue }, { label: 'Изменить цвет: |#ef0fff| для автовыделения', value: 'ui.textHighlightBackground', change:''} ]; var menu = self.appendChild( document.createElement("menupopup") ); array.forEach(m=> { if ( "separator" in m ) { menu.appendChild( document.createElement("menuseparator") ); return }; if ( "value" in m ) var p = cbu.getPrefs( m.value ); var mItem = document.createElement("menuitem"), arr = m.label.split("|"); mItem.setAttribute("label", ("change" in m) ? (arr[0] + p + arr[2]) : m.label ); if ( "cek" in m ) { mItem.setAttribute('type', 'checkbox'); mItem.setAttribute('checked', p ); mItem.setAttribute('onclick', 'custombuttons.setPrefs("' + m.value + '", !custombuttons.getPrefs("' + m.value + '"))'); } if ( "change" in m ) { mItem.addEventListener("command", e=> { var val = custombuttons.promptBox(this.label, 'Отмена вернёт значение по умолчанию'); var pref = val[0] ? val[1] : arr[1]; cbu.setPrefs( m.value, pref ); this.label = arr[0] + pref + arr[2]; }, false); }; if ( "func" in m ) mItem.addEventListener("command", e=> { m.func(m.value) }, false); menu.appendChild(mItem); }); menu.setAttribute("onclick", "event.stopPropagation()"); // Установить и удалить разные атрибуты для панели поиска ............. function toggleAttribute(s) { if ( s == "FindBar.Highlight" ) { gFindBar.getElement('highlight').removeAttribute("checked"); Highlight(); return }; var atrr = s.substring(8); setTimeout(()=> { cbu.getPrefs(s) ? gFindBar.setAttribute(atrr, "true") : gFindBar.removeAttribute(atrr) }, 0); if ( s !== "FindBar.mini" ) return; if ( cbu.getPrefs(s) ) { if ( gFindBar.getElement('highlight').hasAttribute("checked") ) { gFindBar._findField.style.color = cbu.getPrefs("ui.textHighlightBackground"); } } else { if ( !!gFindBar._findField.style.color ) { gFindBar.getElement('highlight').setAttribute("checked", "true"); gFindBar._findField.removeAttribute("style"); } } }; ["FindBar.top", "FindBar.mini", "FindBar.right", "FindBar.pasteButton"].forEach(s=> toggleAttribute(s)); // Установить нужную иконку кнопки при старте браузера или при изменениях настроек автовыделения ............. var s = "FindBar.Highlight"; function toggleImage() { self.ownerDocument.getAnonymousElementByAttribute(self, "class", "toolbarbutton-icon"). src = cbu.getPrefs(s) ? "data:image/x-icon;base64,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" : "data:image/x-icon;base64,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"; }; toggleImage(); gPrefService.addObserver(s, toggleImage, false); addDestructor(()=> gPrefService.removeObserver(s, toggleImage) ); // Удалить оргинальный панель поиска и создать новый с дополнительными возможностями ............. delete window.gFindBar; window.gFindBar = document.getElementById("FindToolbar"); if ( !gFindBar || gFindBar.parentNode != gBrowser.parentNode) { var version = parseInt(Services.appinfo.version); if ( version > 25 ) // удалить на FF25+ for( var tab of gBrowser.tabs ) { if ( !tab._findBar ) continue; tab._findBar.parentNode.removeChild( tab._findBar ); delete tab._findBar; } else document.getElementById("browser-bottombox") // удалить на FF17-24 .removeChild( document.getElementById("FindToolbar") ); if ( version > 38 ) { // исправить глюк на FF38+ setTimeout(()=> { eval("gFindBar.startFind = " + gFindBar.startFind.toString() .replace('this.browser.finder.getInitialSelection();', 'this.onCurrentSelection(gBrowser.finder.getActiveSelectionText(), false)')); var {Finder} = Cu.import("resource://gre/modules/Finder.jsm"); eval("Finder.prototype.getActiveSelectionText = " + Finder.prototype .getActiveSelectionText.toString().replace('.replace', '; //')); }, 3000); } gFindBar = gBrowser.parentNode.insertBefore(document.createElement("findbar"), gBrowser); gFindBar.setAttribute("browserid", "content"); version < 25 && gFindBar.setAttribute("oldFindBar", "true"); gFindBar.id = "FindToolbar"; gFindBar.clientTop; delete window.gFindBarInitialized; window.gFindBarInitialized = true; gFindBar._selectionMaxLen = 1000; // лимит символов для поиска и подсветки gFindBar._quickFindTimeoutLength = 4500; // время закрытия панели поиска эсли тот открыт по мере набора текста }; if ( gFindBar instanceof Ci.nsIDOMEventListener ) // добавить поиск по мере набора текста addEventListener("keypress", gFindBar) function onBrowserKeypress(msg) {msg.target == gBrowser.selectedBrowser && gFindBar._onBrowserKeypress(msg.data);} messageManager.addMessageListener("Findbar:Keypress", onBrowserKeypress); addDestructor(()=> messageManager.removeMessageListener("Findbar:Keypress", onBrowserKeypress)); // Показать количество совпадений на панели поиска, автор кода 'Dumby' ............. var curHit, allHits, lastCurHit; const fff = gFindBar._findField, lab = fff.parentNode.insertBefore( document.createElement("label"), fff ), nrm = Ci.nsISelectionController.SELECTION_NORMAL; lab.id = "hits"; addDestructor(()=> fff.parentNode.removeChild(lab) ); function updateHits(arg) { if ( gFindBar.hidden ) return; var win = arg instanceof Ci.nsIDOMWindow && arg || content; var finder = gBrowser.finder || gFindBar; if ( win == content ) curHit = allHits = 0; var word = fff.value; var controller = finder._getSelectionController(win); var doc = win.document; if ( word && controller && doc && doc.documentElement ) { var body = doc instanceof HTMLDocument && doc.body ? doc.body : doc.documentElement; var searchRange = doc.createRange(); searchRange.selectNodeContents(body); var startPt = searchRange.cloneRange(); startPt.collapse(true); var endPt = searchRange.cloneRange(); endPt.collapse(false); var retRange = null; var nsIFind = Cc["@mozilla.org/embedcomp/rangefind;1"].createInstance().QueryInterface(Ci.nsIFind); nsIFind.caseSensitive = gFindBar._shouldBeCaseSensitive(word); while ((retRange = nsIFind.Find(word, searchRange, startPt, endPt))) { allHits++; if ( !curHit) { var sel = controller.getSelection(nrm), range; if ( sel.toString() ) range = sel.getRangeAt(0); else { var editableNode = finder._getEditableNode(retRange.startContainer); if ( editableNode ) sel = editableNode.editor.selectionController.getSelection(nrm); if ( sel.toString() ) range = sel.getRangeAt(0); } var comp = range && ["startContainer", "endContainer", "startOffset", "endOffset"] .every(function(prop) range[prop] == retRange[prop]); if ( comp ) curHit = allHits; } startPt = retRange.cloneRange(); startPt.collapse(false); } Array.forEach(win.frames, frame=> updateHits(frame)); } if ( win != content ) return; lab.value = curHit + "/" + allHits; if ( fff.value ) self.lastValueOfFind = fff.value; // запомнить текст для поиска // поле текстового ввода красное если ничего не найдено .... allHits == 0 && fff.value ? fff.setAttribute("status", "notfound") : fff.removeAttribute("status"); // поле текстового ввода мигает желтим если переход с низа наверх страницы и наоборот .... if ( !!arg && arg == "flash" && allHits > 2 && (allHits/curHit * allHits/lastCurHit == allHits) ) { fff.setAttribute("flash", true ); setTimeout(()=> fff.removeAttribute("flash"), 600); } lastCurHit = curHit; }; updateHits(); // FindBar, поиск колесиком мыши ............. addEventListener('DOMMouseScroll', e=> { gFindBar.onFindAgainCommand(e.detail < 0); updateHits("flash") }, false, gFindBar); // Отслеживать клики на панели поиска ............. addEventListener("mousedown", e=> { if ( e.button == 1 ) { // поиск из буфера обмена e.preventDefault(); var str = (gClipboard.read()).replace(/^\s+|\s+$/g,""); // убираем пробелы с концов текста gFindBar._findField.value = str; Highlight("hits", "greenLight"); } var targ = e.originalTarget if ( !targ.hasAttribute("anonid") ) return; if ( targ.value == 'Найти:') { // кнопка 'Найти:' e.button ? clearFindField() : gFindBar.onFindAgainCommand(false); updateHits("flash"); } if ( targ.getAttribute('oncommand').startsWith("onFind") ) { // кнопки next, previous setTimeout(updateHits, 0, "flash"); } }, false, gFindBar); // Двойной клик на панели поиска включает и выключает автовыделение или стандартную подсветку текста ............. addEventListener("dblclick", e=> { if ( e.originalTarget.nodeName == 'div' && e.button == 0 ) return; if ( /:label|button|check/.test( e.originalTarget.nodeName ) ) return; if ( cbu.getPrefs("FindBar.Autohighlight.ToggleWithDoubleClick") ) { var s = cbu.getPrefs("FindBar.Highlight"); cbu.setPrefs("FindBar.Highlight", !s ); menu.childNodes[16].setAttribute("checked", !s); gFindBar.getElement('highlight').removeAttribute("checked"); Highlight(); } else { if ( cbu.getPrefs("FindBar.Highlight") ) return; gFindBar.getElement("highlight").click(); gFindBar._findField.style.color = (gFindBar._findField.style.color || !gFindBar.hasAttribute('mini')) ? "" : cbu.getPrefs("ui.textHighlightBackground"); }; // закрыть контекстное меню поисковой формы .... var hbox = gFindBar._findField.mInputField.parentNode; setTimeout(()=> document.getAnonymousElementByAttribute(hbox, "class", "textbox-contextmenu").hidePopup(), 20); window.content.focus(); }, false, gFindBar); // ЛКМ + ПКМ на поле текстового ввода очищают его ............. function clickToClear(e) { if ( e.type == "mousedown" ) { if ( e.button == 0 ) this.leftButtonDown = true; if ( e.button == 2 && this.leftButtonDown ) { this.leftButtonDown = false; this.stopMenu = true; setTimeout(()=> { clearFindField() }, 0); } } if ( e.type == "click" ) { if ( e.button == 0 ) this.leftButtonDown = false; if ( e.button == 2 && this.stopMenu ) { e.preventDefault(); e.stopPropagation(); this.stopMenu = false; } } }; ["mousedown", "click"].forEach(type=> addEventListener(type, clickToClear, false, gFindBar._findField) ); // Запускать поиск выделением текста если это разрешено в 'about:config' ............. function autoFind(e) { if ( e.button != 0 ) return; if ( !cbu.getPrefs("FindBar.auto_Find") ) return; if ( /input|password|textarea|textbox|searchbar|findbar|tabbrowser/.test(e.target.localName) ) return; if ( e.type == 'mousedown' ) var lastSelection = getBrowserSelection(); if ( e.type == 'mouseup' ) { var selection = getBrowserSelection(); if ( selection && selection !== lastSelection ) { setTimeout(()=> { gFindBar.onFindCommand(); updateHits(); lab.value == "0/0" ? Highlight() : Highlight("", "greenLight") }, 50); } } }; addEventListener("mouseup", autoFind, false, gBrowser); addEventListener("mousedown", autoFind, false, gBrowser); // Автоматически закрывать панель поиска, если это разрешено в 'about:config' ............. function autoClose() { window.clearTimeout(self.closeTimer); try { autoClose.removeListener() } catch(e) {}; function closeFind(e) { if ( e !== 'timer' && e.target.nodeName == 'findbar') { window.clearTimeout( self.closeTimer ); autoClose.run = true; } else if ( e == 'timer' || autoClose.run && !gFindBar._findField.getAttribute("focused") ) { self.closeTimer = setTimeout(()=> { gFindBar.close(); }, cbu.getPrefs("FindBar.CloseTimer") + '000'); autoClose.run = false; } } if ( cbu.getPrefs("FindBar.auto_Close") && !gFindBar.hidden ) { closeFind('timer'); addEventListener('mouseover', closeFind, false, window); autoClose.removeListener =()=> { removeEventListener('mouseover', closeFind, false, window) }; } }; // Переключать панель поиска двойным средним кликом на странице ............. addEventListener("mouseup", e=> { if ( e.button != 1 ) return; if ( !cbu.getPrefs("FindBar.ToggleWithDoubleMiddleClick") ) return; if ( self.flag ) { gFindBar.hidden ? gFindBar.onFindCommand() : gFindBar.close(); Highlight("hits", "greenLight"); gFindBar._findField.focus(); }; self.flag = true; setTimeout(()=> { self.flag = false }, 600); }, false, gBrowser); // Сочетания клавиш для управление поиском на странице ............. addEventListener('keydown', e=> { if ( content.location.href == 'chrome://browser/content/places/places.xul' ) return; // Ctrl+snift+g и F3, запуск подсчета совпадений .... if ( e.keyCode == 114 || ((!e.altKey) && ((e.ctrlKey) || (e.shiftKey)) && (e.keyCode == 71)) ) { gFindBar.hidden || setTimeout(updateHits, 0, "flash"); } // Ctrl+f, показать - скрыть панель поиска .... if ( (e.ctrlKey) && (!e.altKey) && (!e.shiftKey) && (e.keyCode == 70) ) { e.preventDefault(); e.stopPropagation(); gFindBar.hidden ? gFindBar.onFindCommand() : gFindBar.close(); Highlight("hits", "greenLight"); gFindBar._findField.focus(); } if ( !addKeyboardShortcuts ) return; // дальше дополнительные сочетания клавиш для панели поиска // Ctrl+alt+f, поиск по странице из буфера обмена .... if ( (e.ctrlKey) && (e.altKey) && (e.keyCode == 70) ) { gFindBar.hidden ? gFindBar.onFindCommand() : gFindBar.close(); goDoCommand("cmd_selectNone"); goDoCommand("cmd_paste"); Highlight("hits", "greenLight"); } /* Ctrl+snift+f, открыть панель поиска с чистой поисковой формой или очистить поисковую форму или открыть панель поиска с предыдущим запросом/выделенным текстом или искать выделенный текст если панель поиска открыт если настройках кнопки включена 'Всегда открывать пустую поисковую форму' ....*/ if ( (e.ctrlKey) && (!e.altKey) && (e.shiftKey) && (e.keyCode == 70) ) { e.preventDefault(); var val = self.lastValueOfFind ? self.lastValueOfFind : ""; var sel = document.commandDispatcher.focusedWindow.getSelection().toString(); if ( sel.length !== 0 ) { val = sel }; gFindBar.onFindCommand(); cbu.getPrefs("FindBar.autoclear") ? setTimeout(()=> { gFindBar._findField.value = val; Highlight("hits", "greenLight"); }, 10) : clearFindField(); } // Ctrl+alt+h, добавить текст(выделенный / из буфера обмена) для автовыделения .... if ( (e.ctrlKey) && (e.altKey) && (e.keyCode == 72) ) toggleHighlightValue('add'); }, false, window); // Автоматически выделить слова и ссылки ............. function Highlight(hits, green) { var findValue = gFindBar._findField.value; var hidden = gFindBar.hidden; if ( !hidden ) { // выделить зеленным искомый текст на странице .... if ( !!green && green == "greenLight") setTimeout(()=> { gFindBar._find() }, 10); // для запуска подсчета совпадений .... if ( !!hits && hits == "hits" ) setTimeout(updateHits, 20); } // получаем текст для автовыделения из 'about:config' или из панели поиска .... if ( cbu.getPrefs("FindBar.Highlight") ) { var value = hidden ? gPrefService.getComplexValue("FindBar.Highlight.value", Ci.nsISupportsString).data : ( findValue.length > 2 ) ? findValue: ""; } // удалить и запустить подсветку совпадений .... lighted(false); if ( !!value ) lighted(true, value); /* изменить цвет ссылок на страницах если содержат искомое слово, если разрешено в 'about:config' и включена автовыделение ....*/ var hLink = cbu.getPrefs("FindBar.Highlight.Link") && value; var color = cbu.getPrefs("ui.textHighlightBackground"); function highlightLinks(win) { var doc = win.document, links = doc.links; if ( (hLink || "prop1" in doc ) && links ) { hLink ? doc.prop1 = true : delete doc.prop1; Array.forEach(links, link=> { if ("prop2" in link) link.style.color = link.prop2; if ( hLink && String( link ).indexOf( value ) != -1 ) { link.prop2 = link.style.color; link.style.color = color; } else if ("prop2" in link) delete link.prop2; }); } for ( var i = 0; i < win.frames.length; i++ ) highlightLinks(win.frames[i]); }; highlightLinks(content); }; // Обработчик следит за загрузкой и переключением вкладки и запускают автовыделение ............. var listener = { onStateChange: function(wpr, req, flag) { if ( gBrowser.currentURI.spec == 'chrome://global/content/console.xul') return; if ( flag & Ci.nsIWebProgressListener.STATE_STOP ) Highlight("hits"); }, onLocationChange: function(wpr, req) { if ( wpr.currentURI.spec != "about:blank" && !req && wpr.document.readyState == "complete") Highlight("hits"); gFindBar._findField.removeAttribute("style"); gFindBar.getElement('highlight').removeAttribute("checked"); } }; gBrowser.addProgressListener(listener); addDestructor(()=> gBrowser.removeProgressListener(listener) ); // Обработчики следят за панелью поиска, запускают автовыделение и другие функции ............. addEventListener("drop", e=> { Highlight("hits", "greenLight") }, false, gFindBar._findField); addEventListener("input", ()=> { Highlight("hits", "greenLight") }, false, gFindBar._findField); gFindBar.watch("hidden", (prop, oldV, hidden)=> { setTimeout(()=> { Highlight("hits", "greenLight"); autoClose() }, 10); if ( !hidden && cbu.getPrefs("FindBar.autoclear") ) { // открывать без выделенного текста document.activeElement.blur(); try { self.lastValueOfFind } catch(e) { self.lastValueOfFind = '' }; gFindBar._findField.value = self.lastValueOfFind ? self.lastValueOfFind : ''; gFindBar._findField.focus(); } return hidden; }); // Добавляем подменю в контекстного меню на странице для выделенного текста ............. ((contextMenu, el)=> { var menu = document.createElement("menu"); menu.setAttribute("label", "Find"); contextMenu.insertBefore(menu, el); addEventListener("popupshowing", ()=> { menu.hidden = !cbu.getPrefs("FindBar.contextFindWords") || !gContextMenu.isTextSelected; }, false, contextMenu); addDestructor(()=> contextMenu.removeChild(menu) ); var array = [ { label:"Найти на странице", func: findToContex }, { label:"Выделить текст на странице", func: highlightSel }, { label:"Автовыделение, добавить текст", func: addSel } ]; var menuPopup = menu.appendChild( document.createElement("menupopup") ); array.forEach(m=> { var mItem = document.createElement("menuitem"); mItem.setAttribute("label", m.label); mItem.func = m.func; menuPopup.appendChild( mItem ); }); addEventListener("command", e=> { e.target.func() }, false, menu); function findToContex() { gFindBar.onFindCommand(); Highlight("hits", "greenLight"); }; function highlightSel() { var finder = gBrowser.finder || gFindBar; var lighted = (finder._highlightDoc || finder._highlight).bind(finder); lighted(false), lighted(true, getSelect() ); goDoCommand("cmd_selectNone"); }; function addSel() toggleHighlightValue('add'); })(document.getElementById("contentAreaContextMenu"), document.getElementById("context-sep-properties")); // Очистить поле текстового ввода на Findbar ............. function clearFindField() { setTimeout(()=> { gFindBar._findField.value = ''; Highlight("hits"); gFindBar._findField.focus(); }, 0) }; // Добавить или удалить текст для автовыделения ............. function toggleHighlightValue(arg) { if ( arg == 'clear' ) { var str = '', title = self.label, notification = "Текст для автовыделение удален"; } if ( arg == 'add' && getSelect() ) { var str = getSelect(), title = "Автовыделение"; var notification = str.substring(0,50) + ( (str.length > 50) ? '....' : "" ); if ( cbu.getPrefs("FindBar.Highlight") ) { goDoCommand("cmd_selectNone") }; } cbu.setPrefs("FindBar.Highlight.value", convertFromUnicode("UTF-8", str) ); alertsService.showAlertNotification(self.image, title, notification); Highlight(); }; // Получить выделенный текст из страницы или из буфера обмена, если нет текста получить false ............. function getSelect() { var el = document.commandDispatcher.focusedElement; try { return el.value.substring(el.selectionStart, el.selectionEnd) } catch(e) {}; var sel = document.commandDispatcher.focusedWindow.getSelection(); if (sel == '') sel = gClipboard.read(); if (sel == '') alertsService.showAlertNotification(self.image, self.label, "Выделите или скопируйте текст!"); return (sel == '') ? false : sel.toString().replace(/^\s+|\s+$/g,""); }; // Конвертировать текст в юникод ............. function convertFromUnicode(charset, str) { var converter = Cc["@mozilla.org/intl/scriptableunicodeconverter"].createInstance(Ci.nsIScriptableUnicodeConverter); converter.charset = charset; str = converter.ConvertFromUnicode(str); return str + converter.Finish(); }; // Запустить поиск через Toggle Find+3 если нажать в главном меню на пункт меню 'Найти' ............. addEventListener("command", ()=> { gFindBar.onFindCommand(); Highlight("hits", "greenLight") }, false, document.getElementById("cmd_find")); // Создать кнопку "Учесть регистр" на Findbar ............. var check = document.createElement("checkbox"); check.setAttribute("id", "findCheckbox"); check.setAttribute("label", "Учесть регистр"); check.setAttribute("tooltiptext", "Учесть регистр"); check.setAttribute("checked", gFindBar._shouldBeCaseSensitive("")); gFindBar.getElement("findbar-container").appendChild(check); addDestructor(()=> check.parentNode.removeChild(check) ); check.addEventListener("command", ()=> { gFindBar._setCaseSensitivity(this.checked); Highlight("hits", "greenLight") }); // Создать кнопку "Поиск" на Findbar ............. var search = document.createElement("toolbarbutton"); search.setAttribute("id", "findButton"); search.setAttribute("tooltiptext", "Л: Искать следущее \nС: Поиск текста из буфера \nП: Искать предыдущее"); search.setAttribute("style", "list-style-image: url('chrome://global/skin/icons/Search-glass.png') !important; -moz-image-region: rect(0px, 16px, 16px, 0px);"); gFindBar.getElement("findbar-container").appendChild(search); addDestructor(()=> search.parentNode.removeChild(search) ); search.addEventListener("click", e=> { e.button !== 1 && gFindBar.onFindAgainCommand(!!e.button); updateHits("flash") }); // Создать кнопку "Вставить и искать" на Findbar ............. var paste = document.createElement("toolbarbutton"); paste.setAttribute("id", "pasteButton"); paste.setAttribute("tooltiptext", "Л: Поиск выделенного текста/из буфера \nП: Очистить"); paste.setAttribute("image", "data:image/x-icon;base64,AAABAAEADhAAAAEAIADoAwAAFgAAACgAAAAOAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB5eXn/eXl5/3l5ef95eXn/eXl5/3l5ef95eXn/eXl5/ylTda0pU3X/KVN1/ylTdf8pU3X/HTpS/4WFhf/w8PL/8fHz//Hx8//x8fP/8fHz//Hx8/+FhYX/KVN1/yRJaP8jSGf/I0dl/yNHZP8YMEX/j4+P//Hx8//x8vP/8fLz//Hy8//x8vP/8fLz/4+Pj/8pU3X/JUxr/yVLav8kSmn/JElo/xkyR/+cnJz/8vLz//Ly9P/y8vT/8vL0//Ly9P/y8vT/nJyc/ylTdf8nTm3/Jk1t/yVMa/8lSmn/GjNJ/6urq//y8vT/8/P1//Pz9f/z8/X/8/P1//Pz9f+rq6v/KVN1/ydPb/8nTm7/Jk1t/yZMa/8aNEr/srKy//X19v/19vf/9fb3//X29//19vf/9fb3/7Kysv8pU3X/J1Bx/ydQb/8nTm//Jk1t/xs2S/+8vLz/+fr6//r7+//6+/v/ubm5/7e3t/+3t7f/ubm5/ylTdf8oUXP/KFBx/ydQcf8nT2//GzZN/76+vv/6+/v/+/v8//v7/P/ExMT/9vb2/7e3t/na2tpfKVN1/ylTdP8pUXP/KFBy/yhPcP8bN03/v7+///v7/P/7/Pz/+/z8/8rKyv+3t7f/4OLgaQAAAAApU3X/KVN1/yhSdP8oUnT/KFJy/xw4UP+/v7//v7+//7+/v/+/v7//uru7/2OBmf8AAAAAAAAAAClTdf8pU3X/KVN1/ylSdP8pUnT/JEpn/yRIZv8kSGX/I0dk/yNGY/8jRWL/KVN1/wAAAAAAAAAAKVN1/ylTdf8lS2n/IztO/yM7Tv8jO07/IztO/yM7Tv8jO07/JUtp/ydOb/8lS2n/AAAAAAAAAAApU3X/K2GQ/yhahv91dXX/XV1d/11dXf9dXV3/XV1d/4B/f/8oWob/Kmad/ylTdf8AAAAAAAAAAClTda0pU3X/KVN1/7O0tP/h4eD/3t7f/97f3//g4OD/s7S0/ylTdf8pU3X/KVN1rQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG1yds1dXFv1XVxb9Wxxdc8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJUwFASZMCwAlTAsAI00LIys1CxcXFsEYFxbCJS01DAAlTQsAJk0LASZNCwAlTQUAAAAAAAAAAPwArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAASsQQAMrEEADKxBAAysQQAMrEEADKxB8PysQQAMrEE="); var node = gFindBar.hasAttribute('oldFindBar') ? gFindBar.getElement("find-next") : gFindBar.getElement("highlight"); gFindBar.getElement("findbar-container").insertBefore(paste, node); addDestructor(()=> paste.parentNode.removeChild(paste) ); paste.addEventListener("click", e=> { if ( e.button == 0 ) { if ( !getSelect() ) return; gFindBar._findField.value = getSelect(); // вставить текст Highlight("hits", "greenLight"); }; if ( e.button == 2 ) setTimeout(()=> clearFindField(), 0); // очистить поле текстового ввода }, false); // Стиль для панели поиска ............. var uri = makeURI('data:text/css,'+ encodeURIComponent('\ #FindToolbar { border-bottom: 1px solid grey !important; }\ #find-field, .findbar-textbox { width: 325px !important; }\ #FindToolbar > .findbar-container > * { display: -moz-box !important; }\ #FindToolbar .findbar-textbox[status="notfound"] { color: white !important; }\ #FindToolbar > hbox > label { -moz-appearance: none !important; font-weight: bold !important; }\ #FindToolbar .findbar-textbox:not([style]):not([status="notfound"]) { color: black !important; }\ \ #FindToolbar .findbar-closebutton,\ #FindToolbar:not([mini]) #findButton,\ #FindToolbar .findbar-container > image,\ #FindToolbar:not([pasteButton]) #pasteButton,\ #FindToolbar .findbar-case-sensitive.tabbable,\ #FindToolbar checkbox[anonid="find-case-sensitive"],\ #FindToolbar .findbar-find-fast.findbar-find-status,\ #FindToolbar .findbar-find-fast[anonid="match-case-status"] {\ display: none !important; }\ \ /* мини панель поиска ....*/\ #FindToolbar[mini] .findbar-textbox {\ width: 16em !important;\ height: 21px !important;\ padding-right: 20px !important;\ margin-right: 2px !important;\ margin-left: -4px !important; }\ #FindToolbar[mini] {\ position: fixed;\ padding: 0 !important;\ background: menu !important;\ box-shadow: 0px 10px 5px -10px rgba(0,0,0,.3) !important;\ border: 1px solid grey !important; }\ #FindToolbar[mini][top] {\ border-top: 0 !important;\ border-radius: 0 0 8px 8px !important; }\ #FindToolbar[mini][right] {\ right: ' + findbarRight + 'px; }\ #FindToolbar:not([top]) + #content {\ -moz-box-ordinal-group: 0 !important; }\ #FindToolbar:not([top]) {\ -moz-box-ordinal-group: 1 !important; }\ #FindToolbar[mini]:not([top]) {\ border-radius: 8px 8px 0 0 !important;\ margin-top: -29px !important; }\ \ #FindToolbar[mini] toolbarspacer,\ #FindToolbar[mini] label[class="checkbox-label"],\ #FindToolbar[mini] toolbarbutton.findbar-find-next,\ #FindToolbar[mini] toolbarbutton.findbar-find-previous,\ #FindToolbar[mini] .findbar-highlight label,\ #FindToolbar[mini] .findbar-closebutton,\ #FindToolbar[mini] .findbar-find-fast[anonid="find-label"],\ #FindToolbar[mini] .findbar-highlight,\ #FindToolbar[mini] .findbar-highlight[checked] {\ display: none !important; }\ \ /* расположение элементов на панели поиска ....*/\ #pasteButton { padding-left: 6px !important; padding-right: 6px !important; }\ \ #FindToolbar:not([mini]):not([oldFindBar]):not([pasteButton]) #findCheckbox { margin-left: 35px !important; }\ #FindToolbar:not([mini]):not([oldFindBar]) .findbar-highlight.tabbable { -moz-box-ordinal-group: 4 !important; }\ #FindToolbar:not([mini]):not([oldFindBar]) * { -moz-box-ordinal-group: 99 !important; }\ #FindToolbar:not([mini]):not([oldFindBar]) hbox[anonid="findbar-textbox-wrapper"] {\ -moz-box-ordinal-group: 1 !important; margin-left: -10px !important; }\ #FindToolbar:not([mini]):not([oldFindBar]) #pasteButton {\ -moz-box-ordinal-group: 2 !important; margin-left: 5px !important; margin-right: 15px !important; }\ \ #FindToolbar:not([mini]) #hits { text-align: right; width: 4.1em !important; margin-left: -13px; margin-right: -1px; color: green; }\ \ #FindToolbar[mini] #hits { -moz-appearance: none !important; margin-top: 3px !important; }\ #FindToolbar[mini] textbox.findbar-textbox { -moz-box-ordinal-group: 1 !important; }\ #FindToolbar[mini] #findCheckbox { -moz-box-ordinal-group: 2 !important; margin-left: -24px !important; margin-right: -3px !important; }\ #FindToolbar[mini] #pasteButton { -moz-box-ordinal-group: 3 !important; margin: -5px 0 !important; }\ #FindToolbar[mini] #findButton { -moz-box-ordinal-group: 4 !important; margin: -5px 0 !important; }\ \ #FindToolbar[mini][oldFindBar] #pasteButton { margin: 1px 0 !important; }\ #FindToolbar[mini][oldFindBar] #findButton { margin: 1px 0 !important; }\ \ #FindToolbar[mini]:not([oldFindBar]) #findCheckbox { margin-left: -33px !important; margin-right: -5px !important; }\ \ /* не показывать панель поиска на страницах ....*/\ #main-window[title="about:config - Mozilla Firefox"] #appcontent > #FindToolbar,\ #main-window[title="Управление дополнениями - Mozilla Firefox"] #appcontent > #FindToolbar\ { display: none !important; }\ ')); var sss = Cc["@mozilla.org/content/style-sheet-service;1"].getService(Ci.nsIStyleSheetService); sss.loadAndRegisterSheet(uri, 0); addDestructor(()=> { sss.unregisterSheet(uri, 0) }); |
mserv > 09-03-2012 22:30:24 |
bunda1 пишет
Кажется понял, почему ты не можешь воспроизвести. Ты ищешь на странице с помощью прокрутки? Попробуй с помощью лупы. |
bunda1 > 09-03-2012 22:43:34 |
mserv |
iDev.Pi > 10-03-2012 00:13:06 |
Ура, отдельная тема Чтобы не потерялись мои багрепорты/фичереквесты/просьбы/предложения - перенесу-ка я их сюда, и по мере их выполнения буду их вычёркивать. Баги: Фичереквесты: Просьбы иного характера: |
bunda1 > 10-03-2012 00:49:12 |
iDev.Pi пишет
Можешь уже зачеркнуть.
Это баг, на какой странице заметил? |
iDev.Pi > 10-03-2012 00:52:55 |
bunda1 пишет
я заметил на about:newtab и на своей локальной домашней, но проявляется везде: открой картинку любую в новой вкладке или вот: |
bunda1 > 10-03-2012 01:01:34 |
iDev.Pi |
iDev.Pi > 10-03-2012 01:11:42 |
bunda1 |
bunda1 > 10-03-2012 01:21:53 |
iDev.Pi пишет
Точно так и поступим если не исправлю. iDev.Pi пишет
Там нет скролбара, и жаль что у скролбара нет ID |
iDev.Pi > 10-03-2012 01:38:44 |
ещё баг: Как результат: срабатывает TF+3, хотя не должен бы. 10-03-2012 01:42:11 |
bunda1 > 10-03-2012 01:58:50 |
iDev.Pi
Твой стиль удлиняет FindBar mini может лучше что то сделать с "Phrase not founo" например удалить и как этот баг увидеть. |
iDev.Pi > 10-03-2012 02:04:33 |
bunda1 пишет
всего-то на 4 пикселя, вот же ты жадина bunda1 пишет
но с ней всё в порядке, просто ты в своём стиле выставил отрицательный отступ, вызвав это наезжание элементов. bunda1 пишет
примени стиль |
bunda1 > 10-03-2012 02:07:06 |
mserv
Исправил Toggle Find+3 10-03-2012 02:14:25 iDev.Pi пишет
В моем коде этот стиль тоже был изначально но я таково бага не замечал. Я не понимаю в чом дело. |
iDev.Pi > 10-03-2012 02:32:24 |
bunda1 пишет
в отрицательном значении margin-left для текстового поля. |
bunda1 > 10-03-2012 02:35:49 |
iDev.Pi |
iDev.Pi > 10-03-2012 04:24:44 |
bunda1 |
hydrolizer > 10-03-2012 06:53:56 |
bunda1 |
mserv > 10-03-2012 13:37:01 |
bunda1 пишет
Спасибо. Заметил, что лупа не работает при большом количестве найденных результатов на странице. И ещё, если происходит смена регистра найденного слова на странице, то на лупу приходится нажимать дважды. При первом щелчке происходит смена регистра в FindBar мини, а при втором осуществляется переход. |
bunda1 > 10-03-2012 14:29:31 |
hydrolizer пишет
Настройки я перенесу в меню кнопки. Было бы неплохо сделать из кнопки Jetpacks, но я это не умею и учится нет времени. Надо исправыть ошибки в кнопке. Может ты знаешь как узнать что на странице произошел переход Назад(back) и Вперёд(Forward). Это можно узнать обработчиком но я не хочу его использовать. iDev.Pi пишет
Я проверял на найтли(F13) + локаль английская, и у меня Phrase not found не появляется и не должна появляться потому что в CSS коде кнопки есть этот код Выделить код Код:#FindToolbar .findbar-find-fast.findbar-find-status, #FindToolbar .findbar-container>image {display: none !important;} и он не зависит от локали. 10-03-2012 14:38:57 mserv пишет
Да есть такой непонятный баг, буду исправлять. |
iDev.Pi > 10-03-2012 14:58:50 |
bunda1 пишет
а, ну так тут уж борьба стилей происходит - чей главней окажется (display:none из кнопки или display:-moz-box из персонального стиля) - от того результат и зависит. У меня личные стили побеждают стили из кнопки. Замечания по поводу бага с toggle срабатывающем при одиночном мидл-клике (не на странице без прокрутки, а вот здесь): нашёл новые зависимости: зависит от того где НАЧИНАЕТСЯ мидл клик и где ты его ОТПУСКАЕШЬ: если слева/справа от мест, где клик начинается или заканчивается есть какие-то блоки текста - то глюк не воспроизводится, если блоков текста там нет - то глюк воспроизводится. Отчётливо видно на страницах АМО: открой страницу любого дополнения и поиграйся с мидл кликом (зажать мидл клик, повести курсор чтоб сработала автопрокрутка, отпустить мидл-клик). У меня есть подозрение, что этот баг связан с багом, где на странице без скроллинга toggle происходит одиночным кликом: у меня такое чувство, что это 2 немного разных частных случая одного и того же бага: мне кажется, что я раньше как-то замечал, что на страницах АМО некоторые картинки (справа и слева от которых нет текста) сделаны так, что каким-то образом занимаю всю ширину страницы (не могу сейчас найти этому подтверждение). Новый баг: |
mserv > 10-03-2012 15:25:00 |
iDev.Pi пишет
Пост 19 не? |
bunda1 > 10-03-2012 15:51:32 |
iDev.Pi
в кнопке тоже есть
Как отрезать ?
да интересный феномен, но двойной мидл-клик надо делать быстро, иначе это будет не двойной клик. Можно поставить таймер для сброса мидле клика, но разве это так нужно? Я уже жалею что использовал двойной мидл-клик от него только проблемы.
так я сделал ради красоты, чтобы "искомое" слово выделялось зеленым.
Эсли будет find паменяетса на Find, я правыльно понял ? скрытый текст Сплошные баги. Эх, пойду с горя напьюсь. |
iDev.Pi > 10-03-2012 16:13:19 |
bunda1 пишет
так оно идёт в начале стиля и перебивается последующими правилами. 10-03-2012 16:23:23 bunda1 пишет
тяжело стиль для этой кнопки править, т.к. чтобы он сработал - нужен рестарт. И применения стиля через Stylish - тоже не перебивает стиль в кнопке пока не сделаешь рестарт. bunda1 пишет
да, и так тоже. bunda1 пишет
не понял, причём здесь вообще цвет |
mserv > 10-03-2012 16:24:43 |
bunda1 пишет
Зато очень удобно. А если заменить на ПКМ+СКМ? скрытый текст bunda1 пишет
Да ладно тебе, какие баги? Так мелкие недоработки. Зато кнопка в целом супер и становится всё лучше. А немного напиться иногда полезно, но лучше этим заняться, когда всё исправишь. Ты нам ещё тверЁзый нужЁн. |
bunda1 > 10-03-2012 16:35:57 |
iDev.Pi пишет
Спасибо, не знал. iDev.Pi пишет
Это легко. Надо удалить весь CSS из кнопки: Выделить код Код:#FindToolbar:not([mini="true"])...... ........... ........... #FindToolbar[mini="true"] .findbar-closebutton{ -moz-box-ordinal-group: 7 !important; } рестарт и далее через Stylish.
Так же не удобно. |
bunda1 > 10-03-2012 18:05:18 |
Добавил в настройки кнопки Toggle Find+3 новые пункты: |
iDev.Pi > 10-03-2012 20:01:27 |
bunda1 Выделить код Код:@namespace url(http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul); #FindToolbar { border-bottom: 1px solid grey !important; } #FindToolbar[autohide] .findbar-closebutton, #FindToolbar[mini] label.findbar-find-fast, #FindToolbar[mini] .find-status-icon, #FindToolbar[mini] .findbar-find-status, #FindToolbar[mini] .toolbarbutton-text, #FindToolbar[mini] .checkbox-label, #FindToolbar[mini] toolbarspacer, #FindToolbar[mini] .tabbable[disabled] { display: none !important; } #FindToolbar[mini] checkbox { display: -moz-box !important; margin-right: -1px !important; } #FindToolbar[mini] #find-field, #FindToolbar[mini] .findbar-textbox { width: 160px !important; } #FindToolbar[mini] > hbox > *, #FindToolbar[mini] .checkbox-icon, #FindToolbar[mini] .checkbox-label-box { margin: 0 !important; padding: 0 !important; } #FindToolbar[mini] .tabbable > image { margin: 0 1px 0 1px !important; } #FindToolbar[mini] { padding: 2px 2px 0 2px !important; height: 22px !important; } #FindToolbar[mini] > .findbar-container, #FindToolbar[mini] > .findbar-container > * { max-height: 17px !important; } #FindToolbar[mini] label:not([class]) { padding-left: 2px !important; font-weight: bold !important; -moz-box-ordinal-group: 0 !important; } #FindToolbar[mini] .tabbable:not(.findbar-highlight) { -moz-box-ordinal-group: 1 !important; } #FindToolbar[mini] .findbar-textbox { -moz-box-ordinal-group: 2 !important; } #FindToolbar[mini] checkbox { -moz-box-ordinal-group: 3 !important; } #FindToolbar[mini] .findbar-highlight { -moz-box-ordinal-group: 9 !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 6px 6px !important; } #FindToolbar[red] .findbar-textbox { box-shadow: 0 0 0 1em red inset !important; } #FindToolbar:not([red]) .findbar-textbox[status="notfound"] { background: rgba(207,219,236,0.99) !important; color: black !important; box-shadow: 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; } В нём скрываются кнопки вперёд-назад-искать когда их нельзя ещё кликать. ещё можно было бы сделать такую штуку: скрывать кнопку закрытия панели только в случае, если включено автоскрытие по таймеру. |
bunda1 > 10-03-2012 20:51:06 |
iDev.Pi Выделить код Код:#FindToolbar[yellow] .findbar-textbox { box-shadow: 0 0 0 1em yellow inset !important; } 4. checkbox не там
ок |
iDev.Pi > 10-03-2012 21:38:47 |
bunda1 пишет
bunda1 пишет
так это я специально: у меня на нетбуке, например, есть тачпад и он не то что без колеса прокрутки, в нём даже мидл-клика нет. От кнопок я отрезал текст и подровнял bunda1 пишет
на ширину одной кнопки (~18пикселей), всё остальное из-за того, что я выставил довольно большую ширину текстового поля. bunda1 пишет
я не стал особо вникать что это - подумал это стиль для подсветки найденного на странице. bunda1 пишет
могу передвинуть, но на самом деле это всё самообман: у тебя он находится поверх текстового поля, а значит полезного пространства меньше ровно на ширину чекбокса, т.е. выигрышь будет лишь от padding-ов чекбокса, но перенести могу. bunda1 пишет
зачем так изгаляться? есть же для этого преф middlemouse.paste для любителей вставлять текст из буфера обмена средним кликом. Причём работать это будет, само собой, везде. bunda1 пишет
кстати, можно сделать так: сузить текстовое поле до какого-то приемлемого минимума и расширять его по мере надобности (до какого-то приемлемого максимума). |
bunda1 > 10-03-2012 22:15:54 |
iDev.Pi
#FindToolbar[autohide]... скрытый текст Выделить код Код://настройка функций кликов мыши(Mouse Click settings)................................................... this.onclick = function(event) { if(event.button == 0) { // Действие при клике ЛКМ gFindBar.hidden ? gFindBar.onFindCommand() : gFindBar.close(); if (custombuttons.getPrefs("FindBar.Highlight")){Highlight(event)}; if (!gFindBar.hidden) gFindBar.onFindAgainCommand(event.detail = 0); } else if(event.button == 1) { // Действие при клике СКМ gFindBar.hidden ? gFindBar.onFindCommand() : gFindBar.close();с goDoCommand("cmd_selectNone"); goDoCommand("cmd_paste"); } }; //Объявляем ..... var prefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService); var clipboard = Components.classes["@mozilla.org/widget/clipboardhelper;1"]. getService(Components.interfaces.nsIClipboardHelper); var this_ = this; var AutoHighlight ='Автовыделение' var AutoClose ='Автоматически закрыть' var CloseTimer =' Закрыть через ' var ClearPref ='Сбросить текст' //подсказка............................................................................. this.showTFinfo = function() { //getting prefs Unicode value var prefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService); var Val = "\n\n"+ AutoHighlight +": "+ prefs.getComplexValue("FindBar.Highlight.value",Components.interfaces.nsISupportsString).data; //обрезать подсказку для "Автовыделение" var HValue = Val.substring(0,50); var HDots =(Val.length > 50) ? '...' : ""; //.... this.tooltipText = "Поиск по странице" +"\n" + "Л: Показать - скрыть поиск по странице" +"\n" +"С: Поиск по странице из буфера обмена" +"\n"+ "П: Mеню + CB меню" + HValue + HDots; } this.setAttribute("onmouseover", "this.showTFinfo()"); //проверить наличие строк в about:config и создать если не существует(Add preferences)........................................ if (custombuttons.getPrefs("FindBar.version") !== '5') { prefs.setCharPref("FindBar.version", "5"); prefs.setBoolPref("FindBar.Highlight", true); prefs.setCharPref("FindBar.Highlight.value", "Firefox"); prefs.setBoolPref("FindBar.contextFindWords", true); prefs.setBoolPref("FindBar.ToggleWithDoubleMiddleClick", false); prefs.setCharPref("ui.textHighlightBackground", "#ef0fff");//http://coloria.net/bonus/colornames.htm //prefs.setCharPref("ui.textHighlightForeground", "#000000");//http://coloria.net/bonus/colornames.htm prefs.setBoolPref("FindBar.mini", false); prefs.setBoolPref("FindBar.auto_Close", false); prefs.setCharPref("FindBar.CloseTimer", "7");//7 сек(7 sec) prefs.setCharPref("FindBar.AutohighlightNum", "3"); }; //настройка меню(CB menu settings)................................................... //Объявляем ..... var c ='● '; var n = ' '; //изменить нужный пункт меню(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 label = (custombuttons.getPrefs(s)? c: n) + AutoClose; this.FBClose = label; if(mi) mi.label = label; }; //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 label = (custombuttons.getPrefs(s)? c : n) + 'FindBar мини' this.FBmini = label; if(mi) mi.label = label; }; //Find в контекстном меню(Find in the context menu)..... if(!id || id == "FindInMenu") { // переключаем настройки в about:config s = "FindBar.contextFindWords"; togglePref(s); //изменить нужный пункт меню var label = (custombuttons.getPrefs(s)? c : n) + 'Find в контекстном меню'; this.FindInMenu = label; if(mi) mi.label = label; }; //Переключить двойным средним кликом(Toggle with double middle click)..... if(!id || id == "MiddleClick") { // переключаем настройки в about:config s = "FindBar.ToggleWithDoubleMiddleClick"; togglePref(s); //изменить нужный пункт меню var label = (custombuttons.getPrefs(s)? c : n) + 'Переключить двойным средним кликом'; this.MiddleClick = label; if(mi) mi.label = label; }; //Автовыделение(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 label = (custombuttons.getPrefs(s)? c : n) + AutoHighlight; this.aHighlight = label; if(mi) mi.label = label; }; //Изменить цвет для Автовыделение..... 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 = n + 'Изменить цвет' + ': ' + custombuttons.getPrefs("ui.textHighlightBackground"); this.addColor = label; if(mi) mi.label = label; }; //Автовыделение, добавить текст(Auto Highlight, add text)..... if(!id || id == "AddText") { //Запускаем функцию HighlightAdd(run function HighlightAdd) if (id) HighlightAdd(event); //пункт меню(menuitems) var label = n + 'Добавить текст' this.PrefValue = label; if(mi) mi.label = label; }; //Автовыделение, сбросить ..... 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,'????'); //пункт меню(menuitems) var label = n + ClearPref; this.ClearPref = label; if(mi) mi.label = label; }; //Findbar, переклучить атрибут 'autohide'................................. function autohide(event){ var f = document.getElementById("FindToolbar"); custombuttons.getPrefs("FindBar.auto_Close") ? f.setAttribute("autohide", "true") : f.removeAttribute("autohide"); }; //Запускаем функции f_autohide setTimeout(function() {autohide(event);}, 200) //переключаем настройки в 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 = [ { label: this.FBClose, cmd: 'document.popupNode.CBlabel(this, "FBClose")', sItemId: ''}, { label: this.CloseTimer, cmd: 'document.popupNode.CBlabel(this, "CloseTimer")', sItemId: ''}, { label: "separator", sItemId: ''}, { label: this.FBmini, cmd: 'document.popupNode.CBlabel(this, "FBmini")', sItemId: ''}, { label: this.FindInMenu, cmd: 'document.popupNode.CBlabel(this, "FindInMenu")', sItemId:''}, { label: this.MiddleClick, cmd: 'document.popupNode.CBlabel(this, "MiddleClick")', sItemId:''}, { label: "separator", sItemId: ''}, { label: this.aHighlight, cmd: 'document.popupNode.CBlabel(this, "SwitchHighlight")', sItemId: ''}, { label: this.addColor, cmd: 'document.popupNode.CBlabel(this, "addColor")', sItemId: ''}, { label: this.PrefValue, cmd: 'document.popupNode.CBlabel(this, "AddText")', sItemId: ''}, { label: this.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) mItem.setAttribute("style", "margin-left: -14px;"); //.... var CCsubCall = document.getElementById("custombuttons-contextpopup-subCall"); CCsubCall.setAttribute("style", "margin-left: -4px;"); } x.mObj.getItem(); nItem = x.mObj.getItem(); nItem.id = 'Note'; this.separator = x.mObj.insertBefore( nItem , x.mObj.oMenu.lastChild); } this.init(this); //Стоп, при открытии настройки панелей.................................................... if (window.ToggleFindRun == 'stop') return; //Findbar, установить и удалить атрибут 'mini'(Findbar, set and remove attribute 'mini')........... //Findbar, установить и удалить 'hits'(Findbar, set and remove 'hits')........... function fmini(event){ //FindBar, auto find if (!gFindBar.hidden) { //Find gFindBar.onFindCommand(); } var findToolbar = document.getElementById("FindToolbar"); var HighBut = document.getAnonymousElementByAttribute( gFindBar, "anonid", "highlight"); if (custombuttonsUtils.getPrefs("FindBar.mini")) { //... var highlightBtn = document.getElementById('FindToolbar').getElement('highlight'); if (highlightBtn.checked) { gFindBar._findField.style.color = prefs.getCharPref("ui.textHighlightBackground"); }; findToolbar.setAttribute("mini", "true"); this.hits = ' '; HighBut.setAttribute("tooltiptext", "L = Искать следущее"+"\n" +"L = Поиск выделенного текста " + "\n" + "R = Очистить поле текстового ввода"); } else { findToolbar.removeAttribute("mini") this.hits = ' hits'; HighBut.setAttribute("tooltiptext", "Highlight"); //... gFindBar._findField.style.color = "black"; } //Findbar, убрать фокус(Findbar, hide focus) _content.focus(); }; //Запускаем функции fmini(Run the function fmini) setTimeout(function() {fmini(event);}, 200) //Изменить иконку кнопки................................................................. function ToggleImage(event){ // toggle button image if (custombuttonsUtils.getPrefs("FindBar.Highlight")) { this_.image="data:image/x-icon;base64,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"; } else { this_.image="data:image/x-icon;base64,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"; } }; ToggleImage(event); //find bar сверху (move find bar to the top)................................................ XPCOMUtils.defineLazyGetter(window, "gFindBar", function() { let XULNS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"; let findbar = document.createElementNS(XULNS, "findbar"); findbar.setAttribute("browserid", "content"); findbar.id = "FindToolbar"; gBrowser.parentNode.insertBefore(findbar, gBrowser); // Force a style flush to ensure that our binding is attached. findbar.clientTop; window.gFindBarInitialized = true; return findbar; }); //find bar, показать количество совпадений(find bar,show the number of matches)...@author slimx................. (function() { //add label to findbar var status = document.getAnonymousElementByAttribute(gFindBar, 'anonid', 'match-case-status'); var sep = document.createElement("toolbarspacer"); var count = document.createElement("label"); count.hidden = true; status.parentNode.insertBefore(sep, status); status.parentNode.insertBefore(count, status);//findbar-container gFindBar.__proto__._foundMatches = count; gFindBar.__proto__._updateMatchesCount = function(aRes) { if (!this._updateMatchCountTimeout) window.clearTimeout(this._updateMatchCountTimeout); this._updateMatchCountTimeout = window.setTimeout(function(aRes, aSelf) { aSelf._updateMatchesCountWorker(aRes); }, 0, aRes, this); } gFindBar.__proto__._updateMatchesCountWorker = function(aRes) { var word = this._findField.value; if (aRes == this.nsITypeAheadFind.FIND_NOTFOUND || !word) { this._foundMatches.hidden = true; this._foundMatches.value = ""; } else { var matchesCount = this._countMatches(word).toString(); if (matchesCount != "0") { if (matchesCount == "1") this._foundMatches.value = matchesCount + hits; else if (matchesCount == "-1") { var matchLimit = 100; this._foundMatches.value = " \>"+ matchLimit + hits; // var key = (matchLimit > 1000) ? "Decrease" : "Increase"; } else this._foundMatches.value = matchesCount + hits; this._foundMatches.hidden = false; //Findbar, удалить атрибут 'red'(Findbar, remove attribute 'red').............. var findToolbar = document.getElementById("FindToolbar"); findToolbar.removeAttribute("red"); } else { this._foundMatches.hidden = true; this._foundMatches.value = ""; //Findbar, установить атрибут 'red'(Findbar, set attribute 'red')............... var findToolbar = document.getElementById("FindToolbar"); findToolbar.setAttribute("red", "true"); } window.clearTimeout(this._updateMatchCountTimeout); } } gFindBar.__proto__._countMatches = function(aWord, aWindow) { var win = aWindow || this.browser.contentWindow; var countFound = 0; for (var i = 0, count; win.frames && i < win.frames.length; i++) { if ((count = this._countMatches(aWord, win.frames[i])) != -1) countFound += count; else return count; } var doc = win.document; if (!doc || !(doc instanceof HTMLDocument)) return countFound; var body = doc.body; var count = body.childNodes.length; var searchRange = doc.createRange(); var startPt = doc.createRange(); var endPt = doc.createRange(); searchRange.setStart(body, 0); searchRange.setEnd(body, count); startPt.setStart(body, 0); startPt.setEnd(body, 0); endPt.setStart(body, count); endPt.setEnd(body, count); var retRange = null; var finder = Components.classes["@mozilla.org/embedcomp/rangefind;1"] .createInstance() .QueryInterface(Components.interfaces.nsIFind); finder.caseSensitive = this._shouldBeCaseSensitive(aWord); var matchLimit = 100; while ((retRange = finder.Find(aWord, searchRange, startPt, endPt))) { if (this._rangeIsVisible(retRange, win)) { if (this._findMode == this.FIND_LINKS) { if (this._rangeStartsInLink(retRange)) ++ countFound; } else ++ countFound; } if (countFound == matchLimit) { countFound = -1; break; } startPt = doc.createRange(); startPt.setStart(retRange.startContainer, retRange.startOffset + 1); } return countFound; } gFindBar.__proto__._rangeIsVisible = function(aRange, aWindow) { var node = aRange.startContainer; if (node.nodeType == node.ELEMENT_NODE) { if (node.hasChildNodes) { var childNode = node.childNodes[aRange.startOffset]; if (childNode) node = childNode; } } while (node && node.nodeType != node.ELEMENT_NODE) node = node.parentNode; // There is no perfect way to check if a node is visible in JavaScript, // so use the best measures we can have if (node) { var style = aWindow.getComputedStyle(node, ""); if (style) { if (style.visibility == "hidden" || style.visibility == "collapse" || style.display == "none") return false; if (style.left != "auto" && style.width != "auto") if (style.left < 0 && style.left + style.width < 0) return false; if (style.top != "auto" && style.height != "auto") if (style.top < 0 && style.top + style.height < 0) return false; } } return true; } gFindBar.__proto__._rangeStartsInLink = function(aRange) { var isInsideLink = false; var node = aRange.startContainer; if (node.nodeType == node.ELEMENT_NODE) { if (node.hasChildNodes) { var childNode = node.childNodes[aRange.startOffset]; if (childNode) node = childNode; } } const XLink_NS = "http://www.w3.org/1999/xlink"; do { if (node instanceof HTMLAnchorElement) { isInsideLink = node.hasAttribute("href");m break; } else if (typeof node.hasAttributeNS == "function" && node.hasAttributeNS(XLink_NS, "href")) { isInsideLink = (node.getAttributeNS(XLink_NS, "type") == "simple"); break; } node = node.parentNode; } while (node); return isInsideLink; } //insert count function to original eval("gFindBar._updateCaseSensitivity=" + gFindBar._updateCaseSensitivity.toString().slice(0, -1) + "this._updateMatchesCount();}"); eval("gFindBar._updateStatusUI=" + gFindBar._updateStatusUI.toString().slice(0, -1) + "this._updateMatchesCount();}"); })(); //FindBar, поиск колесиком мыши(FindBar, Mouse Scroll find )................................................ gFindBar.addEventListener('DOMMouseScroll', function (event){ //Найти (Find) gFindBar.onFindAgainCommand(event.detail < 0); }, false); //переключить 'Поиск на странице' двойным средним кликом на странице(toggle Find Bar, if Double midlle Click in page).......... var FBar ={ addEvList : function(event) { //Стоп, при открытии настройки панелей if (window.ToggleFindRun == 'stop') return; //добавляем обработчики для обработки мышиных событий на странице....... //включена 'Использовать автоматическую прокрутку'... gBrowser.addEventListener('click', function(event){if (custombuttons.getPrefs("general.autoScroll")){FBar.clickClose(event); }}, true); //если не включена 'Использовать автоматическую прокрутку' gBrowser.addEventListener('dblclick', function(event){if (!custombuttons.getPrefs("general.autoScroll")) FBar.clickClose(event);}, true); }, clickClose : function(event) { //если нажатие на среднюю кнопку мыши if (1 == event.button) { //Объявляем адреса для фильтра 're' var re = /chrome:\/\/|file:\/\/|data:text\/|data:image\/|about:/; //Стоп, если адрес из 're' var str = String(getBrowser().currentURI.spec); var str = str.substring(0,13); if (str.search(re) != -1) return; //Стоп, если это ссылка(if link) var link = this.getLink(event.target); if(link) return; //если разрешено в настройках(about:config) if (custombuttons.getPrefs("FindBar.ToggleWithDoubleMiddleClick")) { //переключить 'Поиск на странице' gFindBar.hidden ? gFindBar.onFindCommand() : gFindBar.close(); if (!gFindBar.hidden){Find(event); gFindBar._findField.focus(); } } } }, clickLink : function(event) { //Объявляем ссылку'Link'............ this.getLink = function(node) { if(!node || !node.localName) return null; const docNode = Node.DOCUMENT_NODE; // 9 const eltNode = Node.ELEMENT_NODE; // 1 for(node = node; node && node.nodeType != docNode; node = node.parentNode) { if( ( node instanceof HTMLAnchorElement || node instanceof HTMLAreaElement || node instanceof HTMLLinkElement ) && node.hasAttribute("href") || node.nodeType == eltNode && node.hasAttributeNS("http://www.w3.org/1999/xlink", "href") ) return node; } return null; }; } }; //Запускаем функцию addEvList(run function addEvList) FBar.addEvList(event); //Запускаем функцию clickLink(run function clickLink) FBar.clickLink(event); //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 ) { gFindBar._findField.reset(); gFindBar.onFindAgainCommand(false); //.... var findToolbar = document.getElementById("FindToolbar"); findToolbar.removeAttribute("red"); //... gFindBar._findField.focus(); //.... gFindBar._highlightDoc(false); } }; //Поиск по странице из буфера обмена/выделенный текст, если кликнуть средним кликом на findbar или на иконку поиска на FindBar mini ....... //переключить кнопку 'Highlight' двойным левым кликом на на поле текстового ввода на FindBar............ //Стоп, при открытии настройки панелей(stop, if onDestroy) if (window.ToggleFindRun !== 'stop') (function () { //Поиск по странице из буфера обмен gFindBar.addEventListener("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; if (custombuttons.getPrefs("FindBar.Highlight")){ Highlight(event) }; gFindBar.onFindAgainCommand(event.detail = 0); }, true); //переключить кнопку 'Highlight'......... gFindBar._findField.addEventListener("dblclick", function(event){ if ( event.button != 0 )return; event.preventDefault(); event.stopPropagation() //.... if (!custombuttons.getPrefs("FindBar.mini")) return; if (custombuttons.getPrefs("FindBar.Highlight")) return; //переключить кнопку 'Highlight' toggleHighlight(event); //Findbar, убрать фокус(Findbar, hide focus) _content.focus(); }, false); })(); //FindBar, автоматически закрыть(autohide Findbar)................................. //Стоп, при открытии настройки панелей(stop, if onDestroy) if (window.ToggleFindRun !== 'stop')(function () { function go() { gFindBar.close(); } function on() { if (!custombuttons.getPrefs("FindBar.auto_Close")) return; if (gFindBar.hidden) return; if (window.ACRun == 'stop') return; window.ACRun = 'stop'; timeoutId = setTimeout(go, custombuttons.getPrefs("FindBar.CloseTimer") + '000') gFindBar.addEventListener('mouseover',off, false); gFindBar.addEventListener("DOMAttrModified", Modoff, false); } function Modoff() { if (!gFindBar.hidden){ off(); } }; function off() { window.ACRun = ''; gFindBar.removeEventListener('mouseover',Modoff, false); gFindBar.removeEventListener("DOMAttrModified", off, false); clearTimeout(timeoutId); } gBrowser.addEventListener('mouseover',on, false); })(); //FindBar, сочетания клавиш(Key config)......................................................... //Стоп, при открытии настройки панелей(stop, if onDestroy) if (window.ToggleFindRun !== 'stop')(function () { window.addEventListener('keydown', function (event){ //FindBar(ctrl+ F)показать - скрыть(Toggle Find Bar)......... if (event.altKey == false) { if ((event.keyCode==0x46)&&(event.ctrlKey)) { event.preventDefault(); event.stopPropagation(); gFindBar.hidden ? gFindBar.onFindCommand() : gFindBar.close();}} //Findbar(ctrl+ALT+F), поиск по странице из буфера обмена(find from clipboard)............. if (event.altKey == true) { if ((event.keyCode==0x46)&&(event.ctrlKey)) { gFindBar.hidden ? gFindBar.onFindCommand() : gFindBar.close(); goDoCommand("cmd_selectNone"); goDoCommand("cmd_paste");}} //Findbar(ctrl+ALT+H), FindBar, вести слова для выделение(set Highlight words)... if (event.altKey == true) { if ((event.keyCode==0x48)&&(event.ctrlKey)) { //Запускаем функцию HighlightAdd(run HighlightAdd) HighlightAdd(event); } } }, false); })(); //переключить кнопку 'Highlight'(toggle Highlight)............................................ function toggleHighlight(event) { var highlightBtn = document.getElementById('FindToolbar').getElement('highlight'); //... if (!highlightBtn.checked) { highlightBtn.setAttribute("checked", "true"); gFindBar._highlightDoc(true, gFindBar._findField.value); //.. gFindBar._findField.style.color = prefs.getCharPref("ui.textHighlightBackground"); } else { highlightBtn.removeAttribute("checked"); gFindBar._highlightDoc(false); //.. gFindBar._findField.style.color = "black"; } }; //Автоматически выделить заранее введенные слова (auto Highlight words permanent).................................................... Highlight = function(event) { //устанавливаем флаг... var m = true; if (event =='[object UIEvent]'){var m = false}; if (event =='[object DragEvent]'){var m = false}; if (event =='[object MouseEvent]'){var m = false}; //hide Highlight gFindBar._highlightDoc(false); //.... var highlightBtn = document.getElementById('FindToolbar').getElement('highlight'); var FBNum = custombuttons.getPrefs("FindBar.AutohighlightNum"); var FBvalue = gFindBar._findField.value; //.... if (!gFindBar.hidden) { //... if (!highlightBtn.checked) { gFindBar._findField.style.color = "black"; } //Findbar, удалить атрибут 'red'(Findbar, remove attribute 'red').............. if (FBvalue.length = 0) { var findToolbar = document.getElementById("FindToolbar"); findToolbar.removeAttribute("red"); } //FindBar, auto find if (m) { //Findbar, фокус(Findbar, focus) gFindBar._findField.focus(); gFindBar.onFindCommand(); //Findbar, убрать фокус(Findbar, hide focus) _content.focus(); } } //auto Highlight if (custombuttonsUtils.getPrefs("FindBar.Highlight", true)) { if (gFindBar.hidden) { //getting prefs Unicode value var value = prefs.getComplexValue("FindBar.Highlight.value", Components.interfaces.nsISupportsString).data; } if (!gFindBar.hidden) { if (FBvalue.length > FBNum) {var value = FBvalue}; } //Highlight gFindBar._highlightDoc(true, value); } }; if (window.ToggleFindRun !== 'stop') (function () { //добавляем обработчики..... //обработчики для табов.. gBrowser.tabContainer.addEventListener("TabSelect", Highlight, false); gBrowser.addEventListener("DOMContentLoaded", function(event){ //фылтр.... //стоп, если открыть новые таби if (event.target.location.href !== getBrowser().currentURI.spec) return; //стоп, если срабатывает на фрейме var document = event.originalTarget; if (document instanceof HTMLDocument && this.contentWindow.document !== document) return; Highlight(event)}, false); //обработчики для FindBar.. gFindBar._findField.addEventListener("input", Highlight, false); gFindBar._findField.setAttribute("ondrop","event.stopPropagation(); Find(event); "); gFindBar.addEventListener("DOMAttrModified", function(event){ if (!gFindBar.hidden) return; Highlight(event)}, false); })(); //Найти на странице................. Find = function(event){ var sel = content.getSelection().toString(); if (!!sel){ if(gFindBar.hidden){gFindBar.onFindCommand();} //Убираем пробелы с обоих концов текста.... var newstr = sel.replace(/^\s+|\s+$/g,""); //... gFindBar._findField.value = newstr; Highlight(event); gFindBar.onFindAgainCommand(event.detail = 0); } else { Highlight(event); gFindBar.onFindAgainCommand(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(){ //Запускаем функцию 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); } })(); //Добавить текст(выделенный / из буфера обмена) для автовыделения..................... function HighlightAdd(event){ //Копируем выделенный текст в буфер document.getElementById("cmd_copy").doCommand(); // Get the root branch var prefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch); //setting Unicode value var str = Components.classes["@mozilla.org/supports-string;1"].createInstance(Components.interfaces.nsISupportsString); //читаем из буфера обмена и добавляем текст для автовыделения в 'about:config' str.data = readFromClipboard(); prefs.setComplexValue("FindBar.Highlight.value", Components.interfaces.nsISupportsString, str); //всплывающая подсказка custombuttons.alertSlide(AutoHighlight, str.data); //... goDoCommand("cmd_selectNone"); //Запускаем функцию Highlight(run Highlight) Highlight(event); }; //Поле текстового ввода на Findbar мигает желтим............................ function fflash(event){ var findToolbar = document.getElementById("FindToolbar"); //Следим за иконкой статуса на FindBar var findstatus = gFindBar.getElement("find-status-icon"); findstatus.addEventListener("DOMAttrModified",function(e){ if(findstatus.getAttribute("status")=="wrapped") { findToolbar.setAttribute("flash", "true"); setTimeout(function() {findToolbar.removeAttribute("flash");}, 700)}; }, false)}; //Запускаем функции fflash, fmini(Run the function fflash) document.addEventListener( "DOMContentLoaded", fflash(event), false); // FindToolbar стиль(style)....................................................................... (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); #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 {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; -moz-box-shadow: none !important;} /*Find Toolbar, mini......................................... */ #FindToolbar[mini="true"] .findbar-textbox{ width: 16em !important; height:21px!important; padding-right: 20px !important; margin-right: 2px!important; margin-left:-4px!important} #FindToolbar[mini] { position: fixed; right: 18px; background: menu !important; box-shadow: 0px 10px 5px -10px rgba(0,0,0,.3) !important; border: 1px solid grey !important; border-top: 0 !important; border-radius: 0 0 8px 8px !important;} #FindToolbar[mini="true"] .findbar-container>checkbox{ margin-left:-24px !important; margin-right: -3px !important} #FindToolbar[mini="true"] label[class="checkbox-label"], #FindToolbar[mini="true"] toolbarbutton.findbar-find-next, #FindToolbar[mini="true"] toolbarbutton.findbar-find-previous, #FindToolbar[mini="true"] .findbar-highlight label, #FindToolbar[mini="true"] .findbar-closebutton, #FindToolbar[mini="true"] .findbar-find-fast[anonid="find-label"], #FindToolbar[mini="true"] .findbar-find-fast[anonid="match-case-status"] { display: none !important;} #FindToolbar[mini="true"] toolbarbutton.findbar-highlight.tabbable, #FindToolbar[mini="true"] toolbarbutton.findbar-highlight.tabbable[checked="true"]{ -moz-appearance: none !important; list-style-image: none !important; background: url("data:image/gif;base64,R0lGODlhEAAQAMQWAJmZzJlmzGZmzGZm/2aZ/5mZ/5nM/8zM/8z//5mZmWZmmf///8yZzMzMmZlmmZmZM8zMM8zMZsz/ZsyZZpmZZmZmM////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAHoAxYALAAAAAAQABAAAAVsoCUCgQCIaCoKA1G4p7q6RmEXcQoMxYEYQEMOJSAYEL+D8jC0CG6GJTKhUtiAPiSCmlK4er7FgiGzWLGIBUJRZliVCLMi0Sg7FHhq4gGJlFUNEBIQE38pExGDFIYoFIkQi4wWjhEVkiIUFQohADs=") center no-repeat !important; border: 1px solid rgba(0,0,0,0.3) !important; height:21px !important;} #FindToolbar[mini="true"] checkbox{ -moz-box-ordinal-group: 3 !important;} #FindToolbar[mini="true"] textbox.findbar-textbox{ -moz-box-ordinal-group: 2 !important} #FindToolbar[mini="true"] toolbarbutton.findbar-highlight{ -moz-box-ordinal-group: 4 !important; margin-left:-3px !important} #FindToolbar[mini="true"] .findbar-closebutton{ -moz-box-ordinal-group: 7 !important; } ]]>.toString()); //устанавливаем флаг window.ToggleFindRun = 'stop'; |
iDev.Pi > 10-03-2012 22:45:43 |
bunda1 |
bunda1 > 10-03-2012 22:54:29 |
iDev.Pi
Я привык мне нравится, так быстрее чем с middlemouse.paste + я добавыл поиск выделенного текста/ из буфера, удобно же.
не разумно все и так знают что ищут и смотрят на страницу а не на FindBar mini.
все и так знают что ищут и смотрят на страницу а не на FindBar mini.
да проблема, может переклучать кнопки, ну там атрибут поставыть..... Я очень хочу что бы мой FindBar mini не менял ширыну завысимости от количество найденных совпадений, можно сделать? 10-03-2012 23:03:08 |
bunda1 > 10-03-2012 23:38:18 |
iDev.Pi пишет
mserv пишет
скрытый текст Выделить код Код://настройка функций кликов мыши(Mouse Click settings)................................................... this.onclick = function(event) { if(event.button == 0) { // Действие при клике ЛКМ gFindBar.hidden ? gFindBar.onFindCommand() : gFindBar.close(); if (custombuttons.getPrefs("FindBar.Highlight")){Highlight(event)}; if (!gFindBar.hidden) gFindBar.onFindAgainCommand(event.detail = 0); } else if(event.button == 1) { // Действие при клике СКМ gFindBar.hidden ? gFindBar.onFindCommand() : gFindBar.close();с goDoCommand("cmd_selectNone"); goDoCommand("cmd_paste"); } }; //Объявляем ..... var prefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService); var clipboard = Components.classes["@mozilla.org/widget/clipboardhelper;1"]. getService(Components.interfaces.nsIClipboardHelper); var this_ = this; var AutoHighlight ='Автовыделение' var AutoClose ='Автоматически закрыть' var CloseTimer =' Закрыть через ' var ClearPref ='Сбросить текст' //подсказка............................................................................. this.showTFinfo = function() { //getting prefs Unicode value var prefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService); var Val = "\n\n"+ AutoHighlight +": "+ prefs.getComplexValue("FindBar.Highlight.value",Components.interfaces.nsISupportsString).data; //обрезать подсказку для "Автовыделение" var HValue = Val.substring(0,50); var HDots =(Val.length > 50) ? '...' : ""; //.... this.tooltipText = "Поиск по странице" +"\n" + "Л: Показать - скрыть поиск по странице" +"\n" +"С: Поиск по странице из буфера обмена" +"\n"+ "П: Mеню + CB меню" + HValue + HDots; } this.setAttribute("onmouseover", "this.showTFinfo()"); //проверить наличие строк в about:config и создать если не существует(Add preferences)........................................ if (custombuttons.getPrefs("FindBar.version") !== '6') { prefs.setCharPref("FindBar.version", "6"); prefs.setBoolPref("FindBar.Highlight", true); prefs.setCharPref("FindBar.Highlight.value", "Firefox"); prefs.setBoolPref("FindBar.autoclear", false); prefs.setBoolPref("FindBar.contextFindWords", true); prefs.setBoolPref("FindBar.ToggleWithDoubleMiddleClick", false); prefs.setCharPref("ui.textHighlightBackground", "#ef0fff");//http://coloria.net/bonus/colornames.htm //prefs.setCharPref("ui.textHighlightForeground", "#000000");//http://coloria.net/bonus/colornames.htm prefs.setBoolPref("FindBar.mini", false); prefs.setBoolPref("FindBar.auto_Close", false); prefs.setCharPref("FindBar.CloseTimer", "7");//7 сек(7 sec) prefs.setCharPref("FindBar.AutohighlightNum", "3"); }; //настройка меню(CB menu settings)................................................... //Объявляем ..... var c ='● '; var n = ' '; //изменить нужный пункт меню(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 label = (custombuttons.getPrefs(s)? c: n) + AutoClose; this.FBClose = label; if(mi) mi.label = label; }; //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 label = (custombuttons.getPrefs(s)? c : n) + 'FindBar мини' this.FBmini = label; if(mi) mi.label = label; }; //Find в контекстном меню(Find in the context menu)..... if(!id || id == "FindInMenu") { // переключаем настройки в about:config s = "FindBar.contextFindWords"; togglePref(s); //изменить нужный пункт меню var label = (custombuttons.getPrefs(s)? c : n) + 'Find в контекстном меню'; this.FindInMenu = label; if(mi) mi.label = label; }; //Очищать поле текстового ввода на Findbar при закрытии..... if(!id || id == "autoClear") { // переключаем настройки в about:config s = "FindBar.autoclear"; togglePref(s); //изменить нужный пункт меню var label = (custombuttons.getPrefs(s)? c : n) + 'Очищать поле текстового ввода'; this.autoClear = label; if(mi) mi.label = label; }; //Переключить двойным средним кликом(Toggle with double middle click)..... if(!id || id == "MiddleClick") { // переключаем настройки в about:config s = "FindBar.ToggleWithDoubleMiddleClick"; togglePref(s); //изменить нужный пункт меню var label = (custombuttons.getPrefs(s)? c : n) + 'Переключать двойным средним кликом'; this.MiddleClick = label; if(mi) mi.label = label; }; //Автовыделение(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 label = (custombuttons.getPrefs(s)? c : n) + AutoHighlight; this.aHighlight = label; if(mi) mi.label = label; }; //Изменить цвет для Автовыделение..... 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 = n + 'Изменить цвет' + ': ' + custombuttons.getPrefs("ui.textHighlightBackground"); this.addColor = label; if(mi) mi.label = label; }; //Автовыделение, добавить текст(Auto Highlight, add text)..... if(!id || id == "AddText") { //Запускаем функцию HighlightAdd(run function HighlightAdd) if (id) HighlightAdd(event); //пункт меню(menuitems) var label = n + 'Добавить текст' this.PrefValue = label; if(mi) mi.label = label; }; //Автовыделение, сбросить ..... 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,'????'); //пункт меню(menuitems) var label = n + ClearPref; this.ClearPref = label; if(mi) mi.label = label; }; //Findbar, переклучить атрибут 'autohide'................................. function autohide(event){ var f = document.getElementById("FindToolbar"); custombuttons.getPrefs("FindBar.auto_Close") ? f.setAttribute("autohide", "true") : f.removeAttribute("autohide"); }; //Запускаем функции f_autohide setTimeout(function() {autohide(event);}, 200) //переключаем настройки в 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 = [ { label: this.FBClose, cmd: 'document.popupNode.CBlabel(this, "FBClose")', sItemId: ''}, { label: this.CloseTimer, cmd: 'document.popupNode.CBlabel(this, "CloseTimer")', sItemId: ''}, { label: "separator", sItemId: ''}, { label: this.FBmini, cmd: 'document.popupNode.CBlabel(this, "FBmini")', sItemId: ''}, { label: this.FindInMenu, cmd: 'document.popupNode.CBlabel(this, "FindInMenu")', sItemId:''}, { label: this.autoClear, cmd: 'document.popupNode.CBlabel(this, "autoClear")', sItemId:''}, { label: this.MiddleClick, cmd: 'document.popupNode.CBlabel(this, "MiddleClick")', sItemId:''}, { label: "separator", sItemId: ''}, { label: this.aHighlight, cmd: 'document.popupNode.CBlabel(this, "SwitchHighlight")', sItemId: ''}, { label: this.addColor, cmd: 'document.popupNode.CBlabel(this, "addColor")', sItemId: ''}, { label: this.PrefValue, cmd: 'document.popupNode.CBlabel(this, "AddText")', sItemId: ''}, { label: this.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) mItem.setAttribute("style", "margin-left: -14px;"); //.... var CCsubCall = document.getElementById("custombuttons-contextpopup-subCall"); CCsubCall.setAttribute("style", "margin-left: -4px;"); } x.mObj.getItem(); nItem = x.mObj.getItem(); nItem.id = 'Note'; this.separator = x.mObj.insertBefore( nItem , x.mObj.oMenu.lastChild); } this.init(this); //Стоп, при открытии настройки панелей.................................................... if (window.ToggleFindRun == 'stop') return; //Findbar, установить и удалить атрибут 'mini'(Findbar, set and remove attribute 'mini')........... //Findbar, установить и удалить 'hits'(Findbar, set and remove 'hits')........... function fmini(event){ //FindBar, auto find if (!gFindBar.hidden) { //Find gFindBar.onFindCommand(); } var findToolbar = document.getElementById("FindToolbar"); var HighBut = document.getAnonymousElementByAttribute( gFindBar, "anonid", "highlight"); if (custombuttonsUtils.getPrefs("FindBar.mini")) { //... var highlightBtn = document.getElementById('FindToolbar').getElement('highlight'); if (highlightBtn.checked) { gFindBar._findField.style.color = prefs.getCharPref("ui.textHighlightBackground"); }; findToolbar.setAttribute("mini", "true"); this.hits = ' '; HighBut.setAttribute("tooltiptext", "L = Искать следущее"+"\n" +"M = Поиск выделенного текста/из буфера" + "\n" + "R = Очистить поле текстового ввода"); } else { findToolbar.removeAttribute("mini") this.hits = ' hits'; HighBut.setAttribute("tooltiptext", "Highlight"); //... gFindBar._findField.style.color = "black"; } //Findbar, убрать фокус(Findbar, hide focus) _content.focus(); }; //Запускаем функции fmini(Run the function fmini) setTimeout(function() {fmini(event);}, 200) //Изменить иконку кнопки................................................................. function ToggleImage(event){ // toggle button image if (custombuttonsUtils.getPrefs("FindBar.Highlight")) { this_.image="data:image/x-icon;base64,AAABAAEAExMAAAEAIAAYBgAAFgAAACgAAAATAAAAJgAAAAEAIAAAAAAA8AUAAAAAAAAAAAAAAAAAAAAAAAAAAAICAAAAADoHVOdAAWH/PQBd/TwAXP9AAWL/PwBf/z0AXv85AFn/MgBN/zEAS/85AFn/QgFj/zsAW/09AV7/OAdR5wAAAAAAAAACAAAAADsFWdtNAnr/TgF+/08Afv9PAH7/TwJ//0wAff9XD4T/azaN/1Emav8yAFD/RQNw/1ABgf9OAH3/TgB+/00Dev87BVnbAAAAADwIVudRAYH9VACK/1UEiv9UAYn/VACJ/1cEi/9MAIP/dzeh/+TV8P+olrH/LQBK/0sDdf9VAYj/VACJ/1QAif9UAIr/TwB9/ToHU+dEAWj/WAiM/loIkf9ZCZD/WQiP/1kIj/9dDJH/UQCI/4JAqf/68v//t6m+/zAAUP9OB3v/VwaM/1kIj/9ZCI//WgiR/1YIjP5DAmX/RQFo/V0Jlf9eB5r/XgiX/2AJnP9fCZn/Yw6b/1gAlP+DRq3/+PH+/7qsw/81AFr/UQmC/1wGlv9fCJn/XwiX/2AJmv9dCJb/RABp/UYDbf9eCJz/ZAih/2AIn/9jCaD/Ywqf/2QLnf9HAIP/aTKT/+fb8P+unLv/KABO/0gLc/9XC4r/XwmZ/18Lnv9hCaD/Xgic/0YDbv9IBnD/Yg2i/2cNqP9kDaX/Zg+n/2MHo/9dC5X/dT2Z/7ScxP/4+fv/0sbb/2g9hv9DC2n/RAVu/1QHif9hCKD/ZQuo/2INov9IBnD/SwVz/2YMqv9pDrD/aA+u/2kOrv9sGqf/p4HF/+Db5//Zy+X/yq7g/97O6//g2Oj/nH20/0sYdP9GCHT/XgeY/2gSrf9mDKr/SgVz/0oHd/9rELD/bA62/20QtP9jAa3/q3/O/+DY5/+vjsj/fziz/3wpuv+MRcT/wpvi/+jb8v+Ze7P/OABn/1MJiv9mEK7/aw+x/0oHd/9MCXz/cRW5/34nw/+AK8L/ikLE/+nZ9f+3o8b/YyKU/24Xr/9/J8T/dRy9/4Mzwv/TtOz/4Nfp/2M0if9cHYz/dSK3/3IYuP9MCXz/Twl+/4Arxf+SRdP/kEPQ/7eL4P/j1e7/hWSi/2kxmv+TT8r/lU/T/5VR0f+NQc3/sX3g/+PX7v+Vdqz/aDCU/4tCx/9/LcP/Twh+/1QSgf+QQtD/mkva/5JA1f+7i+X/2Mbp/4Bdnv9fKI3/hEG9/5NH1P+WS9j/jUHR/6t12//Yx+X/lHau/2svnv+US9P/j0HP/1QSgv9dIIn/lEbW/5tM3/+VRNv/s3zl/+7h+v+fgLn/WCeG/2w3nf+LR8P/kUXP/4I5wP+xitX/4dnp/49or/+BO7n/mUzc/5VG1v9cIIn/XyGM/5ZL2/+cUOX/mk/i/59V4//n0vv/2Mnl/4Zfqv9dL4v/ZCyV/3I3pf+NZLX/08ff/9fJ5f+CR7f/lUvV/51P5P+WS9v/XiGL/14gi/2aTeH/oVHr/6BR6P+bR+n/vIPu/+zb+v/h0ez/qYjD/4hjqP+ehLb/2dDi/+TX8P+pd9T/j0PV/55R5v+iUu3/mk3h/14gi/1kJZL/nU/n/qNU8v+gU+//pVbv/6FQ7/+3evH/3MP3//Pp/f/47///9ez//9vA9v+uceX/m0vj/6NU7v+iU+//plXy/5xP6P5iJJH/Wyt+55pR3/2mWPj/pVj3/6RY9/+nWvb/pVX1/6db9v+sZvf/rWn2/6xm9/+oXPb/pVb3/6ZZ+P+kWPf/plf3/6ZX+P+ZUN79Wyt+5wAAAABzQJ3bn1Ln/6JU9P+hV/X/oVb0/6NV9P+iV/X/olb1/6JV9P+iVfT/o1X0/6NW9P+iVfT/olX0/6NU9P+eUub/bj2W2wAAAAACAAICAAAAAGo9jeeBRa//fEOs/XxErf98RK3/fESt/3xErf98RK3/fESt/3xErf98RK3/fESt/3tDrP19RKv/az6K5wAAAAACAAICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=="; } else { this_.image="data:image/x-icon;base64,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"; } }; ToggleImage(event); //find bar сверху (move find bar to the top)................................................ XPCOMUtils.defineLazyGetter(window, "gFindBar", function() { let XULNS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"; let findbar = document.createElementNS(XULNS, "findbar"); findbar.setAttribute("browserid", "content"); findbar.id = "FindToolbar"; gBrowser.parentNode.insertBefore(findbar, gBrowser); // Force a style flush to ensure that our binding is attached. findbar.clientTop; window.gFindBarInitialized = true; return findbar; }); //find bar, показать количество совпадений(find bar,show the number of matches)...@author slimx................. (function() { //add label to findbar var status = document.getAnonymousElementByAttribute(gFindBar, 'anonid', 'match-case-status'); var sep = document.createElement("toolbarspacer"); var count = document.createElement("label"); count.hidden = true; status.parentNode.insertBefore(sep, status); status.parentNode.insertBefore(count, status);//findbar-container gFindBar.__proto__._foundMatches = count; gFindBar.__proto__._updateMatchesCount = function(aRes) { if (!this._updateMatchCountTimeout) window.clearTimeout(this._updateMatchCountTimeout); this._updateMatchCountTimeout = window.setTimeout(function(aRes, aSelf) { aSelf._updateMatchesCountWorker(aRes); }, 0, aRes, this); } gFindBar.__proto__._updateMatchesCountWorker = function(aRes) { var word = this._findField.value; if (aRes == this.nsITypeAheadFind.FIND_NOTFOUND || !word) { this._foundMatches.hidden = true; this._foundMatches.value = ""; } else { var matchesCount = this._countMatches(word).toString(); if (matchesCount != "0") { if (matchesCount == "1") this._foundMatches.value = matchesCount + hits; else if (matchesCount == "-1") { var matchLimit = 100; this._foundMatches.value = " \>"+ matchLimit + hits; // var key = (matchLimit > 1000) ? "Decrease" : "Increase"; } else this._foundMatches.value = matchesCount + hits; this._foundMatches.hidden = false; //Findbar, удалить атрибут 'red'(Findbar, remove attribute 'red').............. var findToolbar = document.getElementById("FindToolbar"); findToolbar.removeAttribute("red"); } else { this._foundMatches.hidden = true; this._foundMatches.value = ""; //Findbar, установить атрибут 'red'(Findbar, set attribute 'red')............... var findToolbar = document.getElementById("FindToolbar"); findToolbar.setAttribute("red", "true"); } window.clearTimeout(this._updateMatchCountTimeout); } } gFindBar.__proto__._countMatches = function(aWord, aWindow) { var win = aWindow || this.browser.contentWindow; var countFound = 0; for (var i = 0, count; win.frames && i < win.frames.length; i++) { if ((count = this._countMatches(aWord, win.frames[i])) != -1) countFound += count; else return count; } var doc = win.document; if (!doc || !(doc instanceof HTMLDocument)) return countFound; var body = doc.body; var count = body.childNodes.length; var searchRange = doc.createRange(); var startPt = doc.createRange(); var endPt = doc.createRange(); searchRange.setStart(body, 0); searchRange.setEnd(body, count); startPt.setStart(body, 0); startPt.setEnd(body, 0); endPt.setStart(body, count); endPt.setEnd(body, count); var retRange = null; var finder = Components.classes["@mozilla.org/embedcomp/rangefind;1"] .createInstance() .QueryInterface(Components.interfaces.nsIFind); finder.caseSensitive = this._shouldBeCaseSensitive(aWord); var matchLimit = 100; while ((retRange = finder.Find(aWord, searchRange, startPt, endPt))) { if (this._rangeIsVisible(retRange, win)) { if (this._findMode == this.FIND_LINKS) { if (this._rangeStartsInLink(retRange)) ++ countFound; } else ++ countFound; } if (countFound == matchLimit) { countFound = -1; break; } startPt = doc.createRange(); startPt.setStart(retRange.startContainer, retRange.startOffset + 1); } return countFound; } gFindBar.__proto__._rangeIsVisible = function(aRange, aWindow) { var node = aRange.startContainer; if (node.nodeType == node.ELEMENT_NODE) { if (node.hasChildNodes) { var childNode = node.childNodes[aRange.startOffset]; if (childNode) node = childNode; } } while (node && node.nodeType != node.ELEMENT_NODE) node = node.parentNode; // There is no perfect way to check if a node is visible in JavaScript, // so use the best measures we can have if (node) { var style = aWindow.getComputedStyle(node, ""); if (style) { if (style.visibility == "hidden" || style.visibility == "collapse" || style.display == "none") return false; if (style.left != "auto" && style.width != "auto") if (style.left < 0 && style.left + style.width < 0) return false; if (style.top != "auto" && style.height != "auto") if (style.top < 0 && style.top + style.height < 0) return false; } } return true; } gFindBar.__proto__._rangeStartsInLink = function(aRange) { var isInsideLink = false; var node = aRange.startContainer; if (node.nodeType == node.ELEMENT_NODE) { if (node.hasChildNodes) { var childNode = node.childNodes[aRange.startOffset]; if (childNode) node = childNode; } } const XLink_NS = "http://www.w3.org/1999/xlink"; do { if (node instanceof HTMLAnchorElement) { isInsideLink = node.hasAttribute("href");m break; } else if (typeof node.hasAttributeNS == "function" && node.hasAttributeNS(XLink_NS, "href")) { isInsideLink = (node.getAttributeNS(XLink_NS, "type") == "simple"); break; } node = node.parentNode; } while (node); return isInsideLink; } //insert count function to original eval("gFindBar._updateCaseSensitivity=" + gFindBar._updateCaseSensitivity.toString().slice(0, -1) + "this._updateMatchesCount();}"); eval("gFindBar._updateStatusUI=" + gFindBar._updateStatusUI.toString().slice(0, -1) + "this._updateMatchesCount();}"); })(); //FindBar, поиск колесиком мыши(FindBar, Mouse Scroll find )................................................ gFindBar.addEventListener('DOMMouseScroll', function (event){ //Найти (Find) gFindBar.onFindAgainCommand(event.detail < 0); }, false); //Очистить поле текстового ввода на Findbar при закрытии.................................................. gFindBar.addEventListener("DOMAttrModified", function(event){ if (!gFindBar.hidden) return; if (custombuttonsUtils.getPrefs("FindBar.autoclear")){gFindBar._findField.reset()}; }, false); //переключить 'Поиск на странице' двойным средним кликом на странице(toggle Find Bar, if Double midlle Click in page).......... var FBar ={ addEvList : function(event) { //Стоп, при открытии настройки панелей if (window.ToggleFindRun == 'stop') return; //добавляем обработчики для обработки мышиных событий на странице....... //включена 'Использовать автоматическую прокрутку'... gBrowser.addEventListener('click', function(event){if (custombuttons.getPrefs("general.autoScroll")){FBar.clickClose(event); }}, true); //если не включена 'Использовать автоматическую прокрутку' gBrowser.addEventListener('dblclick', function(event){if (!custombuttons.getPrefs("general.autoScroll")) FBar.clickClose(event);}, true); }, clickClose : function(event) { //если нажатие на среднюю кнопку мыши if (1 == event.button) { //Объявляем адреса для фильтра 're' var re = /chrome:\/\/|file:\/\/|data:text\/|data:image\/|about:/; //Стоп, если адрес из 're' var str = String(getBrowser().currentURI.spec); var str = str.substring(0,13); if (str.search(re) != -1) return; //Стоп, если это ссылка(if link) var link = this.getLink(event.target); if(link) return; //если разрешено в настройках(about:config) if (custombuttons.getPrefs("FindBar.ToggleWithDoubleMiddleClick")) { //переключить 'Поиск на странице' gFindBar.hidden ? gFindBar.onFindCommand() : gFindBar.close(); if (custombuttons.getPrefs("FindBar.Highlight")){Highlight(event)}; if (!gFindBar.hidden) { gFindBar.onFindAgainCommand(event.detail = 0); gFindBar._findField.focus(); } } } }, clickLink : function(event) { //Объявляем ссылку'Link'............ this.getLink = function(node) { if(!node || !node.localName) return null; const docNode = Node.DOCUMENT_NODE; // 9 const eltNode = Node.ELEMENT_NODE; // 1 for(node = node; node && node.nodeType != docNode; node = node.parentNode) { if( ( node instanceof HTMLAnchorElement || node instanceof HTMLAreaElement || node instanceof HTMLLinkElement ) && node.hasAttribute("href") || node.nodeType == eltNode && node.hasAttributeNS("http://www.w3.org/1999/xlink", "href") ) return node; } return null; }; } }; //Запускаем функцию addEvList(run function addEvList) FBar.addEvList(event); //Запускаем функцию clickLink(run function clickLink) FBar.clickLink(event); //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 ) { gFindBar._findField.reset(); gFindBar.onFindAgainCommand(false); //.... var findToolbar = document.getElementById("FindToolbar"); findToolbar.removeAttribute("red"); //... gFindBar._findField.focus(); //.... gFindBar._highlightDoc(false); } }; //Поиск по странице из буфера обмена/выделенный текст, если кликнуть средним кликом на findbar или на иконку поиска на FindBar mini ....... //переключить кнопку 'Highlight' двойным левым кликом на на поле текстового ввода на FindBar............ //Стоп, при открытии настройки панелей(stop, if onDestroy) if (window.ToggleFindRun !== 'stop') (function () { //Поиск по странице из буфера обмен gFindBar.addEventListener("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; if (custombuttons.getPrefs("FindBar.Highlight")){ Highlight(event) }; gFindBar.onFindAgainCommand(event.detail = 0); }, true); //переключить кнопку 'Highlight'......... gFindBar._findField.addEventListener("dblclick", function(event){ if ( event.button != 0 )return; event.preventDefault(); event.stopPropagation() //.... if (!custombuttons.getPrefs("FindBar.mini")) return; if (custombuttons.getPrefs("FindBar.Highlight")) return; //переключить кнопку 'Highlight' toggleHighlight(event); //Findbar, убрать фокус(Findbar, hide focus) _content.focus(); }, false); })(); //FindBar, автоматически закрыть(autohide Findbar)................................. //Стоп, при открытии настройки панелей(stop, if onDestroy) if (window.ToggleFindRun !== 'stop')(function () { function go() { gFindBar.close(); } function on() { if (!custombuttons.getPrefs("FindBar.auto_Close")) return; if (gFindBar.hidden) return; if (window.ACRun == 'stop') return; window.ACRun = 'stop'; timeoutId = setTimeout(go, custombuttons.getPrefs("FindBar.CloseTimer") + '000') gFindBar.addEventListener('mouseover',off, false); gFindBar.addEventListener("DOMAttrModified", Modoff, false); } function Modoff() { if (!gFindBar.hidden){ off(); } }; function off() { window.ACRun = ''; gFindBar.removeEventListener('mouseover',Modoff, false); gFindBar.removeEventListener("DOMAttrModified", off, false); clearTimeout(timeoutId); } gBrowser.addEventListener('mouseover',on, false); })(); //FindBar, сочетания клавиш(Key config)......................................................... //Стоп, при открытии настройки панелей(stop, if onDestroy) if (window.ToggleFindRun !== 'stop')(function () { window.addEventListener('keydown', function (event){ //FindBar(ctrl+ F)показать - скрыть(Toggle Find Bar)......... if (event.altKey == false) { if ((event.keyCode==0x46)&&(event.ctrlKey)) { event.preventDefault(); event.stopPropagation(); gFindBar.hidden ? gFindBar.onFindCommand() : gFindBar.close();}} //Findbar(ctrl+ALT+F), поиск по странице из буфера обмена(find from clipboard)............. if (event.altKey == true) { if ((event.keyCode==0x46)&&(event.ctrlKey)) { gFindBar.hidden ? gFindBar.onFindCommand() : gFindBar.close(); goDoCommand("cmd_selectNone"); goDoCommand("cmd_paste");}} //Findbar(ctrl+ALT+H), FindBar, вести слова для выделение(set Highlight words)... if (event.altKey == true) { if ((event.keyCode==0x48)&&(event.ctrlKey)) { //Запускаем функцию HighlightAdd(run HighlightAdd) HighlightAdd(event); } } }, false); })(); //переключить кнопку 'Highlight'(toggle Highlight)............................................ function toggleHighlight(event) { var highlightBtn = document.getElementById('FindToolbar').getElement('highlight'); //... if (!highlightBtn.checked) { highlightBtn.setAttribute("checked", "true"); gFindBar._highlightDoc(true, gFindBar._findField.value); //.. gFindBar._findField.style.color = prefs.getCharPref("ui.textHighlightBackground"); } else { highlightBtn.removeAttribute("checked"); gFindBar._highlightDoc(false); //.. gFindBar._findField.style.color = "black"; } }; //Автоматически выделить заранее введенные слова (auto Highlight words permanent).................................................... Highlight = function(event) { //устанавливаем флаг... var m = true; if (event =='[object UIEvent]'){var m = false}; if (event =='[object DragEvent]'){var m = false}; if (event =='[object MouseEvent]'){var m = false}; //hide Highlight gFindBar._highlightDoc(false); //.... var highlightBtn = document.getElementById('FindToolbar').getElement('highlight'); var FBNum = custombuttons.getPrefs("FindBar.AutohighlightNum"); var FBvalue = gFindBar._findField.value; //.... if (!gFindBar.hidden) { //... if (!highlightBtn.checked) { gFindBar._findField.style.color = "black"; } //Findbar, удалить атрибут 'red'(Findbar, remove attribute 'red').............. if (FBvalue.length = 0) { var findToolbar = document.getElementById("FindToolbar"); findToolbar.removeAttribute("red"); } //FindBar, auto find if (m) { //Findbar, фокус(Findbar, focus) gFindBar._findField.focus(); gFindBar.onFindCommand(); //Findbar, убрать фокус(Findbar, hide focus) _content.focus(); } } //auto Highlight if (custombuttonsUtils.getPrefs("FindBar.Highlight")) { if (gFindBar.hidden) { //getting prefs Unicode value var value = prefs.getComplexValue("FindBar.Highlight.value", Components.interfaces.nsISupportsString).data; } if (!gFindBar.hidden) { if (FBvalue.length > FBNum) {var value = FBvalue}; } //Highlight gFindBar._highlightDoc(true, value); } }; if (window.ToggleFindRun !== 'stop') (function () { //добавляем обработчики..... //обработчики для табов.. gBrowser.tabContainer.addEventListener("TabSelect", Highlight, false); gBrowser.addEventListener("DOMContentLoaded", function(event){ //фылтр.... //стоп, если открыть новые таби if (event.target.location.href !== getBrowser().currentURI.spec) return; //стоп, если срабатывает на фрейме var document = event.originalTarget; if (document instanceof HTMLDocument && this.contentWindow.document !== document) return; Highlight(event)}, false); //обработчики для FindBar.. gFindBar._findField.addEventListener("input", Highlight, false); gFindBar._findField.setAttribute("ondrop","event.stopPropagation(); Find(event); "); gFindBar.addEventListener("DOMAttrModified", function(event){ if (!gFindBar.hidden) return; Highlight(event)}, false); })(); //FindBar. контекстного меню (context Menu)....................................... (function contextFindWords(){ // выходим, если функция уже выполнялась if (document.getElementById("contextFindWords")) return; const kXULNS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"; var contextMenu = document.getElementById("contentAreaContextMenu"); var separator = document.getElementById("context-sep-properties"); var eventTarget = null; var menu = document.createElementNS(kXULNS, "menu"); menu.id = "contextFindWords"; menu.setAttribute("label", "Find"); menu.hidden = true; contextMenu.insertBefore(menu, separator); var menuPopup = document.createElementNS(kXULNS, "menupopup"); menu.appendChild(menuPopup); var lst = [ { label:"Найти на странице", command:ContexFind }, { label:"Поиск по сайту(google)", command:Search }, { label:"Выделить текст на странице", command:HighlightSel }, { label:"Автовыделение, добавить текст", command:addSel } ]; for(var i = 0, m; m = lst[i]; i++){ var menuItem = document.createElementNS(kXULNS, "menuitem"); menuItem.setAttribute("label", m.label); menuItem.setAttribute("type", "m.radio"); if ("accesskey" in m) menuItem.setAttribute("accesskey", m.accesskey); menuItem.addEventListener("command", m.command, false); menuItem.id = "context-Find-Words-" + m.label.toString(); menuPopup.appendChild(menuItem); } var contextFind = document.getElementById("contextFindWords") contextMenu.addEventListener("popupshowing", setMenuDisplay, false); function setMenuDisplay(aEvent) { if (gContextMenu.isTextSelected) { if (custombuttons.getPrefs("FindBar.contextFindWords")) { contextFind.hidden = false; } else { contextFind.hidden = true; } } } function ContexFind(){ gFindBar.onFindCommand(); if (custombuttons.getPrefs("FindBar.Highlight")){Highlight(event)}; gFindBar.onFindAgainCommand(event.detail = 0); } 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); } })(); //Добавить текст(выделенный / из буфера обмена) для автовыделения..................... function HighlightAdd(event){ //Копируем выделенный текст в буфер document.getElementById("cmd_copy").doCommand(); // Get the root branch var prefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch); //setting Unicode value var str = Components.classes["@mozilla.org/supports-string;1"].createInstance(Components.interfaces.nsISupportsString); //читаем из буфера обмена и добавляем текст для автовыделения в 'about:config' str.data = readFromClipboard(); prefs.setComplexValue("FindBar.Highlight.value", Components.interfaces.nsISupportsString, str); //всплывающая подсказка custombuttons.alertSlide(AutoHighlight, str.data); //... goDoCommand("cmd_selectNone"); //Запускаем функцию Highlight(run Highlight) Highlight(event); }; //Поле текстового ввода на Findbar мигает желтим............................ function fflash(event){ var findToolbar = document.getElementById("FindToolbar"); //Следим за иконкой статуса на FindBar var findstatus = gFindBar.getElement("find-status-icon"); findstatus.addEventListener("DOMAttrModified",function(e){ if(findstatus.getAttribute("status")=="wrapped") { findToolbar.setAttribute("flash", "true"); setTimeout(function() {findToolbar.removeAttribute("flash");}, 700)}; }, false)}; //Запускаем функции fflash, fmini(Run the function fflash) document.addEventListener( "DOMContentLoaded", fflash(event), false); // FindToolbar стиль(style)....................................................................... (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); #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; -moz-box-shadow: none !important;} /*Find Toolbar, mini......................................... */ #FindToolbar[mini="true"] .findbar-textbox{ width: 16em !important; height:21px!important; padding-right: 20px !important; margin-right: 2px!important; margin-left:-4px!important} #FindToolbar[mini] { position: fixed; right: 18px; background: menu !important; box-shadow: 0px 10px 5px -10px rgba(0,0,0,.3) !important; border: 1px solid grey !important; border-top: 0 !important; border-radius: 0 0 8px 8px !important;} #FindToolbar[mini="true"] .findbar-container>checkbox{ margin-left:-24px !important; margin-right: -3px !important} #FindToolbar[mini="true"] label[class="checkbox-label"], #FindToolbar[mini="true"] toolbarbutton.findbar-find-next, #FindToolbar[mini="true"] toolbarbutton.findbar-find-previous, #FindToolbar[mini="true"] .findbar-highlight label, #FindToolbar[mini="true"] .findbar-closebutton, #FindToolbar[mini="true"] .findbar-find-fast[anonid="find-label"], #FindToolbar[mini="true"] .findbar-find-fast[anonid="match-case-status"] { display: none !important;} #FindToolbar[mini="true"] toolbarbutton.findbar-highlight.tabbable, #FindToolbar[mini="true"] toolbarbutton.findbar-highlight.tabbable[checked="true"]{ -moz-appearance: none !important; list-style-image: none !important; background: url("data:image/gif;base64,R0lGODlhEAAQAMQWAJmZzJlmzGZmzGZm/2aZ/5mZ/5nM/8zM/8z//5mZmWZmmf///8yZzMzMmZlmmZmZM8zMM8zMZsz/ZsyZZpmZZmZmM////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAHoAxYALAAAAAAQABAAAAVsoCUCgQCIaCoKA1G4p7q6RmEXcQoMxYEYQEMOJSAYEL+D8jC0CG6GJTKhUtiAPiSCmlK4er7FgiGzWLGIBUJRZliVCLMi0Sg7FHhq4gGJlFUNEBIQE38pExGDFIYoFIkQi4wWjhEVkiIUFQohADs=") center no-repeat !important; border: 1px solid rgba(0,0,0,0.3) !important; height:21px !important;} #FindToolbar[mini="true"] checkbox{ -moz-box-ordinal-group: 3 !important;} #FindToolbar[mini="true"] textbox.findbar-textbox{ -moz-box-ordinal-group: 2 !important} #FindToolbar[mini="true"] toolbarbutton.findbar-highlight{ -moz-box-ordinal-group: 4 !important; margin-left:-3px !important} #FindToolbar[mini="true"] .findbar-closebutton{ -moz-box-ordinal-group: 7 !important; } ]]>.toString()); //устанавливаем флаг window.ToggleFindRun = 'stop'; |
iDev.Pi > 11-03-2012 00:06:16 |
bunda1 и ещё - а прикрути, пожалуйста, и настройку для автоматической вставки в поиск выделенного на странице текста - уж очень она раздражает. 11-03-2012 00:10:46 |
bunda1 > 11-03-2012 00:15:52 |
iDev.Pi пишет
Можно, но я не знаю как. iDev.Pi пишет
Не понял, что за автоматическая вставка? iDev.Pi пишет
ok |
Infocatcher > 11-03-2012 00:31:23 |
bunda1 пишет
|
iDev.Pi > 11-03-2012 01:22:15 |
bunda1 пишет
выделил на странице кусок текста, нажал CTRL+F - и этот текст автоматически вставляется в поиск. глянь, пожалуйста, мой стиль ещё раз - я его в том сообщении обновил: bunda1 пишет
Включил во всём браузере middlemouse.paste и у тебя везде средний клик по текстовому полю - будет вставлять в него текст из буфера. 11-03-2012 01:29:28 bunda1 пишет
давно уже работает нормально 11-03-2012 01:31:36 |
bunda1 > 11-03-2012 12:27:30 |
Infocatcher пишет
Не помогло, там нет примеров. 11-03-2012 12:54:40 iDev.Pi пишет
Так ты хочешь, чтобы CTRL+F менял текст в поле вода на панели поиска? Извини но русский для меня иностранный язык, я не все понимаю. iDev.Pi пишет
Для экономии пространство идеально, можно указать ссылку на него в описании кнопки. |
iDev.Pi > 11-03-2012 15:50:41 |
bunda1 пишет
Да, я знаю. Ничего страшного, я попробую объяснить иначе: сейчас если сделать следующие шаги: то будет такой результат: Мне бы хотелось, чтобы это можно было настройкой, т.е. чтобы я мог отключить эту функцию и было так: то будет такой результат: bunda1 пишет
если честно, хотелось бы чтобы этот стиль заменил в кнопке имеющийся стиль. bunda1 пишет
поясни пожалуйста: тебе этот отступ нужен для чего? чтобы мидл-кликать туда для вставки в поиск текста из буфера? или чтобы просто не происходило изменение ширины панели в момент, когда в пустое поле поиска вписывается что-то и появляется счётчик найденных фраз? |
bunda1 > 11-03-2012 16:45:45 |
iDev.Pi пишет
Уже делаю, это оказалось легко.
Может я чего не догоняю, но можно же не выделять на странице какое-то слово, нажать ctrl+F и файндбар открывается ЧИСТЫМ эсли вклучено в меню Очищать поле текстового ввода
Можем сделать переключение стилей в меню кнопки через атрибут, стиль mini/ supermini или как?
Если кликнуть средним кликом на Findbar или FindBar mini, то текст в поле текстового ввода на Findbar будет заманен текстом из буфера или на выделенный текст, не надо удалять текст который уже есть в поле текстового ввода мой код заменяет его и выделенный текст на странице искать удобно. Но можно нажимать на кнопку поиска на FindBar mini средним кликом. |
Infocatcher > 11-03-2012 17:13:04 |
bunda1 пишет
А какие там нужны примеры? Примеры есть, но там много лишнего: |
iDev.Pi > 11-03-2012 17:16:31 |
bunda1 пишет
можно. но а если выделение на странице где-то было, ты потом переключился на другую вкладку, забыл про выделение и вернулся обратно? bunda1 пишет
в общем ладно, хрен с моим стилем - я тогда прошу тебя внести в свой стиль некоторые изменения: bunda1 пишет
так ты попробуй кликнуть прям в текстовое поле - срабатывает так же, а значит и отступ не нужен. |
bunda1 > 11-03-2012 17:52:52 |
Infocatcher пишет
<menuitem type="checkbox" /> или <menuitem type="radio" /> у меня не будет работать, у меня меню по другому построено. скрытый текст Выделить код Код://настройка меню(CB menu settings)................................................... //Объявляем ..... var c ='true'; var n = 'false'; //изменить нужный пункт меню(toggle menuitems) //переключаем настройки в about:config(toggle preference) this.CBlabel = function (mi, id) { //Автоматически закрыть(FB auto close).... if(!id || id == "FBClose") { //переключаем настройки в about:config s = "FindBar.auto_Close"; togglePref(s); //Запускаем функцию autohide if (id) autohide(event); //изменить нужный пункт меню var cek = (custombuttons.getPrefs(s)? c: n); this.FBCcek = cek; if(mi) mi.cek = cek; }; //FB auto close timer..... if(!id || id == "CloseTimer") { (function () { //Стоп, при инициализации кнопки if (!id) return; s = "FindBar.CloseTimer"; //switch auto close timer+"\n" + var URL = custombuttons.promptBox(AutoClose, CloseTimer+custombuttons.getPrefs(s) + ' секунд', ''); if (URL[0] == false) return; else var timer = [URL[1]]; //переключаем настройки в about:config(toggle preference) prefs.setCharPref(s, timer); })(); //пункт меню(menuitems) var label = CloseTimer + custombuttons.getPrefs("FindBar.CloseTimer") + ' секунд'; this.CloseTimer = label; if(mi) mi.label = label; }; //FindBar.mini...... if(!id || id == "FBmini") { //переключаем настройки в about:config s = "FindBar.mini"; togglePref(s); //Запускаем функцию fmini(run fmini) if (id) fmini(event); //изменить нужный пункт меню var cek = (custombuttons.getPrefs(s)? c : n); this.FBcek = cek; if(mi) mi.cek = cek; }; //Find в контекстном меню(Find in the context menu)..... if(!id || id == "FindInMenu") { // переключаем настройки в about:config s = "FindBar.contextFindWords"; togglePref(s); //изменить нужный пункт меню var cek = (custombuttons.getPrefs(s)? c : n); this.FIMcek = cek; if(mi) mi.cek = cek; }; //Очищать поле текстового ввода на Findbar при закрытии..... if(!id || id == "autoClear") { // переключаем настройки в about:config s = "FindBar.autoclear"; togglePref(s); //изменить нужный пункт меню var cek = (custombuttons.getPrefs(s)? c : n); this.aCcek = cek; if(mi) mi.cek = cek; }; //Переключить двойным средним кликом(Toggle with double middle click)..... if(!id || id == "MiddleClick") { // переключаем настройки в about:config s = "FindBar.ToggleWithDoubleMiddleClick"; togglePref(s); //изменить нужный пункт меню var cek = (custombuttons.getPrefs(s)? c : n); this.MCcek = cek; if(mi) mi.cek = cek; }; //Автовыделение(Switch, Auto Highlight)..... if(!id || id == "SwitchHighlight") { // переключаем настройки в about:config s = "FindBar.Highlight"; togglePref(s); //Изменить иконку кнопки if (id) ToggleImage(event); //переключить кнопку 'Highlight'(toggle Highlight) if (id) document.getElementById('FindToolbar').getElement('highlight').removeAttribute("checked"); //Запускаем функцию Highlight(run function Highlight) if (id) Highlight(event); //изменить нужный пункт меню(toggle menuitems) var cek = (custombuttons.getPrefs(s)? c : n); this.aHcek = cek; if(mi) mi.cek = cek; }; //Изменить цвет для Автовыделение..... if(!id || id == "addColor") { (function () { //Стоп, при инициализации кнопки if (!id) return; //создаем модальное окно для ввода цвета var URL = custombuttons.promptBox('Изменить цвет для Автовыделение', 'По умолчанию: #ef0fff', ''); if (URL[0] == false) return; else var color = [URL[1]]; //переключаем настройки в about:config(toggle preference) prefs.setCharPref("ui.textHighlightBackground", color); })(); //пункт меню(menuitems) var label = 'Изменить цвет' + ': ' + custombuttons.getPrefs("ui.textHighlightBackground"); this.addColor = label; if(mi) mi.label = label; }; //Автовыделение, добавить текст(Auto Highlight, add text)..... if(!id || id == "AddText") { //Запускаем функцию HighlightAdd(run function HighlightAdd) if (id) HighlightAdd(event); //пункт меню(menuitems) var label = 'Добавить текст' this.PrefValue = label; if(mi) mi.label = label; }; //Автовыделение, сбросить ..... 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,'????'); //пункт меню(menuitems) var label = ClearPref; this.ClearPref = label; if(mi) mi.label = label; }; //Findbar, переклучить атрибут 'autohide'................................. function autohide(event){ var f = document.getElementById("FindToolbar"); custombuttons.getPrefs("FindBar.auto_Close") ? f.setAttribute("autohide", "true") : f.removeAttribute("autohide"); }; //Запускаем функции f_autohide setTimeout(function() {autohide(event);}, 200) //переключаем настройки в 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: ''}, { cek: '', 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: ''}, { cek: this.FIMcek, label: 'Find в контекстном меню', cmd: 'document.popupNode.CBlabel(this, "FindInMenu")', sItemId:''}, { cek: this.aCcek, label: 'Очищать поле текстового ввода', cmd: 'document.popupNode.CBlabel(this, "autoClear")', sItemId:''}, { cek: this.MCcek, label: 'Переключать двойным средним кликом', cmd: 'document.popupNode.CBlabel(this, "MiddleClick")', sItemId:''}, { label: "separator", sItemId: ''}, { cek: this.AHcek, label: AutoHighlight, cmd: 'document.popupNode.CBlabel(this, "SwitchHighlight")', sItemId: ''}, { cek: '', label: this.addColor, cmd: 'document.popupNode.CBlabel(this, "addColor")', sItemId: ''}, { cek: '', label: this.PrefValue, cmd: 'document.popupNode.CBlabel(this, "AddText")', sItemId: ''}, { lcek: '', label: this.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); mItem.setAttribute( 'type','checkbox') mItem.setAttribute('checked', x.ss[i].cek) mItem.setAttribute( 'autocheck',true) //Стиль меню...... var CCsubCall = document.getElementById("custombuttons-contextpopup-subCall"); CCsubCall.setAttribute("style", "margin-left: 2px;"); // var CCsubCall = document.getElementById("custombuttons-contextpopup-sub"); CCsubCall.setAttribute("style", "margin-left: 2px;"); //mItem.setAttribute("style", "margin-left: -14px;"); } x.mObj.getItem(); nItem = x.mObj.getItem(); nItem.id = 'Note'; this.separator = x.mObj.insertBefore( nItem , x.mObj.oMenu.lastChild); } this.init(this); Я добавил в код Выделить код Код:mItem.setAttribute( 'type','checkbox') mItem.setAttribute('checked', x.ss[i].cek) mItem.setAttribute( 'autocheck',true) и атрибут checked теперь переключаться автоматически + сделал проверку настроек при инициализации кнопки. Но есть проблема не всем пунктам меню нужен чекбокс. Подскажи что делать с пунктами меню которым не нужен чекбокс, которые открывают модальние окна?? |
bunda1 > 11-03-2012 21:00:03 |
iDev.Pi пишет
Сделаю. iDev.Pi пишет
Хорошо, мы договорились. iDev.Pi пишет
Это не считается, у тебя какое то расширение это делает. |
Infocatcher > 11-03-2012 21:02:17 |
bunda1 пишет
Выделить код Код:{ cek: this.MCcek, label: 'Переключать двойным средним кликом', cmd: 'document.popupNode.CBlabel(this, "MiddleClick")', sItemId:'', type:'checkbox'}, То есть добавить type:'checkbox'. заменить на |
iDev.Pi > 11-03-2012 21:02:59 |
bunda1 пишет
неа, это твоя кнопка так умеет: Результат: введённый ранее текст ЗАМЕНЯЕТСЯ текстом из буфера. Выделить код Код:this.onclick = function(event) { ... else if(event.button == 1) { ... goDoCommand("cmd_paste"); } }; 11-03-2012 21:31:15 |
bunda1 > 11-03-2012 21:37:32 |
Infocatcher 11-03-2012 21:47:23 iDev.Pi пишет
iDev.Pi пишет
Нет, это из-за Выделить код Код: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; if (custombuttons.getPrefs("FindBar.Highlight")){ Highlight(event) }; gFindBar.onFindAgainCommand(event.detail = 0); }, true); iDev.Pi пишет
Да из-за этого. |
mserv > 12-03-2012 23:56:39 |
bunda1 пишет
Теперь лупа не работает, если в слове меньше четырёх букв и включить Автовыделение. В этом случае и само Автовыделение не работает, меняется только цвет иконки, а слово не выделяется и не появляется точка в меню кнопки. |
bunda1 > 13-03-2012 00:10:57 |
mserv |
mserv > 13-03-2012 00:15:05 |
iDev.Pi пишет
|
bunda1 > 13-03-2012 21:34:25 |
mserv
Исправил. скрытый текст Выделить код Код://настройка функций кликов мыши(Mouse Click settings)................................................... this.onclick = function(event) { if(event.button == 0) { // Действие при клике ЛКМ gFindBar.hidden ? gFindBar.onFindCommand() : gFindBar.close(); Find(event); } else if(event.button == 1) { // Действие при клике СКМ gFindBar.hidden ? gFindBar.onFindCommand() : gFindBar.close();с goDoCommand("cmd_selectNone"); goDoCommand("cmd_paste"); } }; //Объявляем ..... var prefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService); var clipboard = Components.classes["@mozilla.org/widget/clipboardhelper;1"]. getService(Components.interfaces.nsIClipboardHelper); var this_ = this; var AutoHighlight ='Автовыделение' var AutoClose ='Автоматически закрыть' var CloseTimer ='Закрыть через ' var ClearPref ='Сбросить текст' //подсказка............................................................................. this.showTFinfo = function() { //getting prefs Unicode value var prefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService); var Val = "\n\n"+ AutoHighlight +": "+ prefs.getComplexValue("FindBar.Highlight.value",Components.interfaces.nsISupportsString).data; //обрезать подсказку для "Автовыделение" var HValue = Val.substring(0,50); var HDots =(Val.length > 50) ? '...' : ""; //.... this.tooltipText = "Поиск по странице" +"\n" + "Л: Показать - скрыть поиск по странице" +"\n" +"С: Поиск по странице из буфера обмена" +"\n"+ "П: Mеню + CB меню" + HValue + HDots; } this.setAttribute("onmouseover", "this.showTFinfo()"); //проверить наличие строк в about:config и создать если не существует(Add preferences)........................................ if (custombuttons.getPrefs("FindBar.version") !== '8') { prefs.setCharPref("FindBar.version", "8"); prefs.setBoolPref("FindBar.Highlight", true); prefs.setCharPref("FindBar.Highlight.value", "??????"); prefs.setBoolPref("FindBar.autoclear", false); prefs.setBoolPref("FindBar.contextFindWords", true); prefs.setBoolPref("FindBar.ToggleWithDoubleMiddleClick", false); prefs.setCharPref("ui.textHighlightBackground", "#ef0fff");//http://coloria.net/bonus/colornames.htm //prefs.setCharPref("ui.textHighlightForeground", "#000000");//http://coloria.net/bonus/colornames.htm prefs.setBoolPref("FindBar.mini", false); prefs.setBoolPref("FindBar.auto_Close", false); prefs.setCharPref("FindBar.CloseTimer", "7");//7 сек(7 sec) prefs.setCharPref("FindBar.AutohighlightNum", "1"); }; //настройка меню(CB menu settings)................................................... //Объявляем ..... var c ='true'; var n = 'false'; //изменить нужный пункт меню(toggle menuitems) //переключаем настройки в about:config(toggle preference) this.CBlabel = function (mi, id) { //Автоматически закрыть(FB auto close).... if(!id || id == "FBClose") { //переключаем настройки в about:config s = "FindBar.auto_Close"; togglePref(s); //Запускаем функцию autohide if (id) autohide(event); //изменить нужный пункт меню var cek = (custombuttons.getPrefs(s)? c: n); this.FBCcek = cek; if(mi) mi.cek = cek; }; //FB auto close timer..... if(!id || id == "CloseTimer") { (function () { //Стоп, при инициализации кнопки if (!id) return; s = "FindBar.CloseTimer"; //switch auto close timer+"\n" + var URL = custombuttons.promptBox(AutoClose, CloseTimer+custombuttons.getPrefs(s) + ' секунд', ''); if (URL[0] == false) return; else var timer = [URL[1]]; //переключаем настройки в about:config(toggle preference) prefs.setCharPref(s, timer); })(); //пункт меню(menuitems) var label = CloseTimer + custombuttons.getPrefs("FindBar.CloseTimer") + ' секунд'; this.CloseTimer = label; if(mi) mi.label = label; }; //FindBar.mini...... if(!id || id == "FBmini") { //переключаем настройки в about:config s = "FindBar.mini"; togglePref(s); //Запускаем функцию fmini(run fmini) if (id) fmini(event); //изменить нужный пункт меню var cek = (custombuttons.getPrefs(s)? c : n); this.FBcek = cek; if(mi) mi.cek = cek; }; //Find в контекстном меню(Find in the context menu)..... if(!id || id == "FindInMenu") { // переключаем настройки в about:config s = "FindBar.contextFindWords"; togglePref(s); //изменить нужный пункт меню var cek = (custombuttons.getPrefs(s)? c : n); this.FIMcek = cek; if(mi) mi.cek = cek; }; //Очищать поле текстового ввода на Findbar при закрытии..... if(!id || id == "autoClear") { // переключаем настройки в about:config s = "FindBar.autoclear"; togglePref(s); //изменить нужный пункт меню var cek = (custombuttons.getPrefs(s)? c : n); this.aCcek = cek; if(mi) mi.cek = cek; }; //Переключить двойным средним кликом(Toggle with double middle click)..... if(!id || id == "MiddleClick") { // переключаем настройки в about:config s = "FindBar.ToggleWithDoubleMiddleClick"; togglePref(s); //изменить нужный пункт меню var cek = (custombuttons.getPrefs(s)? c : n); this.MCcek = cek; if(mi) mi.cek = cek; }; //Автовыделение(Switch, Auto Highlight)..... if(!id || id == "SwitchHighlight") { // переключаем настройки в about:config s = "FindBar.Highlight"; togglePref(s); //Изменить иконку кнопки if (id) ToggleImage(event); //переключить кнопку 'Highlight'(toggle Highlight) if (id) document.getElementById('FindToolbar').getElement('highlight').removeAttribute("checked"); //Запускаем функцию Highlight(run function Highlight) if (id) Highlight(event); //изменить нужный пункт меню(toggle menuitems) var cek = (custombuttons.getPrefs(s)? c : n); this.aHcek = cek; if(mi) mi.cek = cek; }; //Изменить цвет для Автовыделение..... if(!id || id == "addColor") { (function () { //Стоп, при инициализации кнопки if (!id) return; //создаем модальное окно для ввода цвета var URL = custombuttons.promptBox('Изменить цвет для Автовыделение', 'По умолчанию: #ef0fff', ''); if (URL[0] == false) return; else var color = [URL[1]]; //переключаем настройки в about:config(toggle preference) prefs.setCharPref("ui.textHighlightBackground", color); })(); //пункт меню(menuitems) var label = 'Изменить цвет' + ': ' + custombuttons.getPrefs("ui.textHighlightBackground"); this.addColor = label; if(mi) mi.label = label; }; //Автовыделение, добавить текст....... if(!id || id == "AddText") { //Запускаем функцию HighlightAdd(run function HighlightAdd) if (id) HighlightAdd(event); }; //Автовыделение, сбросить ..... if(!id || id == "Clear") { //сбросить настройки в about:config if (id) prefs.setCharPref("FindBar.Highlight.value", ""); //Запускаем функцию Highlight(run function Highlight) if (id) Highlight(event); //всплывающая подсказка if (id) custombuttons.alertSlide(ClearPref,'????'); }; //Findbar, переклучить атрибут 'autohide'...... function autohide(event){ var f = document.getElementById("FindToolbar"); custombuttons.getPrefs("FindBar.auto_Close") ? f.setAttribute("autohide", "true") : f.removeAttribute("autohide"); }; //переключаем настройки в about:config(toggle preference).... function togglePref(s){ //Стоп, при инициализации кнопки if (!id) return; //переключаем настройки custombuttons.setPrefs(s, !custombuttons.getPrefs(s)); } }; //Запускаем функцию CBlabel(run CBlabel)......... this.CBlabel(); //пункти меню(Our menu items) .... this.ss = [ { cek: this.FBCcek, label: AutoClose, cmd: 'document.popupNode.CBlabel(this, "FBClose")', sItemId: '', type:'checkbox'}, { label: this.CloseTimer, cmd: 'document.popupNode.CBlabel(this, "CloseTimer")', sItemId: ''}, { label: "separator", sItemId: ''}, { cek: this.FBcek, label: 'FindBar мини', cmd: 'document.popupNode.CBlabel(this, "FBmini")', sItemId: '', type:'checkbox'}, { cek: this.FIMcek, label: 'Find в контекстном меню', cmd: 'document.popupNode.CBlabel(this, "FindInMenu")', sItemId:'', type:'checkbox'}, { cek: this.aCcek, label: 'Очищать поле текстового ввода', cmd: 'document.popupNode.CBlabel(this, "autoClear")', sItemId:'', type:'checkbox'}, { cek: this.MCcek, label: 'Переключать двойным средним кликом', cmd: 'document.popupNode.CBlabel(this, "MiddleClick")', sItemId:'', type:'checkbox'}, { label: "separator", sItemId: ''}, { cek: this.aHcek, label: AutoHighlight, cmd: 'document.popupNode.CBlabel(this, "SwitchHighlight")', sItemId: '', type:'checkbox'}, { label: this.addColor, cmd: 'document.popupNode.CBlabel(this, "addColor")', sItemId: ''}, { label: 'Добавить текст', cmd: 'document.popupNode.CBlabel(this, "AddText")', sItemId: ''}, { label: ClearPref, cmd: 'document.popupNode.CBlabel(this, "Clear")', sItemId: ''}]; // Our Initialization function for creating the context menu, setting up menuitems and telling var Cb = custombuttons; this.mObj = Cb.getCbContextObj(this); this.init = function(x) { x.mObj.setSub(); var nItem = {}, mItem = {}; document.getElementById(CB2const.sCBCtxtMenu).setAttribute("oncommand", "event.stopPropagation()"); for(var i in x.ss) { nItem = new x.mObj.getItem(); nItem.id = 'Note'; nItem.label = x.ss[i].label; if (nItem.label == "separator") { nItem = document.createElement("menuseparator"); } nItem.value = String(i); mItem = x.mObj.insertBefore(nItem , x.mObj.oMenu.lastChild); this.ss[i].sItemId = mItem.id; mItem.setAttribute('oncommand',x.ss[i].cmd); if("type" in x.ss[i]) mItem.setAttribute('type', x.ss[i].type); mItem.setAttribute('checked', x.ss[i].cek) mItem.setAttribute( 'autocheck',true) } x.mObj.getItem(); nItem = x.mObj.getItem(); nItem.id = 'Note'; this.separator = x.mObj.insertBefore( nItem , x.mObj.oMenu.lastChild); } this.init(this); //Стоп, при открытии настройки панелей.................................................... if (window.ToggleFindRun == 'stop') return; //Findbar, установить и удалить атрибут 'mini'(Findbar, set and remove attribute 'mini')........... //Findbar, установить и удалить 'hits'(Findbar, set and remove 'hits')........... function fmini(event){ //FindBar, auto find if (!gFindBar.hidden) { //Find gFindBar.onFindCommand(); } var findToolbar = document.getElementById("FindToolbar"); var HighBut = document.getAnonymousElementByAttribute( gFindBar, "anonid", "highlight"); if (custombuttonsUtils.getPrefs("FindBar.mini")) { //... var highlightBtn = document.getElementById('FindToolbar').getElement('highlight'); if (highlightBtn.checked) { gFindBar._findField.style.color = prefs.getCharPref("ui.textHighlightBackground"); }; findToolbar.setAttribute("mini", "true"); this.hits = ' '; HighBut.setAttribute("tooltiptext", "L = Искать следущее"+"\n" +"M = Поиск выделенного текста/из буфера" + "\n" + "R = Очистить поле текстового ввода"); } else { findToolbar.removeAttribute("mini") this.hits = ' hits'; HighBut.setAttribute("tooltiptext", "Highlight"); //... gFindBar._findField.style.color = "black"; } //Findbar, убрать фокус(Findbar, hide focus) _content.focus(); }; //Запускаем функции fmini(Run the function fmini) setTimeout(function() {fmini(event);}, 200) //Изменить иконку кнопки................................................................. function ToggleImage(event){ // toggle button image if (custombuttonsUtils.getPrefs("FindBar.Highlight")) { this_.image="data:image/x-icon;base64,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"; } else { this_.image="data:image/x-icon;base64,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"; } }; ToggleImage(event); //find bar сверху (move find bar to the top)................................................ XPCOMUtils.defineLazyGetter(window, "gFindBar", function() { let XULNS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"; let findbar = document.createElementNS(XULNS, "findbar"); findbar.setAttribute("browserid", "content"); findbar.id = "FindToolbar"; gBrowser.parentNode.insertBefore(findbar, gBrowser); // Force a style flush to ensure that our binding is attached. findbar.clientTop; window.gFindBarInitialized = true; return findbar; }); //find bar, показать количество совпадений(find bar,show the number of matches)...@author slimx................. (function() { //add label to findbar var status = document.getAnonymousElementByAttribute(gFindBar, 'anonid', 'match-case-status'); var sep = document.createElement("toolbarspacer"); var count = document.createElement("label"); count.hidden = true; status.parentNode.insertBefore(sep, status); status.parentNode.insertBefore(count, status);//findbar-container gFindBar.__proto__._foundMatches = count; gFindBar.__proto__._updateMatchesCount = function(aRes) { if (!this._updateMatchCountTimeout) window.clearTimeout(this._updateMatchCountTimeout); this._updateMatchCountTimeout = window.setTimeout(function(aRes, aSelf) { aSelf._updateMatchesCountWorker(aRes); }, 0, aRes, this); } gFindBar.__proto__._updateMatchesCountWorker = function(aRes) { var word = this._findField.value; if (aRes == this.nsITypeAheadFind.FIND_NOTFOUND || !word) { this._foundMatches.hidden = true; this._foundMatches.value = ""; } else { var matchesCount = this._countMatches(word).toString(); if (matchesCount != "0") { if (matchesCount == "1") this._foundMatches.value = matchesCount + hits; else if (matchesCount == "-1") { var matchLimit = 100; this._foundMatches.value = " \>"+ matchLimit + hits; // var key = (matchLimit > 1000) ? "Decrease" : "Increase"; } else this._foundMatches.value = matchesCount + hits; this._foundMatches.hidden = false; //Findbar, удалить атрибут 'red'(Findbar, remove attribute 'red').............. var findToolbar = document.getElementById("FindToolbar"); findToolbar.removeAttribute("red"); } else { this._foundMatches.hidden = true; this._foundMatches.value = ""; //Findbar, установить атрибут 'red'(Findbar, set attribute 'red')............... var findToolbar = document.getElementById("FindToolbar"); findToolbar.setAttribute("red", "true"); } window.clearTimeout(this._updateMatchCountTimeout); } } gFindBar.__proto__._countMatches = function(aWord, aWindow) { var win = aWindow || this.browser.contentWindow; var countFound = 0; for (var i = 0, count; win.frames && i < win.frames.length; i++) { if ((count = this._countMatches(aWord, win.frames[i])) != -1) countFound += count; else return count; } var doc = win.document; if (!doc || !(doc instanceof HTMLDocument)) return countFound; var body = doc.body; var count = body.childNodes.length; var searchRange = doc.createRange(); var startPt = doc.createRange(); var endPt = doc.createRange(); searchRange.setStart(body, 0); searchRange.setEnd(body, count); startPt.setStart(body, 0); startPt.setEnd(body, 0); endPt.setStart(body, count); endPt.setEnd(body, count); var retRange = null; var finder = Components.classes["@mozilla.org/embedcomp/rangefind;1"] .createInstance() .QueryInterface(Components.interfaces.nsIFind); finder.caseSensitive = this._shouldBeCaseSensitive(aWord); var matchLimit = 100; while ((retRange = finder.Find(aWord, searchRange, startPt, endPt))) { if (this._rangeIsVisible(retRange, win)) { if (this._findMode == this.FIND_LINKS) { if (this._rangeStartsInLink(retRange)) ++ countFound; } else ++ countFound; } if (countFound == matchLimit) { countFound = -1; break; } startPt = doc.createRange(); startPt.setStart(retRange.startContainer, retRange.startOffset + 1); } return countFound; } gFindBar.__proto__._rangeIsVisible = function(aRange, aWindow) { var node = aRange.startContainer; if (node.nodeType == node.ELEMENT_NODE) { if (node.hasChildNodes) { var childNode = node.childNodes[aRange.startOffset]; if (childNode) node = childNode; } } while (node && node.nodeType != node.ELEMENT_NODE) node = node.parentNode; // There is no perfect way to check if a node is visible in JavaScript, // so use the best measures we can have if (node) { var style = aWindow.getComputedStyle(node, ""); if (style) { if (style.visibility == "hidden" || style.visibility == "collapse" || style.display == "none") return false; if (style.left != "auto" && style.width != "auto") if (style.left < 0 && style.left + style.width < 0) return false; if (style.top != "auto" && style.height != "auto") if (style.top < 0 && style.top + style.height < 0) return false; } } return true; } gFindBar.__proto__._rangeStartsInLink = function(aRange) { var isInsideLink = false; var node = aRange.startContainer; if (node.nodeType == node.ELEMENT_NODE) { if (node.hasChildNodes) { var childNode = node.childNodes[aRange.startOffset]; if (childNode) node = childNode; } } const XLink_NS = "http://www.w3.org/1999/xlink"; do { if (node instanceof HTMLAnchorElement) { isInsideLink = node.hasAttribute("href");m break; } else if (typeof node.hasAttributeNS == "function" && node.hasAttributeNS(XLink_NS, "href")) { isInsideLink = (node.getAttributeNS(XLink_NS, "type") == "simple"); break; } node = node.parentNode; } while (node); return isInsideLink; } //insert count function to original eval("gFindBar._updateCaseSensitivity=" + gFindBar._updateCaseSensitivity.toString().slice(0, -1) + "this._updateMatchesCount();}"); eval("gFindBar._updateStatusUI=" + gFindBar._updateStatusUI.toString().slice(0, -1) + "this._updateMatchesCount();}"); })(); //FindBar, поиск колесиком мыши(FindBar, Mouse Scroll find )................................................ gFindBar.addEventListener('DOMMouseScroll', function (event){ //Найти (Find) gFindBar.onFindAgainCommand(event.detail < 0); }, false); //Очистить поле текстового ввода на Findbar при закрытии.................................................. gFindBar.addEventListener("DOMAttrModified", function(event){ if (!gFindBar.hidden) return; if (custombuttonsUtils.getPrefs("FindBar.autoclear")){gFindBar._findField.reset()}; }, false); //переключить 'Поиск на странице' двойным средним кликом на странице(toggle Find Bar, if Double midlle Click in page).......... //добавляем обработчик для обработки нажатие на кнопку мыши на странице....... //Стоп, при открытии настройки панелей(stop, if onDestroy) gBrowser.addEventListener("mouseup", function(event){ //если нажатие на среднюю кнопку мыши if (event.button !== 1) return; //если разрешено в настройках(about:config) if (!custombuttons.getPrefs("FindBar.ToggleWithDoubleMiddleClick")) return; var _this = this; //переключить 'Поиск на странице' //если установлен флаг if (_this.open){ gFindBar.hidden ? gFindBar.onFindCommand() : gFindBar.close(); Find(event); gFindBar._findField.focus(); } //устанавливаем флаг _this.open = true; //сбросить флаг по таймеру this.timer = 0; this.timer = setTimeout(function() { _this.open = false; }, 400); }, false); //findbar очистить, кликнуть правим кликом на findbar's label-Найти: или на иконку поиска на FindBar mini(FindBar clear findText, right click on findbar's label, else Find button).............. //findbar поиск, кликнуть левым кликом на findbar's label-Найти: или на иконку поиска на FindBar mini(FindBar find, left click on findbar's label, else Find button).............. var FindButt = document.getAnonymousElementByAttribute(gFindBar, "anonid", "find-label"); FindButt.setAttribute("onclick", "event.stopPropagation(); clickFind(event);"); //.... var HighBut = document.getAnonymousElementByAttribute( gFindBar, "anonid", "highlight"); HighBut.addEventListener("click", function(event){ if (custombuttons.getPrefs("FindBar.mini")) { gFindBar.getElement("highlight").removeAttribute("checked"); //....... clickFind(event); } }, true); //..................... clickFind = function(event){ if ( event.button == 0 ) { event.preventDefault(); event.stopPropagation(); Find(event); } else if ( event.button == 2 ) { gFindBar._findField.reset(); gFindBar.onFindAgainCommand(false); //.... var findToolbar = document.getElementById("FindToolbar"); findToolbar.removeAttribute("red"); //... gFindBar._findField.focus(); //.... gFindBar._highlightDoc(false); } }; //Поиск по странице из буфера обмена/выделенный текст, если кликнуть средним кликом на findbar или на иконку поиска на FindBar mini ....... //переключить кнопку 'Highlight' двойным левым кликом на на поле текстового ввода на FindBar............ //Стоп, при открытии настройки панелей(stop, if onDestroy) if (window.ToggleFindRun !== 'stop') (function () { //Поиск по странице из буфера обмен gFindBar.addEventListener("mousedown", function(event){ if ( event.button != 1 )return; event.preventDefault(); event.stopPropagation(); //........ var sel = content.getSelection().toString(); var str =(!!sel) ? sel : readFromClipboard(); //Убираем пробелы с обоих концов текста. var str = str.replace(/^\s+|\s+$/g,""); //... gFindBar._findField.value = str; Find(event); }, true); //переключить кнопку 'Highlight'......... gFindBar._findField.addEventListener("dblclick", function(event){ if ( event.button != 0 )return; event.preventDefault(); event.stopPropagation() //.... if (!custombuttons.getPrefs("FindBar.mini")) return; if (custombuttons.getPrefs("FindBar.Highlight")) return; //переключить кнопку 'Highlight' toggleHighlight(event); //Findbar, убрать фокус(Findbar, hide focus) _content.focus(); }, false); })(); //FindBar, автоматически закрыть(autohide Findbar)................................. //Стоп, при открытии настройки панелей(stop, if onDestroy) if (window.ToggleFindRun !== 'stop')(function () { function go() { gFindBar.close(); } function on() { if (!custombuttons.getPrefs("FindBar.auto_Close")) return; if (gFindBar.hidden) return; if (window.ACRun == 'stop') return; window.ACRun = 'stop'; timeoutId = setTimeout(go, custombuttons.getPrefs("FindBar.CloseTimer") + '000') gFindBar.addEventListener('mouseover',off, false); gFindBar.addEventListener("DOMAttrModified", Modoff, false); } function Modoff() { if (!gFindBar.hidden){ off(); } }; function off() { window.ACRun = ''; gFindBar.removeEventListener('mouseover',Modoff, false); gFindBar.removeEventListener("DOMAttrModified", off, false); clearTimeout(timeoutId); } gBrowser.addEventListener('mouseover',on, false); })(); //FindBar, сочетания клавиш(Key config)......................................................... //Стоп, при открытии настройки панелей(stop, if onDestroy) if (window.ToggleFindRun !== 'stop')(function () { window.addEventListener('keydown', function (event){ //FindBar(ctrl+ F)показать - скрыть(Toggle Find Bar)......... if ((event.ctrlKey)&&(event.keyCode==70)) { event.preventDefault(); event.stopPropagation(); gFindBar.hidden ? gFindBar.onFindCommand() : gFindBar.close(); Find(event); } //Findbar(ctrl+ALT+F), поиск по странице из буфера обмена(find from clipboard)............. if ((event.ctrlKey)&&(event.altKey)&&(event.keyCode==70)) { gFindBar.hidden ? gFindBar.onFindCommand() : gFindBar.close(); goDoCommand("cmd_selectNone"); goDoCommand("cmd_paste"); Find(event); } //Findbar(ctrl+ALT+H), FindBar, вести слова для выделение(set Highlight words)... if ((event.ctrlKey)&&(event.altKey)&&(event.keyCode==72)) { //Запускаем функцию HighlightAdd(run HighlightAdd) HighlightAdd(event); } }, false); })(); //переключить кнопку 'Highlight'(toggle Highlight)............................................ function toggleHighlight(event) { var highlightBtn = document.getElementById('FindToolbar').getElement('highlight'); //... if (!highlightBtn.checked) { highlightBtn.setAttribute("checked", "true"); gFindBar._highlightDoc(true, gFindBar._findField.value); //.. gFindBar._findField.style.color = prefs.getCharPref("ui.textHighlightBackground"); } else { highlightBtn.removeAttribute("checked"); gFindBar._highlightDoc(false); //.. gFindBar._findField.style.color = "black"; } }; //Автоматически выделить заранее введенные слова (auto Highlight words permanent).................................................... Highlight = function(event) { //устанавливаем флаги... var m = true; if (event =='[object UIEvent]'){var m = false}; if (event =='[object DragEvent]'){var m = false}; if (event =='[object MouseEvent]'){var m = false}; //hide Highlight gFindBar._highlightDoc(false); //.... var highlightBtn = document.getElementById('FindToolbar').getElement('highlight'); var FBNum = custombuttons.getPrefs("FindBar.AutohighlightNum"); var FBvalue = gFindBar._findField.value; //.... if (!gFindBar.hidden) { //... if (!highlightBtn.checked) { gFindBar._findField.style.color = "black"; } //Findbar, удалить атрибут 'red'(Findbar, remove attribute 'red').............. if (FBvalue.length == '0') { var findToolbar = document.getElementById("FindToolbar"); findToolbar.removeAttribute("red"); } //FindBar, auto find if (m) { //Findbar, фокус(Findbar, focus) gFindBar._findField.focus(); gFindBar.onFindCommand(); //Findbar, убрать фокус(Findbar, hide focus) _content.focus(); } } //auto Highlight if (custombuttonsUtils.getPrefs("FindBar.Highlight")) { if (gFindBar.hidden) { //getting prefs Unicode value var value = prefs.getComplexValue("FindBar.Highlight.value", Components.interfaces.nsISupportsString).data; } if (!gFindBar.hidden) { var value =(FBvalue.length > FBNum)? FBvalue : "??????"; } //Highlight gFindBar._highlightDoc(true, value); } }; if (window.ToggleFindRun !== 'stop') (function () { //добавляем обработчики..... //обработчики для табов.. gBrowser.tabContainer.addEventListener("TabSelect", Highlight, false); gBrowser.addEventListener("DOMContentLoaded", function(event){ //фылтр.... //стоп, если открыть новые таби if (event.target.location.href !== getBrowser().currentURI.spec) return; //стоп, если срабатывает на фрейме var document = event.originalTarget; if (document instanceof HTMLDocument && this.contentWindow.document !== document) return; Highlight(event)}, false); //обработчики для FindBar.. gFindBar._findField.addEventListener("input", Highlight, false); gFindBar._findField.setAttribute("ondrop","event.stopPropagation(); Find(event); "); gFindBar.addEventListener("DOMAttrModified", function(event){ if (!gFindBar.hidden) return; Highlight(event)}, false); })(); //FindBar. контекстного меню (context Menu)....................................... (function contextFindWords(){ // выходим, если функция уже выполнялась if (document.getElementById("contextFindWords")) return; const kXULNS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"; var contextMenu = document.getElementById("contentAreaContextMenu"); var separator = document.getElementById("context-sep-properties"); var eventTarget = null; var menu = document.createElementNS(kXULNS, "menu"); menu.id = "contextFindWords"; menu.setAttribute("label", "Find"); menu.hidden = true; contextMenu.insertBefore(menu, separator); var menuPopup = document.createElementNS(kXULNS, "menupopup"); menu.appendChild(menuPopup); var lst = [ { label:"Найти на странице", command:ContexFind }, { label:"Поиск по сайту(google)", command:Search }, { label:"Выделить текст на странице", command:HighlightSel }, { label:"Автовыделение, добавить текст", command:addSel } ]; for(var i = 0, m; m = lst[i]; i++){ var menuItem = document.createElementNS(kXULNS, "menuitem"); menuItem.setAttribute("label", m.label); menuItem.setAttribute("type", "m.radio"); if ("accesskey" in m) menuItem.setAttribute("accesskey", m.accesskey); menuItem.addEventListener("command", m.command, false); menuItem.id = "context-Find-Words-" + m.label.toString(); menuPopup.appendChild(menuItem); } var contextFind = document.getElementById("contextFindWords") contextMenu.addEventListener("popupshowing", setMenuDisplay, false); function setMenuDisplay(aEvent) { if (gContextMenu.isTextSelected) { if (custombuttons.getPrefs("FindBar.contextFindWords")) { contextFind.hidden = false; } else { contextFind.hidden = true; } } } function ContexFind(){ gFindBar.onFindCommand(); //Запускаем функцию Find Find(event); } function Search(){ var focusedWindow = document. commandDispatcher. focusedWindow; var text = focusedWindow. getSelection (). toString (); var doc = getBrowser (). contentDocument; try { var url = doc. location. hostname; } catch(e) { var url = ""; } text = escape (convertFromUnicode ("UTF-8", text)); url = encodeURIComponent (url); var searchUrl = "http://www.google.com/search?as_q=" + text + "&as_sitesearch=" + url; gBrowser.selectedTab = gBrowser.addTab(searchUrl); } function HighlightSel(){ gFindBar.toggleHighlight(false); var text = document.commandDispatcher.focusedWindow.getSelection(); gFindBar._highlightDoc(true, text); goDoCommand("cmd_selectNone"); } function addSel(){ //Запускаем функцию HighlightAdd HighlightAdd(event); } })(); //Найти на странице................. Find = function(event){ if (custombuttons.getPrefs("FindBar.Highlight")){Highlight(event)}; if (!gFindBar.hidden) gFindBar.onFindAgainCommand(event.detail = 0); }; //Добавить текст(выделенный / из буфера обмена) для автовыделения..................... function HighlightAdd(event){ //Копируем выделенный текст в буфер document.getElementById("cmd_copy").doCommand(); // Get the root branch var prefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch); //setting Unicode value var str = Components.classes["@mozilla.org/supports-string;1"].createInstance(Components.interfaces.nsISupportsString); //читаем из буфера обмена и добавляем текст для автовыделения в 'about:config' str.data = readFromClipboard(); prefs.setComplexValue("FindBar.Highlight.value", Components.interfaces.nsISupportsString, str); //всплывающая подсказка custombuttons.alertSlide(AutoHighlight, str.data); //... goDoCommand("cmd_selectNone"); //Запускаем функцию Highlight(run Highlight) Highlight(event); }; //Поле текстового ввода на Findbar мигает желтим............................ function fflash(event){ var findToolbar = document.getElementById("FindToolbar"); //Следим за иконкой статуса на FindBar var findstatus = gFindBar.getElement("find-status-icon"); findstatus.addEventListener("DOMAttrModified",function(e){ if(findstatus.getAttribute("status")=="wrapped") { findToolbar.setAttribute("flash", "true"); setTimeout(function() {findToolbar.removeAttribute("flash");}, 700)}; }, false)}; //Запускаем функции fflash, fmini(Run the function fflash) document.addEventListener( "DOMContentLoaded", fflash(event), false); // FindToolbar стиль(style)....................................................................... var but = "#" +this.id; (function(css) { var pi = document.createProcessingInstruction( 'xml-stylesheet', 'type="text/css" href="data:text/css;utf-8,' + encodeURIComponent(css) + '"' ); return document.insertBefore(pi, document.documentElement); } )(<![CDATA[ @namespace url(http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul); /*Find Toolbar.................*/ #FindToolbar { border-bottom: 1px solid grey !important; } #FindToolbar > .findbar-container > * { display: -moz-box !important; } #FindToolbar > hbox > label{-moz-appearance: none !important;font-weight: bold !important;} #find-field,.findbar-textbox{width: 250px !important;} #FindToolbar .findbar-find-fast.findbar-find-status, #FindToolbar .findbar-container>image, #FindToolbar[autohide] .findbar-closebutton {display: none !important;} #FindToolbar[red="true"] .findbar-textbox{box-shadow: 0 0 0 1em #f66 inset;} #FindToolbar:not([red="true"]) .findbar-textbox[status="notfound"]{ background: rgba(207,219,236,0.99) !important; color: black !important; box-shadow: none !important;} /*Find Toolbar, mini......................................... */ #FindToolbar[mini="true"] .findbar-textbox{ width: 16em !important; height:21px!important; padding-right: 20px !important; margin-right: 2px!important; margin-left:-4px!important} #FindToolbar[mini] { position: fixed; right: 18px; background: menu !important; box-shadow: 0px 10px 5px -10px rgba(0,0,0,.3) !important; border: 1px solid grey !important; border-top: 0 !important; border-radius: 0 0 8px 8px !important;} #FindToolbar[mini="true"] .findbar-container>checkbox{ margin-left:-24px !important; margin-right: -3px !important} #FindToolbar[mini="true"] label[class="checkbox-label"], #FindToolbar[mini="true"] toolbarbutton.findbar-find-next, #FindToolbar[mini="true"] toolbarbutton.findbar-find-previous, #FindToolbar[mini="true"] .findbar-highlight label, #FindToolbar[mini="true"] .findbar-closebutton, #FindToolbar[mini="true"] .findbar-find-fast[anonid="find-label"], #FindToolbar[mini="true"] .findbar-find-fast[anonid="match-case-status"] { display: none !important;} #FindToolbar[mini="true"] toolbarbutton.findbar-highlight.tabbable, #FindToolbar[mini="true"] toolbarbutton.findbar-highlight.tabbable[checked="true"]{ -moz-appearance: none !important; list-style-image: none !important; background: url("data:image/gif;base64,R0lGODlhEAAQAMQWAJmZzJlmzGZmzGZm/2aZ/5mZ/5nM/8zM/8z//5mZmWZmmf///8yZzMzMmZlmmZmZM8zMM8zMZsz/ZsyZZpmZZmZmM////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAHoAxYALAAAAAAQABAAAAVsoCUCgQCIaCoKA1G4p7q6RmEXcQoMxYEYQEMOJSAYEL+D8jC0CG6GJTKhUtiAPiSCmlK4er7FgiGzWLGIBUJRZliVCLMi0Sg7FHhq4gGJlFUNEBIQE38pExGDFIYoFIkQi4wWjhEVkiIUFQohADs=") center no-repeat !important; border: 1px solid rgba(0,0,0,0.3) !important; height:21px !important;} #FindToolbar[mini="true"] checkbox{ -moz-box-ordinal-group: 3 !important;} #FindToolbar[mini="true"] textbox.findbar-textbox{ -moz-box-ordinal-group: 2 !important} #FindToolbar[mini="true"] toolbarbutton.findbar-highlight{ -moz-box-ordinal-group: 4 !important; margin-left:-3px !important} #FindToolbar[mini="true"] .findbar-closebutton{ -moz-box-ordinal-group: 7 !important; } ]]>.toString()); //устанавливаем флаг window.ToggleFindRun = 'stop'; |
iDev.Pi > 15-03-2012 00:18:23 |
bunda1 |
mserv > 15-03-2012 12:37:22 |
iDev.Pi пишет
Не подтверждаю. |
mserv > 15-03-2012 13:25:14 |
Ещё одна вылезла. Вставляем СКМ слово, очищаем текстовое поле, вставляем это же слово из буфера повторно, получаем сразу два слова. |
iDev.Pi > 15-03-2012 13:28:47 |
mserv |
bunda1 > 15-03-2012 23:26:40 |
iDev.Pi пишет
У меня нет. Что ты нажимал. mserv пишет
Это я не удачно питался заблокировать Autocopy+3 и middlemouse.paste для поле текстового ввода на Findbar. Может поиск по странице из буфера обмена запускать средним кликом только на кнопку поиска на FindBar mini или на Findbar? |
iDev.Pi > 16-03-2012 01:05:49 |
bunda1 пишет
я выяснил STR к багу: |
Mr.Rik > 16-03-2012 10:32:02 |
Ого. Да это уже фактически серьезное дополнение. Спс автору. Могу подкинуть идею. Сделать поле скролируемым. Т.е. наводишь мыша на поле и крутишь колесо. Если текст большой происходит прокрутка. Можно попопробовать сделать это стилем через overflow (сам элемент скрол, полосу скрыть стилем). И еще если возможно поле ресайзящимся, тоже сиилем через resize. 16-03-2012 10:34:35 |
mserv > 16-03-2012 16:18:32 |
Mr.Rik пишет
Можно скролить лупу 16-03-2012 16:21:54 bunda1 пишет
Да без проблем, я и не знал о другой возможности, пока iDev.Pi не указал. Просто раз нашёл баг, то и решил сообщить. |
bunda1 > 20-03-2012 23:55:53 |
iDev.Pi пишет
Теперь L=Назад(back) R= Вперёд(Forward) на лупе если в настройках включена Кнопка - очистить iDev.Pi пишет
Я сделал. iDev.Pi пишет
Я сделал. Код экспериментальной кнопки Toggle Find+3- для инициализации: скрытый текст Выделить код Код://настройка функций кликов мыши(Mouse Click settings)................................................... this.onclick = function(event) { if(event.button == 0) { // Действие при клике ЛКМ gFindBar.hidden ? gFindBar.onFindCommand() : gFindBar.close(); Find(event); } else if(event.button == 1) { // Действие при клике СКМ gFindBar.hidden ? gFindBar.onFindCommand() : gFindBar.close();с goDoCommand("cmd_selectNone"); goDoCommand("cmd_paste"); } }; //Объявляем ..... var prefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService); var clipboard = Components.classes["@mozilla.org/widget/clipboardhelper;1"]. getService(Components.interfaces.nsIClipboardHelper); var this_ = this; var AutoHighlight ='Автовыделение' var AutoClose ='Автоматически закрыть' var CloseTimer ='Закрыть через ' var ClearPref ='Сбросить текст' //подсказка............................................................................. this.showTFinfo = function() { //getting prefs Unicode value var prefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService); var Val = "\n\n"+ AutoHighlight +": "+ prefs.getComplexValue("FindBar.Highlight.value",Components.interfaces.nsISupportsString).data; //обрезать подсказку для "Автовыделение" var HValue = Val.substring(0,50); var HDots =(Val.length > 50) ? '....' : ""; //.... this.tooltipText = "Поиск по странице" +"\n" + "Л: Показать - скрыть поиск по странице" +"\n" +"С: Поиск по странице из буфера обмена" +"\n"+ "П: Mеню + CB меню" + HValue + HDots; } this.setAttribute("onmouseover", "this.showTFinfo()"); //проверить наличие строк в about:config и создать если не существует(Add preferences)........................................ if (custombuttons.getPrefs("FindBar.version") !== '8') { prefs.setCharPref("FindBar.version", "8"); prefs.setBoolPref("FindBar.Highlight", true); prefs.setCharPref("FindBar.Highlight.value", "??????"); prefs.setBoolPref("FindBar.autoclear", false); prefs.setBoolPref("FindBar.contextFindWords", true); prefs.setBoolPref("FindBar.ToggleWithDoubleMiddleClick", false); prefs.setCharPref("ui.textHighlightBackground", "#ef0fff");//http://coloria.net/bonus/colornames.htm //prefs.setCharPref("ui.textHighlightForeground", "#000000");//http://coloria.net/bonus/colornames.htm prefs.setBoolPref("FindBar.mini", false); prefs.setBoolPref("FindBar.ClearButton", false); prefs.setBoolPref("FindBar.auto_Close", false); prefs.setCharPref("FindBar.CloseTimer", "7");//7 сек(7 sec) prefs.setCharPref("FindBar.AutohighlightNum", "1"); }; //настройка меню(CB menu settings)................................................... //Объявляем ..... var c ='true'; var n = 'false'; //изменить нужный пункт меню(toggle menuitems) //переключаем настройки в about:config(toggle preference) this.CBlabel = function (mi, id) { //Автоматически закрыть(FB auto close).... if(!id || id == "FBClose") { //переключаем настройки в about:config s = "FindBar.auto_Close"; togglePref(s); //Запускаем функцию autohide if (id) Autohide(event); //изменить нужный пункт меню var cek = (custombuttons.getPrefs(s)? c: n); this.FBCcek = cek; if(mi) mi.cek = cek; }; //FB auto close timer..... if(!id || id == "CloseTimer") { (function () { //Стоп, при инициализации кнопки if (!id) return; s = "FindBar.CloseTimer"; //switch auto close timer+"\n" + var URL = custombuttons.promptBox(AutoClose, CloseTimer+custombuttons.getPrefs(s) + ' секунд', ''); if (URL[0] == false) return; else var timer = [URL[1]]; //переключаем настройки в about:config(toggle preference) prefs.setCharPref(s, timer); })(); //пункт меню(menuitems) var label = CloseTimer + custombuttons.getPrefs("FindBar.CloseTimer") + ' секунд'; this.CloseTimer = label; if(mi) mi.label = label; }; //FindBar.mini...... if(!id || id == "FBmini") { //переключаем настройки в about:config s = "FindBar.mini"; togglePref(s); //Запускаем функцию fmini(run fmini) if (id) fmini(event); //изменить нужный пункт меню var cek = (custombuttons.getPrefs(s)? c : n); this.FBcek = cek; if(mi) mi.cek = cek; }; //Кнопка 'очистить'...... if(!id || id == "FBbutt") { //переключаем настройки в about:config s = "FindBar.ClearButton"; togglePref(s); //Запускаем функции ClearButton и fmini(run ClearButton, fmini) if (id) ClearButton(event); if (id) fmini(event); //изменить нужный пункт меню var cek = (custombuttons.getPrefs(s)? c : n); this.FCBcek = cek; if(mi) mi.cek = cek; }; //Find в контекстном меню(Find in the context menu)..... if(!id || id == "FindInMenu") { // переключаем настройки в about:config s = "FindBar.contextFindWords"; togglePref(s); //изменить нужный пункт меню var cek = (custombuttons.getPrefs(s)? c : n); this.FIMcek = cek; if(mi) mi.cek = cek; }; //Автоматически очищать поле текстового ввода на Findbar..... if(!id || id == "autoClear") { // переключаем настройки в about:config s = "FindBar.autoclear"; togglePref(s); //Очищистить поле текстового ввода если Findbar закрыт. if (gFindBar.hidden && custombuttons.getPrefs("FindBar.autoclear")) gFindBar._findField.reset(); //изменить нужный пункт меню var cek = (custombuttons.getPrefs(s)? c : n); this.aCcek = cek; if(mi) mi.cek = cek; }; //Переключить двойным средним кликом(Toggle with double middle click)..... if(!id || id == "MiddleClick") { // переключаем настройки в about:config s = "FindBar.ToggleWithDoubleMiddleClick"; togglePref(s); //изменить нужный пункт меню var cek = (custombuttons.getPrefs(s)? c : n); this.MCcek = cek; if(mi) mi.cek = cek; }; //Автовыделение(Switch, Auto Highlight)..... if(!id || id == "SwitchHighlight") { // переключаем настройки в about:config s = "FindBar.Highlight"; togglePref(s); //Изменить иконку кнопки if (id) ToggleImage(event); //переключить кнопку 'Highlight'(toggle Highlight) if (id) document.getElementById('FindToolbar').getElement('highlight').removeAttribute("checked"); //Запускаем функцию Highlight(run function Highlight) if (id) Highlight(event); //изменить нужный пункт меню(toggle menuitems) var cek = (custombuttons.getPrefs(s)? c : n); this.aHcek = cek; if(mi) mi.cek = cek; }; //Изменить цвет для Автовыделение..... if(!id || id == "addColor") { (function () { //Стоп, при инициализации кнопки if (!id) return; //создаем модальное окно для ввода цвета var URL = custombuttons.promptBox('Изменить цвет для Автовыделение', 'По умолчанию: #ef0fff', ''); if (URL[0] == false) return; else var color = [URL[1]]; //переключаем настройки в about:config(toggle preference) prefs.setCharPref("ui.textHighlightBackground", color); })(); //пункт меню(menuitems) var label = 'Изменить цвет' + ': ' + custombuttons.getPrefs("ui.textHighlightBackground"); this.addColor = label; if(mi) mi.label = label; }; //Автовыделение, добавить текст....... if(!id || id == "AddText") { //Запускаем функцию HighlightAdd(run function HighlightAdd) if (id) HighlightAdd(event); }; //Автовыделение, сбросить ..... if(!id || id == "Clear") { //сбросить настройки в about:config if (id) prefs.setCharPref("FindBar.Highlight.value", ""); //Запускаем функцию Highlight(run function Highlight) if (id) Highlight(event); //всплывающая подсказка if (id) custombuttons.alertSlide(ClearPref,'????'); }; //переключаем настройки в about:config(toggle preference).... function togglePref(s){ //Стоп, при инициализации кнопки if (!id) return; //переключаем настройки custombuttons.setPrefs(s, !custombuttons.getPrefs(s)); } }; //Запускаем функцию CBlabel(run CBlabel)......... this.CBlabel(); //пункти меню(Our menu items) .... this.ss = [ { cek: this.FBCcek, label: AutoClose, cmd: 'document.popupNode.CBlabel(this, "FBClose")', sItemId: '', type:'checkbox'}, { label: this.CloseTimer, cmd: 'document.popupNode.CBlabel(this, "CloseTimer")', sItemId: ''}, { label: "separator", sItemId: ''}, { cek: this.FBcek, label: 'FindBar мини', cmd: 'document.popupNode.CBlabel(this, "FBmini")', sItemId: '', type:'checkbox'}, { cek: this.FCBcek, label: 'Кнопка - очистить', cmd: 'document.popupNode.CBlabel(this, "FBbutt")', sItemId: '', type:'checkbox'}, { label: "separator", sItemId: ''}, { cek: this.FIMcek, label: 'Find в контекстном меню', cmd: 'document.popupNode.CBlabel(this, "FindInMenu")', sItemId:'', type:'checkbox'}, { cek: this.aCcek, label: 'Очищать поле текстового ввода', cmd: 'document.popupNode.CBlabel(this, "autoClear")', sItemId:'', type:'checkbox'}, { cek: this.MCcek, label: 'Переключать двойным средним кликом', cmd: 'document.popupNode.CBlabel(this, "MiddleClick")', sItemId:'', type:'checkbox'}, { label: "separator", sItemId: ''}, { cek: this.aHcek, label: AutoHighlight, cmd: 'document.popupNode.CBlabel(this, "SwitchHighlight")', sItemId: '', type:'checkbox'}, { label: this.addColor, cmd: 'document.popupNode.CBlabel(this, "addColor")', sItemId: ''}, { label: 'Добавить текст', cmd: 'document.popupNode.CBlabel(this, "AddText")', sItemId: ''}, { label: ClearPref, cmd: 'document.popupNode.CBlabel(this, "Clear")', sItemId: ''}]; // Our Initialization function for creating the context menu, setting up menuitems and telling var Cb = custombuttons; this.mObj = Cb.getCbContextObj(this); this.init = function(x) { x.mObj.setSub(); var nItem = {}, mItem = {}; document.getElementById(CB2const.sCBCtxtMenu).setAttribute("oncommand", "event.stopPropagation()"); for(var i in x.ss) { nItem = new x.mObj.getItem(); nItem.id = 'Note'; nItem.label = x.ss[i].label; if (nItem.label == "separator") { nItem = document.createElement("menuseparator"); } nItem.value = String(i); mItem = x.mObj.insertBefore(nItem , x.mObj.oMenu.lastChild); this.ss[i].sItemId = mItem.id; mItem.setAttribute('oncommand',x.ss[i].cmd); if("type" in x.ss[i]) mItem.setAttribute('type', x.ss[i].type); mItem.setAttribute('checked', x.ss[i].cek) mItem.setAttribute( 'autocheck',true) } x.mObj.getItem(); nItem = x.mObj.getItem(); nItem.id = 'Note'; this.separator = x.mObj.insertBefore( nItem , x.mObj.oMenu.lastChild); } this.init(this); //Стоп, при открытии настройки панелей.................................................... if (window.ToggleFindRun == 'stop') return; //Findbar, переклучить атрибут 'mini'(Findbar, set and remove attribute 'mini')........... //Findbar, установить и удалить 'hits'(Findbar, set and remove 'hits')........... function fmini(event){ //FindBar, auto find if (!gFindBar.hidden) { //Find gFindBar.onFindCommand(); } var findToolbar = document.getElementById("FindToolbar"); var HighBut = document.getAnonymousElementByAttribute( gFindBar, "anonid", "highlight"); if (custombuttonsUtils.getPrefs("FindBar.mini")) { //... var highlightBtn = document.getElementById('FindToolbar').getElement('highlight'); if (highlightBtn.checked) { gFindBar._findField.style.color = prefs.getCharPref("ui.textHighlightBackground"); }; findToolbar.setAttribute("mini", "true"); this.hits = ' '; var Rtext = custombuttons.getPrefs("FindBar.ClearButton") ? "Искать предыдущее" : "Очистить поле текстового ввода"; var text = "L = Искать следущее"+"\n" +"M = Поиск выделенного текста/из буфера" + "\n" + "R = " + Rtext; HighBut.setAttribute("tooltiptext", text ); } else { findToolbar.removeAttribute("mini") this.hits = ' hits'; HighBut.setAttribute("tooltiptext", "Highlight"); //... gFindBar._findField.style.color = "black"; } //Findbar, убрать фокус(Findbar, hide focus) _content.focus(); }; //Findbar, переклучить атрибут 'autohide'...... function Autohide(event){ var f = document.getElementById("FindToolbar"); custombuttons.getPrefs("FindBar.auto_Close") ? f.setAttribute("autohide", "true") : f.removeAttribute("autohide"); }; //Findbar, переклучить атрибут 'ClearButton'...... function ClearButton(event){ var ft = document.getElementById("FindToolbar"); custombuttons.getPrefs("FindBar.ClearButton") ? ft.setAttribute("ClearButton", "true") : ft.removeAttribute("ClearButton"); }; //Запускаем функции fmini(Run the function fmini) setTimeout(function() {fmini(event);Autohide(event);ClearButton(event);}, 200) //Изменить иконку кнопки................................................................. function ToggleImage(event){ // toggle button image if (custombuttonsUtils.getPrefs("FindBar.Highlight")) { this_.image="data:image/x-icon;base64,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"; } else { this_.image="data:image/x-icon;base64,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"; } }; ToggleImage(event); //find bar сверху (move find bar to the top)................................................ XPCOMUtils.defineLazyGetter(window, "gFindBar", function() { let XULNS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"; let findbar = document.createElementNS(XULNS, "findbar"); findbar.setAttribute("browserid", "content"); findbar.id = "FindToolbar"; gBrowser.parentNode.insertBefore(findbar, gBrowser); // Force a style flush to ensure that our binding is attached. findbar.clientTop; window.gFindBarInitialized = true; return findbar; }); //find bar, показать количество совпадений(find bar,show the number of matches)...@author slimx................. (function() { //add label to findbar var status = document.getAnonymousElementByAttribute(gFindBar, 'anonid', 'match-case-status'); var sep = document.createElement("toolbarspacer"); var count = document.createElement("label"); count.hidden = true; status.parentNode.insertBefore(sep, status); status.parentNode.insertBefore(count, status);//findbar-container gFindBar.__proto__._foundMatches = count; gFindBar.__proto__._updateMatchesCount = function(aRes) { if (!this._updateMatchCountTimeout) window.clearTimeout(this._updateMatchCountTimeout); this._updateMatchCountTimeout = window.setTimeout(function(aRes, aSelf) { aSelf._updateMatchesCountWorker(aRes); }, 0, aRes, this); } gFindBar.__proto__._updateMatchesCountWorker = function(aRes) { var word = this._findField.value; if (aRes == this.nsITypeAheadFind.FIND_NOTFOUND || !word) { this._foundMatches.hidden = true; this._foundMatches.value = ""; } else { var matchesCount = this._countMatches(word).toString(); if (matchesCount != "0") { if (matchesCount == "1") this._foundMatches.value = matchesCount + hits; else if (matchesCount == "-1") { var matchLimit = 100; this._foundMatches.value = " \>"+ matchLimit + hits; // var key = (matchLimit > 1000) ? "Decrease" : "Increase"; } else this._foundMatches.value = matchesCount + hits; this._foundMatches.hidden = false; //Findbar, удалить атрибут 'red'(Findbar, remove attribute 'red').............. var findToolbar = document.getElementById("FindToolbar"); findToolbar.removeAttribute("red"); } else { this._foundMatches.hidden = true; this._foundMatches.value = ""; //Findbar, установить атрибут 'red'(Findbar, set attribute 'red')............... var findToolbar = document.getElementById("FindToolbar"); findToolbar.setAttribute("red", "true"); } window.clearTimeout(this._updateMatchCountTimeout); } } gFindBar.__proto__._countMatches = function(aWord, aWindow) { var win = aWindow || this.browser.contentWindow; var countFound = 0; for (var i = 0, count; win.frames && i < win.frames.length; i++) { if ((count = this._countMatches(aWord, win.frames[i])) != -1) countFound += count; else return count; } var doc = win.document; if (!doc || !(doc instanceof HTMLDocument)) return countFound; var body = doc.body; var count = body.childNodes.length; var searchRange = doc.createRange(); var startPt = doc.createRange(); var endPt = doc.createRange(); searchRange.setStart(body, 0); searchRange.setEnd(body, count); startPt.setStart(body, 0); startPt.setEnd(body, 0); endPt.setStart(body, count); endPt.setEnd(body, count); var retRange = null; var finder = Components.classes["@mozilla.org/embedcomp/rangefind;1"] .createInstance() .QueryInterface(Components.interfaces.nsIFind); finder.caseSensitive = this._shouldBeCaseSensitive(aWord); var matchLimit = 100; while ((retRange = finder.Find(aWord, searchRange, startPt, endPt))) { if (this._rangeIsVisible(retRange, win)) { if (this._findMode == this.FIND_LINKS) { if (this._rangeStartsInLink(retRange)) ++ countFound; } else ++ countFound; } if (countFound == matchLimit) { countFound = -1; break; } startPt = doc.createRange(); startPt.setStart(retRange.startContainer, retRange.startOffset + 1); } return countFound; } gFindBar.__proto__._rangeIsVisible = function(aRange, aWindow) { var node = aRange.startContainer; if (node.nodeType == node.ELEMENT_NODE) { if (node.hasChildNodes) { var childNode = node.childNodes[aRange.startOffset]; if (childNode) node = childNode; } } while (node && node.nodeType != node.ELEMENT_NODE) node = node.parentNode; // There is no perfect way to check if a node is visible in JavaScript, // so use the best measures we can have if (node) { var style = aWindow.getComputedStyle(node, ""); if (style) { if (style.visibility == "hidden" || style.visibility == "collapse" || style.display == "none") return false; if (style.left != "auto" && style.width != "auto") if (style.left < 0 && style.left + style.width < 0) return false; if (style.top != "auto" && style.height != "auto") if (style.top < 0 && style.top + style.height < 0) return false; } } return true; } gFindBar.__proto__._rangeStartsInLink = function(aRange) { var isInsideLink = false; var node = aRange.startContainer; if (node.nodeType == node.ELEMENT_NODE) { if (node.hasChildNodes) { var childNode = node.childNodes[aRange.startOffset]; if (childNode) node = childNode; } } const XLink_NS = "http://www.w3.org/1999/xlink"; do { if (node instanceof HTMLAnchorElement) { isInsideLink = node.hasAttribute("href");m break; } else if (typeof node.hasAttributeNS == "function" && node.hasAttributeNS(XLink_NS, "href")) { isInsideLink = (node.getAttributeNS(XLink_NS, "type") == "simple"); break; } node = node.parentNode; } while (node); return isInsideLink; } //insert count function to original eval("gFindBar._updateCaseSensitivity=" + gFindBar._updateCaseSensitivity.toString().slice(0, -1) + "this._updateMatchesCount();}"); eval("gFindBar._updateStatusUI=" + gFindBar._updateStatusUI.toString().slice(0, -1) + "this._updateMatchesCount();}"); })(); //FindBar, поиск колесиком мыши(FindBar, Mouse Scroll find )................................................ gFindBar.addEventListener('DOMMouseScroll', function (event){ //Найти (Find) gFindBar.onFindAgainCommand(event.detail < 0); }, false); //переключить 'Поиск на странице' двойным средним кликом на странице(toggle Find Bar, if Double midlle Click in page).......... //добавляем обработчик для обработки нажатие на кнопку мыши на странице....... gBrowser.addEventListener("mouseup", function(event){ //если нажатие на среднюю кнопку мыши if (event.button !== 1) return; //если разрешено в настройках(about:config) if (!custombuttons.getPrefs("FindBar.ToggleWithDoubleMiddleClick")) return; var _this = this; //если установлен флаг if (_this.open){ //переключить 'Поиск на странице' gFindBar.hidden ? gFindBar.onFindCommand() : gFindBar.close(); Find(event); gFindBar._findField.focus(); } //устанавливаем флаг _this.open = true; //сбросить флаг по таймеру this.timer = 0; this.timer = setTimeout(function(){ _this.open = false;}, 400); }, false); //Автоматически очищать поле текстового ввода на Findbar.................................................. gFindBar.addEventListener("DOMAttrModified", function(event){ var _this = this; //устанавливаем флаг if (gFindBar.hidden){_this.clear = true} //... if (!custombuttons.getPrefs("FindBar.autoclear")) reset; if (gFindBar.hidden){gFindBar._findField.reset()} if (!gFindBar.hidden) { //Снять выделенные на странице если флаг - true if (_this.clear){goDoCommand("cmd_selectNone")} //сбросить флаг _this.clear = false; } }, false); //findbar очистить, кликнуть правим кликом на findbar's label-Найти: или на иконку поиска на FindBar mini(FindBar clear findText, right click on findbar's label, else Find button).............. //findbar поиск, кликнуть левым кликом на findbar's label-Найти: или на иконку поиска на FindBar mini(FindBar find, left click on findbar's label, else Find button).............. var FindButt = document.getAnonymousElementByAttribute(gFindBar, "anonid", "find-label"); FindButt.setAttribute("onclick", "event.stopPropagation(); clickFind(event);"); //.... var HighBut = document.getAnonymousElementByAttribute( gFindBar, "anonid", "highlight"); HighBut.addEventListener("click", function(event){ if (custombuttons.getPrefs("FindBar.mini")) { gFindBar.getElement("highlight").removeAttribute("checked"); //....... clickFind(event); } }, true); //..................... clickFind = function(event){ if ( event.button == 0 ) { event.preventDefault(); event.stopPropagation(); Find(event); } else if ( event.button == 2 ) { if (custombuttons.getPrefs("FindBar.Highlight")){Highlight(event)}; //Запускаем функцию findFieldClear или искать предыдущее custombuttons.getPrefs("FindBar.ClearButton") ? gFindBar.onFindAgainCommand(true) : findFieldClear(event); } }; //Поиск по странице из буфера обмена/выделенный текст, если кликнуть средним кликом на findbar или на иконку поиска на FindBar mini ....... //переключить кнопку 'Highlight' двойным левым кликом на на поле текстового ввода на FindBar............ //Стоп, при открытии настройки панелей(stop, if onDestroy) if (window.ToggleFindRun !== 'stop') (function () { //Поиск по странице из буфера обмен gFindBar.addEventListener("click", function(event){ if ( event.button != 1 )return; event.preventDefault(); event.stopPropagation(); //........ var sel = content.getSelection().toString(); var str =(!!sel) ? sel : readFromClipboard(); //Убираем пробелы с обоих концов текста. var str = str.replace(/^\s+|\s+$/g,""); //... gFindBar._findField.value = str; Find(event); }, true); //переключить кнопку 'Highlight'......... gFindBar._findField.addEventListener("dblclick", function(event){ if ( event.button != 0 )return; event.preventDefault(); event.stopPropagation() //.... if (!custombuttons.getPrefs("FindBar.mini")) return; if (custombuttons.getPrefs("FindBar.Highlight")) return; //Запускаем функцию toggleHighlight toggleHighlight(event); //Findbar, убрать фокус(Findbar, hide focus) _content.focus(); }, false); })(); //FindBar, автоматически закрыть(autohide Findbar)................................. //Стоп, при открытии настройки панелей(stop, if onDestroy) if (window.ToggleFindRun !== 'stop')(function () { function go() { gFindBar.close(); } function on() { if (!custombuttons.getPrefs("FindBar.auto_Close")) return; if (gFindBar.hidden) return; if (window.ACRun == 'stop') return; window.ACRun = 'stop'; timeoutId = setTimeout(go, custombuttons.getPrefs("FindBar.CloseTimer") + '000') gFindBar.addEventListener('mouseover',off, false); gFindBar.addEventListener("DOMAttrModified", Modoff, false); } function Modoff() { if (!gFindBar.hidden){ off(); } }; function off() { window.ACRun = ''; gFindBar.removeEventListener('mouseover',Modoff, false); gFindBar.removeEventListener("DOMAttrModified", off, false); clearTimeout(timeoutId); } gBrowser.addEventListener('mouseover',on, false); })(); //FindBar, сочетания клавиш(Key config)......................................................... //Стоп, при открытии настройки панелей(stop, if onDestroy) if (window.ToggleFindRun !== 'stop')(function () { window.addEventListener('keydown', function (event){ //FindBar(ctrl+ F)показать - скрыть(Toggle Find Bar)......... if ((event.ctrlKey)&&(!event.altKey)&&(event.keyCode==70)) { event.preventDefault(); event.stopPropagation(); gFindBar.hidden ? gFindBar.onFindCommand() : gFindBar.close(); Find(event); } //Findbar(ctrl+ALT+F), поиск по странице из буфера обмена(find from clipboard)............. if ((event.ctrlKey)&&(event.altKey)&&(event.keyCode==70)) { gFindBar.hidden ? gFindBar.onFindCommand() : gFindBar.close(); goDoCommand("cmd_selectNone"); goDoCommand("cmd_paste"); Find(event); } //Findbar(ctrl+ALT+H), FindBar, вести слова для выделение(set Highlight words)... if ((event.ctrlKey)&&(event.altKey)&&(event.keyCode==72)) { //Запускаем функцию HighlightAdd(run HighlightAdd) HighlightAdd(event); } }, false); })(); //переключить кнопку 'Highlight'(toggle Highlight)............................................ function toggleHighlight(event) { var highlightBtn = document.getElementById('FindToolbar').getElement('highlight'); //... if (!highlightBtn.checked) { highlightBtn.setAttribute("checked", "true"); gFindBar._highlightDoc(true, gFindBar._findField.value); //.. gFindBar._findField.style.color = prefs.getCharPref("ui.textHighlightBackground"); } else { highlightBtn.removeAttribute("checked"); gFindBar._highlightDoc(false); //.. gFindBar._findField.style.color = "black"; } }; //Автоматически выделить заранее введенные слова (auto Highlight words permanent).................................................... Highlight = function(event) { //устанавливаем флаги... var m = true; if (event =='[object UIEvent]'){var m = false}; if (event =='[object DragEvent]'){var m = false}; if (event =='[object MouseEvent]'){var m = false}; //hide Highlight gFindBar._highlightDoc(false); //.... var highlightBtn = document.getElementById('FindToolbar').getElement('highlight'); var FBNum = custombuttons.getPrefs("FindBar.AutohighlightNum"); var FBvalue = gFindBar._findField.value; //.... if (!gFindBar.hidden) { //... if (!highlightBtn.checked) { gFindBar._findField.style.color = "black"; } //Findbar, удалить атрибут 'red'(Findbar, remove attribute 'red').............. if (FBvalue.length == '0') { var findToolbar = document.getElementById("FindToolbar"); findToolbar.removeAttribute("red"); } //FindBar, auto find if (m) { //Findbar, фокус(Findbar, focus) gFindBar._findField.focus(); gFindBar.onFindCommand(); //Findbar, убрать фокус(Findbar, hide focus) _content.focus(); } } //auto Highlight if (custombuttonsUtils.getPrefs("FindBar.Highlight")) { if (gFindBar.hidden) { //getting prefs Unicode value var value = prefs.getComplexValue("FindBar.Highlight.value", Components.interfaces.nsISupportsString).data; } if (!gFindBar.hidden) { var value =(FBvalue.length > FBNum)? FBvalue : "??????"; } //Highlight gFindBar._highlightDoc(true, value); } }; if (window.ToggleFindRun !== 'stop') (function () { //добавляем обработчики..... //обработчики для табов.. gBrowser.tabContainer.addEventListener("TabSelect", Highlight, false); gBrowser.addEventListener("DOMContentLoaded", function(event){ //фылтр.... //стоп, если открыть новые таби if (event.target.location.href !== getBrowser().currentURI.spec) return; //стоп, если срабатывает на фрейме var document = event.originalTarget; if (document instanceof HTMLDocument && this.contentWindow.document !== document) return; Highlight(event)}, false); //обработчики для FindBar.. gFindBar._findField.addEventListener("input", Highlight, false); gFindBar._findField.setAttribute("ondrop","event.stopPropagation(); Find(event); "); gFindBar.addEventListener("DOMAttrModified", function(event){ if (!gFindBar.hidden) return; Highlight(event)}, false); })(); //FindBar. контекстного меню (context Menu)....................................... (function contextFindWords(){ // выходим, если функция уже выполнялась if (document.getElementById("contextFindWords")) return; const kXULNS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"; var contextMenu = document.getElementById("contentAreaContextMenu"); var separator = document.getElementById("context-sep-properties"); var eventTarget = null; var menu = document.createElementNS(kXULNS, "menu"); menu.id = "contextFindWords"; menu.setAttribute("label", "Find"); menu.hidden = true; contextMenu.insertBefore(menu, separator); var menuPopup = document.createElementNS(kXULNS, "menupopup"); menu.appendChild(menuPopup); var lst = [ { label:"Найти на странице", command:ContexFind }, { label:"Поиск по сайту(google)", command:Search }, { label:"Выделить текст на странице", command:HighlightSel }, { label:"Автовыделение, добавить текст", command:addSel } ]; for(var i = 0, m; m = lst[i]; i++){ var menuItem = document.createElementNS(kXULNS, "menuitem"); menuItem.setAttribute("label", m.label); menuItem.setAttribute("type", "m.radio"); if ("accesskey" in m) menuItem.setAttribute("accesskey", m.accesskey); menuItem.addEventListener("command", m.command, false); menuItem.id = "context-Find-Words-" + m.label.toString(); menuPopup.appendChild(menuItem); } var contextFind = document.getElementById("contextFindWords") contextMenu.addEventListener("popupshowing", setMenuDisplay, false); function setMenuDisplay(aEvent) { if (gContextMenu.isTextSelected) { if (custombuttons.getPrefs("FindBar.contextFindWords")) { contextFind.hidden = false; } else { contextFind.hidden = true; } } } function ContexFind(){ gFindBar.onFindCommand(); //Запускаем функцию Find Find(event); } function Search(){ var focusedWindow = document. commandDispatcher. focusedWindow; var text = focusedWindow. getSelection (). toString (); var doc = getBrowser (). contentDocument; try { var url = doc. location. hostname; } catch(e) { var url = ""; } text = escape (convertFromUnicode ("UTF-8", text)); url = encodeURIComponent (url); var searchUrl = "http://www.google.com/search?as_q=" + text + "&as_sitesearch=" + url; gBrowser.selectedTab = gBrowser.addTab(searchUrl); } function HighlightSel(){ gFindBar.toggleHighlight(false); var text = document.commandDispatcher.focusedWindow.getSelection(); gFindBar._highlightDoc(true, text); goDoCommand("cmd_selectNone"); } function addSel(){ //Запускаем функцию HighlightAdd HighlightAdd(event); } })(); //Найти на странице.................................................... Find = function(event){ if (custombuttons.getPrefs("FindBar.Highlight")){Highlight(event)}; if (!gFindBar.hidden) gFindBar.onFindAgainCommand(event.detail = 0); }; //Очистить поле текстового ввода на Findbar.................................................. function findFieldClear(event){ gFindBar._findField.reset(); gFindBar.onFindAgainCommand(false); //.... var findToolbar = document.getElementById("FindToolbar"); findToolbar.removeAttribute("red"); //... gFindBar._findField.focus(); //.... gFindBar._highlightDoc(false); }; //Добавить текст(выделенный / из буфера обмена) для автовыделения....................................... function HighlightAdd(event){ //Копируем выделенный текст в буфер document.getElementById("cmd_copy").doCommand(); // Get the root branch var prefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch); //setting Unicode value var str = Components.classes["@mozilla.org/supports-string;1"].createInstance(Components.interfaces.nsISupportsString); //читаем из буфера обмена и добавляем текст для автовыделения в 'about:config' str.data = readFromClipboard(); prefs.setComplexValue("FindBar.Highlight.value", Components.interfaces.nsISupportsString, str); //всплывающая подсказка custombuttons.alertSlide(AutoHighlight, str.data); //... goDoCommand("cmd_selectNone"); //Запускаем функцию Highlight(run Highlight) Highlight(event); }; //Поле текстового ввода на Findbar мигает желтим............................ function fflash(event){ var findToolbar = document.getElementById("FindToolbar"); //Следим за иконкой статуса на FindBar var findstatus = gFindBar.getElement("find-status-icon"); findstatus.addEventListener("DOMAttrModified",function(e){ if(findstatus.getAttribute("status")=="wrapped") { findToolbar.setAttribute("flash", "true"); setTimeout(function() {findToolbar.removeAttribute("flash");}, 700)}; }, false)}; //Запускаем функции fflash, fmini(Run the function fflash) document.addEventListener( "DOMContentLoaded", fflash(event), false); //Создать кнопку "Clear" на Findbar......................................................... var ubc=document.getAnonymousElementByAttribute( gFindBar, "anonid", "findbar-textbox"); var btn=document.createElementNS("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul", "toolbarbutton"); btn.setAttribute("id", "ClearButton"); btn.setAttribute("tooltiptext", "L = Очистить поле текстового ввода"); ubc.parentNode.insertBefore(btn, ubc.nextSibling); btn.addEventListener("click", function(event) { if ( event.button != 0 ) return; //Запускаем функцию findFieldClear findFieldClear(event); }, false); // FindToolbar стиль(style)....................................................................... (function(css) { var pi = document.createProcessingInstruction( 'xml-stylesheet', 'type="text/css" href="data:text/css;utf-8,' + encodeURIComponent(css) + '"' ); return document.insertBefore(pi, document.documentElement); } )(<![CDATA[ @namespace url(http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul); /*Find Toolbar.................*/ #FindToolbar { border-bottom: 1px solid grey !important; } #FindToolbar > .findbar-container > * { display: -moz-box !important; } #FindToolbar > hbox > label{-moz-appearance: none !important;font-weight: bold !important;} #find-field,.findbar-textbox{width: 250px !important;} #FindToolbar .findbar-find-fast.findbar-find-status, #FindToolbar .findbar-container>image, #FindToolbar[autohide] .findbar-closebutton {display: none !important;} #FindToolbar[red="true"] .findbar-textbox{box-shadow: 0 0 0 1em #f66 inset;} #FindToolbar:not([red="true"]) .findbar-textbox[status="notfound"]{ background: rgba(207,219,236,0.99) !important; color: black !important; box-shadow: none !important;} /*Find Toolbar, mini......................................... */ #FindToolbar[mini="true"] .findbar-textbox{ width: 16em !important; height:21px!important; padding-right: 20px !important; margin-right: 2px!important; margin-left:-4px!important} #FindToolbar[mini] { position: fixed; right: 18px; background: menu !important; box-shadow: 0px 10px 5px -10px rgba(0,0,0,.3) !important; border: 1px solid grey !important; border-top: 0 !important; border-radius: 0 0 8px 8px !important;} #FindToolbar[mini="true"] .findbar-container>checkbox{ margin-left:-24px !important; margin-right: -3px !important} #FindToolbar[mini] toolbarspacer, #FindToolbar[mini="true"] label[class="checkbox-label"], #FindToolbar[mini="true"] toolbarbutton.findbar-find-next, #FindToolbar[mini="true"] toolbarbutton.findbar-find-previous, #FindToolbar[mini="true"] .findbar-highlight label, #FindToolbar[mini="true"] .findbar-closebutton, #FindToolbar:not([ClearButton="true"]) #ClearButton, #FindToolbar[mini="true"] .findbar-find-fast[anonid="find-label"], #FindToolbar[mini="true"] .findbar-find-fast[anonid="match-case-status"] { display: none !important;} #FindToolbar[mini] .findbar-highlight, #FindToolbar[mini] .findbar-highlight[checked] { list-style-image: url("data:image/gif;base64,R0lGODlhEAAQAMQWAJmZzJlmzGZmzGZm/2aZ/5mZ/5nM/8zM/8z//5mZmWZmmf///8yZzMzMmZlmmZmZM8zMM8zMZsz/ZsyZZpmZZmZmM////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAHoAxYALAAAAAAQABAAAAVsoCUCgQCIaCoKA1G4p7q6RmEXcQoMxYEYQEMOJSAYEL+D8jC0CG6GJTKhUtiAPiSCmlK4er7FgiGzWLGIBUJRZliVCLMi0Sg7FHhq4gGJlFUNEBIQE38pExGDFIYoFIkQi4wWjhEVkiIUFQohADs=") !important; -moz-image-region: auto !important;} #ClearButton{ list-style-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAFgSURBVHjaYv7//z/j69evWR8+fMj19etXHgYGBhjmxoK5gJhDTEyMOT4+/v+pU6f+AwQQM1Azy5o1a/hevXolC5RUAmIFIJYHYlksWBKIhYEWsQEt/PXgwYPfAAHEADQNZKr21KlTD7x8+fLbfwIApAakFqQHpBcggIA0gwAQOxKjGdkQkB6QXoAAYgISzCC/AU3jZMADTExMwBgEoGpBLmcGCCCQAYxQQ/BqxgJAehgBAogJymEkUTNcD0AAMZFhMwoACCAmSjSDAEAAMTGQAM6cOYMhBhBAMAP+o9uelpZGSDNYD0AAgQJCGIgtgNG7BZvmWbNmYRgG4jMyMvoAmScAAogFSPwF4m/ApPwdlhZAmpAVo2sGqQXpAekFCCCKkzJAADFmZWXBMpMUUFAUmsJYcITjH6jNr4Gan4WEhHwCCCAGUHYGGsIKFABlYSGoIWI4MEhOCKQWpAekFyDAAO0k7MPVi8ODAAAAAElF") !important; -moz-image-region: auto !important; margin-right: 1px!important;} #FindToolbar[mini="true"] textbox.findbar-textbox{ -moz-box-ordinal-group: 2 !important} #FindToolbar[mini="true"] checkbox{ -moz-box-ordinal-group: 3 !important;} #FindToolbar[mini="true"] toolbarbutton.findbar-highlight{ -moz-box-ordinal-group: 4 !important;} #FindToolbar[mini="true"] #ClearButton{ -moz-box-ordinal-group: 4 !important;} #FindToolbar[mini="true"] .findbar-closebutton{ -moz-box-ordinal-group: 7 !important;} ]]>.toString()); //устанавливаем флаг window.ToggleFindRun = 'stop'; |
iDev.Pi > 21-03-2012 01:47:17 |
bunda1 пишет
Спасибо, это конечно работает, но если честно, вся эта экономии нескольких пикселей не стоит тех ухищрений, на которые пришлось пойти. bunda1 пишет
Странно, у меня в стиле после этого кнопка выглядит как кнопка, а у тебя даже после исправления - как фоновая картинка: при наведении на кнопку почему-то не появляется свойственная всем кнопкам рамочка. Попозже посмотрю в чём там дело. bunda1 пишет
Спасибо, работает. Я правда думал, что ты сделаешь эти 2 настройки отдельными друг от друга ("Очищать поле текстового ввода" и "автоматически искать выделенное при открытии поиска"), хотя лично меня это удовлетворяет, так как у меня всё равно выставлена галка "очищать поле текстового ввода". Кстати, а можно переформулировать некоторые вещи? Это конечно мелочи, но ведь дьявол в мелочах... К "Переключать двойным средним кликом" нужно пояснение типа: "Открывать и закрывать панель поиска двойным кликом средней кнопкой мыши", т.к. не очень очевидно значение слова "переключать" (это в английском "toggle" имеет более очевидное значение: переключение чего-то между его возможными состояниями). Т.к. хоть немного более точного перевода одним словом "toggle" в этом случае, кажется, нет, то предлагаю его так и оставить, т.к. замена на "Открывать/закрывать" слишком долго, а "Откр./Закр." выглядит убого. 21-03-2012 01:51:41 |
bunda1 > 21-03-2012 22:37:01 |
iDev.Pi пишет
Очень хорошо. iDev.Pi пишет
Да согласен, и потому думаю позже сделать подробное описание настроек кнопки в 09-03-2012 19:18:31 iDev.Pi пишет
Мысль хорошая, но для этого есть описание кнопки где это все будет более подробно и если честно не хочется загромождать код кнопки. За подсказки спасыбо, использую их при описание настроек кнопки. iDev.Pi пишет
ok iDev.Pi пишет
ok iDev.Pi пишет
У меня не наблюдается. |
iDev.Pi > 21-03-2012 22:51:37 |
bunda1 пишет
Ок, особенно если потом это всё осядет в разделе "help" у кнопки. bunda1 пишет
Я уже писал STR: iDev.Pi пишет
у тебя и после выполнения этих шагов баг не воспроизводится? bunda1 пишет
Баг происходит не всегда. Попробую и для него STR вычислить. iDev.Pi пишет
Ничего не трогал и у меня сам собой исчез этот баг. Магия какая-то :-/ Edit: ааа, понял: я ошибся, когда этот баг описывал - на самом деле всё в порядке, кнопка не имеет рамку, если в форму поиска ничего не вписано (соответственно, нечего искать, а значит и кнопка неактивна). Выделить код Код:#FindToolbar[mini] .findbar-highlight[disabled] { opacity: 0.3 !important; filter: url("chrome://mozapps/skin/extensions/extensions.svg#greyscale") !important; } |
bunda1 > 21-03-2012 23:10:11 |
iDev.Pi пишет
Да есть такой баг, буду исправлять. Кнопку я обычно проверяю на nightly но тут наверно что то напутал. iDev.Pi пишет
ok iDev.Pi пишет
ok 21-03-2012 23:19:09 iDev.Pi пишет
Исправил. скрытый текст Выделить код Код://настройка функций кликов мыши(Mouse Click settings)................................................... this.onclick = function(event) { if(event.button == 0) { // Действие при клике ЛКМ gFindBar.hidden ? gFindBar.onFindCommand() : gFindBar.close(); Find(event); } else if(event.button == 1) { // Действие при клике СКМ gFindBar.hidden ? gFindBar.onFindCommand() : gFindBar.close();с goDoCommand("cmd_selectNone"); goDoCommand("cmd_paste"); } }; //Объявляем ..... var prefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService); var clipboard = Components.classes["@mozilla.org/widget/clipboardhelper;1"]. getService(Components.interfaces.nsIClipboardHelper); var this_ = this; var AutoHighlight ='Автоматически подсвечивать найденное' var AutoClose ='Автоматически закрыть' var CloseTimer ='Закрыть через ' var ClearPref ='Сбросить текст' //подсказка............................................................................. this.showTFinfo = function() { //getting prefs Unicode value var prefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService); var Val = "\n\n"+ AutoHighlight +": "+ prefs.getComplexValue("FindBar.Highlight.value",Components.interfaces.nsISupportsString).data; //обрезать подсказку для "Автовыделение" var HValue = Val.substring(0,50); var HDots =(Val.length > 50) ? '....' : ""; //.... this.tooltipText = "Поиск по странице" +"\n" + "Л: Показать - скрыть поиск по странице" +"\n" +"С: Поиск по странице из буфера обмена" +"\n"+ "П: Mеню + CB меню" + HValue + HDots; } this.setAttribute("onmouseover", "this.showTFinfo()"); //справка(Help) this.setAttribute("Help", 'https://forum.mozilla-russia.org/viewtopic.php?pid=550855#p550855]09-03-2012 19:18:31'); //проверить наличие строк в about:config и создать если не существует(Add preferences)........................................ if (custombuttons.getPrefs("FindBar.version") !== '8') { prefs.setCharPref("FindBar.version", "8"); prefs.setBoolPref("FindBar.Highlight", true); prefs.setCharPref("FindBar.Highlight.value", "??????"); prefs.setBoolPref("FindBar.autoclear", false); prefs.setBoolPref("FindBar.contextFindWords", true); prefs.setBoolPref("FindBar.ToggleWithDoubleMiddleClick", false); prefs.setCharPref("ui.textHighlightBackground", "#ef0fff");//http://coloria.net/bonus/colornames.htm //prefs.setCharPref("ui.textHighlightForeground", "#000000");//http://coloria.net/bonus/colornames.htm prefs.setBoolPref("FindBar.mini", false); prefs.setBoolPref("FindBar.ClearButton", false); prefs.setBoolPref("FindBar.auto_Close", false); prefs.setCharPref("FindBar.CloseTimer", "7");//7 сек(7 sec) prefs.setCharPref("FindBar.AutohighlightNum", "1"); }; //настройка меню(CB menu settings)................................................... //Объявляем ..... var c ='true'; var n = 'false'; //изменить нужный пункт меню(toggle menuitems) //переключаем настройки в about:config(toggle preference) this.CBlabel = function (mi, id) { //Автоматически закрыть(FB auto close).... if(!id || id == "FBClose") { //переключаем настройки в about:config s = "FindBar.auto_Close"; togglePref(s); //Запускаем функцию autohide if (id) Autohide(event); //изменить нужный пункт меню var cek = (custombuttons.getPrefs(s)? c: n); this.FBCcek = cek; if(mi) mi.cek = cek; }; //FB auto close timer..... if(!id || id == "CloseTimer") { (function () { //Стоп, при инициализации кнопки if (!id) return; s = "FindBar.CloseTimer"; //switch auto close timer+"\n" + var URL = custombuttons.promptBox(AutoClose, CloseTimer+custombuttons.getPrefs(s) + ' секунд', ''); if (URL[0] == false) return; else var timer = [URL[1]]; //переключаем настройки в about:config(toggle preference) prefs.setCharPref(s, timer); })(); //пункт меню(menuitems) var label = CloseTimer + custombuttons.getPrefs("FindBar.CloseTimer") + ' секунд'; this.CloseTimer = label; if(mi) mi.label = label; }; //FindBar.mini...... if(!id || id == "FBmini") { //переключаем настройки в about:config s = "FindBar.mini"; togglePref(s); //Запускаем функцию fmini(run fmini) if (id) fmini(event); //изменить нужный пункт меню var cek = (custombuttons.getPrefs(s)? c : n); this.FBcek = cek; if(mi) mi.cek = cek; }; //Кнопка 'очистить'...... if(!id || id == "FBbutt") { //переключаем настройки в about:config s = "FindBar.ClearButton"; togglePref(s); //Запускаем функции ClearButton и fmini(run ClearButton, fmini) if (id) ClearButton(event); if (id) fmini(event); //изменить нужный пункт меню var cek = (custombuttons.getPrefs(s)? c : n); this.FCBcek = cek; if(mi) mi.cek = cek; }; //Find в контекстном меню(Find in the context menu)..... if(!id || id == "FindInMenu") { // переключаем настройки в about:config s = "FindBar.contextFindWords"; togglePref(s); //изменить нужный пункт меню var cek = (custombuttons.getPrefs(s)? c : n); this.FIMcek = cek; if(mi) mi.cek = cek; }; //Автоматически очищать поле текстового ввода на Findbar..... if(!id || id == "autoClear") { // переключаем настройки в about:config s = "FindBar.autoclear"; togglePref(s); //Очищистить поле текстового ввода если Findbar закрыт. if (gFindBar.hidden && custombuttons.getPrefs("FindBar.autoclear")) gFindBar._findField.reset(); //изменить нужный пункт меню var cek = (custombuttons.getPrefs(s)? c : n); this.aCcek = cek; if(mi) mi.cek = cek; }; //Переключить двойным средним кликом(Toggle with double middle click)..... if(!id || id == "MiddleClick") { // переключаем настройки в about:config s = "FindBar.ToggleWithDoubleMiddleClick"; togglePref(s); //изменить нужный пункт меню var cek = (custombuttons.getPrefs(s)? c : n); this.MCcek = cek; if(mi) mi.cek = cek; }; //Автовыделение(Switch, Auto Highlight)..... if(!id || id == "SwitchHighlight") { // переключаем настройки в about:config s = "FindBar.Highlight"; togglePref(s); //Изменить иконку кнопки if (id) ToggleImage(event); //переключить кнопку 'Highlight'(toggle Highlight) if (id) document.getElementById('FindToolbar').getElement('highlight').removeAttribute("checked"); //Запускаем функцию Highlight(run function Highlight) if (id) Highlight(event); //изменить нужный пункт меню(toggle menuitems) var cek = (custombuttons.getPrefs(s)? c : n); this.aHcek = cek; if(mi) mi.cek = cek; }; //Изменить цвет для Автовыделение..... if(!id || id == "addColor") { (function () { //Стоп, при инициализации кнопки if (!id) return; //создаем модальное окно для ввода цвета var URL = custombuttons.promptBox('Изменить цвет для Автовыделение', 'По умолчанию: #ef0fff', ''); if (URL[0] == false) return; else var color = [URL[1]]; //переключаем настройки в about:config(toggle preference) prefs.setCharPref("ui.textHighlightBackground", color); })(); //пункт меню(menuitems) var label = 'Изменить цвет' + ': ' + custombuttons.getPrefs("ui.textHighlightBackground"); this.addColor = label; if(mi) mi.label = label; }; //Автовыделение, добавить текст....... if(!id || id == "AddText") { //Запускаем функцию HighlightAdd(run function HighlightAdd) if (id) HighlightAdd(event); }; //Автовыделение, сбросить ..... if(!id || id == "Clear") { //сбросить настройки в about:config if (id) prefs.setCharPref("FindBar.Highlight.value", ""); //Запускаем функцию Highlight(run function Highlight) if (id) Highlight(event); //всплывающая подсказка if (id) custombuttons.alertSlide(ClearPref,'????'); }; //переключаем настройки в about:config(toggle preference).... function togglePref(s){ //Стоп, при инициализации кнопки if (!id) return; //переключаем настройки custombuttons.setPrefs(s, !custombuttons.getPrefs(s)); } }; //Запускаем функцию CBlabel(run CBlabel)......... this.CBlabel(); //пункти меню(Our menu items) .... this.ss = [ { cek: this.FBCcek, label: AutoClose, cmd: 'document.popupNode.CBlabel(this, "FBClose")', sItemId: '', type:'checkbox'}, { label: this.CloseTimer, cmd: 'document.popupNode.CBlabel(this, "CloseTimer")', sItemId: ''}, { label: "separator", sItemId: ''}, { cek: this.FBcek, label: 'FindBar мини', cmd: 'document.popupNode.CBlabel(this, "FBmini")', sItemId: '', type:'checkbox'}, { cek: this.FCBcek, label: 'Кнопка "очистить" на FindBar', cmd: 'document.popupNode.CBlabel(this, "FBbutt")', sItemId: '', type:'checkbox'}, { label: "separator", sItemId: ''}, { cek: this.FIMcek, label: 'Find в контекстном меню', cmd: 'document.popupNode.CBlabel(this, "FindInMenu")', sItemId:'', type:'checkbox'}, { cek: this.aCcek, label: 'Очищать поисковую форму', cmd: 'document.popupNode.CBlabel(this, "autoClear")', sItemId:'', type:'checkbox'}, { cek: this.MCcek, label: 'Переключать двойным средним кликом', cmd: 'document.popupNode.CBlabel(this, "MiddleClick")', sItemId:'', type:'checkbox'}, { label: "separator", sItemId: ''}, { cek: this.aHcek, label: AutoHighlight, cmd: 'document.popupNode.CBlabel(this, "SwitchHighlight")', sItemId: '', type:'checkbox'}, { label: this.addColor, cmd: 'document.popupNode.CBlabel(this, "addColor")', sItemId: ''}, { label: 'Добавить текст', cmd: 'document.popupNode.CBlabel(this, "AddText")', sItemId: ''}, { label: ClearPref, cmd: 'document.popupNode.CBlabel(this, "Clear")', sItemId: ''}]; // Our Initialization function for creating the context menu, setting up menuitems and telling var Cb = custombuttons; this.mObj = Cb.getCbContextObj(this); this.init = function(x) { x.mObj.setSub(); var nItem = {}, mItem = {}; document.getElementById(CB2const.sCBCtxtMenu).setAttribute("oncommand", "event.stopPropagation()"); for(var i in x.ss) { nItem = new x.mObj.getItem(); nItem.id = 'Note'; nItem.label = x.ss[i].label; if (nItem.label == "separator") { nItem = document.createElement("menuseparator"); } nItem.value = String(i); mItem = x.mObj.insertBefore(nItem , x.mObj.oMenu.lastChild); this.ss[i].sItemId = mItem.id; mItem.setAttribute('oncommand',x.ss[i].cmd); if("type" in x.ss[i]) mItem.setAttribute('type', x.ss[i].type); mItem.setAttribute('checked', x.ss[i].cek) mItem.setAttribute( 'autocheck',true) } x.mObj.getItem(); nItem = x.mObj.getItem(); nItem.id = 'Note'; this.separator = x.mObj.insertBefore( nItem , x.mObj.oMenu.lastChild); } this.init(this); //Стоп, при открытии настройки панелей.................................................... if (window.ToggleFindRun == 'stop') return; //Findbar, переклучить атрибут 'mini'(Findbar, set and remove attribute 'mini')........... //Findbar, установить и удалить 'hits'(Findbar, set and remove 'hits')........... function fmini(event){ //FindBar, auto find if (!gFindBar.hidden) { //Find gFindBar.onFindCommand(); } var findToolbar = document.getElementById("FindToolbar"); var HighBut = document.getAnonymousElementByAttribute( gFindBar, "anonid", "highlight"); if (custombuttonsUtils.getPrefs("FindBar.mini")) { //... var highlightBtn = document.getElementById('FindToolbar').getElement('highlight'); if (highlightBtn.checked) { gFindBar._findField.style.color = prefs.getCharPref("ui.textHighlightBackground"); }; findToolbar.setAttribute("mini", "true"); this.hits = ' '; var Rtext = custombuttons.getPrefs("FindBar.ClearButton") ? "Искать предыдущее" : "Очистить поле текстового ввода"; var text = "L = Искать следущее"+"\n" +"M = Поиск выделенного текста/из буфера" + "\n" + "R = " + Rtext; HighBut.setAttribute("tooltiptext", text ); } else { findToolbar.removeAttribute("mini") this.hits = ' hits'; HighBut.setAttribute("tooltiptext", "Highlight"); //... gFindBar._findField.style.color = "black"; } //Findbar, убрать фокус(Findbar, hide focus) _content.focus(); }; //Findbar, переклучить атрибут 'autohide'...... function Autohide(event){ var f = document.getElementById("FindToolbar"); custombuttons.getPrefs("FindBar.auto_Close") ? f.setAttribute("autohide", "true") : f.removeAttribute("autohide"); }; //Findbar, переклучить атрибут 'ClearButton'...... function ClearButton(event){ var ft = document.getElementById("FindToolbar"); custombuttons.getPrefs("FindBar.ClearButton") ? ft.setAttribute("ClearButton", "true") : ft.removeAttribute("ClearButton"); }; //Запускаем функции fmini(Run the function fmini) setTimeout(function() {fmini(event);Autohide(event);ClearButton(event);}, 200) //Изменить иконку кнопки................................................................. function ToggleImage(event){ // toggle button image if (custombuttonsUtils.getPrefs("FindBar.Highlight")) { this_.image="data:image/x-icon;base64,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"; } else { this_.image="data:image/x-icon;base64,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"; } }; ToggleImage(event); //find bar сверху (move find bar to the top)................................................ XPCOMUtils.defineLazyGetter(window, "gFindBar", function() { let XULNS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"; let findbar = document.createElementNS(XULNS, "findbar"); findbar.setAttribute("browserid", "content"); findbar.id = "FindToolbar"; gBrowser.parentNode.insertBefore(findbar, gBrowser); // Force a style flush to ensure that our binding is attached. findbar.clientTop; window.gFindBarInitialized = true; return findbar; }); //find bar, показать количество совпадений(find bar,show the number of matches)...@author slimx................. (function() { //add label to findbar var status = document.getAnonymousElementByAttribute(gFindBar, 'anonid', 'match-case-status'); var sep = document.createElement("toolbarspacer"); var count = document.createElement("label"); count.hidden = true; status.parentNode.insertBefore(sep, status); status.parentNode.insertBefore(count, status);//findbar-container gFindBar.__proto__._foundMatches = count; gFindBar.__proto__._updateMatchesCount = function(aRes) { if (!this._updateMatchCountTimeout) window.clearTimeout(this._updateMatchCountTimeout); this._updateMatchCountTimeout = window.setTimeout(function(aRes, aSelf) { aSelf._updateMatchesCountWorker(aRes); }, 0, aRes, this); } gFindBar.__proto__._updateMatchesCountWorker = function(aRes) { var word = this._findField.value; if (aRes == this.nsITypeAheadFind.FIND_NOTFOUND || !word) { this._foundMatches.hidden = true; this._foundMatches.value = ""; } else { var matchesCount = this._countMatches(word).toString(); if (matchesCount != "0") { if (matchesCount == "1") this._foundMatches.value = matchesCount + hits; else if (matchesCount == "-1") { var matchLimit = 100; this._foundMatches.value = " \>"+ matchLimit + hits; // var key = (matchLimit > 1000) ? "Decrease" : "Increase"; } else this._foundMatches.value = matchesCount + hits; this._foundMatches.hidden = false; //Findbar, удалить атрибут 'red'(Findbar, remove attribute 'red').............. var findToolbar = document.getElementById("FindToolbar"); findToolbar.removeAttribute("red"); } else { this._foundMatches.hidden = true; this._foundMatches.value = ""; //Findbar, установить атрибут 'red'(Findbar, set attribute 'red')............... var findToolbar = document.getElementById("FindToolbar"); findToolbar.setAttribute("red", "true"); } window.clearTimeout(this._updateMatchCountTimeout); } } gFindBar.__proto__._countMatches = function(aWord, aWindow) { var win = aWindow || this.browser.contentWindow; var countFound = 0; for (var i = 0, count; win.frames && i < win.frames.length; i++) { if ((count = this._countMatches(aWord, win.frames[i])) != -1) countFound += count; else return count; } var doc = win.document; if (!doc || !(doc instanceof HTMLDocument)) return countFound; var body = doc.body; var count = body.childNodes.length; var searchRange = doc.createRange(); var startPt = doc.createRange(); var endPt = doc.createRange(); searchRange.setStart(body, 0); searchRange.setEnd(body, count); startPt.setStart(body, 0); startPt.setEnd(body, 0); endPt.setStart(body, count); endPt.setEnd(body, count); var retRange = null; var finder = Components.classes["@mozilla.org/embedcomp/rangefind;1"] .createInstance() .QueryInterface(Components.interfaces.nsIFind); finder.caseSensitive = this._shouldBeCaseSensitive(aWord); var matchLimit = 100; while ((retRange = finder.Find(aWord, searchRange, startPt, endPt))) { if (this._rangeIsVisible(retRange, win)) { if (this._findMode == this.FIND_LINKS) { if (this._rangeStartsInLink(retRange)) ++ countFound; } else ++ countFound; } if (countFound == matchLimit) { countFound = -1; break; } startPt = doc.createRange(); startPt.setStart(retRange.startContainer, retRange.startOffset + 1); } return countFound; } gFindBar.__proto__._rangeIsVisible = function(aRange, aWindow) { var node = aRange.startContainer; if (node.nodeType == node.ELEMENT_NODE) { if (node.hasChildNodes) { var childNode = node.childNodes[aRange.startOffset]; if (childNode) node = childNode; } } while (node && node.nodeType != node.ELEMENT_NODE) node = node.parentNode; // There is no perfect way to check if a node is visible in JavaScript, // so use the best measures we can have if (node) { var style = aWindow.getComputedStyle(node, ""); if (style) { if (style.visibility == "hidden" || style.visibility == "collapse" || style.display == "none") return false; if (style.left != "auto" && style.width != "auto") if (style.left < 0 && style.left + style.width < 0) return false; if (style.top != "auto" && style.height != "auto") if (style.top < 0 && style.top + style.height < 0) return false; } } return true; } gFindBar.__proto__._rangeStartsInLink = function(aRange) { var isInsideLink = false; var node = aRange.startContainer; if (node.nodeType == node.ELEMENT_NODE) { if (node.hasChildNodes) { var childNode = node.childNodes[aRange.startOffset]; if (childNode) node = childNode; } } const XLink_NS = "http://www.w3.org/1999/xlink"; do { if (node instanceof HTMLAnchorElement) { isInsideLink = node.hasAttribute("href");m break; } else if (typeof node.hasAttributeNS == "function" && node.hasAttributeNS(XLink_NS, "href")) { isInsideLink = (node.getAttributeNS(XLink_NS, "type") == "simple"); break; } node = node.parentNode; } while (node); return isInsideLink; } //insert count function to original eval("gFindBar._updateCaseSensitivity=" + gFindBar._updateCaseSensitivity.toString().slice(0, -1) + "this._updateMatchesCount();}"); eval("gFindBar._updateStatusUI=" + gFindBar._updateStatusUI.toString().slice(0, -1) + "this._updateMatchesCount();}"); })(); //FindBar, поиск колесиком мыши(FindBar, Mouse Scroll find )................................................ gFindBar.addEventListener('DOMMouseScroll', function (event){ //Найти (Find) gFindBar.onFindAgainCommand(event.detail < 0); }, false); //переключить 'Поиск на странице' двойным средним кликом на странице(toggle Find Bar, if Double midlle Click in page).......... //добавляем обработчик для обработки нажатие на кнопку мыши на странице....... gBrowser.addEventListener("mouseup", function(event){ //если нажатие на среднюю кнопку мыши if (event.button !== 1) return; //если разрешено в настройках(about:config) if (!custombuttons.getPrefs("FindBar.ToggleWithDoubleMiddleClick")) return; var _this = this; //если установлен флаг if (_this.open){ //переключить 'Поиск на странице' gFindBar.hidden ? gFindBar.onFindCommand() : gFindBar.close(); Find(event); gFindBar._findField.focus(); } //устанавливаем флаг _this.open = true; //сбросить флаг по таймеру this.timer = 0; this.timer = setTimeout(function(){ _this.open = false;}, 600); }, false); //Автоматически очищать поле текстового ввода на Findbar.................................................. gFindBar.addEventListener("DOMAttrModified", function(event){ var _this = this; //устанавливаем флаг if (gFindBar.hidden){_this.clear = true} //... if (!custombuttons.getPrefs("FindBar.autoclear")) reset; if (gFindBar.hidden){gFindBar._findField.reset()} if (!gFindBar.hidden) { //Снять выделенные на странице если флаг - true if (_this.clear){goDoCommand("cmd_selectNone")} //сбросить флаг _this.clear = false; } }, false); //findbar очистить, кликнуть правим кликом на findbar's label-Найти: или на иконку поиска на FindBar mini(FindBar clear findText, right click on findbar's label, else Find button).............. //findbar поиск, кликнуть левым кликом на findbar's label-Найти: или на иконку поиска на FindBar mini(FindBar find, left click on findbar's label, else Find button).............. var FindButt = document.getAnonymousElementByAttribute(gFindBar, "anonid", "find-label"); FindButt.setAttribute("onclick", "event.stopPropagation(); clickFind(event);"); //.... var HighBut = document.getAnonymousElementByAttribute( gFindBar, "anonid", "highlight"); HighBut.addEventListener("click", function(event){ if (custombuttons.getPrefs("FindBar.mini")) { gFindBar.getElement("highlight").removeAttribute("checked"); //....... clickFind(event); } }, true); //..................... clickFind = function(event){ if ( event.button == 0 ) { event.preventDefault(); event.stopPropagation(); Find(event); } else if ( event.button == 2 ) { if (custombuttons.getPrefs("FindBar.Highlight")){Highlight(event)}; //Запускаем функцию findFieldClear или искать предыдущее custombuttons.getPrefs("FindBar.ClearButton") ? gFindBar.onFindAgainCommand(true) : findFieldClear(event); } }; //Поиск по странице из буфера обмена/выделенный текст, если кликнуть средним кликом на findbar или на иконку поиска на FindBar mini ....... //переключить кнопку 'Highlight' двойным левым кликом на на поле текстового ввода на FindBar............ //Стоп, при открытии настройки панелей(stop, if onDestroy) if (window.ToggleFindRun !== 'stop') (function () { //Поиск по странице из буфера обмен gFindBar.addEventListener("click", function(event){ if ( event.button != 1 )return; event.preventDefault(); event.stopPropagation(); //........ var sel = content.getSelection().toString(); var str =(!!sel) ? sel : readFromClipboard(); //Убираем пробелы с обоих концов текста. var str = str.replace(/^\s+|\s+$/g,""); //... gFindBar._findField.value = str; Find(event); }, true); //переключить кнопку 'Highlight'......... gFindBar._findField.addEventListener("dblclick", function(event){ if ( event.button != 0 )return; event.preventDefault(); event.stopPropagation() //.... if (!custombuttons.getPrefs("FindBar.mini")) return; if (custombuttons.getPrefs("FindBar.Highlight")) return; //Запускаем функцию toggleHighlight toggleHighlight(event); //Findbar, убрать фокус(Findbar, hide focus) _content.focus(); }, false); })(); //FindBar, автоматически закрыть(autohide Findbar)................................. //Стоп, при открытии настройки панелей(stop, if onDestroy) if (window.ToggleFindRun !== 'stop')(function () { function go() { gFindBar.close(); } function on() { if (!custombuttons.getPrefs("FindBar.auto_Close")) return; if (gFindBar.hidden) return; if (window.ACRun == 'stop') return; window.ACRun = 'stop'; timeoutId = setTimeout(go, custombuttons.getPrefs("FindBar.CloseTimer") + '000') gFindBar.addEventListener('mouseover',off, false); gFindBar.addEventListener("DOMAttrModified", Modoff, false); } function Modoff() { if (!gFindBar.hidden){ off(); } }; function off() { window.ACRun = ''; gFindBar.removeEventListener('mouseover',Modoff, false); gFindBar.removeEventListener("DOMAttrModified", off, false); clearTimeout(timeoutId); } gBrowser.addEventListener('mouseover',on, false); })(); //FindBar, сочетания клавиш(Key config)......................................................... //Стоп, при открытии настройки панелей(stop, if onDestroy) if (window.ToggleFindRun !== 'stop')(function () { window.addEventListener('keydown', function (event){ //FindBar(ctrl+ F)показать - скрыть(Toggle Find Bar)......... if ((event.ctrlKey)&&(!event.altKey)&&(event.keyCode==70)) { event.preventDefault(); event.stopPropagation(); //переключить 'Поиск на странице' gFindBar.hidden ? gFindBar.onFindCommand() : gFindBar.close(); Find(event); gFindBar._findField.focus(); } //Findbar(ctrl+ALT+F), поиск по странице из буфера обмена(find from clipboard)............. if ((event.ctrlKey)&&(event.altKey)&&(event.keyCode==70)) { gFindBar.hidden ? gFindBar.onFindCommand() : gFindBar.close(); goDoCommand("cmd_selectNone"); goDoCommand("cmd_paste"); Find(event); } //Findbar(ctrl+ALT+H), FindBar, вести слова для выделение(set Highlight words)... if ((event.ctrlKey)&&(event.altKey)&&(event.keyCode==72)) { //Запускаем функцию HighlightAdd(run HighlightAdd) HighlightAdd(event); } }, false); })(); //переключить кнопку 'Highlight'(toggle Highlight)............................................ function toggleHighlight(event) { var highlightBtn = document.getElementById('FindToolbar').getElement('highlight'); //... if (!highlightBtn.checked) { highlightBtn.setAttribute("checked", "true"); gFindBar._highlightDoc(true, gFindBar._findField.value); //.. gFindBar._findField.style.color = prefs.getCharPref("ui.textHighlightBackground"); } else { highlightBtn.removeAttribute("checked"); gFindBar._highlightDoc(false); //.. gFindBar._findField.style.color = "black"; } }; //Автоматически выделить заранее введенные слова (auto Highlight words permanent).................................................... Highlight = function(event) { //устанавливаем флаги... var m = true; if (event =='[object UIEvent]'){var m = false}; if (event =='[object DragEvent]'){var m = false}; if (event =='[object MouseEvent]'){var m = false}; //hide Highlight gFindBar._highlightDoc(false); //.... var highlightBtn = document.getElementById('FindToolbar').getElement('highlight'); var FBNum = custombuttons.getPrefs("FindBar.AutohighlightNum"); var FBvalue = gFindBar._findField.value; //.... if (!gFindBar.hidden) { //... if (!highlightBtn.checked) { gFindBar._findField.style.color = "black"; } //Findbar, удалить атрибут 'red'(Findbar, remove attribute 'red').............. if (FBvalue.length == '0') { var findToolbar = document.getElementById("FindToolbar"); findToolbar.removeAttribute("red"); } //FindBar, auto find if (m) { //Findbar, фокус(Findbar, focus) gFindBar._findField.focus(); gFindBar.onFindCommand(); //Findbar, убрать фокус(Findbar, hide focus) _content.focus(); } } //auto Highlight if (custombuttonsUtils.getPrefs("FindBar.Highlight")) { if (gFindBar.hidden) { //getting prefs Unicode value var value = prefs.getComplexValue("FindBar.Highlight.value", Components.interfaces.nsISupportsString).data; } if (!gFindBar.hidden) { var value =(FBvalue.length > FBNum)? FBvalue : "??????"; } //Highlight gFindBar._highlightDoc(true, value); } }; if (window.ToggleFindRun !== 'stop') (function () { //добавляем обработчики..... //обработчики для табов.. gBrowser.tabContainer.addEventListener("TabSelect", Highlight, false); gBrowser.addEventListener("DOMContentLoaded", function(event){ //фылтр.... //стоп, если открыть новые таби if (event.target.location.href !== getBrowser().currentURI.spec) return; //стоп, если срабатывает на фрейме var document = event.originalTarget; if (document instanceof HTMLDocument && this.contentWindow.document !== document) return; Highlight(event)}, false); //обработчики для FindBar.. gFindBar._findField.addEventListener("input", Highlight, false); gFindBar._findField.setAttribute("ondrop","event.stopPropagation(); Find(event); "); gFindBar.addEventListener("DOMAttrModified", function(event){ if (!gFindBar.hidden) return; Highlight(event)}, false); })(); //FindBar. контекстного меню (context Menu)....................................... (function contextFindWords(){ // выходим, если функция уже выполнялась if (document.getElementById("contextFindWords")) return; const kXULNS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"; var contextMenu = document.getElementById("contentAreaContextMenu"); var separator = document.getElementById("context-sep-properties"); var eventTarget = null; var menu = document.createElementNS(kXULNS, "menu"); menu.id = "contextFindWords"; menu.setAttribute("label", "Find"); menu.hidden = true; contextMenu.insertBefore(menu, separator); var menuPopup = document.createElementNS(kXULNS, "menupopup"); menu.appendChild(menuPopup); var lst = [ { label:"Найти на странице", command:ContexFind }, { label:"Поиск по сайту(google)", command:Search }, { label:"Выделить текст на странице", command:HighlightSel }, { label:"Автовыделение, добавить текст", command:addSel } ]; for(var i = 0, m; m = lst[i]; i++){ var menuItem = document.createElementNS(kXULNS, "menuitem"); menuItem.setAttribute("label", m.label); menuItem.setAttribute("type", "m.radio"); if ("accesskey" in m) menuItem.setAttribute("accesskey", m.accesskey); menuItem.addEventListener("command", m.command, false); menuItem.id = "context-Find-Words-" + m.label.toString(); menuPopup.appendChild(menuItem); } var contextFind = document.getElementById("contextFindWords") contextMenu.addEventListener("popupshowing", setMenuDisplay, false); function setMenuDisplay(aEvent) { if (gContextMenu.isTextSelected) { if (custombuttons.getPrefs("FindBar.contextFindWords")) { contextFind.hidden = false; } else { contextFind.hidden = true; } } } function ContexFind(){ gFindBar.onFindCommand(); //Запускаем функцию Find Find(event); } function Search(){ var focusedWindow = document. commandDispatcher. focusedWindow; var text = focusedWindow. getSelection (). toString (); var doc = getBrowser (). contentDocument; try { var url = doc. location. hostname; } catch(e) { var url = ""; } text = escape (convertFromUnicode ("UTF-8", text)); url = encodeURIComponent (url); var searchUrl = "http://www.google.com/search?as_q=" + text + "&as_sitesearch=" + url; gBrowser.selectedTab = gBrowser.addTab(searchUrl); } function HighlightSel(){ gFindBar.toggleHighlight(false); var text = document.commandDispatcher.focusedWindow.getSelection(); gFindBar._highlightDoc(true, text); goDoCommand("cmd_selectNone"); } function addSel(){ //Запускаем функцию HighlightAdd HighlightAdd(event); } })(); //Найти на странице.................................................... Find = function(event){ if (custombuttons.getPrefs("FindBar.Highlight")){Highlight(event)}; if (!gFindBar.hidden) gFindBar.onFindAgainCommand(event.detail = 0); }; //Очистить поле текстового ввода на Findbar.................................................. function findFieldClear(event){ gFindBar._findField.reset(); gFindBar.onFindAgainCommand(false); //.... var findToolbar = document.getElementById("FindToolbar"); findToolbar.removeAttribute("red"); //... gFindBar._findField.focus(); //.... gFindBar._highlightDoc(false); }; //Добавить текст(выделенный / из буфера обмена) для автовыделения....................................... function HighlightAdd(event){ //Копируем выделенный текст в буфер document.getElementById("cmd_copy").doCommand(); // Get the root branch var prefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch); //setting Unicode value var str = Components.classes["@mozilla.org/supports-string;1"].createInstance(Components.interfaces.nsISupportsString); //читаем из буфера обмена и добавляем текст для автовыделения в 'about:config' str.data = readFromClipboard(); prefs.setComplexValue("FindBar.Highlight.value", Components.interfaces.nsISupportsString, str); //всплывающая подсказка custombuttons.alertSlide(AutoHighlight, str.data); //... goDoCommand("cmd_selectNone"); //Запускаем функцию Highlight(run Highlight) Highlight(event); }; //Поле текстового ввода на Findbar мигает желтим............................ function fflash(event){ var findToolbar = document.getElementById("FindToolbar"); //Следим за иконкой статуса на FindBar var findstatus = gFindBar.getElement("find-status-icon"); findstatus.addEventListener("DOMAttrModified",function(e){ if(findstatus.getAttribute("status")=="wrapped") { findToolbar.setAttribute("flash", "true"); setTimeout(function() {findToolbar.removeAttribute("flash");}, 700)}; }, false)}; //Запускаем функции fflash, fmini(Run the function fflash) document.addEventListener( "DOMContentLoaded", fflash(event), false); //Создать кнопку "Clear" на Findbar......................................................... var ubc=document.getAnonymousElementByAttribute( gFindBar, "anonid", "findbar-textbox"); var btn=document.createElementNS("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul", "toolbarbutton"); btn.setAttribute("id", "ClearButton"); btn.setAttribute("tooltiptext", "L = Очистить поле текстового ввода"); ubc.parentNode.insertBefore(btn, ubc.nextSibling); btn.addEventListener("click", function(event) { if ( event.button != 0 ) return; //Запускаем функцию findFieldClear findFieldClear(event); }, false); // FindToolbar стиль(style)....................................................................... (function(css) { var pi = document.createProcessingInstruction( 'xml-stylesheet', 'type="text/css" href="data:text/css;utf-8,' + encodeURIComponent(css) + '"' ); return document.insertBefore(pi, document.documentElement); } )(<![CDATA[ @namespace url(http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul); /*Find Toolbar.................*/ #FindToolbar { border-bottom: 1px solid grey !important; } #FindToolbar > .findbar-container > * { display: -moz-box !important; } #FindToolbar > hbox > label{-moz-appearance: none !important;font-weight: bold !important;} #find-field,.findbar-textbox{width: 250px !important;} #FindToolbar .findbar-find-fast.findbar-find-status, #FindToolbar .findbar-container>image, #FindToolbar[autohide] .findbar-closebutton {display: none !important;} #FindToolbar[red="true"] .findbar-textbox{box-shadow: 0 0 0 1em #f66 inset;} #FindToolbar:not([red="true"]) .findbar-textbox[status="notfound"]{ background: rgba(207,219,236,0.99) !important; color: black !important; box-shadow: none !important;} /*Find Toolbar, mini......................................... */ #FindToolbar[mini="true"] .findbar-textbox{ width: 16em !important; height:21px!important; padding-right: 20px !important; margin-right: 2px!important; margin-left:-4px!important} #FindToolbar[mini] { position: fixed; right: 18px; background: menu !important; box-shadow: 0px 10px 5px -10px rgba(0,0,0,.3) !important; border: 1px solid grey !important; border-top: 0 !important; border-radius: 0 0 8px 8px !important;} #FindToolbar[mini="true"] .findbar-container>checkbox{ margin-left:-24px !important; margin-right: -3px !important} #FindToolbar[mini] toolbarspacer, #FindToolbar[mini="true"] label[class="checkbox-label"], #FindToolbar[mini="true"] toolbarbutton.findbar-find-next, #FindToolbar[mini="true"] toolbarbutton.findbar-find-previous, #FindToolbar[mini="true"] .findbar-highlight label, #FindToolbar[mini="true"] .findbar-closebutton, #FindToolbar:not([ClearButton="true"]) #ClearButton, #FindToolbar[mini="true"] .findbar-find-fast[anonid="find-label"], #FindToolbar[mini="true"] .findbar-find-fast[anonid="match-case-status"] { display: none !important;} #FindToolbar[mini] .findbar-highlight, #FindToolbar[mini] .findbar-highlight[checked] { list-style-image: url("data:image/gif;base64,R0lGODlhEAAQAMQWAJmZzJlmzGZmzGZm/2aZ/5mZ/5nM/8zM/8z//5mZmWZmmf///8yZzMzMmZlmmZmZM8zMM8zMZsz/ZsyZZpmZZmZmM////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAHoAxYALAAAAAAQABAAAAVsoCUCgQCIaCoKA1G4p7q6RmEXcQoMxYEYQEMOJSAYEL+D8jC0CG6GJTKhUtiAPiSCmlK4er7FgiGzWLGIBUJRZliVCLMi0Sg7FHhq4gGJlFUNEBIQE38pExGDFIYoFIkQi4wWjhEVkiIUFQohADs=") !important; -moz-image-region: auto !important;} #FindToolbar[mini] .findbar-highlight[disabled] { filter: url("chrome://mozapps/skin/extensions/extensions.svg#greyscale") !important; } #ClearButton{ list-style-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAFgSURBVHjaYv7//z/j69evWR8+fMj19etXHgYGBhjmxoK5gJhDTEyMOT4+/v+pU6f+AwQQM1Azy5o1a/hevXolC5RUAmIFIJYHYlksWBKIhYEWsQEt/PXgwYPfAAHEADQNZKr21KlTD7x8+fLbfwIApAakFqQHpBcggIA0gwAQOxKjGdkQkB6QXoAAYgISzCC/AU3jZMADTExMwBgEoGpBLmcGCCCQAYxQQ/BqxgJAehgBAogJymEkUTNcD0AAMZFhMwoACCAmSjSDAEAAMTGQAM6cOYMhBhBAMAP+o9uelpZGSDNYD0AAgQJCGIgtgNG7BZvmWbNmYRgG4jMyMvoAmScAAogFSPwF4m/ApPwdlhZAmpAVo2sGqQXpAekFCCCKkzJAADFmZWXBMpMUUFAUmsJYcITjH6jNr4Gan4WEhHwCCCAGUHYGGsIKFABlYSGoIWI4MEhOCKQWpAekFyDAAO0k7MPVi8ODAAAAAElF") !important; -moz-image-region: auto !important; margin-right: 1px!important;} #FindToolbar[mini="true"] textbox.findbar-textbox{ -moz-box-ordinal-group: 2 !important} #FindToolbar[mini="true"] checkbox{ -moz-box-ordinal-group: 3 !important;} #FindToolbar[mini="true"] toolbarbutton.findbar-highlight{ -moz-box-ordinal-group: 4 !important;} #FindToolbar[mini="true"] #ClearButton{ -moz-box-ordinal-group: 4 !important;} #FindToolbar[mini="true"] .findbar-closebutton{ -moz-box-ordinal-group: 7 !important;} ]]>.toString()); //устанавливаем флаг window.ToggleFindRun = 'stop'; |
iDev.Pi > 21-03-2012 23:26:08 |
bunda1 пишет
Подтверждаю. к неактивной кнопке, так лучше выглядит. |
bunda1 > 21-03-2012 23:35:38 |
iDev.Pi пишет
Нет, на кнопке можно нажимать СКМ, а прозрачная кнопка водит в заблуждение. |
iDev.Pi > 21-03-2012 23:45:30 |
Я пожалуй сформулирую ещё один баг, хотя ты, скорей всего, не согласишься со мной, что это баг: Твоя кнопка всегда выполняет действие "найти", т.е. совсем всегда, даже когда пользователь этого не ожидает. Случай 2. iDev.Pi пишет
21-03-2012 23:47:02 bunda1 пишет
так она неактивна только тогда, когда в поисковую форму ничего не вписано, а значит СКМ можно кликать прям на эту текстовую форму. |
bunda1 > 22-03-2012 00:01:33 |
iDev.Pi пишет
Это же галимый баг, но у меня не наблюдается. iDev.Pi пишет
Так задумано но я попробую исправить. iDev.Pi пишет
Как дабавыть рамку к неактывной? |
iDev.Pi > 22-03-2012 00:37:52 |
bunda1 пишет
так у неактивной не должно быть рамки. Я даже не знаю код для добавления рамки, т.к. он где-то внутри лисы прописан. В ДОМи глянул - между состояниями обычным и :hover - разница лишь в цвете рамки (в обычном состоянии - она прозрачная). Попробовал выставить ей цвет через stylish - никакого результата. То ли рестарт просто нужен, то ли - я даже не знаю в чём дело. |
bunda1 > 22-03-2012 20:22:36 |
iDev.Pi пишет
У меня не наблюдается, нужен пример. |
iDev.Pi > 22-03-2012 20:52:57 |
bunda1 |
bunda1 > 22-03-2012 21:07:40 |
iDev.Pi попробую исправить. |
bunda1 > 23-03-2012 03:27:26 |
iDev.Pi пишет
iDev.Pi пишет
Я исправил. скрытый текст Выделить код Код://настройка функций кликов мыши(Mouse Click settings)................................................... this.onclick = function(event) { if(event.button == 0) { // Действие при клике ЛКМ gFindBar.hidden ? gFindBar.onFindCommand() : gFindBar.close(); Find(event); } else if(event.button == 1) { // Действие при клике СКМ gFindBar.hidden ? gFindBar.onFindCommand() : gFindBar.close();с goDoCommand("cmd_selectNone"); goDoCommand("cmd_paste"); } }; //Объявляем ..... var prefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService); var clipboard = Components.classes["@mozilla.org/widget/clipboardhelper;1"]. getService(Components.interfaces.nsIClipboardHelper); var this_ = this; var AutoHighlight ='Автоматически подсвечивать найденное' var AutoClose ='Автоматически закрыть' var CloseTimer ='Закрыть через ' var ClearPref ='Сбросить текст' //подсказка............................................................................. this.showTFinfo = function() { //getting prefs Unicode value var prefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService); var Val = "\n\n"+ AutoHighlight +": "+ prefs.getComplexValue("FindBar.Highlight.value",Components.interfaces.nsISupportsString).data; //обрезать подсказку для "Автовыделение" var HValue = Val.substring(0,50); var HDots =(Val.length > 50) ? '....' : ""; //.... this.tooltipText = "Поиск по странице" +"\n" + "Л: Показать - скрыть поиск по странице" +"\n" +"С: Поиск по странице из буфера обмена" +"\n"+ "П: Mеню + CB меню" + HValue + HDots; } this.setAttribute("onmouseover", "this.showTFinfo()"); //справка(Help) //this.setAttribute("Help", "event.stopPropagation(); gBrowser.selectedTab = gBrowser.addTab('https://forum.mozilla-russia.org/viewtopic.php?pid=550855#p550855]09-03-2012 19:18:31')"); //проверить наличие строк в about:config и создать если не существует(Add preferences)........................................ if (custombuttons.getPrefs("FindBar.version") !== '8') { prefs.setCharPref("FindBar.version", "8"); prefs.setBoolPref("FindBar.Highlight", true); prefs.setCharPref("FindBar.Highlight.value", "??????"); prefs.setBoolPref("FindBar.autoclear", false); prefs.setBoolPref("FindBar.contextFindWords", true); prefs.setBoolPref("FindBar.ToggleWithDoubleMiddleClick", false); prefs.setCharPref("ui.textHighlightBackground", "#ef0fff");//http://coloria.net/bonus/colornames.htm //prefs.setCharPref("ui.textHighlightForeground", "#000000");//http://coloria.net/bonus/colornames.htm prefs.setBoolPref("FindBar.mini", false); prefs.setBoolPref("FindBar.ClearButton", false); prefs.setBoolPref("FindBar.auto_Close", false); prefs.setCharPref("FindBar.CloseTimer", "7");//7 сек(7 sec) prefs.setCharPref("FindBar.AutohighlightNum", "1"); }; //настройка меню(CB menu settings)................................................... //Объявляем ..... var c ='true'; var n = 'false'; //изменить нужный пункт меню(toggle menuitems) //переключаем настройки в about:config(toggle preference) this.CBlabel = function (mi, id) { //Автоматически закрыть(FB auto close).... if(!id || id == "FBClose") { //переключаем настройки в about:config s = "FindBar.auto_Close"; togglePref(s); //Запускаем функцию autohide if (id) Autohide(event); //изменить нужный пункт меню var cek = (custombuttons.getPrefs(s)? c: n); this.FBCcek = cek; if(mi) mi.cek = cek; }; //FB auto close timer..... if(!id || id == "CloseTimer") { (function () { //Стоп, при инициализации кнопки if (!id) return; s = "FindBar.CloseTimer"; //switch auto close timer+"\n" + var URL = custombuttons.promptBox(AutoClose, CloseTimer+custombuttons.getPrefs(s) + ' секунд', ''); if (URL[0] == false) return; else var timer = [URL[1]]; //переключаем настройки в about:config(toggle preference) prefs.setCharPref(s, timer); })(); //пункт меню(menuitems) var label = CloseTimer + custombuttons.getPrefs("FindBar.CloseTimer") + ' секунд'; this.CloseTimer = label; if(mi) mi.label = label; }; //FindBar.mini...... if(!id || id == "FBmini") { //переключаем настройки в about:config s = "FindBar.mini"; togglePref(s); //Запускаем функцию fmini(run fmini) if (id) fmini(event); //изменить нужный пункт меню var cek = (custombuttons.getPrefs(s)? c : n); this.FBcek = cek; if(mi) mi.cek = cek; }; //Кнопка 'очистить'...... if(!id || id == "FBbutt") { //переключаем настройки в about:config s = "FindBar.ClearButton"; togglePref(s); //Запускаем функции ClearButton и fmini(run ClearButton, fmini) if (id) ClearButton(event); if (id) fmini(event); //изменить нужный пункт меню var cek = (custombuttons.getPrefs(s)? c : n); this.FCBcek = cek; if(mi) mi.cek = cek; }; //Find в контекстном меню(Find in the context menu)..... if(!id || id == "FindInMenu") { // переключаем настройки в about:config s = "FindBar.contextFindWords"; togglePref(s); //изменить нужный пункт меню var cek = (custombuttons.getPrefs(s)? c : n); this.FIMcek = cek; if(mi) mi.cek = cek; }; //Автоматически очищать поле текстового ввода на Findbar..... if(!id || id == "autoClear") { // переключаем настройки в about:config s = "FindBar.autoclear"; togglePref(s); //Очищистить поле текстового ввода если Findbar закрыт. if (gFindBar.hidden && custombuttons.getPrefs("FindBar.autoclear")) gFindBar._findField.reset(); //изменить нужный пункт меню var cek = (custombuttons.getPrefs(s)? c : n); this.aCcek = cek; if(mi) mi.cek = cek; }; //Переключить двойным средним кликом(Toggle with double middle click)..... if(!id || id == "MiddleClick") { // переключаем настройки в about:config s = "FindBar.ToggleWithDoubleMiddleClick"; togglePref(s); //изменить нужный пункт меню var cek = (custombuttons.getPrefs(s)? c : n); this.MCcek = cek; if(mi) mi.cek = cek; }; //Автовыделение(Switch, Auto Highlight)..... if(!id || id == "SwitchHighlight") { // переключаем настройки в about:config s = "FindBar.Highlight"; togglePref(s); //Изменить иконку кнопки if (id) ToggleImage(event); //переключить кнопку 'Highlight'(toggle Highlight) if (id) document.getElementById('FindToolbar').getElement('highlight').removeAttribute("checked"); //Запускаем функцию Highlight(run function Highlight) if (id) Highlight(event); //изменить нужный пункт меню(toggle menuitems) var cek = (custombuttons.getPrefs(s)? c : n); this.aHcek = cek; if(mi) mi.cek = cek; }; //Изменить цвет для Автовыделение..... if(!id || id == "addColor") { (function () { //Стоп, при инициализации кнопки if (!id) return; //создаем модальное окно для ввода цвета var URL = custombuttons.promptBox('Изменить цвет для Автовыделение', 'По умолчанию: #ef0fff', ''); if (URL[0] == false) return; else var color = [URL[1]]; //переключаем настройки в about:config(toggle preference) prefs.setCharPref("ui.textHighlightBackground", color); })(); //пункт меню(menuitems) var label = 'Изменить цвет' + ': ' + custombuttons.getPrefs("ui.textHighlightBackground"); this.addColor = label; if(mi) mi.label = label; }; //Автовыделение, добавить текст....... if(!id || id == "AddText") { //Запускаем функцию HighlightAdd(run function HighlightAdd) if (id) HighlightAdd(event); }; //Автовыделение, сбросить ..... if(!id || id == "Clear") { //сбросить настройки в about:config if (id) prefs.setCharPref("FindBar.Highlight.value", ""); //Запускаем функцию Highlight(run function Highlight) if (id) Highlight(event); //всплывающая подсказка if (id) custombuttons.alertSlide(ClearPref,'????'); }; //переключаем настройки в about:config(toggle preference).... function togglePref(s){ //Стоп, при инициализации кнопки if (!id) return; //переключаем настройки custombuttons.setPrefs(s, !custombuttons.getPrefs(s)); } }; //Запускаем функцию CBlabel(run CBlabel)......... this.CBlabel(); //пункти меню(Our menu items) .... this.ss = [ { cek: this.FBCcek, label: AutoClose, cmd: 'document.popupNode.CBlabel(this, "FBClose")', sItemId: '', type:'checkbox'}, { label: this.CloseTimer, cmd: 'document.popupNode.CBlabel(this, "CloseTimer")', sItemId: ''}, { label: "separator", sItemId: ''}, { cek: this.FBcek, label: 'FindBar мини', cmd: 'document.popupNode.CBlabel(this, "FBmini")', sItemId: '', type:'checkbox'}, { cek: this.FCBcek, label: 'Кнопка "очистить" на FindBar', cmd: 'document.popupNode.CBlabel(this, "FBbutt")', sItemId: '', type:'checkbox'}, { label: "separator", sItemId: ''}, { cek: this.FIMcek, label: 'Find в контекстном меню', cmd: 'document.popupNode.CBlabel(this, "FindInMenu")', sItemId:'', type:'checkbox'}, { cek: this.aCcek, label: 'Очищать поисковую форму', cmd: 'document.popupNode.CBlabel(this, "autoClear")', sItemId:'', type:'checkbox'}, { cek: this.MCcek, label: 'Переключать двойным средним кликом', cmd: 'document.popupNode.CBlabel(this, "MiddleClick")', sItemId:'', type:'checkbox'}, { label: "separator", sItemId: ''}, { cek: this.aHcek, label: AutoHighlight, cmd: 'document.popupNode.CBlabel(this, "SwitchHighlight")', sItemId: '', type:'checkbox'}, { label: this.addColor, cmd: 'document.popupNode.CBlabel(this, "addColor")', sItemId: ''}, { label: 'Добавить текст', cmd: 'document.popupNode.CBlabel(this, "AddText")', sItemId: ''}, { label: ClearPref, cmd: 'document.popupNode.CBlabel(this, "Clear")', sItemId: ''}]; // Our Initialization function for creating the context menu, setting up menuitems and telling var Cb = custombuttons; this.mObj = Cb.getCbContextObj(this); this.init = function(x) { x.mObj.setSub(); var nItem = {}, mItem = {}; document.getElementById(CB2const.sCBCtxtMenu).setAttribute("oncommand", "event.stopPropagation()"); for(var i in x.ss) { nItem = new x.mObj.getItem(); nItem.id = 'Note'; nItem.label = x.ss[i].label; if (nItem.label == "separator") { nItem = document.createElement("menuseparator"); } nItem.value = String(i); mItem = x.mObj.insertBefore(nItem , x.mObj.oMenu.lastChild); this.ss[i].sItemId = mItem.id; mItem.setAttribute('oncommand',x.ss[i].cmd); if("type" in x.ss[i]) mItem.setAttribute('type', x.ss[i].type); mItem.setAttribute('checked', x.ss[i].cek) mItem.setAttribute( 'autocheck',true) } x.mObj.getItem(); nItem = x.mObj.getItem(); nItem.id = 'Note'; this.separator = x.mObj.insertBefore( nItem , x.mObj.oMenu.lastChild); } this.init(this); //Стоп, при открытии настройки панелей.................................................... if (window.ToggleFindRun == 'stop') return; //Findbar, переклучить атрибут 'mini'(Findbar, set and remove attribute 'mini')........... //Findbar, установить и удалить 'hits'(Findbar, set and remove 'hits')........... function fmini(event){ //FindBar, auto find if (!gFindBar.hidden) { //Find gFindBar.onFindCommand(); } var findToolbar = document.getElementById("FindToolbar"); var HighBut = document.getAnonymousElementByAttribute( gFindBar, "anonid", "highlight"); if (custombuttons.getPrefs("FindBar.mini")) { //... var highlightBtn = document.getElementById('FindToolbar').getElement('highlight'); if (highlightBtn.checked) { gFindBar._findField.style.color = prefs.getCharPref("ui.textHighlightBackground"); highlightBtn.removeAttribute("checked"); }; findToolbar.setAttribute("mini", "true"); this.hits = ' '; var Rtext = custombuttons.getPrefs("FindBar.ClearButton") ? "Искать предыдущее" : "Очистить поле текстового ввода"; var text = "L = Искать следущее"+"\n" +"M = Поиск выделенного текста/из буфера" + "\n" + "R = " + Rtext; HighBut.setAttribute("tooltiptext", text ); } else { var highlightBtn = document.getElementById('FindToolbar').getElement('highlight'); findToolbar.removeAttribute("mini") this.hits = ' hits'; HighBut.setAttribute("tooltiptext", "Highlight"); //... if (!!gFindBar._findField.style.color) { highlightBtn.setAttribute("checked", "true"); gFindBar._findField.removeAttribute("style"); } } //Findbar, убрать фокус(Findbar, hide focus) _content.focus(); }; //Findbar, переклучить атрибут 'autohide'...... function Autohide(event){ var f = document.getElementById("FindToolbar"); custombuttons.getPrefs("FindBar.auto_Close") ? f.setAttribute("autohide", "true") : f.removeAttribute("autohide"); }; //Findbar, переклучить атрибут 'ClearButton'...... function ClearButton(event){ var ft = document.getElementById("FindToolbar"); custombuttons.getPrefs("FindBar.ClearButton") ? ft.setAttribute("ClearButton", "true") : ft.removeAttribute("ClearButton"); }; //Запускаем функции fmini(Run the function fmini) setTimeout(function() {fmini(event);Autohide(event);ClearButton(event);}, 200) //Изменить иконку кнопки................................................................. function ToggleImage(event){ // toggle button image if (custombuttonsUtils.getPrefs("FindBar.Highlight")) { this_.image="data:image/x-icon;base64,AAABAAEAExMAAAEAIAAYBgAAFgAAACgAAAATAAAAJgAAAAEAIAAAAAAA8AUAAAAAAAAAAAAAAAAAAAAAAAAAAAICAAAAADoHVOdAAWH/PQBd/TwAXP9AAWL/PwBf/z0AXv85AFn/MgBN/zEAS/85AFn/QgFj/zsAW/09AV7/OAdR5wAAAAAAAAACAAAAADsFWdtNAnr/TgF+/08Afv9PAH7/TwJ//0wAff9XD4T/azaN/1Emav8yAFD/RQNw/1ABgf9OAH3/TgB+/00Dev87BVnbAAAAADwIVudRAYH9VACK/1UEiv9UAYn/VACJ/1cEi/9MAIP/dzeh/+TV8P+olrH/LQBK/0sDdf9VAYj/VACJ/1QAif9UAIr/TwB9/ToHU+dEAWj/WAiM/loIkf9ZCZD/WQiP/1kIj/9dDJH/UQCI/4JAqf/68v//t6m+/zAAUP9OB3v/VwaM/1kIj/9ZCI//WgiR/1YIjP5DAmX/RQFo/V0Jlf9eB5r/XgiX/2AJnP9fCZn/Yw6b/1gAlP+DRq3/+PH+/7qsw/81AFr/UQmC/1wGlv9fCJn/XwiX/2AJmv9dCJb/RABp/UYDbf9eCJz/ZAih/2AIn/9jCaD/Ywqf/2QLnf9HAIP/aTKT/+fb8P+unLv/KABO/0gLc/9XC4r/XwmZ/18Lnv9hCaD/Xgic/0YDbv9IBnD/Yg2i/2cNqP9kDaX/Zg+n/2MHo/9dC5X/dT2Z/7ScxP/4+fv/0sbb/2g9hv9DC2n/RAVu/1QHif9hCKD/ZQuo/2INov9IBnD/SwVz/2YMqv9pDrD/aA+u/2kOrv9sGqf/p4HF/+Db5//Zy+X/yq7g/97O6//g2Oj/nH20/0sYdP9GCHT/XgeY/2gSrf9mDKr/SgVz/0oHd/9rELD/bA62/20QtP9jAa3/q3/O/+DY5/+vjsj/fziz/3wpuv+MRcT/wpvi/+jb8v+Ze7P/OABn/1MJiv9mEK7/aw+x/0oHd/9MCXz/cRW5/34nw/+AK8L/ikLE/+nZ9f+3o8b/YyKU/24Xr/9/J8T/dRy9/4Mzwv/TtOz/4Nfp/2M0if9cHYz/dSK3/3IYuP9MCXz/Twl+/4Arxf+SRdP/kEPQ/7eL4P/j1e7/hWSi/2kxmv+TT8r/lU/T/5VR0f+NQc3/sX3g/+PX7v+Vdqz/aDCU/4tCx/9/LcP/Twh+/1QSgf+QQtD/mkva/5JA1f+7i+X/2Mbp/4Bdnv9fKI3/hEG9/5NH1P+WS9j/jUHR/6t12//Yx+X/lHau/2svnv+US9P/j0HP/1QSgv9dIIn/lEbW/5tM3/+VRNv/s3zl/+7h+v+fgLn/WCeG/2w3nf+LR8P/kUXP/4I5wP+xitX/4dnp/49or/+BO7n/mUzc/5VG1v9cIIn/XyGM/5ZL2/+cUOX/mk/i/59V4//n0vv/2Mnl/4Zfqv9dL4v/ZCyV/3I3pf+NZLX/08ff/9fJ5f+CR7f/lUvV/51P5P+WS9v/XiGL/14gi/2aTeH/oVHr/6BR6P+bR+n/vIPu/+zb+v/h0ez/qYjD/4hjqP+ehLb/2dDi/+TX8P+pd9T/j0PV/55R5v+iUu3/mk3h/14gi/1kJZL/nU/n/qNU8v+gU+//pVbv/6FQ7/+3evH/3MP3//Pp/f/47///9ez//9vA9v+uceX/m0vj/6NU7v+iU+//plXy/5xP6P5iJJH/Wyt+55pR3/2mWPj/pVj3/6RY9/+nWvb/pVX1/6db9v+sZvf/rWn2/6xm9/+oXPb/pVb3/6ZZ+P+kWPf/plf3/6ZX+P+ZUN79Wyt+5wAAAABzQJ3bn1Ln/6JU9P+hV/X/oVb0/6NV9P+iV/X/olb1/6JV9P+iVfT/o1X0/6NW9P+iVfT/olX0/6NU9P+eUub/bj2W2wAAAAACAAICAAAAAGo9jeeBRa//fEOs/XxErf98RK3/fESt/3xErf98RK3/fESt/3xErf98RK3/fESt/3tDrP19RKv/az6K5wAAAAACAAICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=="; } else { this_.image="data:image/x-icon;base64,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"; } }; ToggleImage(event); //find bar сверху (move find bar to the top)................................................ XPCOMUtils.defineLazyGetter(window, "gFindBar", function() { let XULNS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"; let findbar = document.createElementNS(XULNS, "findbar"); findbar.setAttribute("browserid", "content"); findbar.id = "FindToolbar"; gBrowser.parentNode.insertBefore(findbar, gBrowser); // Force a style flush to ensure that our binding is attached. findbar.clientTop; window.gFindBarInitialized = true; return findbar; }); //find bar, показать количество совпадений(find bar,show the number of matches)...@author slimx................. (function() { //add label to findbar var status = document.getAnonymousElementByAttribute(gFindBar, 'anonid', 'match-case-status'); var sep = document.createElement("toolbarspacer"); var count = document.createElement("label"); count.hidden = true; status.parentNode.insertBefore(sep, status); status.parentNode.insertBefore(count, status);//findbar-container gFindBar.__proto__._foundMatches = count; gFindBar.__proto__._updateMatchesCount = function(aRes) { if (!this._updateMatchCountTimeout) window.clearTimeout(this._updateMatchCountTimeout); this._updateMatchCountTimeout = window.setTimeout(function(aRes, aSelf) { aSelf._updateMatchesCountWorker(aRes); }, 0, aRes, this); } gFindBar.__proto__._updateMatchesCountWorker = function(aRes) { var word = this._findField.value; if (aRes == this.nsITypeAheadFind.FIND_NOTFOUND || !word) { this._foundMatches.hidden = true; this._foundMatches.value = ""; } else { var matchesCount = this._countMatches(word).toString(); if (matchesCount != "0") { if (matchesCount == "1") this._foundMatches.value = matchesCount + hits; else if (matchesCount == "-1") { var matchLimit = 100; this._foundMatches.value = " \>"+ matchLimit + hits; // var key = (matchLimit > 1000) ? "Decrease" : "Increase"; } else this._foundMatches.value = matchesCount + hits; this._foundMatches.hidden = false; //Findbar, удалить атрибут 'red'(Findbar, remove attribute 'red').............. var findToolbar = document.getElementById("FindToolbar"); findToolbar.removeAttribute("red"); } else { this._foundMatches.hidden = true; this._foundMatches.value = ""; //Findbar, установить атрибут 'red'(Findbar, set attribute 'red')............... var findToolbar = document.getElementById("FindToolbar"); findToolbar.setAttribute("red", "true"); } window.clearTimeout(this._updateMatchCountTimeout); } } gFindBar.__proto__._countMatches = function(aWord, aWindow) { var win = aWindow || this.browser.contentWindow; var countFound = 0; for (var i = 0, count; win.frames && i < win.frames.length; i++) { if ((count = this._countMatches(aWord, win.frames[i])) != -1) countFound += count; else return count; } var doc = win.document; if (!doc || !(doc instanceof HTMLDocument)) return countFound; var body = doc.body; var count = body.childNodes.length; var searchRange = doc.createRange(); var startPt = doc.createRange(); var endPt = doc.createRange(); searchRange.setStart(body, 0); searchRange.setEnd(body, count); startPt.setStart(body, 0); startPt.setEnd(body, 0); endPt.setStart(body, count); endPt.setEnd(body, count); var retRange = null; var finder = Components.classes["@mozilla.org/embedcomp/rangefind;1"] .createInstance() .QueryInterface(Components.interfaces.nsIFind); finder.caseSensitive = this._shouldBeCaseSensitive(aWord); var matchLimit = 100; while ((retRange = finder.Find(aWord, searchRange, startPt, endPt))) { if (this._rangeIsVisible(retRange, win)) { if (this._findMode == this.FIND_LINKS) { if (this._rangeStartsInLink(retRange)) ++ countFound; } else ++ countFound; } if (countFound == matchLimit) { countFound = -1; break; } startPt = doc.createRange(); startPt.setStart(retRange.startContainer, retRange.startOffset + 1); } return countFound; } gFindBar.__proto__._rangeIsVisible = function(aRange, aWindow) { var node = aRange.startContainer; if (node.nodeType == node.ELEMENT_NODE) { if (node.hasChildNodes) { var childNode = node.childNodes[aRange.startOffset]; if (childNode) node = childNode; } } while (node && node.nodeType != node.ELEMENT_NODE) node = node.parentNode; // There is no perfect way to check if a node is visible in JavaScript, // so use the best measures we can have if (node) { var style = aWindow.getComputedStyle(node, ""); if (style) { if (style.visibility == "hidden" || style.visibility == "collapse" || style.display == "none") return false; if (style.left != "auto" && style.width != "auto") if (style.left < 0 && style.left + style.width < 0) return false; if (style.top != "auto" && style.height != "auto") if (style.top < 0 && style.top + style.height < 0) return false; } } return true; } gFindBar.__proto__._rangeStartsInLink = function(aRange) { var isInsideLink = false; var node = aRange.startContainer; if (node.nodeType == node.ELEMENT_NODE) { if (node.hasChildNodes) { var childNode = node.childNodes[aRange.startOffset]; if (childNode) node = childNode; } } const XLink_NS = "http://www.w3.org/1999/xlink"; do { if (node instanceof HTMLAnchorElement) { isInsideLink = node.hasAttribute("href");m break; } else if (typeof node.hasAttributeNS == "function" && node.hasAttributeNS(XLink_NS, "href")) { isInsideLink = (node.getAttributeNS(XLink_NS, "type") == "simple"); break; } node = node.parentNode; } while (node); return isInsideLink; } //insert count function to original eval("gFindBar._updateCaseSensitivity=" + gFindBar._updateCaseSensitivity.toString().slice(0, -1) + "this._updateMatchesCount();}"); eval("gFindBar._updateStatusUI=" + gFindBar._updateStatusUI.toString().slice(0, -1) + "this._updateMatchesCount();}"); })(); //FindBar, поиск колесиком мыши(FindBar, Mouse Scroll find )................................................ gFindBar.addEventListener('DOMMouseScroll', function (event){ //Найти (Find) gFindBar.onFindAgainCommand(event.detail < 0); }, false); //переключить 'Поиск на странице' двойным средним кликом на странице(toggle Find Bar, if Double midlle Click in page).......... //добавляем обработчик для обработки нажатие на кнопку мыши на странице....... gBrowser.addEventListener("mouseup", function(event){ //если нажатие на среднюю кнопку мыши if (event.button !== 1) return; //если разрешено в настройках(about:config) if (!custombuttons.getPrefs("FindBar.ToggleWithDoubleMiddleClick")) return; var _this = this; //если установлен флаг if (_this.open){ //переключить 'Поиск на странице' gFindBar.hidden ? gFindBar.onFindCommand() : gFindBar.close(); Find(event); gFindBar._findField.focus(); } //устанавливаем флаг _this.open = true; //сбросить флаг по таймеру this.timer = 0; this.timer = setTimeout(function(){ _this.open = false;}, 600); }, false); //Автоматически очищать поле текстового ввода на Findbar.................................................. gFindBar.addEventListener("DOMAttrModified", function(event){ var _this = this; //устанавливаем флаг if (gFindBar.hidden){_this.clear = true} //... if (!custombuttons.getPrefs("FindBar.autoclear")) reset; if (gFindBar.hidden){gFindBar._findField.reset()} if (!gFindBar.hidden) { //Снять выделенные на странице если флаг - true if (_this.clear){goDoCommand("cmd_selectNone")} //сбросить флаг _this.clear = false; } }, false); //findbar очистить, кликнуть правим кликом на findbar's label-Найти: или на иконку поиска на FindBar mini(FindBar clear findText, right click on findbar's label, else Find button).............. //findbar поиск, кликнуть левым кликом на findbar's label-Найти: или на иконку поиска на FindBar mini(FindBar find, left click on findbar's label, else Find button).............. var FindButt = document.getAnonymousElementByAttribute(gFindBar, "anonid", "find-label"); FindButt.setAttribute("onclick", "event.stopPropagation(); clickFind(event);"); //.... var HighBut = document.getAnonymousElementByAttribute( gFindBar, "anonid", "highlight"); HighBut.addEventListener("click", function(event){ if (custombuttons.getPrefs("FindBar.mini")) { gFindBar.getElement("highlight").removeAttribute("checked"); //....... clickFind(event); } }, true); //..................... clickFind = function(event){ if ( event.button == 0 ) { event.preventDefault(); event.stopPropagation(); if (custombuttons.getPrefs("FindBar.Highlight")){Highlight(event)}; //Искать следующее gFindBar.onFindAgainCommand(false); } else if ( event.button == 2 ) { if (custombuttons.getPrefs("FindBar.Highlight")){Highlight(event)}; //Запускаем функцию findFieldClear или искать предыдущее custombuttons.getPrefs("FindBar.ClearButton") ? gFindBar.onFindAgainCommand(true) : findFieldClear(event); } }; //Поиск по странице из буфера обмена/выделенный текст, если кликнуть средним кликом на findbar или на иконку поиска на FindBar mini ....... //переключить кнопку 'Highlight' двойным левым кликом на на поле текстового ввода на FindBar............ //Стоп, при открытии настройки панелей(stop, if onDestroy) if (window.ToggleFindRun !== 'stop') (function () { //Поиск по странице из буфера обмен gFindBar.addEventListener("click", function(event){ if ( event.button != 1 )return; event.preventDefault(); event.stopPropagation(); //........ var sel = content.getSelection().toString(); var str =(!!sel) ? sel : readFromClipboard(); //Убираем пробелы с обоих концов текста. var str = str.replace(/^\s+|\s+$/g,""); //... gFindBar._findField.value = str; Find(event); }, true); //переключить кнопку 'Highlight'......... gFindBar._findField.addEventListener("dblclick", function(event){ if ( event.button != 0 )return; event.preventDefault(); event.stopPropagation() //.... if (!custombuttons.getPrefs("FindBar.mini")) return; if (custombuttons.getPrefs("FindBar.Highlight")) return; //Запускаем функцию toggleHighlight toggleHighlight(event); //Findbar, убрать фокус(Findbar, hide focus) _content.focus(); }, false); })(); //FindBar, автоматически закрыть(autohide Findbar)................................. //Стоп, при открытии настройки панелей(stop, if onDestroy) if (window.ToggleFindRun !== 'stop') (function () { function go() { gFindBar.close(); window.ACRun = ''; } function on() { if (!custombuttons.getPrefs("FindBar.auto_Close")) return; if (window.ACRun == 'stop') return; window.ACRun = 'stop'; timeoutId = 0; timeoutId = setTimeout(go, custombuttons.getPrefs("FindBar.CloseTimer") + '000') } function off() { if (!custombuttons.getPrefs("FindBar.auto_Close")) return; window.ACRun = ''; clearTimeout(timeoutId); } gFindBar.addEventListener("DOMAttrModified", function(event){if (gFindBar.hidden) off() }, false); addEventListener('mouseover', function(event){ if (!gFindBar.hidden) (event.target.nodeName !== 'findbar')? on(): off() }, false); })(); //FindBar, сочетания клавиш(Key config)......................................................... //Стоп, при открытии настройки панелей(stop, if onDestroy) if (window.ToggleFindRun !== 'stop')(function () { window.addEventListener('keydown', function (event){ //FindBar(ctrl+ F)показать - скрыть(Toggle Find Bar)......... if ((event.ctrlKey)&&(!event.altKey)&&(event.keyCode==70)) { event.preventDefault(); event.stopPropagation(); //переключить 'Поиск на странице' gFindBar.hidden ? gFindBar.onFindCommand() : gFindBar.close(); Find(event); gFindBar._findField.focus(); } //Findbar(ctrl+ALT+F), поиск по странице из буфера обмена(find from clipboard)............. if ((event.ctrlKey)&&(event.altKey)&&(event.keyCode==70)) { gFindBar.hidden ? gFindBar.onFindCommand() : gFindBar.close(); goDoCommand("cmd_selectNone"); goDoCommand("cmd_paste"); Find(event); } //Findbar(ctrl+ALT+H), FindBar, вести слова для выделение(set Highlight words)... if ((event.ctrlKey)&&(event.altKey)&&(event.keyCode==72)) { //Запускаем функцию HighlightAdd(run HighlightAdd) HighlightAdd(event); } }, false); })(); //переключить кнопку 'Highlight'(toggle Highlight)............................................ function toggleHighlight(event) { var highlightBtn = document.getElementById('FindToolbar').getElement('highlight'); //... if (!gFindBar._findField.style.color) { gFindBar._highlightDoc(true, gFindBar._findField.value); gFindBar._findField.style.color = prefs.getCharPref("ui.textHighlightBackground"); } else { gFindBar._highlightDoc(false); gFindBar._findField.removeAttribute("style"); } }; //Автоматически выделить заранее введенные слова (auto Highlight words permanent).................................................... Highlight = function(event) { //устанавливаем флаги... var m = true; if (event =='[object UIEvent]'){var m = false}; if (event =='[object DragEvent]'){var m = false}; if (event =='[object MouseEvent]'){var m = false}; //hide Highlight gFindBar._highlightDoc(false); //.... var FBNum = custombuttons.getPrefs("FindBar.AutohighlightNum"); var FBvalue = gFindBar._findField.value; //.... if (!gFindBar.hidden) { //... if (!!gFindBar._findField.style.color) { gFindBar._findField.removeAttribute("style"); } //Findbar, удалить атрибут 'red'(Findbar, remove attribute 'red').............. if (FBvalue.length == '0') { var findToolbar = document.getElementById("FindToolbar"); findToolbar.removeAttribute("red"); } //FindBar, auto find if (m) { //Findbar, фокус(Findbar, focus) gFindBar._findField.focus(); gFindBar.onFindCommand(); //Findbar, убрать фокус(Findbar, hide focus) _content.focus(); } } //auto Highlight if (custombuttonsUtils.getPrefs("FindBar.Highlight")) { if (gFindBar.hidden) { //getting prefs Unicode value var value = prefs.getComplexValue("FindBar.Highlight.value", Components.interfaces.nsISupportsString).data; } if (!gFindBar.hidden) { var value =(FBvalue.length > FBNum)? FBvalue : "??????"; } //Highlight gFindBar._highlightDoc(true, value); } }; if (window.ToggleFindRun !== 'stop') (function () { //добавляем обработчики..... //обработчики для табов.. gBrowser.tabContainer.addEventListener("TabSelect", Highlight, false); gBrowser.addEventListener("DOMContentLoaded", function(event){ //фылтр.... //стоп, если открыть новые таби if (event.target.location.href !== getBrowser().currentURI.spec) return; //стоп, если срабатывает на фрейме var document = event.originalTarget; if (document instanceof HTMLDocument && this.contentWindow.document !== document) return; Highlight(event)}, false); //обработчики для FindBar.. gFindBar._findField.addEventListener("input", Highlight, false); gFindBar._findField.setAttribute("ondrop","event.stopPropagation(); Find(event); "); gFindBar.addEventListener("DOMAttrModified", function(event){ if (!gFindBar.hidden) return; Highlight(event)}, false); })(); //FindBar. контекстного меню (context Menu)....................................... (function contextFindWords(){ // выходим, если функция уже выполнялась if (document.getElementById("contextFindWords")) return; const kXULNS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"; var contextMenu = document.getElementById("contentAreaContextMenu"); var separator = document.getElementById("context-sep-properties"); var eventTarget = null; var menu = document.createElementNS(kXULNS, "menu"); menu.id = "contextFindWords"; menu.setAttribute("label", "Find"); menu.hidden = true; contextMenu.insertBefore(menu, separator); var menuPopup = document.createElementNS(kXULNS, "menupopup"); menu.appendChild(menuPopup); var lst = [ { label:"Найти на странице", command:ContexFind }, { label:"Поиск по сайту(google)", command:Search }, { label:"Выделить текст на странице", command:HighlightSel }, { label:"Автовыделение, добавить текст", command:addSel } ]; for(var i = 0, m; m = lst[i]; i++){ var menuItem = document.createElementNS(kXULNS, "menuitem"); menuItem.setAttribute("label", m.label); menuItem.setAttribute("type", "m.radio"); if ("accesskey" in m) menuItem.setAttribute("accesskey", m.accesskey); menuItem.addEventListener("command", m.command, false); menuItem.id = "context-Find-Words-" + m.label.toString(); menuPopup.appendChild(menuItem); } var contextFind = document.getElementById("contextFindWords") contextMenu.addEventListener("popupshowing", setMenuDisplay, false); function setMenuDisplay(aEvent) { if (gContextMenu.isTextSelected) { if (custombuttons.getPrefs("FindBar.contextFindWords")) { contextFind.hidden = false; } else { contextFind.hidden = true; } } } function ContexFind(){ gFindBar.onFindCommand(); //Запускаем функцию Find Find(event); } function Search(){ var focusedWindow = document. commandDispatcher. focusedWindow; var text = focusedWindow. getSelection (). toString (); var doc = getBrowser (). contentDocument; try { var url = doc. location. hostname; } catch(e) { var url = ""; } text = escape (convertFromUnicode ("UTF-8", text)); url = encodeURIComponent (url); var searchUrl = "http://www.google.com/search?as_q=" + text + "&as_sitesearch=" + url; gBrowser.selectedTab = gBrowser.addTab(searchUrl); } function HighlightSel(){ gFindBar.toggleHighlight(false); var text = document.commandDispatcher.focusedWindow.getSelection(); gFindBar._highlightDoc(true, text); goDoCommand("cmd_selectNone"); } function addSel(){ //Запускаем функцию HighlightAdd HighlightAdd(event); } })(); //Если нажать в главном меню Firefox на пункт меню 'Найти'............................................. document.getElementById("cmd_find").setAttribute("oncommand", "gFindBar.onFindCommand(); Find(event);"); //Найти на странице.................................................... Find = function(event){ if (custombuttons.getPrefs("FindBar.Highlight")){Highlight(event)}; if (!gFindBar.hidden) gFindBar._find(gFindBar._findField.value); }; //Очистить поле текстового ввода на Findbar.................................................. function findFieldClear(event){ gFindBar._findField.reset(); gFindBar.onFindAgainCommand(false); //.... var findToolbar = document.getElementById("FindToolbar"); findToolbar.removeAttribute("red"); //... gFindBar._findField.focus(); //.... gFindBar._highlightDoc(false); }; //Добавить текст(выделенный / из буфера обмена) для автовыделения....................................... function HighlightAdd(event){ //Копируем выделенный текст в буфер document.getElementById("cmd_copy").doCommand(); // Get the root branch var prefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch); //setting Unicode value var str = Components.classes["@mozilla.org/supports-string;1"].createInstance(Components.interfaces.nsISupportsString); //читаем из буфера обмена и добавляем текст для автовыделения в 'about:config' str.data = readFromClipboard(); prefs.setComplexValue("FindBar.Highlight.value", Components.interfaces.nsISupportsString, str); //всплывающая подсказка custombuttons.alertSlide(AutoHighlight, str.data); //... goDoCommand("cmd_selectNone"); //Запускаем функцию Highlight(run Highlight) Highlight(event); }; //Поле текстового ввода на Findbar мигает желтим............................ function fflash(event){ var findToolbar = document.getElementById("FindToolbar"); //Следим за иконкой статуса на FindBar var findstatus = gFindBar.getElement("find-status-icon"); findstatus.addEventListener("DOMAttrModified",function(e){ if(findstatus.getAttribute("status")=="wrapped") { findToolbar.setAttribute("flash", "true"); setTimeout(function() {findToolbar.removeAttribute("flash");}, 700)}; }, false)}; //Запускаем функции fflash, fmini(Run the function fflash) document.addEventListener( "DOMContentLoaded", fflash(event), false); //Создать кнопку "Clear" на Findbar......................................................... var ubc=document.getAnonymousElementByAttribute( gFindBar, "anonid", "findbar-textbox"); var btn=document.createElementNS("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul", "toolbarbutton"); btn.setAttribute("id", "ClearButton"); btn.setAttribute("tooltiptext", "L = Очистить поле текстового ввода"); ubc.parentNode.insertBefore(btn, ubc.nextSibling); btn.addEventListener("click", function(event) { if ( event.button != 0 ) return; //Запускаем функцию findFieldClear findFieldClear(event); }, false); // FindToolbar стиль(style)....................................................................... (function(css) { var pi = document.createProcessingInstruction( 'xml-stylesheet', 'type="text/css" href="data:text/css;utf-8,' + encodeURIComponent(css) + '"' ); return document.insertBefore(pi, document.documentElement); } )(<![CDATA[ @namespace url(http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul); /*Find Toolbar.................*/ #FindToolbar { border-bottom: 1px solid grey !important; } #FindToolbar > .findbar-container > * { display: -moz-box !important; } #FindToolbar > hbox > label{-moz-appearance: none !important;font-weight: bold !important;} #find-field,.findbar-textbox{width: 250px !important;} #FindToolbar .findbar-find-fast.findbar-find-status, #FindToolbar .findbar-container>image, #FindToolbar[autohide] .findbar-closebutton {display: none !important;} #FindToolbar[red="true"] .findbar-textbox{box-shadow: 0 0 0 1em #f66 inset;} #FindToolbar:not([red="true"]) .findbar-textbox[status="notfound"]{ background: rgba(207,219,236,0.99) !important; color: black !important; box-shadow: none !important;} /*Find Toolbar, mini......................................... */ #FindToolbar[mini="true"] .findbar-textbox{ width: 16em !important; height:21px!important; padding-right: 20px !important; margin-right: 2px!important; margin-left:-4px!important} #FindToolbar[mini] { position: fixed; right: 18px; background: menu !important; box-shadow: 0px 10px 5px -10px rgba(0,0,0,.3) !important; border: 1px solid grey !important; border-top: 0 !important; border-radius: 0 0 8px 8px !important;} #FindToolbar[mini="true"] .findbar-container>checkbox{ margin-left:-24px !important; margin-right: -3px !important} #FindToolbar[mini] toolbarspacer, #FindToolbar[mini="true"] label[class="checkbox-label"], #FindToolbar[mini="true"] toolbarbutton.findbar-find-next, #FindToolbar[mini="true"] toolbarbutton.findbar-find-previous, #FindToolbar[mini="true"] .findbar-highlight label, #FindToolbar[mini="true"] .findbar-closebutton, #FindToolbar:not([ClearButton="true"]) #ClearButton, #FindToolbar[mini="true"] .findbar-find-fast[anonid="find-label"], #FindToolbar[mini="true"] .findbar-find-fast[anonid="match-case-status"] { display: none !important;} #FindToolbar[mini] .findbar-highlight, #FindToolbar[mini] .findbar-highlight[checked] { list-style-image: url("data:image/gif;base64,R0lGODlhEAAQAMQWAJmZzJlmzGZmzGZm/2aZ/5mZ/5nM/8zM/8z//5mZmWZmmf///8yZzMzMmZlmmZmZM8zMM8zMZsz/ZsyZZpmZZmZmM////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAHoAxYALAAAAAAQABAAAAVsoCUCgQCIaCoKA1G4p7q6RmEXcQoMxYEYQEMOJSAYEL+D8jC0CG6GJTKhUtiAPiSCmlK4er7FgiGzWLGIBUJRZliVCLMi0Sg7FHhq4gGJlFUNEBIQE38pExGDFIYoFIkQi4wWjhEVkiIUFQohADs=") !important; -moz-image-region: auto !important;} #FindToolbar[mini] .findbar-highlight[disabled="true"]:hover{ -moz-appearance: none !important; -moz-border-image: url("data:image/png;base64,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") 3 / 3px stretch stretch !important; padding: 2px 2px 1px 2px !important;} #ClearButton{ list-style-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAFgSURBVHjaYv7//z/j69evWR8+fMj19etXHgYGBhjmxoK5gJhDTEyMOT4+/v+pU6f+AwQQM1Azy5o1a/hevXolC5RUAmIFIJYHYlksWBKIhYEWsQEt/PXgwYPfAAHEADQNZKr21KlTD7x8+fLbfwIApAakFqQHpBcggIA0gwAQOxKjGdkQkB6QXoAAYgISzCC/AU3jZMADTExMwBgEoGpBLmcGCCCQAYxQQ/BqxgJAehgBAogJymEkUTNcD0AAMZFhMwoACCAmSjSDAEAAMTGQAM6cOYMhBhBAMAP+o9uelpZGSDNYD0AAgQJCGIgtgNG7BZvmWbNmYRgG4jMyMvoAmScAAogFSPwF4m/ApPwdlhZAmpAVo2sGqQXpAekFCCCKkzJAADFmZWXBMpMUUFAUmsJYcITjH6jNr4Gan4WEhHwCCCAGUHYGGsIKFABlYSGoIWI4MEhOCKQWpAekFyDAAO0k7MPVi8ODAAAAAElF") !important; -moz-image-region: auto !important; margin-right: 1px!important;} #FindToolbar[mini="true"] textbox.findbar-textbox{ -moz-box-ordinal-group: 2 !important} #FindToolbar[mini="true"] checkbox{ -moz-box-ordinal-group: 3 !important;} #FindToolbar[mini="true"] toolbarbutton.findbar-highlight{ -moz-box-ordinal-group: 4 !important;} #FindToolbar[mini="true"] #ClearButton{ -moz-box-ordinal-group: 4 !important;} #FindToolbar[mini="true"] .findbar-closebutton{ -moz-box-ordinal-group: 7 !important;} ]]>.toString()); //устанавливаем флаг window.ToggleFindRun = 'stop'; |
iDev.Pi > 23-03-2012 04:04:42 |
bunda1 пишет
Подтверждаю, спасибо. 23-03-2012 04:33:34 |
bunda1 > 23-03-2012 04:55:07 |
iDev.Pi пишет
У меня нет. |
iDev.Pi > 23-03-2012 05:00:52 |
bunda1 пишет
Тут понадобится подтверждение/опровержение от 3-ьего лица. |
klaus65 > 23-03-2012 06:49:04 |
iDev.Pi пишет
Если речь идет про это http://rghost.ru/37171617, то да, по сравнению с предыдущей версией кнопки, появился сдвиг. |
bunda1 > 23-03-2012 10:50:39 |
klaus65 пишет
Спасыбо. Код экспериментальной кнопки Toggle Find+3- для инициализации: скрытый текст Выделить код Код://настройка функций кликов мыши(Mouse Click settings)................................................... this.onclick = function(event) { if(event.button == 0) { // Действие при клике ЛКМ gFindBar.hidden ? gFindBar.onFindCommand() : gFindBar.close(); Find(event); } else if(event.button == 1) { // Действие при клике СКМ gFindBar.hidden ? gFindBar.onFindCommand() : gFindBar.close();с goDoCommand("cmd_selectNone"); goDoCommand("cmd_paste"); } }; //Объявляем ..... var prefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService); var clipboard = Components.classes["@mozilla.org/widget/clipboardhelper;1"]. getService(Components.interfaces.nsIClipboardHelper); var this_ = this; var AutoHighlight ='Автовыделение' var AutoClose ='Автоматически закрыть' var CloseTimer ='Закрыть через ' var ClearPref ='Сбросить текст' //подсказка............................................................................. this.showTFinfo = function() { //getting prefs Unicode value var prefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService); var Val = "\n\n"+ AutoHighlight +": "+ prefs.getComplexValue("FindBar.Highlight.value",Components.interfaces.nsISupportsString).data; //обрезать подсказку для "Автовыделение" var HValue = Val.substring(0,50); var HDots =(Val.length > 50) ? '....' : ""; //.... this.tooltipText = "Поиск по странице" +"\n" + "Л: Показать - скрыть поиск по странице" +"\n" +"С: Поиск по странице из буфера обмена" +"\n"+ "П: Mеню + CB меню" + HValue + HDots; } this.setAttribute("onmouseover", "this.showTFinfo()"); //справка(Help) //this.setAttribute("Help", "event.stopPropagation(); gBrowser.selectedTab = gBrowser.addTab('https://forum.mozilla-russia.org/viewtopic.php?pid=550855#p550855]09-03-2012 19:18:31')"); //проверить наличие строк в about:config и создать если не существует(Add preferences)........................................ if (custombuttons.getPrefs("FindBar.version") !== '8') { prefs.setCharPref("FindBar.version", "8"); prefs.setBoolPref("FindBar.Highlight", true); prefs.setCharPref("FindBar.Highlight.value", "??????"); prefs.setBoolPref("FindBar.autoclear", false); prefs.setBoolPref("FindBar.contextFindWords", true); prefs.setBoolPref("FindBar.ToggleWithDoubleMiddleClick", false); prefs.setCharPref("ui.textHighlightBackground", "#ef0fff");//http://coloria.net/bonus/colornames.htm //prefs.setCharPref("ui.textHighlightForeground", "#000000");//http://coloria.net/bonus/colornames.htm prefs.setBoolPref("FindBar.mini", false); prefs.setBoolPref("FindBar.ClearButton", false); prefs.setBoolPref("FindBar.auto_Close", false); prefs.setCharPref("FindBar.CloseTimer", "7");//7 сек(7 sec) prefs.setCharPref("FindBar.AutohighlightNum", "1"); }; //настройка меню(CB menu settings)................................................... //Объявляем ..... var c ='true'; var n = 'false'; //изменить нужный пункт меню(toggle menuitems) //переключаем настройки в about:config(toggle preference) this.CBlabel = function (mi, id) { //Автоматически закрыть(FB auto close).... if(!id || id == "FBClose") { //переключаем настройки в about:config s = "FindBar.auto_Close"; togglePref(s); //Запускаем функцию autohide if (id) Autohide(event); //изменить нужный пункт меню var cek = (custombuttons.getPrefs(s)? c: n); this.FBCcek = cek; if(mi) mi.cek = cek; }; //FB auto close timer..... if(!id || id == "CloseTimer") { (function () { //Стоп, при инициализации кнопки if (!id) return; s = "FindBar.CloseTimer"; //switch auto close timer+"\n" + var URL = custombuttons.promptBox(AutoClose, CloseTimer+custombuttons.getPrefs(s) + ' секунд', ''); if (URL[0] == false) return; else var timer = [URL[1]]; //переключаем настройки в about:config(toggle preference) prefs.setCharPref(s, timer); })(); //пункт меню(menuitems) var label = CloseTimer + custombuttons.getPrefs("FindBar.CloseTimer") + ' секунд'; this.CloseTimer = label; if(mi) mi.label = label; }; //FindBar.mini...... if(!id || id == "FBmini") { //переключаем настройки в about:config s = "FindBar.mini"; togglePref(s); //Запускаем функцию fmini(run fmini) if (id) fmini(event); //изменить нужный пункт меню var cek = (custombuttons.getPrefs(s)? c : n); this.FBcek = cek; if(mi) mi.cek = cek; }; //Кнопка 'очистить'...... if(!id || id == "FBbutt") { //переключаем настройки в about:config s = "FindBar.ClearButton"; togglePref(s); //Запускаем функции ClearButton и fmini(run ClearButton, fmini) if (id) ClearButton(event); if (id) fmini(event); //изменить нужный пункт меню var cek = (custombuttons.getPrefs(s)? c : n); this.FCBcek = cek; if(mi) mi.cek = cek; }; //Find в контекстном меню(Find in the context menu)..... if(!id || id == "FindInMenu") { // переключаем настройки в about:config s = "FindBar.contextFindWords"; togglePref(s); //изменить нужный пункт меню var cek = (custombuttons.getPrefs(s)? c : n); this.FIMcek = cek; if(mi) mi.cek = cek; }; //Автоматически очищать поле текстового ввода на Findbar..... if(!id || id == "autoClear") { // переключаем настройки в about:config s = "FindBar.autoclear"; togglePref(s); //Очищистить поле текстового ввода если Findbar закрыт. if (gFindBar.hidden && custombuttons.getPrefs("FindBar.autoclear")) gFindBar._findField.reset(); //изменить нужный пункт меню var cek = (custombuttons.getPrefs(s)? c : n); this.aCcek = cek; if(mi) mi.cek = cek; }; //Переключить двойным средним кликом(Toggle with double middle click)..... if(!id || id == "MiddleClick") { // переключаем настройки в about:config s = "FindBar.ToggleWithDoubleMiddleClick"; togglePref(s); //изменить нужный пункт меню var cek = (custombuttons.getPrefs(s)? c : n); this.MCcek = cek; if(mi) mi.cek = cek; }; //Автовыделение(Switch, Auto Highlight)..... if(!id || id == "SwitchHighlight") { // переключаем настройки в about:config s = "FindBar.Highlight"; togglePref(s); //Изменить иконку кнопки if (id) ToggleImage(event); //переключить кнопку 'Highlight'(toggle Highlight) if (id) document.getElementById('FindToolbar').getElement('highlight').removeAttribute("checked"); //Запускаем функцию Highlight(run function Highlight) if (id) Highlight(event); //изменить нужный пункт меню(toggle menuitems) var cek = (custombuttons.getPrefs(s)? c : n); this.aHcek = cek; if(mi) mi.cek = cek; }; //Изменить цвет для Автовыделение..... if(!id || id == "addColor") { (function () { //Стоп, при инициализации кнопки if (!id) return; //создаем модальное окно для ввода цвета var URL = custombuttons.promptBox('Изменить цвет для Автовыделение', 'По умолчанию: #ef0fff', ''); if (URL[0] == false) return; else var color = [URL[1]]; //переключаем настройки в about:config(toggle preference) prefs.setCharPref("ui.textHighlightBackground", color); })(); //пункт меню(menuitems) var label = 'Изменить цвет' + ': ' + custombuttons.getPrefs("ui.textHighlightBackground"); this.addColor = label; if(mi) mi.label = label; }; //Автовыделение, добавить текст....... if(!id || id == "AddText") { //Запускаем функцию HighlightAdd(run function HighlightAdd) if (id) HighlightAdd(event); }; //Автовыделение, сбросить ..... if(!id || id == "Clear") { //сбросить настройки в about:config if (id) prefs.setCharPref("FindBar.Highlight.value", ""); //Запускаем функцию Highlight(run function Highlight) if (id) Highlight(event); //всплывающая подсказка if (id) custombuttons.alertSlide(ClearPref,'????'); }; //переключаем настройки в about:config(toggle preference).... function togglePref(s){ //Стоп, при инициализации кнопки if (!id) return; //переключаем настройки custombuttons.setPrefs(s, !custombuttons.getPrefs(s)); } }; //Запускаем функцию CBlabel(run CBlabel)......... this.CBlabel(); //пункти меню(Our menu items) .... this.ss = [ { cek: this.FBCcek, label: AutoClose, cmd: 'document.popupNode.CBlabel(this, "FBClose")', sItemId: '', type:'checkbox'}, { label: this.CloseTimer, cmd: 'document.popupNode.CBlabel(this, "CloseTimer")', sItemId: ''}, { label: "separator", sItemId: ''}, { cek: this.FBcek, label: 'FindBar мини', cmd: 'document.popupNode.CBlabel(this, "FBmini")', sItemId: '', type:'checkbox'}, { cek: this.FCBcek, label: 'Кнопка "очистить" на FindBar', cmd: 'document.popupNode.CBlabel(this, "FBbutt")', sItemId: '', type:'checkbox'}, { label: "separator", sItemId: ''}, { cek: this.FIMcek, label: 'Find в контекстном меню', cmd: 'document.popupNode.CBlabel(this, "FindInMenu")', sItemId:'', type:'checkbox'}, { cek: this.aCcek, label: 'Очищать поисковую форму', cmd: 'document.popupNode.CBlabel(this, "autoClear")', sItemId:'', type:'checkbox'}, { cek: this.MCcek, label: 'Переключать двойным средним кликом', cmd: 'document.popupNode.CBlabel(this, "MiddleClick")', sItemId:'', type:'checkbox'}, { label: "separator", sItemId: ''}, { cek: this.aHcek, label: AutoHighlight, cmd: 'document.popupNode.CBlabel(this, "SwitchHighlight")', sItemId: '', type:'checkbox'}, { label: this.addColor, cmd: 'document.popupNode.CBlabel(this, "addColor")', sItemId: ''}, { label: 'Добавить текст', cmd: 'document.popupNode.CBlabel(this, "AddText")', sItemId: ''}, { label: ClearPref, cmd: 'document.popupNode.CBlabel(this, "Clear")', sItemId: ''}]; // Our Initialization function for creating the context menu, setting up menuitems and telling var Cb = custombuttons; this.mObj = Cb.getCbContextObj(this); this.init = function(x) { x.mObj.setSub(); var nItem = {}, mItem = {}; document.getElementById(CB2const.sCBCtxtMenu).setAttribute("oncommand", "event.stopPropagation()"); for(var i in x.ss) { nItem = new x.mObj.getItem(); nItem.id = 'Note'; nItem.label = x.ss[i].label; if (nItem.label == "separator") { nItem = document.createElement("menuseparator"); } nItem.value = String(i); mItem = x.mObj.insertBefore(nItem , x.mObj.oMenu.lastChild); this.ss[i].sItemId = mItem.id; mItem.setAttribute('oncommand',x.ss[i].cmd); if("type" in x.ss[i]) mItem.setAttribute('type', x.ss[i].type); mItem.setAttribute('checked', x.ss[i].cek) mItem.setAttribute( 'autocheck',true) } x.mObj.getItem(); nItem = x.mObj.getItem(); nItem.id = 'Note'; this.separator = x.mObj.insertBefore( nItem , x.mObj.oMenu.lastChild); } this.init(this); //Стоп, при открытии настройки панелей.................................................... if (window.ToggleFindRun == 'stop') return; //Findbar, переклучить атрибут 'mini'(Findbar, set and remove attribute 'mini')........... //Findbar, установить и удалить 'hits'(Findbar, set and remove 'hits')........... function fmini(event){ //FindBar, auto find if (!gFindBar.hidden) { //Find gFindBar.onFindCommand(); } var findToolbar = document.getElementById("FindToolbar"); var HighBut = document.getAnonymousElementByAttribute( gFindBar, "anonid", "highlight"); if (custombuttons.getPrefs("FindBar.mini")) { //... var highlightBtn = document.getElementById('FindToolbar').getElement('highlight'); if (highlightBtn.checked) { gFindBar._findField.style.color = prefs.getCharPref("ui.textHighlightBackground"); highlightBtn.removeAttribute("checked"); }; findToolbar.setAttribute("mini", "true"); this.hits = ' '; var Rtext = custombuttons.getPrefs("FindBar.ClearButton") ? "Искать предыдущее" : "Очистить поле текстового ввода"; var text = "L = Искать следущее"+"\n" +"M = Поиск выделенного текста/из буфера" + "\n" + "R = " + Rtext; HighBut.setAttribute("tooltiptext", text ); } else { var highlightBtn = document.getElementById('FindToolbar').getElement('highlight'); findToolbar.removeAttribute("mini") this.hits = ' hits'; HighBut.setAttribute("tooltiptext", "Highlight"); //... if (!!gFindBar._findField.style.color) { highlightBtn.setAttribute("checked", "true"); gFindBar._findField.removeAttribute("style"); } } //Findbar, убрать фокус(Findbar, hide focus) _content.focus(); }; //Findbar, переклучить атрибут 'autohide'...... function Autohide(event){ var f = document.getElementById("FindToolbar"); custombuttons.getPrefs("FindBar.auto_Close") ? f.setAttribute("autohide", "true") : f.removeAttribute("autohide"); }; //Findbar, переклучить атрибут 'ClearButton'...... function ClearButton(event){ var ft = document.getElementById("FindToolbar"); custombuttons.getPrefs("FindBar.ClearButton") ? ft.setAttribute("ClearButton", "true") : ft.removeAttribute("ClearButton"); }; //Запускаем функции fmini(Run the function fmini) setTimeout(function() {fmini(event);Autohide(event);ClearButton(event);}, 200) //Изменить иконку кнопки................................................................. function ToggleImage(event){ // toggle button image if (custombuttonsUtils.getPrefs("FindBar.Highlight")) { this_.image="data:image/x-icon;base64,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"; } else { this_.image="data:image/x-icon;base64,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"; } }; ToggleImage(event); //find bar сверху (move find bar to the top)................................................ XPCOMUtils.defineLazyGetter(window, "gFindBar", function() { let XULNS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"; let findbar = document.createElementNS(XULNS, "findbar"); findbar.setAttribute("browserid", "content"); findbar.id = "FindToolbar"; gBrowser.parentNode.insertBefore(findbar, gBrowser); // Force a style flush to ensure that our binding is attached. findbar.clientTop; window.gFindBarInitialized = true; return findbar; }); //find bar, показать количество совпадений(find bar,show the number of matches)...@author slimx................. (function() { //add label to findbar var status = document.getAnonymousElementByAttribute(gFindBar, 'anonid', 'match-case-status'); var sep = document.createElement("toolbarspacer"); var count = document.createElement("label"); count.hidden = true; status.parentNode.insertBefore(sep, status); status.parentNode.insertBefore(count, status);//findbar-container gFindBar.__proto__._foundMatches = count; gFindBar.__proto__._updateMatchesCount = function(aRes) { if (!this._updateMatchCountTimeout) window.clearTimeout(this._updateMatchCountTimeout); this._updateMatchCountTimeout = window.setTimeout(function(aRes, aSelf) { aSelf._updateMatchesCountWorker(aRes); }, 0, aRes, this); } gFindBar.__proto__._updateMatchesCountWorker = function(aRes) { var word = this._findField.value; if (aRes == this.nsITypeAheadFind.FIND_NOTFOUND || !word) { this._foundMatches.hidden = true; this._foundMatches.value = ""; } else { var matchesCount = this._countMatches(word).toString(); if (matchesCount != "0") { if (matchesCount == "1") this._foundMatches.value = matchesCount + hits; else if (matchesCount == "-1") { var matchLimit = 100; this._foundMatches.value = " \>"+ matchLimit + hits; // var key = (matchLimit > 1000) ? "Decrease" : "Increase"; } else this._foundMatches.value = matchesCount + hits; this._foundMatches.hidden = false; //Findbar, удалить атрибут 'red'(Findbar, remove attribute 'red').............. var findToolbar = document.getElementById("FindToolbar"); findToolbar.removeAttribute("red"); } else { this._foundMatches.hidden = true; this._foundMatches.value = ""; //Findbar, установить атрибут 'red'(Findbar, set attribute 'red')............... var findToolbar = document.getElementById("FindToolbar"); findToolbar.setAttribute("red", "true"); } window.clearTimeout(this._updateMatchCountTimeout); } } gFindBar.__proto__._countMatches = function(aWord, aWindow) { var win = aWindow || this.browser.contentWindow; var countFound = 0; for (var i = 0, count; win.frames && i < win.frames.length; i++) { if ((count = this._countMatches(aWord, win.frames[i])) != -1) countFound += count; else return count; } var doc = win.document; if (!doc || !(doc instanceof HTMLDocument)) return countFound; var body = doc.body; var count = body.childNodes.length; var searchRange = doc.createRange(); var startPt = doc.createRange(); var endPt = doc.createRange(); searchRange.setStart(body, 0); searchRange.setEnd(body, count); startPt.setStart(body, 0); startPt.setEnd(body, 0); endPt.setStart(body, count); endPt.setEnd(body, count); var retRange = null; var finder = Components.classes["@mozilla.org/embedcomp/rangefind;1"] .createInstance() .QueryInterface(Components.interfaces.nsIFind); finder.caseSensitive = this._shouldBeCaseSensitive(aWord); var matchLimit = 100; while ((retRange = finder.Find(aWord, searchRange, startPt, endPt))) { if (this._rangeIsVisible(retRange, win)) { if (this._findMode == this.FIND_LINKS) { if (this._rangeStartsInLink(retRange)) ++ countFound; } else ++ countFound; } if (countFound == matchLimit) { countFound = -1; break; } startPt = doc.createRange(); startPt.setStart(retRange.startContainer, retRange.startOffset + 1); } return countFound; } gFindBar.__proto__._rangeIsVisible = function(aRange, aWindow) { var node = aRange.startContainer; if (node.nodeType == node.ELEMENT_NODE) { if (node.hasChildNodes) { var childNode = node.childNodes[aRange.startOffset]; if (childNode) node = childNode; } } while (node && node.nodeType != node.ELEMENT_NODE) node = node.parentNode; // There is no perfect way to check if a node is visible in JavaScript, // so use the best measures we can have if (node) { var style = aWindow.getComputedStyle(node, ""); if (style) { if (style.visibility == "hidden" || style.visibility == "collapse" || style.display == "none") return false; if (style.left != "auto" && style.width != "auto") if (style.left < 0 && style.left + style.width < 0) return false; if (style.top != "auto" && style.height != "auto") if (style.top < 0 && style.top + style.height < 0) return false; } } return true; } gFindBar.__proto__._rangeStartsInLink = function(aRange) { var isInsideLink = false; var node = aRange.startContainer; if (node.nodeType == node.ELEMENT_NODE) { if (node.hasChildNodes) { var childNode = node.childNodes[aRange.startOffset]; if (childNode) node = childNode; } } const XLink_NS = "http://www.w3.org/1999/xlink"; do { if (node instanceof HTMLAnchorElement) { isInsideLink = node.hasAttribute("href");m break; } else if (typeof node.hasAttributeNS == "function" && node.hasAttributeNS(XLink_NS, "href")) { isInsideLink = (node.getAttributeNS(XLink_NS, "type") == "simple"); break; } node = node.parentNode; } while (node); return isInsideLink; } //insert count function to original eval("gFindBar._updateCaseSensitivity=" + gFindBar._updateCaseSensitivity.toString().slice(0, -1) + "this._updateMatchesCount();}"); eval("gFindBar._updateStatusUI=" + gFindBar._updateStatusUI.toString().slice(0, -1) + "this._updateMatchesCount();}"); })(); //FindBar, поиск колесиком мыши(FindBar, Mouse Scroll find )................................................ gFindBar.addEventListener('DOMMouseScroll', function (event){ //Найти (Find) gFindBar.onFindAgainCommand(event.detail < 0); }, false); //переключить 'Поиск на странице' двойным средним кликом на странице(toggle Find Bar, if Double midlle Click in page).......... //добавляем обработчик для обработки нажатие на кнопку мыши на странице....... gBrowser.addEventListener("mouseup", function(event){ //если нажатие на среднюю кнопку мыши if (event.button !== 1) return; //если разрешено в настройках(about:config) if (!custombuttons.getPrefs("FindBar.ToggleWithDoubleMiddleClick")) return; var _this = this; //если установлен флаг if (_this.open){ //переключить 'Поиск на странице' gFindBar.hidden ? gFindBar.onFindCommand() : gFindBar.close(); Find(event); gFindBar._findField.focus(); } //устанавливаем флаг _this.open = true; //сбросить флаг по таймеру this.timer = 0; this.timer = setTimeout(function(){ _this.open = false;}, 600); }, false); //Автоматически очищать поле текстового ввода на Findbar.................................................. gFindBar.addEventListener("DOMAttrModified", function(event){ var _this = this; //устанавливаем флаг if (gFindBar.hidden){_this.clear = true} //... if (!custombuttons.getPrefs("FindBar.autoclear")) reset; if (gFindBar.hidden){gFindBar._findField.reset()} if (!gFindBar.hidden) { //Снять выделенные на странице если флаг - true if (_this.clear){goDoCommand("cmd_selectNone")} //сбросить флаг _this.clear = false; } }, false); //findbar очистить, кликнуть правим кликом на findbar's label-Найти: или на иконку поиска на FindBar mini(FindBar clear findText, right click on findbar's label, else Find button).............. //findbar поиск, кликнуть левым кликом на findbar's label-Найти: или на иконку поиска на FindBar mini(FindBar find, left click on findbar's label, else Find button).............. var FindButt = document.getAnonymousElementByAttribute(gFindBar, "anonid", "find-label"); FindButt.setAttribute("onclick", "event.stopPropagation(); clickFind(event);"); //.... var HighBut = document.getAnonymousElementByAttribute( gFindBar, "anonid", "highlight"); HighBut.addEventListener("click", function(event){ if (custombuttons.getPrefs("FindBar.mini")) { gFindBar.getElement("highlight").removeAttribute("checked"); //....... clickFind(event); } }, true); //..................... clickFind = function(event){ if ( event.button == 0 ) { event.preventDefault(); event.stopPropagation(); if (custombuttons.getPrefs("FindBar.Highlight")){Highlight(event)}; //Искать следующее gFindBar.onFindAgainCommand(false); } else if ( event.button == 2 ) { if (custombuttons.getPrefs("FindBar.Highlight")){Highlight(event)}; //Запускаем функцию findFieldClear или искать предыдущее custombuttons.getPrefs("FindBar.ClearButton") ? gFindBar.onFindAgainCommand(true) : findFieldClear(event); } }; //кнопка 'Highlight' на FindBar.mini всегда включена................................................................... var highlightBtn = document.getElementById('FindToolbar').getElement('highlight'); highlightBtn.addEventListener("mouseover", function(event){ if (custombuttons.getPrefs("FindBar.mini")) { highlightBtn.setAttribute("disabled", "false") } }, false); //Поиск по странице из буфера обмена/выделенный текст, если кликнуть средним кликом на findbar или на иконку поиска на FindBar mini ....... //переключить кнопку 'Highlight' двойным левым кликом на на поле текстового ввода на FindBar............ //Стоп, при открытии настройки панелей(stop, if onDestroy) if (window.ToggleFindRun !== 'stop') (function () { //Поиск по странице из буфера обмен gFindBar.addEventListener("click", function(event){ if ( event.button != 1 )return; event.preventDefault(); event.stopPropagation(); //........ var sel = content.getSelection().toString(); var str =(!!sel) ? sel : readFromClipboard(); //Убираем пробелы с обоих концов текста. var str = str.replace(/^\s+|\s+$/g,""); //... gFindBar._findField.value = str; Find(event); }, true); //переключить кнопку 'Highlight'......... gFindBar._findField.addEventListener("dblclick", function(event){ if ( event.button != 0 )return; event.preventDefault(); event.stopPropagation() //.... if (!custombuttons.getPrefs("FindBar.mini")) return; if (custombuttons.getPrefs("FindBar.Highlight")) return; //Запускаем функцию toggleHighlight toggleHighlight(event); //Findbar, убрать фокус(Findbar, hide focus) _content.focus(); }, false); })(); //FindBar, автоматически закрыть(autohide Findbar)................................. //Стоп, при открытии настройки панелей(stop, if onDestroy) if (window.ToggleFindRun !== 'stop') (function () { function go() { gFindBar.close(); window.ACRun = ''; } function on() { if (!custombuttons.getPrefs("FindBar.auto_Close")) return; if (window.ACRun == 'stop') return; window.ACRun = 'stop'; timeoutId = 0; timeoutId = setTimeout(go, custombuttons.getPrefs("FindBar.CloseTimer") + '000') } function off() { if (!custombuttons.getPrefs("FindBar.auto_Close")) return; window.ACRun = ''; clearTimeout(timeoutId); } gFindBar.addEventListener("DOMAttrModified", function(event){if (gFindBar.hidden) off() }, false); addEventListener('mouseover', function(event){ if (!gFindBar.hidden) (event.target.nodeName !== 'findbar')? on(): off() }, false); })(); //FindBar, сочетания клавиш(Key config)......................................................... //Стоп, при открытии настройки панелей(stop, if onDestroy) if (window.ToggleFindRun !== 'stop')(function () { window.addEventListener('keydown', function (event){ //FindBar(ctrl+ F)показать - скрыть(Toggle Find Bar)......... if ((event.ctrlKey)&&(!event.altKey)&&(event.keyCode==70)) { event.preventDefault(); event.stopPropagation(); //переключить 'Поиск на странице' gFindBar.hidden ? gFindBar.onFindCommand() : gFindBar.close(); Find(event); gFindBar._findField.focus(); } //Findbar(ctrl+ALT+F), поиск по странице из буфера обмена(find from clipboard)............. if ((event.ctrlKey)&&(event.altKey)&&(event.keyCode==70)) { gFindBar.hidden ? gFindBar.onFindCommand() : gFindBar.close(); goDoCommand("cmd_selectNone"); goDoCommand("cmd_paste"); Find(event); } //Findbar(ctrl+ALT+H), FindBar, вести слова для выделение(set Highlight words)... if ((event.ctrlKey)&&(event.altKey)&&(event.keyCode==72)) { //Запускаем функцию HighlightAdd(run HighlightAdd) HighlightAdd(event); } }, false); })(); //переключить кнопку 'Highlight'(toggle Highlight)............................................ function toggleHighlight(event) { var highlightBtn = document.getElementById('FindToolbar').getElement('highlight'); //... if (!gFindBar._findField.style.color) { gFindBar._highlightDoc(true, gFindBar._findField.value); gFindBar._findField.style.color = prefs.getCharPref("ui.textHighlightBackground"); } else { gFindBar._highlightDoc(false); gFindBar._findField.removeAttribute("style"); } }; //Автоматически выделить заранее введенные слова (auto Highlight words permanent).................................................... Highlight = function(event) { //устанавливаем флаги... var m = true; if (event =='[object UIEvent]'){var m = false}; if (event =='[object DragEvent]'){var m = false}; if (event =='[object MouseEvent]'){var m = false}; //hide Highlight gFindBar._highlightDoc(false); //.... var FBNum = custombuttons.getPrefs("FindBar.AutohighlightNum"); var FBvalue = gFindBar._findField.value; //.... if (!gFindBar.hidden) { //... if (!!gFindBar._findField.style.color) { gFindBar._findField.removeAttribute("style"); } //Findbar, удалить атрибут 'red'(Findbar, remove attribute 'red').............. if (FBvalue.length == '0') { var findToolbar = document.getElementById("FindToolbar"); findToolbar.removeAttribute("red"); } //FindBar, auto find if (m) { //Findbar, фокус(Findbar, focus) gFindBar._findField.focus(); gFindBar.onFindCommand(); //Findbar, убрать фокус(Findbar, hide focus) _content.focus(); } } //auto Highlight if (custombuttonsUtils.getPrefs("FindBar.Highlight")) { if (gFindBar.hidden) { //getting prefs Unicode value var value = prefs.getComplexValue("FindBar.Highlight.value", Components.interfaces.nsISupportsString).data; } if (!gFindBar.hidden) { var value =(FBvalue.length > FBNum)? FBvalue : "??????"; } //Highlight gFindBar._highlightDoc(true, value); } }; if (window.ToggleFindRun !== 'stop') (function () { //добавляем обработчики..... //обработчики для табов.. gBrowser.tabContainer.addEventListener("TabSelect", Highlight, false); gBrowser.addEventListener("DOMContentLoaded", function(event){ //фылтр.... //стоп, если открыть новые таби if (event.target.location.href !== getBrowser().currentURI.spec) return; //стоп, если срабатывает на фрейме var document = event.originalTarget; if (document instanceof HTMLDocument && this.contentWindow.document !== document) return; Highlight(event)}, false); //обработчики для FindBar.. gFindBar._findField.addEventListener("input", Highlight, false); gFindBar._findField.setAttribute("ondrop","event.stopPropagation(); Find(event); "); gFindBar.addEventListener("DOMAttrModified", function(event){ if (!gFindBar.hidden) return; Highlight(event)}, false); })(); //FindBar. контекстного меню (context Menu)....................................... (function contextFindWords(){ // выходим, если функция уже выполнялась if (document.getElementById("contextFindWords")) return; const kXULNS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"; var contextMenu = document.getElementById("contentAreaContextMenu"); var separator = document.getElementById("context-sep-properties"); var eventTarget = null; var menu = document.createElementNS(kXULNS, "menu"); menu.id = "contextFindWords"; menu.setAttribute("label", "Find"); menu.hidden = true; contextMenu.insertBefore(menu, separator); var menuPopup = document.createElementNS(kXULNS, "menupopup"); menu.appendChild(menuPopup); var lst = [ { label:"Найти на странице", command:ContexFind }, { label:"Поиск по сайту(google)", command:Search }, { label:"Выделить текст на странице", command:HighlightSel }, { label:"Автовыделение, добавить текст", command:addSel } ]; for(var i = 0, m; m = lst[i]; i++){ var menuItem = document.createElementNS(kXULNS, "menuitem"); menuItem.setAttribute("label", m.label); menuItem.setAttribute("type", "m.radio"); if ("accesskey" in m) menuItem.setAttribute("accesskey", m.accesskey); menuItem.addEventListener("command", m.command, false); menuItem.id = "context-Find-Words-" + m.label.toString(); menuPopup.appendChild(menuItem); } var contextFind = document.getElementById("contextFindWords") contextMenu.addEventListener("popupshowing", setMenuDisplay, false); function setMenuDisplay(aEvent) { if (gContextMenu.isTextSelected) { if (custombuttons.getPrefs("FindBar.contextFindWords")) { contextFind.hidden = false; } else { contextFind.hidden = true; } } } function ContexFind(){ gFindBar.onFindCommand(); //Запускаем функцию Find Find(event); } function Search(){ var focusedWindow = document. commandDispatcher. focusedWindow; var text = focusedWindow. getSelection (). toString (); var doc = getBrowser (). contentDocument; try { var url = doc. location. hostname; } catch(e) { var url = ""; } text = escape (convertFromUnicode ("UTF-8", text)); url = encodeURIComponent (url); var searchUrl = "http://www.google.com/search?as_q=" + text + "&as_sitesearch=" + url; gBrowser.selectedTab = gBrowser.addTab(searchUrl); } function HighlightSel(){ gFindBar.toggleHighlight(false); var text = document.commandDispatcher.focusedWindow.getSelection(); gFindBar._highlightDoc(true, text); goDoCommand("cmd_selectNone"); } function addSel(){ //Запускаем функцию HighlightAdd HighlightAdd(event); } })(); //Если нажать в главном меню Firefox на пункт меню 'Найти'............................................. document.getElementById("cmd_find").setAttribute("oncommand", "gFindBar.onFindCommand(); Find(event);"); //Найти на странице.................................................... Find = function(event){ if (custombuttons.getPrefs("FindBar.Highlight")){Highlight(event)}; if (!gFindBar.hidden) gFindBar._find(gFindBar._findField.value); }; //Очистить поле текстового ввода на Findbar.................................................. function findFieldClear(event){ gFindBar._findField.reset(); gFindBar.onFindAgainCommand(false); //.... var findToolbar = document.getElementById("FindToolbar"); findToolbar.removeAttribute("red"); //... gFindBar._findField.focus(); //.... gFindBar._highlightDoc(false); }; //Добавить текст(выделенный / из буфера обмена) для автовыделения....................................... function HighlightAdd(event){ //Копируем выделенный текст в буфер document.getElementById("cmd_copy").doCommand(); // Get the root branch var prefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch); //setting Unicode value var str = Components.classes["@mozilla.org/supports-string;1"].createInstance(Components.interfaces.nsISupportsString); //читаем из буфера обмена и добавляем текст для автовыделения в 'about:config' str.data = readFromClipboard(); prefs.setComplexValue("FindBar.Highlight.value", Components.interfaces.nsISupportsString, str); //всплывающая подсказка custombuttons.alertSlide(AutoHighlight, str.data); //... goDoCommand("cmd_selectNone"); //Запускаем функцию Highlight(run Highlight) Highlight(event); }; //Поле текстового ввода на Findbar мигает желтим............................ function fflash(event){ var findToolbar = document.getElementById("FindToolbar"); //Следим за иконкой статуса на FindBar var findstatus = gFindBar.getElement("find-status-icon"); findstatus.addEventListener("DOMAttrModified",function(e){ if(findstatus.getAttribute("status")=="wrapped") { findToolbar.setAttribute("flash", "true"); setTimeout(function() {findToolbar.removeAttribute("flash");}, 700)}; }, false)}; //Запускаем функции fflash, fmini(Run the function fflash) document.addEventListener( "DOMContentLoaded", fflash(event), false); //Создать кнопку "Clear" на Findbar......................................................... var ubc=document.getAnonymousElementByAttribute( gFindBar, "anonid", "findbar-textbox"); var btn=document.createElementNS("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul", "toolbarbutton"); btn.setAttribute("id", "ClearButton"); btn.setAttribute("tooltiptext", "L = Очистить поле текстового ввода"); ubc.parentNode.insertBefore(btn, ubc.nextSibling); btn.addEventListener("click", function(event) { if ( event.button != 0 ) return; //Запускаем функцию findFieldClear findFieldClear(event); }, false); // FindToolbar стиль(style)....................................................................... (function(css) { var pi = document.createProcessingInstruction( 'xml-stylesheet', 'type="text/css" href="data:text/css;utf-8,' + encodeURIComponent(css) + '"' ); return document.insertBefore(pi, document.documentElement); } )(<![CDATA[ @namespace url(http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul); /*Find Toolbar.................*/ #FindToolbar { border-bottom: 1px solid grey !important; } #FindToolbar > .findbar-container > * { display: -moz-box !important; } #FindToolbar > hbox > label{-moz-appearance: none !important;font-weight: bold !important;} #find-field,.findbar-textbox{width: 250px !important;} #FindToolbar .findbar-find-fast.findbar-find-status, #FindToolbar .findbar-container>image, #FindToolbar[autohide] .findbar-closebutton {display: none !important;} #FindToolbar[red="true"] .findbar-textbox{box-shadow: 0 0 0 1em #f66 inset;} #FindToolbar:not([red="true"]) .findbar-textbox[status="notfound"]{ background: rgba(207,219,236,0.99) !important; color: black !important; box-shadow: none !important;} /*Find Toolbar, mini......................................... */ #FindToolbar[mini="true"] .findbar-textbox{ width: 16em !important; height:21px!important; padding-right: 20px !important; margin-right: 2px!important; margin-left:-4px!important} #FindToolbar[mini] { position: fixed; right: 18px; background: menu !important; box-shadow: 0px 10px 5px -10px rgba(0,0,0,.3) !important; border: 1px solid grey !important; border-top: 0 !important; border-radius: 0 0 8px 8px !important;} #FindToolbar[mini="true"] .findbar-container>checkbox{ margin-left:-24px !important; margin-right: -3px !important} #FindToolbar[mini] toolbarspacer, #FindToolbar[mini="true"] label[class="checkbox-label"], #FindToolbar[mini="true"] toolbarbutton.findbar-find-next, #FindToolbar[mini="true"] toolbarbutton.findbar-find-previous, #FindToolbar[mini="true"] .findbar-highlight label, #FindToolbar[mini="true"] .findbar-closebutton, #FindToolbar:not([ClearButton="true"]) #ClearButton, #FindToolbar[mini="true"] .findbar-find-fast[anonid="find-label"], #FindToolbar[mini="true"] .findbar-find-fast[anonid="match-case-status"] { display: none !important;} #FindToolbar[mini] .findbar-highlight, #FindToolbar[mini] .findbar-highlight[checked] { list-style-image: url("data:image/gif;base64,R0lGODlhEAAQAMQWAJmZzJlmzGZmzGZm/2aZ/5mZ/5nM/8zM/8z//5mZmWZmmf///8yZzMzMmZlmmZmZM8zMM8zMZsz/ZsyZZpmZZmZmM////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAHoAxYALAAAAAAQABAAAAVsoCUCgQCIaCoKA1G4p7q6RmEXcQoMxYEYQEMOJSAYEL+D8jC0CG6GJTKhUtiAPiSCmlK4er7FgiGzWLGIBUJRZliVCLMi0Sg7FHhq4gGJlFUNEBIQE38pExGDFIYoFIkQi4wWjhEVkiIUFQohADs=") !important; -moz-image-region: auto !important;} #ClearButton{ list-style-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAFgSURBVHjaYv7//z/j69evWR8+fMj19etXHgYGBhjmxoK5gJhDTEyMOT4+/v+pU6f+AwQQM1Azy5o1a/hevXolC5RUAmIFIJYHYlksWBKIhYEWsQEt/PXgwYPfAAHEADQNZKr21KlTD7x8+fLbfwIApAakFqQHpBcggIA0gwAQOxKjGdkQkB6QXoAAYgISzCC/AU3jZMADTExMwBgEoGpBLmcGCCCQAYxQQ/BqxgJAehgBAogJymEkUTNcD0AAMZFhMwoACCAmSjSDAEAAMTGQAM6cOYMhBhBAMAP+o9uelpZGSDNYD0AAgQJCGIgtgNG7BZvmWbNmYRgG4jMyMvoAmScAAogFSPwF4m/ApPwdlhZAmpAVo2sGqQXpAekFCCCKkzJAADFmZWXBMpMUUFAUmsJYcITjH6jNr4Gan4WEhHwCCCAGUHYGGsIKFABlYSGoIWI4MEhOCKQWpAekFyDAAO0k7MPVi8ODAAAAAElF") !important; -moz-image-region: auto !important; margin-right: 1px!important;} #FindToolbar[mini="true"] textbox.findbar-textbox{ -moz-box-ordinal-group: 2 !important} #FindToolbar[mini="true"] checkbox{ -moz-box-ordinal-group: 3 !important;} #FindToolbar[mini="true"] toolbarbutton.findbar-highlight{ -moz-box-ordinal-group: 4 !important;} #FindToolbar[mini="true"] #ClearButton{ -moz-box-ordinal-group: 4 !important;} #FindToolbar[mini="true"] .findbar-closebutton{ -moz-box-ordinal-group: 7 !important;} ]]>.toString()); //устанавливаем флаг window.ToggleFindRun = 'stop'; |
voqabuhe > 23-03-2012 13:17:58 |
bunda1 |
iDev.Pi > 23-03-2012 13:50:57 |
voqabuhe |
voqabuhe > 23-03-2012 16:02:22 |
iDev.Pi |
iDev.Pi > 23-03-2012 16:15:02 |
voqabuhe |
voqabuhe > 23-03-2012 16:40:36 |
iDev.Pi |
iDev.Pi > 23-03-2012 16:46:49 |
voqabuhe |
voqabuhe > 23-03-2012 17:01:19 |
iDev.Pi |
iDev.Pi > 23-03-2012 17:07:28 |
voqabuhe |
voqabuhe > 23-03-2012 17:46:10 |
1. Я уже предлагаю, если галка стоит на Кнопка «очистить» на FindBar, то оставить всё как есть. А если снять галку с Кнопка «очистить» на FindBar, то её функцию передавать на число совпадений, а не на лупу как сейчас. А на лупе оставить назад - вперёд. |
iDev.Pi > 23-03-2012 17:55:29 |
1. А, я теперь только понял что ты предлагаешь. Ты не учёл возможное состояние, когда в поле вбито что-то, но на странице этого не найдено - в таком случае счётчик найденного не виден, если ты предлагаешь его показывать всегда - ты против минимализма, т.к. я то думал ты предлагаешь сократить панель целиком удалив кнопку найти, а оказывается ты наоборот предлагаешь увеличить панель. |
voqabuhe > 23-03-2012 18:27:18 |
1. Да, состояние когда нет вариантов я не учёл. Я не предлагал удалить кнопку найти, мне просто нравится больше вариант без кнопки Очистить, вот и хочу, чтобы его немного доработали. Тогда можно, если Кнопка «очистить» на FindBar отключена, повесить на лупу следующее: ЛКМ-ПКМ (вперёд-назад), а СКМ – очистить, так даже ещё удобней будет, не надо никуда дёргаться. ИМХО. А чтобы увеличивалась панель, я наоборот не хочу. |
bunda1 > 23-03-2012 19:13:43 |
voqabuhe пишет
Нет, это трудно для меня и не очевидно для других. voqabuhe пишет
Согласен, найду нормальную кнопку «очистить» и заменю. voqabuhe пишет
Это же стандартная возможность браузера, если middlemouse.paste -true. Мне кажется это удобно и привычно, как уже писал iDev.Pi можно просто кликнуть СКМ на кнопку поиска. voqabuhe пишет
1. Двойной клик в строке поиска включает и выключает не автовыделение а обычную подсветку текста из панели поиска, тоже самое делает обычная кнопка Highlight на на обычном панели поиска и эта подсветка сама отключается при переключение табов или обновление страницы и так далее. Это не связано с автовыделением. iDev.Pi пишет
Хорошая идея, я это обязательно сделаю. |
voqabuhe > 23-03-2012 19:29:00 |
iDev.Pi пишет
Если строка пустая, то СКМ непосредственно в неё, а если занята, то на цифры или на чекбокс изменения регистра. 23-03-2012 19:32:21
Пусть так, но как быть с тем, что в последней версии двойной клик её у меня не отключает? |
iDev.Pi > 23-03-2012 19:33:52 |
voqabuhe пишет
Туплю, всё верно. |
voqabuhe > 23-03-2012 19:36:37 |
Спасибо, а через меню кнопки нельзя? |
bunda1 > 23-03-2012 19:41:22 |
voqabuhe пишет
Не знаю, посмотри что пишет консоль ошибок, когда двойной клик не отключает. 23-03-2012 19:44:26 voqabuhe пишет
Можно, но как будет называться пункт меню, вот в чем вопрос. 23-03-2012 19:47:34 voqabuhe пишет
Да с этим СКМ на строке только проблемы, конфликтует с другими CB кнопками. |
voqabuhe > 23-03-2012 19:58:57 |
bunda1 пишет
Да это вообще не вопрос, сообща чего-нибудь родим. 23-03-2012 20:01:33 bunda1 пишет
Так когда строка пустая, то проблем вроде нет? А вообще хватит возможности кликать по цифрам и чекбоксу. 23-03-2012 20:04:07 bunda1 пишет
23-03-2012 20:10:48 |
bunda1 > 23-03-2012 20:15:43 |
voqabuhe пишет
Ну тогда понятно. Код экспериментальной кнопки Toggle Find+3- для инициализации: скрытый текст Выделить код Код://настройка функций кликов мыши(Mouse Click settings)................................................... this.onclick = function(event) { if(event.button == 0) { // Действие при клике ЛКМ gFindBar.hidden ? gFindBar.onFindCommand() : gFindBar.close(); Find(event); } else if(event.button == 1) { // Действие при клике СКМ gFindBar.hidden ? gFindBar.onFindCommand() : gFindBar.close();с goDoCommand("cmd_selectNone"); goDoCommand("cmd_paste"); } }; //Объявляем ..... var prefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService); var clipboard = Components.classes["@mozilla.org/widget/clipboardhelper;1"]. getService(Components.interfaces.nsIClipboardHelper); var this_ = this; var AutoHighlight ='Автовыделение' var AutoClose ='Автоматически закрыть' var CloseTimer ='Закрыть через ' var ClearPref ='Сбросить текст' //подсказка............................................................................. this.showTFinfo = function() { //getting prefs Unicode value var prefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService); var Val = "\n\n"+ AutoHighlight +": "+ prefs.getComplexValue("FindBar.Highlight.value",Components.interfaces.nsISupportsString).data; //обрезать подсказку для "Автовыделение" var HValue = Val.substring(0,50); var HDots =(Val.length > 50) ? '....' : ""; //.... this.tooltipText = "Поиск по странице" +"\n" + "Л: Показать - скрыть поиск по странице" +"\n" +"С: Поиск по странице из буфера обмена" +"\n"+ "П: Mеню + CB меню" + HValue + HDots; } this.setAttribute("onmouseover", "this.showTFinfo()"); //справка(Help) //this.setAttribute("Help", "event.stopPropagation(); gBrowser.selectedTab = gBrowser.addTab('https://forum.mozilla-russia.org/viewtopic.php?pid=550855#p550855]09-03-2012 19:18:31')"); //проверить наличие строк в about:config и создать если не существует(Add preferences)........................................ if (custombuttons.getPrefs("FindBar.version") !== '8') { prefs.setCharPref("FindBar.version", "8"); prefs.setBoolPref("FindBar.Highlight", true); prefs.setCharPref("FindBar.Highlight.value", "??????"); prefs.setBoolPref("FindBar.autoclear", false); prefs.setBoolPref("FindBar.contextFindWords", true); prefs.setBoolPref("FindBar.ToggleWithDoubleMiddleClick", false); prefs.setCharPref("ui.textHighlightBackground", "#ef0fff");//http://coloria.net/bonus/colornames.htm //prefs.setCharPref("ui.textHighlightForeground", "#000000");//http://coloria.net/bonus/colornames.htm prefs.setBoolPref("FindBar.mini", false); prefs.setBoolPref("FindBar.ClearButton", false); prefs.setBoolPref("FindBar.auto_Close", false); prefs.setCharPref("FindBar.CloseTimer", "7");//7 сек(7 sec) prefs.setCharPref("FindBar.AutohighlightNum", "1"); }; //настройка меню(CB menu settings)................................................... //Объявляем ..... var c ='true'; var n = 'false'; //изменить нужный пункт меню(toggle menuitems) //переключаем настройки в about:config(toggle preference) this.CBlabel = function (mi, id) { //Автоматически закрыть(FB auto close).... if(!id || id == "FBClose") { //переключаем настройки в about:config s = "FindBar.auto_Close"; togglePref(s); //Запускаем функцию autohide if (id) Autohide(event); //изменить нужный пункт меню var cek = (custombuttons.getPrefs(s)? c: n); this.FBCcek = cek; if(mi) mi.cek = cek; }; //FB auto close timer..... if(!id || id == "CloseTimer") { (function () { //Стоп, при инициализации кнопки if (!id) return; s = "FindBar.CloseTimer"; //switch auto close timer+"\n" + var URL = custombuttons.promptBox(AutoClose, CloseTimer+custombuttons.getPrefs(s) + ' секунд', ''); if (URL[0] == false) return; else var timer = [URL[1]]; //переключаем настройки в about:config(toggle preference) prefs.setCharPref(s, timer); })(); //пункт меню(menuitems) var label = CloseTimer + custombuttons.getPrefs("FindBar.CloseTimer") + ' секунд'; this.CloseTimer = label; if(mi) mi.label = label; }; //FindBar.mini...... if(!id || id == "FBmini") { //переключаем настройки в about:config s = "FindBar.mini"; togglePref(s); //Запускаем функцию fmini(run fmini) if (id) fmini(event); //изменить нужный пункт меню var cek = (custombuttons.getPrefs(s)? c : n); this.FBcek = cek; if(mi) mi.cek = cek; }; //Кнопка 'очистить'...... if(!id || id == "FBbutt") { //переключаем настройки в about:config s = "FindBar.ClearButton"; togglePref(s); //Запускаем функции ClearButton и fmini(run ClearButton, fmini) if (id) ClearButton(event); if (id) fmini(event); //изменить нужный пункт меню var cek = (custombuttons.getPrefs(s)? c : n); this.FCBcek = cek; if(mi) mi.cek = cek; }; //Find в контекстном меню(Find in the context menu)..... if(!id || id == "FindInMenu") { // переключаем настройки в about:config s = "FindBar.contextFindWords"; togglePref(s); //изменить нужный пункт меню var cek = (custombuttons.getPrefs(s)? c : n); this.FIMcek = cek; if(mi) mi.cek = cek; }; //Автоматически очищать поле текстового ввода на Findbar..... if(!id || id == "autoClear") { // переключаем настройки в about:config s = "FindBar.autoclear"; togglePref(s); //Очищистить поле текстового ввода если Findbar закрыт. if (gFindBar.hidden && custombuttons.getPrefs("FindBar.autoclear")) gFindBar._findField.reset(); //изменить нужный пункт меню var cek = (custombuttons.getPrefs(s)? c : n); this.aCcek = cek; if(mi) mi.cek = cek; }; //Переключить двойным средним кликом(Toggle with double middle click)..... if(!id || id == "MiddleClick") { // переключаем настройки в about:config s = "FindBar.ToggleWithDoubleMiddleClick"; togglePref(s); //изменить нужный пункт меню var cek = (custombuttons.getPrefs(s)? c : n); this.MCcek = cek; if(mi) mi.cek = cek; }; //Автовыделение(Switch, Auto Highlight)..... if(!id || id == "SwitchHighlight") { // переключаем настройки в about:config s = "FindBar.Highlight"; togglePref(s); //Изменить иконку кнопки if (id) ToggleImage(event); //переключить кнопку 'Highlight'(toggle Highlight) if (id) document.getElementById('FindToolbar').getElement('highlight').removeAttribute("checked"); //Запускаем функцию Highlight(run function Highlight) if (id) Highlight(event); //изменить нужный пункт меню(toggle menuitems) var cek = (custombuttons.getPrefs(s)? c : n); this.aHcek = cek; if(mi) mi.cek = cek; }; //Изменить цвет для Автовыделение..... if(!id || id == "addColor") { (function () { //Стоп, при инициализации кнопки if (!id) return; //создаем модальное окно для ввода цвета var URL = custombuttons.promptBox('Изменить цвет для Автовыделение', 'По умолчанию: #ef0fff', ''); if (URL[0] == false) return; else var color = [URL[1]]; //переключаем настройки в about:config(toggle preference) prefs.setCharPref("ui.textHighlightBackground", color); })(); //пункт меню(menuitems) var label = 'Изменить цвет' + ': ' + custombuttons.getPrefs("ui.textHighlightBackground"); this.addColor = label; if(mi) mi.label = label; }; //Автовыделение, добавить текст....... if(!id || id == "AddText") { //Запускаем функцию HighlightAdd(run function HighlightAdd) if (id) HighlightAdd(event); }; //Автовыделение, сбросить ..... if(!id || id == "Clear") { //сбросить настройки в about:config if (id) prefs.setCharPref("FindBar.Highlight.value", ""); //Запускаем функцию Highlight(run function Highlight) if (id) Highlight(event); //всплывающая подсказка if (id) custombuttons.alertSlide(ClearPref,'????'); }; //переключаем настройки в about:config(toggle preference).... function togglePref(s){ //Стоп, при инициализации кнопки if (!id) return; //переключаем настройки custombuttons.setPrefs(s, !custombuttons.getPrefs(s)); } }; //Запускаем функцию CBlabel(run CBlabel)......... this.CBlabel(); //пункти меню(Our menu items) .... this.ss = [ { cek: this.FBCcek, label: AutoClose, cmd: 'document.popupNode.CBlabel(this, "FBClose")', sItemId: '', type:'checkbox'}, { label: this.CloseTimer, cmd: 'document.popupNode.CBlabel(this, "CloseTimer")', sItemId: ''}, { label: "separator", sItemId: ''}, { cek: this.FBcek, label: 'FindBar мини', cmd: 'document.popupNode.CBlabel(this, "FBmini")', sItemId: '', type:'checkbox'}, { cek: this.FCBcek, label: 'Кнопка "очистить" на FindBar', cmd: 'document.popupNode.CBlabel(this, "FBbutt")', sItemId: '', type:'checkbox'}, { label: "separator", sItemId: ''}, { cek: this.FIMcek, label: 'Find в контекстном меню', cmd: 'document.popupNode.CBlabel(this, "FindInMenu")', sItemId:'', type:'checkbox'}, { cek: this.aCcek, label: 'Очищать поисковую форму', cmd: 'document.popupNode.CBlabel(this, "autoClear")', sItemId:'', type:'checkbox'}, { cek: this.MCcek, label: 'Переключать двойным средним кликом', cmd: 'document.popupNode.CBlabel(this, "MiddleClick")', sItemId:'', type:'checkbox'}, { label: "separator", sItemId: ''}, { cek: this.aHcek, label: AutoHighlight, cmd: 'document.popupNode.CBlabel(this, "SwitchHighlight")', sItemId: '', type:'checkbox'}, { label: this.addColor, cmd: 'document.popupNode.CBlabel(this, "addColor")', sItemId: ''}, { label: 'Добавить текст', cmd: 'document.popupNode.CBlabel(this, "AddText")', sItemId: ''}, { label: ClearPref, cmd: 'document.popupNode.CBlabel(this, "Clear")', sItemId: ''}]; // Our Initialization function for creating the context menu, setting up menuitems and telling var Cb = custombuttons; this.mObj = Cb.getCbContextObj(this); this.init = function(x) { x.mObj.setSub(); var nItem = {}, mItem = {}; document.getElementById(CB2const.sCBCtxtMenu).setAttribute("oncommand", "event.stopPropagation()"); for(var i in x.ss) { nItem = new x.mObj.getItem(); nItem.id = 'Note'; nItem.label = x.ss[i].label; if (nItem.label == "separator") { nItem = document.createElement("menuseparator"); } nItem.value = String(i); mItem = x.mObj.insertBefore(nItem , x.mObj.oMenu.lastChild); this.ss[i].sItemId = mItem.id; mItem.setAttribute('oncommand',x.ss[i].cmd); if("type" in x.ss[i]) mItem.setAttribute('type', x.ss[i].type); mItem.setAttribute('checked', x.ss[i].cek) mItem.setAttribute( 'autocheck',true) } x.mObj.getItem(); nItem = x.mObj.getItem(); nItem.id = 'Note'; this.separator = x.mObj.insertBefore( nItem , x.mObj.oMenu.lastChild); } this.init(this); //Стоп, при открытии настройки панелей.................................................... if (window.ToggleFindRun == 'stop') return; //Findbar, переклучить атрибут 'mini'(Findbar, set and remove attribute 'mini')........... //Findbar, установить и удалить 'hits'(Findbar, set and remove 'hits')........... function fmini(event){ //FindBar, auto find if (!gFindBar.hidden) { //Find gFindBar.onFindCommand(); } var findToolbar = document.getElementById("FindToolbar"); var HighBut = document.getAnonymousElementByAttribute( gFindBar, "anonid", "highlight"); if (custombuttons.getPrefs("FindBar.mini")) { //... var highlightBtn = document.getElementById('FindToolbar').getElement('highlight'); if (highlightBtn.checked) { gFindBar._findField.style.color = prefs.getCharPref("ui.textHighlightBackground"); highlightBtn.removeAttribute("checked"); }; findToolbar.setAttribute("mini", "true"); this.hits = ' '; var Rtext = custombuttons.getPrefs("FindBar.ClearButton") ? "Искать предыдущее" : "Очистить поле текстового ввода"; var text = "L = Искать следущее"+"\n" +"M = Поиск выделенного текста/из буфера" + "\n" + "R = " + Rtext; HighBut.setAttribute("tooltiptext", text ); } else { var highlightBtn = document.getElementById('FindToolbar').getElement('highlight'); findToolbar.removeAttribute("mini") this.hits = ' hits'; HighBut.setAttribute("tooltiptext", "Highlight"); //... if (!!gFindBar._findField.style.color) { highlightBtn.setAttribute("checked", "true"); gFindBar._findField.removeAttribute("style"); } } //Findbar, убрать фокус(Findbar, hide focus) _content.focus(); }; //Findbar, переклучить атрибут 'autohide'...... function Autohide(event){ var f = document.getElementById("FindToolbar"); custombuttons.getPrefs("FindBar.auto_Close") ? f.setAttribute("autohide", "true") : f.removeAttribute("autohide"); }; //Findbar, переклучить атрибут 'ClearButton'...... function ClearButton(event){ var ft = document.getElementById("FindToolbar"); custombuttons.getPrefs("FindBar.ClearButton") ? ft.setAttribute("ClearButton", "true") : ft.removeAttribute("ClearButton"); }; //Запускаем функции fmini(Run the function fmini) setTimeout(function() {fmini(event);Autohide(event);ClearButton(event);}, 200) //Изменить иконку кнопки................................................................. function ToggleImage(event){ // toggle button image if (custombuttonsUtils.getPrefs("FindBar.Highlight")) { this_.image="data:image/x-icon;base64,AAABAAEAExMAAAEAIAAYBgAAFgAAACgAAAATAAAAJgAAAAEAIAAAAAAA8AUAAAAAAAAAAAAAAAAAAAAAAAAAAAICAAAAADoHVOdAAWH/PQBd/TwAXP9AAWL/PwBf/z0AXv85AFn/MgBN/zEAS/85AFn/QgFj/zsAW/09AV7/OAdR5wAAAAAAAAACAAAAADsFWdtNAnr/TgF+/08Afv9PAH7/TwJ//0wAff9XD4T/azaN/1Emav8yAFD/RQNw/1ABgf9OAH3/TgB+/00Dev87BVnbAAAAADwIVudRAYH9VACK/1UEiv9UAYn/VACJ/1cEi/9MAIP/dzeh/+TV8P+olrH/LQBK/0sDdf9VAYj/VACJ/1QAif9UAIr/TwB9/ToHU+dEAWj/WAiM/loIkf9ZCZD/WQiP/1kIj/9dDJH/UQCI/4JAqf/68v//t6m+/zAAUP9OB3v/VwaM/1kIj/9ZCI//WgiR/1YIjP5DAmX/RQFo/V0Jlf9eB5r/XgiX/2AJnP9fCZn/Yw6b/1gAlP+DRq3/+PH+/7qsw/81AFr/UQmC/1wGlv9fCJn/XwiX/2AJmv9dCJb/RABp/UYDbf9eCJz/ZAih/2AIn/9jCaD/Ywqf/2QLnf9HAIP/aTKT/+fb8P+unLv/KABO/0gLc/9XC4r/XwmZ/18Lnv9hCaD/Xgic/0YDbv9IBnD/Yg2i/2cNqP9kDaX/Zg+n/2MHo/9dC5X/dT2Z/7ScxP/4+fv/0sbb/2g9hv9DC2n/RAVu/1QHif9hCKD/ZQuo/2INov9IBnD/SwVz/2YMqv9pDrD/aA+u/2kOrv9sGqf/p4HF/+Db5//Zy+X/yq7g/97O6//g2Oj/nH20/0sYdP9GCHT/XgeY/2gSrf9mDKr/SgVz/0oHd/9rELD/bA62/20QtP9jAa3/q3/O/+DY5/+vjsj/fziz/3wpuv+MRcT/wpvi/+jb8v+Ze7P/OABn/1MJiv9mEK7/aw+x/0oHd/9MCXz/cRW5/34nw/+AK8L/ikLE/+nZ9f+3o8b/YyKU/24Xr/9/J8T/dRy9/4Mzwv/TtOz/4Nfp/2M0if9cHYz/dSK3/3IYuP9MCXz/Twl+/4Arxf+SRdP/kEPQ/7eL4P/j1e7/hWSi/2kxmv+TT8r/lU/T/5VR0f+NQc3/sX3g/+PX7v+Vdqz/aDCU/4tCx/9/LcP/Twh+/1QSgf+QQtD/mkva/5JA1f+7i+X/2Mbp/4Bdnv9fKI3/hEG9/5NH1P+WS9j/jUHR/6t12//Yx+X/lHau/2svnv+US9P/j0HP/1QSgv9dIIn/lEbW/5tM3/+VRNv/s3zl/+7h+v+fgLn/WCeG/2w3nf+LR8P/kUXP/4I5wP+xitX/4dnp/49or/+BO7n/mUzc/5VG1v9cIIn/XyGM/5ZL2/+cUOX/mk/i/59V4//n0vv/2Mnl/4Zfqv9dL4v/ZCyV/3I3pf+NZLX/08ff/9fJ5f+CR7f/lUvV/51P5P+WS9v/XiGL/14gi/2aTeH/oVHr/6BR6P+bR+n/vIPu/+zb+v/h0ez/qYjD/4hjqP+ehLb/2dDi/+TX8P+pd9T/j0PV/55R5v+iUu3/mk3h/14gi/1kJZL/nU/n/qNU8v+gU+//pVbv/6FQ7/+3evH/3MP3//Pp/f/47///9ez//9vA9v+uceX/m0vj/6NU7v+iU+//plXy/5xP6P5iJJH/Wyt+55pR3/2mWPj/pVj3/6RY9/+nWvb/pVX1/6db9v+sZvf/rWn2/6xm9/+oXPb/pVb3/6ZZ+P+kWPf/plf3/6ZX+P+ZUN79Wyt+5wAAAABzQJ3bn1Ln/6JU9P+hV/X/oVb0/6NV9P+iV/X/olb1/6JV9P+iVfT/o1X0/6NW9P+iVfT/olX0/6NU9P+eUub/bj2W2wAAAAACAAICAAAAAGo9jeeBRa//fEOs/XxErf98RK3/fESt/3xErf98RK3/fESt/3xErf98RK3/fESt/3tDrP19RKv/az6K5wAAAAACAAICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=="; } else { this_.image="data:image/x-icon;base64,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"; } }; ToggleImage(event); //find bar сверху (move find bar to the top)................................................ XPCOMUtils.defineLazyGetter(window, "gFindBar", function() { let XULNS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"; let findbar = document.createElementNS(XULNS, "findbar"); findbar.setAttribute("browserid", "content"); findbar.id = "FindToolbar"; gBrowser.parentNode.insertBefore(findbar, gBrowser); // Force a style flush to ensure that our binding is attached. findbar.clientTop; window.gFindBarInitialized = true; return findbar; }); //find bar, показать количество совпадений(find bar,show the number of matches)...@author slimx................. (function() { //add label to findbar var status = document.getAnonymousElementByAttribute(gFindBar, 'anonid', 'match-case-status'); var sep = document.createElement("toolbarspacer"); var count = document.createElement("label"); count.hidden = true; status.parentNode.insertBefore(sep, status); status.parentNode.insertBefore(count, status);//findbar-container gFindBar.__proto__._foundMatches = count; gFindBar.__proto__._updateMatchesCount = function(aRes) { if (!this._updateMatchCountTimeout) window.clearTimeout(this._updateMatchCountTimeout); this._updateMatchCountTimeout = window.setTimeout(function(aRes, aSelf) { aSelf._updateMatchesCountWorker(aRes); }, 0, aRes, this); } gFindBar.__proto__._updateMatchesCountWorker = function(aRes) { var word = this._findField.value; if (aRes == this.nsITypeAheadFind.FIND_NOTFOUND || !word) { this._foundMatches.hidden = true; this._foundMatches.value = ""; } else { var matchesCount = this._countMatches(word).toString(); if (matchesCount != "0") { if (matchesCount == "1") this._foundMatches.value = matchesCount + hits; else if (matchesCount == "-1") { var matchLimit = 100; this._foundMatches.value = " \>"+ matchLimit + hits; // var key = (matchLimit > 1000) ? "Decrease" : "Increase"; } else this._foundMatches.value = matchesCount + hits; this._foundMatches.hidden = false; //Findbar, удалить атрибут 'red'(Findbar, remove attribute 'red').............. var findToolbar = document.getElementById("FindToolbar"); findToolbar.removeAttribute("red"); } else { this._foundMatches.hidden = true; this._foundMatches.value = ""; //Findbar, установить атрибут 'red'(Findbar, set attribute 'red')............... var findToolbar = document.getElementById("FindToolbar"); findToolbar.setAttribute("red", "true"); } window.clearTimeout(this._updateMatchCountTimeout); } } gFindBar.__proto__._countMatches = function(aWord, aWindow) { var win = aWindow || this.browser.contentWindow; var countFound = 0; for (var i = 0, count; win.frames && i < win.frames.length; i++) { if ((count = this._countMatches(aWord, win.frames[i])) != -1) countFound += count; else return count; } var doc = win.document; if (!doc || !(doc instanceof HTMLDocument)) return countFound; var body = doc.body; var count = body.childNodes.length; var searchRange = doc.createRange(); var startPt = doc.createRange(); var endPt = doc.createRange(); searchRange.setStart(body, 0); searchRange.setEnd(body, count); startPt.setStart(body, 0); startPt.setEnd(body, 0); endPt.setStart(body, count); endPt.setEnd(body, count); var retRange = null; var finder = Components.classes["@mozilla.org/embedcomp/rangefind;1"] .createInstance() .QueryInterface(Components.interfaces.nsIFind); finder.caseSensitive = this._shouldBeCaseSensitive(aWord); var matchLimit = 100; while ((retRange = finder.Find(aWord, searchRange, startPt, endPt))) { if (this._rangeIsVisible(retRange, win)) { if (this._findMode == this.FIND_LINKS) { if (this._rangeStartsInLink(retRange)) ++ countFound; } else ++ countFound; } if (countFound == matchLimit) { countFound = -1; break; } startPt = doc.createRange(); startPt.setStart(retRange.startContainer, retRange.startOffset + 1); } return countFound; } gFindBar.__proto__._rangeIsVisible = function(aRange, aWindow) { var node = aRange.startContainer; if (node.nodeType == node.ELEMENT_NODE) { if (node.hasChildNodes) { var childNode = node.childNodes[aRange.startOffset]; if (childNode) node = childNode; } } while (node && node.nodeType != node.ELEMENT_NODE) node = node.parentNode; // There is no perfect way to check if a node is visible in JavaScript, // so use the best measures we can have if (node) { var style = aWindow.getComputedStyle(node, ""); if (style) { if (style.visibility == "hidden" || style.visibility == "collapse" || style.display == "none") return false; if (style.left != "auto" && style.width != "auto") if (style.left < 0 && style.left + style.width < 0) return false; if (style.top != "auto" && style.height != "auto") if (style.top < 0 && style.top + style.height < 0) return false; } } return true; } gFindBar.__proto__._rangeStartsInLink = function(aRange) { var isInsideLink = false; var node = aRange.startContainer; if (node.nodeType == node.ELEMENT_NODE) { if (node.hasChildNodes) { var childNode = node.childNodes[aRange.startOffset]; if (childNode) node = childNode; } } const XLink_NS = "http://www.w3.org/1999/xlink"; do { if (node instanceof HTMLAnchorElement) { isInsideLink = node.hasAttribute("href");m break; } else if (typeof node.hasAttributeNS == "function" && node.hasAttributeNS(XLink_NS, "href")) { isInsideLink = (node.getAttributeNS(XLink_NS, "type") == "simple"); break; } node = node.parentNode; } while (node); return isInsideLink; } //insert count function to original eval("gFindBar._updateCaseSensitivity=" + gFindBar._updateCaseSensitivity.toString().slice(0, -1) + "this._updateMatchesCount();}"); eval("gFindBar._updateStatusUI=" + gFindBar._updateStatusUI.toString().slice(0, -1) + "this._updateMatchesCount();}"); })(); //FindBar, поиск колесиком мыши(FindBar, Mouse Scroll find )................................................ gFindBar.addEventListener('DOMMouseScroll', function (event){ //Найти (Find) gFindBar.onFindAgainCommand(event.detail < 0); }, false); //переключить 'Поиск на странице' двойным средним кликом на странице(toggle Find Bar, if Double midlle Click in page).......... //добавляем обработчик для обработки нажатие на кнопку мыши на странице....... gBrowser.addEventListener("mouseup", function(event){ //если нажатие на среднюю кнопку мыши if (event.button !== 1) return; //если разрешено в настройках(about:config) if (!custombuttons.getPrefs("FindBar.ToggleWithDoubleMiddleClick")) return; var _this = this; //если установлен флаг if (_this.open){ //переключить 'Поиск на странице' gFindBar.hidden ? gFindBar.onFindCommand() : gFindBar.close(); Find(event); gFindBar._findField.focus(); } //устанавливаем флаг _this.open = true; //сбросить флаг по таймеру this.timer = 0; this.timer = setTimeout(function(){ _this.open = false;}, 600); }, false); //Автоматически очищать поле текстового ввода на Findbar.................................................. gFindBar.addEventListener("DOMAttrModified", function(event){ var _this = this; //устанавливаем флаг if (gFindBar.hidden){_this.clear = true} //... if (!custombuttons.getPrefs("FindBar.autoclear")) reset; if (gFindBar.hidden){gFindBar._findField.reset()} if (!gFindBar.hidden) { //Снять выделенные на странице если флаг - true if (_this.clear){goDoCommand("cmd_selectNone")} //сбросить флаг _this.clear = false; } }, false); //findbar очистить, кликнуть правим кликом на findbar's label-Найти: или на иконку поиска на FindBar mini(FindBar clear findText, right click on findbar's label, else Find button).............. //findbar поиск, кликнуть левым кликом на findbar's label-Найти: или на иконку поиска на FindBar mini(FindBar find, left click on findbar's label, else Find button).............. var FindButt = document.getAnonymousElementByAttribute(gFindBar, "anonid", "find-label"); FindButt.setAttribute("onclick", "event.stopPropagation(); clickFind(event);"); //.... var HighBut = document.getAnonymousElementByAttribute( gFindBar, "anonid", "highlight"); HighBut.addEventListener("click", function(event){ if (custombuttons.getPrefs("FindBar.mini")) { gFindBar.getElement("highlight").removeAttribute("checked"); //....... clickFind(event); } }, true); //..................... clickFind = function(event){ if ( event.button == 0 ) { event.preventDefault(); event.stopPropagation(); if (custombuttons.getPrefs("FindBar.Highlight")){Highlight(event)}; //Искать следующее gFindBar.onFindAgainCommand(false); } else if ( event.button == 2 ) { if (custombuttons.getPrefs("FindBar.Highlight")){Highlight(event)}; //Запускаем функцию findFieldClear или искать предыдущее custombuttons.getPrefs("FindBar.ClearButton") ? gFindBar.onFindAgainCommand(true) : findFieldClear(event); } }; //кнопка 'Highlight' на FindBar.mini всегда включена................................................................... var highlightBtn = document.getElementById('FindToolbar').getElement('highlight'); highlightBtn.addEventListener("mouseover", function(event){ if (custombuttons.getPrefs("FindBar.mini")) { highlightBtn.setAttribute("disabled", "false") } }, false); //Поиск по странице из буфера обмена/выделенный текст, если кликнуть средним кликом на findbar или на иконку поиска на FindBar mini ....... //переключить кнопку 'Highlight' двойным левым кликом на на поле текстового ввода на FindBar............ //Стоп, при открытии настройки панелей(stop, if onDestroy) if (window.ToggleFindRun !== 'stop') (function () { //Поиск по странице из буфера обмен gFindBar.addEventListener("click", function(event){ if ( event.button != 1 )return; event.preventDefault(); event.stopPropagation(); //........ var sel = content.getSelection().toString(); var str =(!!sel) ? sel : readFromClipboard(); //Убираем пробелы с обоих концов текста. var str = str.replace(/^\s+|\s+$/g,""); //... gFindBar._findField.value = str; Find(event); }, true); //переключить кнопку 'Highlight'......... gFindBar._findField.addEventListener("dblclick", function(event){ if ( event.button != 0 )return; event.preventDefault(); event.stopPropagation() //.... if (!custombuttons.getPrefs("FindBar.mini")) return; if (custombuttons.getPrefs("FindBar.Highlight")) return; //Запускаем функцию toggleHighlight toggleHighlight(event); //Findbar, убрать фокус(Findbar, hide focus) _content.focus(); }, false); })(); //FindBar, автоматически закрыть(autohide Findbar)................................. //Стоп, при открытии настройки панелей(stop, if onDestroy) if (window.ToggleFindRun !== 'stop') (function () { function go() { gFindBar.close(); window.ACRun = ''; } function on() { if (!custombuttons.getPrefs("FindBar.auto_Close")) return; if (window.ACRun == 'stop') return; window.ACRun = 'stop'; timeoutId = 0; timeoutId = setTimeout(go, custombuttons.getPrefs("FindBar.CloseTimer") + '000') } function off() { if (!custombuttons.getPrefs("FindBar.auto_Close")) return; window.ACRun = ''; clearTimeout(timeoutId); } gFindBar.addEventListener("DOMAttrModified", function(event){if (gFindBar.hidden) off() }, false); addEventListener('mouseover', function(event){ if (!gFindBar.hidden) (event.target.nodeName !== 'findbar')? on(): off() }, false); })(); //FindBar, сочетания клавиш(Key config)......................................................... //Стоп, при открытии настройки панелей(stop, if onDestroy) if (window.ToggleFindRun !== 'stop')(function () { window.addEventListener('keydown', function (event){ //FindBar(ctrl+ F)показать - скрыть(Toggle Find Bar)......... if ((event.ctrlKey)&&(!event.altKey)&&(event.keyCode==70)) { event.preventDefault(); event.stopPropagation(); //переключить 'Поиск на странице' gFindBar.hidden ? gFindBar.onFindCommand() : gFindBar.close(); Find(event); gFindBar._findField.focus(); } //Findbar(ctrl+ALT+F), поиск по странице из буфера обмена(find from clipboard)............. if ((event.ctrlKey)&&(event.altKey)&&(event.keyCode==70)) { gFindBar.hidden ? gFindBar.onFindCommand() : gFindBar.close(); goDoCommand("cmd_selectNone"); goDoCommand("cmd_paste"); Find(event); } //Findbar(ctrl+ALT+H), FindBar, вести слова для выделение(set Highlight words)... if ((event.ctrlKey)&&(event.altKey)&&(event.keyCode==72)) { //Запускаем функцию HighlightAdd(run HighlightAdd) HighlightAdd(event); } }, false); })(); //переключить кнопку 'Highlight'(toggle Highlight)............................................ function toggleHighlight(event) { var highlightBtn = document.getElementById('FindToolbar').getElement('highlight'); //... if (!gFindBar._findField.style.color) { gFindBar._highlightDoc(true, gFindBar._findField.value); gFindBar._findField.style.color = prefs.getCharPref("ui.textHighlightBackground"); } else { gFindBar._highlightDoc(false); gFindBar._findField.removeAttribute("style"); } }; //Автоматически выделить заранее введенные слова (auto Highlight words permanent).................................................... Highlight = function(event) { //устанавливаем флаги... var m = true; if (event =='[object UIEvent]'){var m = false}; if (event =='[object DragEvent]'){var m = false}; if (event =='[object MouseEvent]'){var m = false}; //hide Highlight gFindBar._highlightDoc(false); //.... var FBNum = custombuttons.getPrefs("FindBar.AutohighlightNum"); var FBvalue = gFindBar._findField.value; //.... if (!gFindBar.hidden) { //... if (!!gFindBar._findField.style.color) { gFindBar._findField.removeAttribute("style"); } //Findbar, удалить атрибут 'red'(Findbar, remove attribute 'red').............. if (FBvalue.length == '0') { var findToolbar = document.getElementById("FindToolbar"); findToolbar.removeAttribute("red"); } //FindBar, auto find if (m) { //Findbar, фокус(Findbar, focus) gFindBar._findField.focus(); gFindBar.onFindCommand(); //Findbar, убрать фокус(Findbar, hide focus) _content.focus(); } } //auto Highlight if (custombuttonsUtils.getPrefs("FindBar.Highlight")) { if (gFindBar.hidden) { //getting prefs Unicode value var value = prefs.getComplexValue("FindBar.Highlight.value", Components.interfaces.nsISupportsString).data; } if (!gFindBar.hidden) { var value =(FBvalue.length > FBNum)? FBvalue : "??????"; } //Highlight gFindBar._highlightDoc(true, value); } }; if (window.ToggleFindRun !== 'stop') (function () { //добавляем обработчики..... //обработчики для табов.. gBrowser.tabContainer.addEventListener("TabSelect", Highlight, false); gBrowser.addEventListener("DOMContentLoaded", function(event){ //фылтр.... //стоп, если открыть новые таби if (event.target.location.href !== getBrowser().currentURI.spec) return; //стоп, если срабатывает на фрейме var document = event.originalTarget; if (document instanceof HTMLDocument && this.contentWindow.document !== document) return; Highlight(event)}, false); //обработчики для FindBar.. gFindBar._findField.addEventListener("input", Highlight, false); gFindBar._findField.setAttribute("ondrop","event.stopPropagation(); Find(event); "); gFindBar.addEventListener("DOMAttrModified", function(event){ if (!gFindBar.hidden) return; Highlight(event)}, false); })(); //FindBar. контекстного меню (context Menu)....................................... (function contextFindWords(){ // выходим, если функция уже выполнялась if (document.getElementById("contextFindWords")) return; const kXULNS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"; var contextMenu = document.getElementById("contentAreaContextMenu"); var separator = document.getElementById("context-sep-properties"); var eventTarget = null; var menu = document.createElementNS(kXULNS, "menu"); menu.id = "contextFindWords"; menu.setAttribute("label", "Find"); menu.hidden = true; contextMenu.insertBefore(menu, separator); var menuPopup = document.createElementNS(kXULNS, "menupopup"); menu.appendChild(menuPopup); var lst = [ { label:"Найти на странице", command:ContexFind }, { label:"Поиск по сайту(google)", command:Search }, { label:"Выделить текст на странице", command:HighlightSel }, { label:"Автовыделение, добавить текст", command:addSel } ]; for(var i = 0, m; m = lst[i]; i++){ var menuItem = document.createElementNS(kXULNS, "menuitem"); menuItem.setAttribute("label", m.label); menuItem.setAttribute("type", "m.radio"); if ("accesskey" in m) menuItem.setAttribute("accesskey", m.accesskey); menuItem.addEventListener("command", m.command, false); menuItem.id = "context-Find-Words-" + m.label.toString(); menuPopup.appendChild(menuItem); } var contextFind = document.getElementById("contextFindWords") contextMenu.addEventListener("popupshowing", setMenuDisplay, false); function setMenuDisplay(aEvent) { if (gContextMenu.isTextSelected) { if (custombuttons.getPrefs("FindBar.contextFindWords")) { contextFind.hidden = false; } else { contextFind.hidden = true; } } } function ContexFind(){ gFindBar.onFindCommand(); //Запускаем функцию Find Find(event); } function Search(){ var focusedWindow = document. commandDispatcher. focusedWindow; var text = focusedWindow. getSelection (). toString (); var doc = getBrowser (). contentDocument; try { var url = doc. location. hostname; } catch(e) { var url = ""; } text = escape (convertFromUnicode ("UTF-8", text)); url = encodeURIComponent (url); var searchUrl = "http://www.google.com/search?as_q=" + text + "&as_sitesearch=" + url; gBrowser.selectedTab = gBrowser.addTab(searchUrl); } function HighlightSel(){ gFindBar.toggleHighlight(false); var text = document.commandDispatcher.focusedWindow.getSelection(); gFindBar._highlightDoc(true, text); goDoCommand("cmd_selectNone"); } function addSel(){ //Запускаем функцию HighlightAdd HighlightAdd(event); } })(); //Если нажать в главном меню Firefox на пункт меню 'Найти'............................................. document.getElementById("cmd_find").setAttribute("oncommand", "gFindBar.onFindCommand(); Find(event);"); //Найти на странице.................................................... Find = function(event){ if (custombuttons.getPrefs("FindBar.Highlight")){Highlight(event)}; if (!gFindBar.hidden) gFindBar._find(gFindBar._findField.value); }; //Очистить поле текстового ввода на Findbar.................................................. function findFieldClear(event){ gFindBar._findField.reset(); gFindBar.onFindAgainCommand(false); //.... var findToolbar = document.getElementById("FindToolbar"); findToolbar.removeAttribute("red"); //... gFindBar._findField.focus(); //.... gFindBar._highlightDoc(false); }; //Добавить текст(выделенный / из буфера обмена) для автовыделения....................................... function HighlightAdd(event){ //Копируем выделенный текст в буфер document.getElementById("cmd_copy").doCommand(); // Get the root branch var prefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch); //setting Unicode value var str = Components.classes["@mozilla.org/supports-string;1"].createInstance(Components.interfaces.nsISupportsString); //читаем из буфера обмена и добавляем текст для автовыделения в 'about:config' str.data = readFromClipboard(); prefs.setComplexValue("FindBar.Highlight.value", Components.interfaces.nsISupportsString, str); //всплывающая подсказка custombuttons.alertSlide(AutoHighlight, str.data); //... goDoCommand("cmd_selectNone"); //Запускаем функцию Highlight(run Highlight) Highlight(event); }; //Поле текстового ввода на Findbar мигает желтим............................ function fflash(event){ var findToolbar = document.getElementById("FindToolbar"); //Следим за иконкой статуса на FindBar var findstatus = gFindBar.getElement("find-status-icon"); findstatus.addEventListener("DOMAttrModified",function(e){ if(findstatus.getAttribute("status")=="wrapped") { findToolbar.setAttribute("flash", "true"); setTimeout(function() {findToolbar.removeAttribute("flash");}, 700)}; }, false)}; //Запускаем функции fflash, fmini(Run the function fflash) document.addEventListener( "DOMContentLoaded", fflash(event), false); //Создать кнопку "Clear" на Findbar......................................................... var ubc=document.getAnonymousElementByAttribute( gFindBar, "anonid", "findbar-textbox"); var btn=document.createElementNS("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul", "toolbarbutton"); btn.setAttribute("id", "ClearButton"); btn.setAttribute("tooltiptext", "L = Очистить поле текстового ввода"); ubc.parentNode.insertBefore(btn, ubc.nextSibling); btn.addEventListener("click", function(event) { if ( event.button != 0 ) return; //Запускаем функцию findFieldClear findFieldClear(event); }, false); // FindToolbar стиль(style)....................................................................... (function(css) { var pi = document.createProcessingInstruction( 'xml-stylesheet', 'type="text/css" href="data:text/css;utf-8,' + encodeURIComponent(css) + '"' ); return document.insertBefore(pi, document.documentElement); } )(<![CDATA[ @namespace url(http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul); /*Find Toolbar.................*/ #FindToolbar { border-bottom: 1px solid grey !important; } #FindToolbar > .findbar-container > * { display: -moz-box !important; } #FindToolbar > hbox > label{-moz-appearance: none !important;font-weight: bold !important;} #find-field,.findbar-textbox{width: 250px !important;} #FindToolbar .findbar-find-fast.findbar-find-status, #FindToolbar .findbar-container>image, #FindToolbar[autohide] .findbar-closebutton {display: none !important;} #FindToolbar[red="true"] .findbar-textbox{box-shadow: 0 0 0 1em #f66 inset;} #FindToolbar:not([red="true"]) .findbar-textbox[status="notfound"]{ background: rgba(207,219,236,0.99) !important; color: black !important; box-shadow: none !important;} /*Find Toolbar, mini......................................... */ #FindToolbar[mini="true"] .findbar-textbox{ width: 16em !important; height:21px!important; padding-right: 20px !important; margin-right: 2px!important; margin-left:-4px!important} #FindToolbar[mini] { position: fixed; right: 18px; background: menu !important; box-shadow: 0px 10px 5px -10px rgba(0,0,0,.3) !important; border: 1px solid grey !important; border-top: 0 !important; border-radius: 0 0 8px 8px !important;} #FindToolbar[mini="true"] .findbar-container>checkbox{ margin-left:-24px !important; margin-right: -3px !important} #FindToolbar[mini] toolbarspacer, #FindToolbar[mini="true"] label[class="checkbox-label"], #FindToolbar[mini="true"] toolbarbutton.findbar-find-next, #FindToolbar[mini="true"] toolbarbutton.findbar-find-previous, #FindToolbar[mini="true"] .findbar-highlight label, #FindToolbar[mini="true"] .findbar-closebutton, #FindToolbar:not([ClearButton="true"]) #ClearButton, #FindToolbar[mini="true"] .findbar-find-fast[anonid="find-label"], #FindToolbar[mini="true"] .findbar-find-fast[anonid="match-case-status"] { display: none !important;} #FindToolbar[mini] .findbar-highlight, #FindToolbar[mini] .findbar-highlight[checked] { list-style-image: url("data:image/gif;base64,R0lGODlhEAAQAMQWAJmZzJlmzGZmzGZm/2aZ/5mZ/5nM/8zM/8z//5mZmWZmmf///8yZzMzMmZlmmZmZM8zMM8zMZsz/ZsyZZpmZZmZmM////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAHoAxYALAAAAAAQABAAAAVsoCUCgQCIaCoKA1G4p7q6RmEXcQoMxYEYQEMOJSAYEL+D8jC0CG6GJTKhUtiAPiSCmlK4er7FgiGzWLGIBUJRZliVCLMi0Sg7FHhq4gGJlFUNEBIQE38pExGDFIYoFIkQi4wWjhEVkiIUFQohADs=") !important; -moz-image-region: auto !important;} #ClearButton{ list-style-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAFgSURBVHjaYv7//z/j69evWR8+fMj19etXHgYGBhjmxoK5gJhDTEyMOT4+/v+pU6f+AwQQM1Azy5o1a/hevXolC5RUAmIFIJYHYlksWBKIhYEWsQEt/PXgwYPfAAHEADQNZKr21KlTD7x8+fLbfwIApAakFqQHpBcggIA0gwAQOxKjGdkQkB6QXoAAYgISzCC/AU3jZMADTExMwBgEoGpBLmcGCCCQAYxQQ/BqxgJAehgBAogJymEkUTNcD0AAMZFhMwoACCAmSjSDAEAAMTGQAM6cOYMhBhBAMAP+o9uelpZGSDNYD0AAgQJCGIgtgNG7BZvmWbNmYRgG4jMyMvoAmScAAogFSPwF4m/ApPwdlhZAmpAVo2sGqQXpAekFCCCKkzJAADFmZWXBMpMUUFAUmsJYcITjH6jNr4Gan4WEhHwCCCAGUHYGGsIKFABlYSGoIWI4MEhOCKQWpAekFyDAAO0k7MPVi8ODAAAAAElF") !important; -moz-image-region: auto !important; margin-right: 1px!important;} #FindToolbar[mini="true"] textbox.findbar-textbox{ -moz-box-ordinal-group: 2 !important} #FindToolbar[mini="true"] checkbox{ -moz-box-ordinal-group: 3 !important;} #FindToolbar[mini="true"] toolbarbutton.findbar-highlight{ -moz-box-ordinal-group: 4 !important;} #FindToolbar[mini="true"] #ClearButton{ -moz-box-ordinal-group: 4 !important;} #FindToolbar[mini="true"] .findbar-closebutton{ -moz-box-ordinal-group: 7 !important;} ]]>.toString()); //устанавливаем флаг window.ToggleFindRun = 'stop'; |
voqabuhe > 23-03-2012 20:24:13 |
bunda1 пишет
Ага, спасибо, заработала. |
iDev.Pi > 24-03-2012 18:30:11 |
bunda1 Так вот у меня родилась идея: добавить хоткей типа CTRL+ALT+F или CTRL+SHIFT+F для открытия панели альтернативным способом. Т.е. он будет делать "обратное" от выставленного в настройках действие: если стоит галка "очищать поисковую форму" - с этим хоткеем она откроется с предыдущим запросом, если галка у этой настройки снята - то с этим хоткеем панель откроется пустой. м? |
bunda1 > 24-03-2012 20:15:47 |
iDev.Pi пишет
Хорошо, это легко. |
vitalii201 > 24-03-2012 21:08:30 |
iDev.Pi |
iDev.Pi > 24-03-2012 21:37:20 |
vitalii201 |
bunda1 > 24-03-2012 21:46:12 |
iDev.Pi пишет
Нет, оказалась это не легко, предлагаю так - CTRL+SHIFT+F будет всегда открывать Findbar с чистой поисковой формой. |
iDev.Pi > 24-03-2012 21:51:23 |
bunda1 пишет
а в чём трудность? мне видится это так: |
bunda1 > 24-03-2012 22:09:56 |
iDev.Pi |
iDev.Pi > 24-03-2012 22:15:40 |
bunda1 пишет
тогда ещё проще: перед очисткой проверить хоткей по которому была открыта панель: если CTRL+SHIFT+F - то очищать не надо. + если галка не стоит, но открыто по ctrl+shift+f - то очистить. |
bunda1 > 24-03-2012 22:21:58 |
iDev.Pi пишет
А, если патом открыть Findbar кнопкой или двойным кликом. |
iDev.Pi > 24-03-2012 22:24:17 |
то действовать так же, как и при CTRL+F, т.е. согласно настройке. |
bunda1 > 24-03-2012 22:27:01 |
Я придумал как сделать то что ты предложил, но все таки мне кажется лучше так: Так легче запомнить мне и другим. |
iDev.Pi > 24-03-2012 22:45:03 |
bunda1 24-03-2012 22:48:35 |
bunda1 > 24-03-2012 22:50:38 |
iDev.Pi пишет
Сложно запомнить. iDev.Pi пишет
Много кода. Мне кажется лучше так: |
iDev.Pi > 24-03-2012 22:55:46 |
bunda1 пишет
ну во-первых это доп. фича, тем кому она не нужна - могут её не запоминать, для них всё останется по прежнему. bunda1 пишет
Тогда все кто любит обычно открывать файндбар пустым - будут всегда жать на 1 кнопку больше. bunda1 пишет
Тогда проще оставить всё как есть. |
bunda1 > 24-03-2012 23:01:33 |
iDev.Pi пишет
Поздно, я уже сделал CTRL+SHIFT+F - открыть пустой файндбар, CTR+F осталось по старому. |
iDev.Pi > 24-03-2012 23:06:05 |
bunda1 пишет
ну, помешать конечно оно никак не помешает, но лично я этой разницы даже не замечу, т.к. у меня всё равно галка стоит. |
iDev.Pi > 28-03-2012 13:07:08 |
у меня почему-то кнопка поломалась: после ввода каждого символа - фокус из текстового поля уходит. Т.е. поиск набирать получается только по 1 символу. 28-03-2012 13:08:24 |
bunda1 > 28-03-2012 20:06:26 |
iDev.Pi пишет
Да, нормально не работает когда делаешь на странице Назад(back) |
bunda1 > 28-03-2012 22:32:27 |
iDev.Pi пишет
iDev.Pi пишет
Добавил новые возможности: Код экспериментальной кнопки Toggle Find+3- для инициализации: скрытый текст Выделить код Код://настройка функций кликов мыши(Mouse Click settings)................................................... this.onclick = function(event) { if(event.button == 0) { // Действие при клике ЛКМ gFindBar.hidden ? gFindBar.onFindCommand() : gFindBar.close(); Find(event); } else if(event.button == 1) { // Действие при клике СКМ gFindBar.hidden ? gFindBar.onFindCommand() : gFindBar.close();с goDoCommand("cmd_selectNone"); goDoCommand("cmd_paste"); } }; //Объявляем ..... var prefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService); var clipboard = Components.classes["@mozilla.org/widget/clipboardhelper;1"]. getService(Components.interfaces.nsIClipboardHelper); var this_ = this; var AutoHighlight ='Автовыделение' var AutoClose ='Автоматически закрыть' var CloseTimer ='Закрыть через ' var ClearPref ='Сбросить текст' //подсказка............................................................................. this.showTFinfo = function() { //getting prefs Unicode value var prefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService); var Val = "\n\n"+ AutoHighlight +": "+ prefs.getComplexValue("FindBar.Highlight.value",Components.interfaces.nsISupportsString).data; //обрезать подсказку для "Автовыделение" var HValue = Val.substring(0,50); var HDots =(Val.length > 50) ? '....' : ""; //.... this.tooltipText = "Поиск по странице" +"\n" + "Л: Показать - скрыть поиск по странице" +"\n" +"С: Поиск по странице из буфера обмена" +"\n"+ "П: Mеню + CB меню" + HValue + HDots; } this.setAttribute("onmouseover", "this.showTFinfo()"); //справка(Help) //this.setAttribute("Help", "event.stopPropagation(); gBrowser.selectedTab = gBrowser.addTab('https://forum.mozilla-russia.org/viewtopic.php?pid=550855#p550855]09-03-2012 19:18:31')"); //проверить наличие строк в about:config и создать если не существует(Add preferences)........................................ if (custombuttons.getPrefs("FindBar.version") !== '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) { //устанавливаем флаги... var m = true; if (event =='[object UIEvent]'){var m = false}; if (event =='[object DragEvent]'){var m = false}; if (event =='[object MouseEvent]'){var m = false}; //hide Highlight gFindBar._highlightDoc(false); //.... var FBNum = custombuttons.getPrefs("FindBar.AutohighlightNum"); var FBvalue = gFindBar._findField.value; //.... if (!gFindBar.hidden) { //... if (!!gFindBar._findField.style.color) { gFindBar._findField.removeAttribute("style"); } //Findbar, удалить атрибут 'red'(Findbar, remove attribute 'red').............. if (FBvalue.length == '0') { var findToolbar = document.getElementById("FindToolbar"); findToolbar.removeAttribute("red"); } //FindBar, auto find if (m) { //Findbar, фокус(Findbar, focus) gFindBar._findField.focus(); gFindBar.onFindCommand(); //Findbar, убрать фокус(Findbar, hide focus) _content.focus(); } } //auto Highlight if (custombuttonsUtils.getPrefs("FindBar.Highlight")) { if (gFindBar.hidden) { //getting prefs Unicode value var value = prefs.getComplexValue("FindBar.Highlight.value", Components.interfaces.nsISupportsString).data; } if (!gFindBar.hidden) { var value =(FBvalue.length > FBNum)? FBvalue : "??????"; } //Highlight gFindBar._highlightDoc(true, value); } }; if (window.ToggleFindRun !== 'stop') (function () { //добавляем обработчики........ //отслеживаем команду Назад(back)... 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", Highlight, 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'; |
iDev.Pi > 28-03-2012 22:35:42 |
bunda1 пишет
не. кажется это у меня профиль поломался, т.к. попробовал на другом - всё работает. |
bunda1 > 28-03-2012 22:39:21 |
iDev.Pi Вот только что теперь делать с кнопкой "очистить" на FindBar? |
voqabuhe > 29-03-2012 20:16:09 |
bunda1 пишет
Теперь стало невозможно править слово в строке. Оно сразу выделяется целиком и его можно только удалить. |
bunda1 > 29-03-2012 21:08:13 |
voqabuhe пишет
Да на всех не угадишь, сделаю это переключаемым через меню. |
iDev.Pi > 29-03-2012 21:18:59 |
bunda1 |
bunda1 > 29-03-2012 21:44:29 |
iDev.Pi пишет
ok P.S. Наверное кнопку "очистить" на FindBar переделаю на "Вставить и перейти" - искать выделенный текст или из буфера обмена, для тех у кого нет СКМ. |
iDev.Pi > 30-03-2012 00:34:54 |
bunda1 iDev.Pi пишет
я выяснил, что дело не у меня в профиле, а в самой найтли: на сборке от 25.03.12 - всё нормально работает, а начиная с 28.03.12 (а может быть и раньше - не помню как там на сборках от 26 и 27) - появляется этот баг. |
bunda1 > 30-03-2012 01:09:22 |
iDev.Pi пишет
Да у меня на найтли тоже были такие временные баги. |
iDev.Pi > 30-03-2012 01:12:50 |
bunda1 |
bunda1 > 30-03-2012 01:25:30 |
iDev.Pi пишет
Завтра исправлю. |
voqabuhe > 30-03-2012 11:07:13 |
iDev.Pi пишет
Подтверждаю. |
bunda1 > 30-03-2012 22:37:19 |
iDev.Pi пишет
Да, они изменили код. Код экспериментальной кнопки Toggle Find+3 для инициализации: скрытый текст Выделить код Код://настройка функций кликов мыши(Mouse Click settings)................................................... this.onclick = function(event) { if(event.button == 0) { // Действие при клике ЛКМ gFindBar.hidden ? gFindBar.onFindCommand() : gFindBar.close(); Find(event); } else if(event.button == 1) { // Действие при клике СКМ gFindBar.hidden ? gFindBar.onFindCommand() : gFindBar.close();с goDoCommand("cmd_selectNone"); goDoCommand("cmd_paste"); } }; //Объявляем ..... var prefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService); var clipboard = Components.classes["@mozilla.org/widget/clipboardhelper;1"]. getService(Components.interfaces.nsIClipboardHelper); var this_ = this; var AutoHighlight ='Автовыделение' var AutoClose ='Автоматически закрыть' var CloseTimer ='Закрыть через ' var ClearPref ='Сбросить текст' //подсказка............................................................................. this.showTFinfo = function() { //getting prefs Unicode value var prefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService); var Val = "\n\n"+ AutoHighlight +": "+ prefs.getComplexValue("FindBar.Highlight.value",Components.interfaces.nsISupportsString).data; //обрезать подсказку для "Автовыделение" var HValue = Val.substring(0,50); var HDots =(Val.length > 50) ? '....' : ""; //.... this.tooltipText = "Поиск по странице" +"\n" + "Л: Показать - скрыть поиск по странице" +"\n" +"С: Поиск по странице из буфера обмена" +"\n"+ "П: Mеню + CB меню" + HValue + HDots; } this.setAttribute("onmouseover", "this.showTFinfo()"); //справка(Help) //this.setAttribute("Help", "event.stopPropagation(); gBrowser.selectedTab = gBrowser.addTab('https://forum.mozilla-russia.org/viewtopic.php?pid=550855#p550855]09-03-2012 19:18:31')"); //проверить наличие строк в about:config и создать если не существует(Add preferences)........................................ if (custombuttons.getPrefs("FindBar.version") !== '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'; |
iDev.Pi > 31-03-2012 03:46:44 |
bunda1 |
bunda1 > 31-03-2012 05:38:07 |
iDev.Pi пишет
Ok |
bunda1 > 31-03-2012 23:52:12 |
Добавил новые возможности: Поменял кнопку "очистить" на кнопку "Вставить и искать" на FindBar, для поиска выделенного на странице текста или текста из буфера обмена. Удобно для тех у кого нет средней мыши кнопки. iDev.Pi пишет
Код экспериментальной кнопки Toggle Find+3 для инициализации: скрытый текст Выделить код Код://настройка функций кликов мыши(Mouse Click settings)................................................... this.onclick = function(event) { if(event.button == 0) { // Действие при клике ЛКМ gFindBar.hidden ? gFindBar.onFindCommand() : gFindBar.close(); Find(event); } else if(event.button == 1) { // Действие при клике СКМ gFindBar.hidden ? gFindBar.onFindCommand() : gFindBar.close(); goDoCommand("cmd_selectNone"); goDoCommand("cmd_paste"); } }; //Объявляем ..... var prefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService); var clipboard = Components.classes["@mozilla.org/widget/clipboardhelper;1"]. getService(Components.interfaces.nsIClipboardHelper); var this_ = this; var AutoHighlight ='Автовыделение' var AutoClose ='Автоматически закрыть' var CloseTimer ='Закрыть через ' var ClearPref ='Сбросить текст' //подсказка............................................................................. this.showTFinfo = function() { //getting prefs Unicode value var prefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService); var Val = "\n\n"+ AutoHighlight +": "+ prefs.getComplexValue("FindBar.Highlight.value",Components.interfaces.nsISupportsString).data; //обрезать подсказку для "Автовыделение" var HValue = Val.substring(0,50); var HDots =(Val.length > 50) ? '....' : ""; //.... this.tooltipText = "Поиск по странице" +"\n" + "Л: Показать - скрыть поиск по странице" +"\n" +"С: Поиск по странице из буфера обмена" +"\n"+ "П: Mеню + CB меню" + HValue + HDots; } this.setAttribute("onmouseover", "this.showTFinfo()"); //справка(Help) //this.setAttribute("Help", "event.stopPropagation(); gBrowser.selectedTab = gBrowser.addTab('https://forum.mozilla-russia.org/viewtopic.php?pid=550855#p550855]09-03-2012 19:18:31')"); //проверить наличие строк в about:config и создать если не существует(Add preferences)........................................ if (custombuttons.getPrefs("FindBar.version") !== '10') { prefs.setCharPref("FindBar.version", "10"); prefs.setBoolPref("FindBar.Highlight", true); prefs.setCharPref("FindBar.Highlight.value", "??????"); prefs.setBoolPref("FindBar.autoclear", false); prefs.setBoolPref("FindBar.contextFindWords", true); prefs.setBoolPref("FindBar.ToggleWithDoubleMiddleClick", false); prefs.setCharPref("ui.textHighlightBackground", "#ef0fff");//http://coloria.net/bonus/colornames.htm //prefs.setCharPref("ui.textHighlightForeground", "#000000");//http://coloria.net/bonus/colornames.htm prefs.setBoolPref("FindBar.mini", false); custombuttons.clearPrefs("FindBar.ClearButton"); prefs.setBoolPref("FindBar.pasteButton", false); prefs.setBoolPref("FindBar.auto_Close", false); prefs.setCharPref("FindBar.CloseTimer", "7");//7 сек(7 sec) prefs.setCharPref("FindBar.AutohighlightNum", "1"); prefs.setBoolPref("FindBar.Autohighlight.ToggleWithDoubleClick", false); }; //настройка меню(CB menu settings)................................................... //Объявляем ..... var c ='true'; var n = 'false'; //изменить нужный пункт меню(toggle menuitems) //переключаем настройки в about:config(toggle preference) this.CBlabel = function (mi, id) { //Автоматически закрыть(FB auto close).... if(!id || id == "FBClose") { //переключаем настройки в about:config s = "FindBar.auto_Close"; togglePref(s); //Запускаем функцию autohide if (id) Autohide(event); //изменить нужный пункт меню var cek = (custombuttons.getPrefs(s)? c: n); this.FBCcek = cek; if(mi) mi.cek = cek; }; //FB auto close timer..... if(!id || id == "CloseTimer") { (function () { //Стоп, при инициализации кнопки if (!id) return; s = "FindBar.CloseTimer"; //switch auto close timer+"\n" + var URL = custombuttons.promptBox(AutoClose, CloseTimer+custombuttons.getPrefs(s) + ' секунд', ''); if (URL[0] == false) return; else var timer = [URL[1]]; //переключаем настройки в about:config(toggle preference) prefs.setCharPref(s, timer); })(); //пункт меню(menuitems) var label = CloseTimer + custombuttons.getPrefs("FindBar.CloseTimer") + ' секунд'; this.CloseTimer = label; if(mi) mi.label = label; }; //FindBar.mini...... if(!id || id == "FBmini") { //переключаем настройки в about:config s = "FindBar.mini"; togglePref(s); //Запускаем функцию fmini(run fmini) if (id) fmini(event); //изменить нужный пункт меню var cek = (custombuttons.getPrefs(s)? c : n); this.FBcek = cek; if(mi) mi.cek = cek; }; //Кнопка 'Вставить и искать'...... if(!id || id == "FBbutt") { //переключаем настройки в about:config s = "FindBar.pasteButton"; togglePref(s); //Запускаем функции pasteButton и fmini(run pasteButton, fmini) if (id) pasteButton(event); if (id) fmini(event); //изменить нужный пункт меню var cek = (custombuttons.getPrefs(s)? c : n); this.FpBcek = cek; if(mi) mi.cek = cek; }; //Find в контекстном меню(Find in the context menu)..... if(!id || id == "FindInMenu") { // переключаем настройки в about:config s = "FindBar.contextFindWords"; togglePref(s); //изменить нужный пункт меню var cek = (custombuttons.getPrefs(s)? c : n); this.FIMcek = cek; if(mi) mi.cek = cek; }; //Автоматически очищать поле текстового ввода на Findbar..... if(!id || id == "autoClear") { // переключаем настройки в about:config s = "FindBar.autoclear"; togglePref(s); //Очищистить поле текстового ввода если Findbar закрыт. if (gFindBar.hidden && custombuttons.getPrefs("FindBar.autoclear")) gFindBar._findField.reset(); //изменить нужный пункт меню var cek = (custombuttons.getPrefs(s)? c : n); this.aCcek = cek; if(mi) mi.cek = cek; }; //Переключить двойным средним кликом(Toggle with double middle click)..... if(!id || id == "MiddleClick") { // переключаем настройки в about:config s = "FindBar.ToggleWithDoubleMiddleClick"; togglePref(s); //изменить нужный пункт меню var cek = (custombuttons.getPrefs(s)? c : n); this.MCcek = cek; if(mi) mi.cek = cek; }; //Автовыделение двойным кликом..... if(!id || id == "dblclikHighlight") { // переключаем настройки в about:config s = "FindBar.Autohighlight.ToggleWithDoubleClick"; togglePref(s); //изменить нужный пункт меню(toggle menuitems) var cek = (custombuttons.getPrefs(s)? c : n); this.dbcHcek = cek; if(mi) mi.cek = cek; }; //Автовыделение(Switch, Auto Highlight)..... if(!id || id == "SwitchHighlight") { // переключаем настройки в about:config s = "FindBar.Highlight"; togglePref(s); //Изменить иконку кнопки if (id) ToggleImage(event); //переключить кнопку 'Highlight'(toggle Highlight) if (id) document.getElementById('FindToolbar').getElement('highlight').removeAttribute("checked"); //Запускаем функцию Highlight(run function Highlight) if (id) Highlight(event); //изменить нужный пункт меню(toggle menuitems) var cek = (custombuttons.getPrefs(s)? c : n); this.aHcek = cek; if(mi) mi.cek = cek; }; //Изменить цвет для Автовыделение..... if(!id || id == "addColor") { (function () { //Стоп, при инициализации кнопки if (!id) return; //создаем модальное окно для ввода цвета var URL = custombuttons.promptBox('Изменить цвет для Автовыделение', 'По умолчанию: #ef0fff', ''); if (URL[0] == false) return; else var color = [URL[1]]; //переключаем настройки в about:config(toggle preference) prefs.setCharPref("ui.textHighlightBackground", color); })(); //пункт меню(menuitems) var label = 'Изменить цвет' + ': ' + custombuttons.getPrefs("ui.textHighlightBackground"); this.addColor = label; if(mi) mi.label = label; }; //Автовыделение, добавить текст....... if(!id || id == "AddText") { //Запускаем функцию HighlightAdd(run function HighlightAdd) if (id) HighlightAdd(event); }; //Автовыделение, сбросить ..... if(!id || id == "Clear") { //сбросить настройки в about:config if (id) prefs.setCharPref("FindBar.Highlight.value", ""); //Запускаем функцию Highlight(run function Highlight) if (id) Highlight(event); //всплывающая подсказка if (id) custombuttons.alertSlide(ClearPref,'????'); }; //переключаем настройки в about:config(toggle preference).... function togglePref(s){ //Стоп, при инициализации кнопки if (!id) return; //переключаем настройки custombuttons.setPrefs(s, !custombuttons.getPrefs(s)); } }; //Запускаем функцию CBlabel(run CBlabel)......... this.CBlabel(); //пункти меню(Our menu items) .... this.ss = [ { cek: this.FBCcek, label: AutoClose, cmd: 'document.popupNode.CBlabel(this, "FBClose")', sItemId: '', type:'checkbox'}, { label: this.CloseTimer, cmd: 'document.popupNode.CBlabel(this, "CloseTimer")', sItemId: ''}, { label: "separator", sItemId: ''}, { cek: this.FBcek, label: 'FindBar мини', cmd: 'document.popupNode.CBlabel(this, "FBmini")', sItemId: '', type:'checkbox'}, { cek: this.FpBcek, label: 'Кнопка "Вставить и искать" на FindBar', cmd: 'document.popupNode.CBlabel(this, "FBbutt")', sItemId: '', type:'checkbox'}, { label: "separator", sItemId: ''}, { cek: this.FIMcek, label: 'Find в контекстном меню', cmd: 'document.popupNode.CBlabel(this, "FindInMenu")', sItemId:'', type:'checkbox'}, { cek: this.aCcek, label: 'Всегда открывать пустую поисковую форму', cmd: 'document.popupNode.CBlabel(this, "autoClear")', sItemId:'', type:'checkbox'}, { cek: this.MCcek, label: 'Переключать двойным средним кликом', cmd: 'document.popupNode.CBlabel(this, "MiddleClick")', sItemId:'', type:'checkbox'}, { label: "separator", sItemId: ''}, { cek: this.dbcHcek, label: 'Автовыделение двойным кликом на поисковой форме', cmd: 'document.popupNode.CBlabel(this, "dblclikHighlight")', sItemId: '', type:'checkbox'}, { cek: this.aHcek, label: AutoHighlight, cmd: 'document.popupNode.CBlabel(this, "SwitchHighlight")', sItemId: '', type:'checkbox'}, { label: this.addColor, cmd: 'document.popupNode.CBlabel(this, "addColor")', sItemId: ''}, { label: 'Добавить текст', cmd: 'document.popupNode.CBlabel(this, "AddText")', sItemId: ''}, { label: ClearPref, cmd: 'document.popupNode.CBlabel(this, "Clear")', sItemId: ''}]; // Our Initialization function for creating the context menu, setting up menuitems and telling var Cb = custombuttons; this.mObj = Cb.getCbContextObj(this); this.init = function(x) { x.mObj.setSub(); var nItem = {}, mItem = {}; document.getElementById(CB2const.sCBCtxtMenu).setAttribute("oncommand", "event.stopPropagation()"); for(var i in x.ss) { nItem = new x.mObj.getItem(); nItem.id = 'Note'; nItem.label = x.ss[i].label; if (nItem.label == "separator") { nItem = document.createElement("menuseparator"); } nItem.value = String(i); mItem = x.mObj.insertBefore(nItem , x.mObj.oMenu.lastChild); this.ss[i].sItemId = mItem.id; mItem.setAttribute('oncommand',x.ss[i].cmd); if("type" in x.ss[i]) mItem.setAttribute('type', x.ss[i].type); mItem.setAttribute('checked', x.ss[i].cek) mItem.setAttribute( 'autocheck',true) } x.mObj.getItem(); nItem = x.mObj.getItem(); nItem.id = 'Note'; this.separator = x.mObj.insertBefore( nItem , x.mObj.oMenu.lastChild); } this.init(this); //Стоп, при открытии настройки панелей.................................................... if (window.ToggleFindRun == 'stop') return; //Findbar, переклучить атрибут 'mini'(Findbar, set and remove attribute 'mini')........... //Findbar, установить и удалить 'hits'(Findbar, set and remove 'hits')........... function fmini(event){ //FindBar, auto find if (!gFindBar.hidden) { //Find gFindBar.onFindCommand(); } var findToolbar = document.getElementById("FindToolbar"); var HighBut = document.getAnonymousElementByAttribute( gFindBar, "anonid", "highlight"); if (custombuttons.getPrefs("FindBar.mini")) { //... var highlightBtn = document.getElementById('FindToolbar').getElement('highlight'); if (highlightBtn.checked) { gFindBar._findField.style.color = prefs.getCharPref("ui.textHighlightBackground"); highlightBtn.removeAttribute("checked"); }; findToolbar.setAttribute("mini", "true"); this.hits = ' '; var text = "L = Искать следущее"+"\n" +"M = Поиск выделенного текста/из буфера" + "\n" + "R = Искать предыдущее"; HighBut.setAttribute("tooltiptext", text ); } else { var highlightBtn = document.getElementById('FindToolbar').getElement('highlight'); findToolbar.removeAttribute("mini") this.hits = ' hits'; HighBut.setAttribute("tooltiptext", "Highlight"); //... if (!!gFindBar._findField.style.color) { highlightBtn.setAttribute("checked", "true"); gFindBar._findField.removeAttribute("style"); } } //Findbar, убрать фокус(Findbar, hide focus) _content.focus(); }; //Findbar, переклучить атрибут 'autohide'...... function Autohide(event){ var f = document.getElementById("FindToolbar"); custombuttons.getPrefs("FindBar.auto_Close") ? f.setAttribute("autohide", "true") : f.removeAttribute("autohide"); }; //Findbar, переклучить атрибут 'pasteButton'...... function pasteButton(event){ var ft = document.getElementById("FindToolbar"); custombuttons.getPrefs("FindBar.pasteButton") ? ft.setAttribute("pasteButton", "true") : ft.removeAttribute("pasteButton"); }; //Запускаем функции fmini(Run the function fmini) setTimeout(function(){ fmini(event); Autohide(event); pasteButton(event);}, 200) //Изменить иконку кнопки................................................................. function ToggleImage(event){ // toggle button image if (custombuttonsUtils.getPrefs("FindBar.Highlight")) { this_.image="data:image/x-icon;base64,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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'; |
voqabuhe > 01-04-2012 11:59:25 |
bunda1 пишет
Кнопка стала просто шикарная |
bunda1 > 01-04-2012 12:23:29 |
voqabuhe |
iDev.Pi > 01-04-2012 17:11:56 |
bunda1 пишет
спасибо, выделение работает просто замечательно. |
bunda1 > 01-04-2012 18:16:13 |
iDev.Pi пишет
Хорошо, я сделаю. Тут проблема как запомнить текст из поисковой формы, можно записать в about:config но это не интересно, мне хочется другое. Хочу сделать красиво. |
iDev.Pi > 01-04-2012 20:07:27 |
bunda1 если с shift - то очищать НЕ надо. shift+f, если в настройках кнопки нестоит галка у "Всегда открывать пустую поисковую форму". |
bunda1 > 01-04-2012 21:43:29 |
iDev.Pi пишет
Точно. Надо это использовать. iDev.Pi пишет
А вот и нет. iDev.Pi пишет
Да ты кругом прав но так не хочется переделывать проверенный код, много кода. |
Чайник > 03-04-2012 18:24:24 |
А можно сделать поиск по ссылкам на странице, но не по тексту ссылки, а по её адресу? Поясню. Обычный поиск по слову "mozilla" находит на этой странице 3 совпадения - в простом тексте и в тексте ссылки. Для Оперы есть скрипт, который делает то что я хочу. Можно его как-то приспособить к ФФ? |
iDev.Pi > 03-04-2012 18:34:54 |
Чайник 03-04-2012 18:41:34 Чайник пишет
неа, ссылки бывают и относительные которые не будут содержать имя домена. |
Чайник > 03-04-2012 19:03:39 |
iDev.Pi пишет
Это можно и вместо кнопки Toggle Find искать слово в исходнике страницы. Однако же сделали кнопку и пользуются ею. Потому что удобно. |
bunda1 > 03-04-2012 19:03:54 |
Чайник |
Чайник > 03-04-2012 19:13:44 |
bunda1 пишет
Этот поиск не найдёт на странице 555619 хотя это число есть в каждой ссылке "Сообщить модератору" |
bunda1 > 03-04-2012 19:23:08 |
Чайник |
Чайник > 03-04-2012 21:51:51 |
bunda1 пишет
Это сам скрипт А это код кнопки, которая его активизирует: Если я правильно понял, Go to page это как в ФФ loadUri |
bunda1 > 03-04-2012 23:13:05 |
Чайник |
bunda1 > 06-04-2012 14:59:40 |
iDev.Pi пишет
Принимай работу. 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,AAABAAEAExMAAAEAIAAYBgAAFgAAACgAAAATAAAAJgAAAAEAIAAAAAAA8AUAAAAAAAAAAAAAAAAAAAAAAAAAAAICAAAAADoHVOdAAWH/PQBd/TwAXP9AAWL/PwBf/z0AXv85AFn/MgBN/zEAS/85AFn/QgFj/zsAW/09AV7/OAdR5wAAAAAAAAACAAAAADsFWdtNAnr/TgF+/08Afv9PAH7/TwJ//0wAff9XD4T/azaN/1Emav8yAFD/RQNw/1ABgf9OAH3/TgB+/00Dev87BVnbAAAAADwIVudRAYH9VACK/1UEiv9UAYn/VACJ/1cEi/9MAIP/dzeh/+TV8P+olrH/LQBK/0sDdf9VAYj/VACJ/1QAif9UAIr/TwB9/ToHU+dEAWj/WAiM/loIkf9ZCZD/WQiP/1kIj/9dDJH/UQCI/4JAqf/68v//t6m+/zAAUP9OB3v/VwaM/1kIj/9ZCI//WgiR/1YIjP5DAmX/RQFo/V0Jlf9eB5r/XgiX/2AJnP9fCZn/Yw6b/1gAlP+DRq3/+PH+/7qsw/81AFr/UQmC/1wGlv9fCJn/XwiX/2AJmv9dCJb/RABp/UYDbf9eCJz/ZAih/2AIn/9jCaD/Ywqf/2QLnf9HAIP/aTKT/+fb8P+unLv/KABO/0gLc/9XC4r/XwmZ/18Lnv9hCaD/Xgic/0YDbv9IBnD/Yg2i/2cNqP9kDaX/Zg+n/2MHo/9dC5X/dT2Z/7ScxP/4+fv/0sbb/2g9hv9DC2n/RAVu/1QHif9hCKD/ZQuo/2INov9IBnD/SwVz/2YMqv9pDrD/aA+u/2kOrv9sGqf/p4HF/+Db5//Zy+X/yq7g/97O6//g2Oj/nH20/0sYdP9GCHT/XgeY/2gSrf9mDKr/SgVz/0oHd/9rELD/bA62/20QtP9jAa3/q3/O/+DY5/+vjsj/fziz/3wpuv+MRcT/wpvi/+jb8v+Ze7P/OABn/1MJiv9mEK7/aw+x/0oHd/9MCXz/cRW5/34nw/+AK8L/ikLE/+nZ9f+3o8b/YyKU/24Xr/9/J8T/dRy9/4Mzwv/TtOz/4Nfp/2M0if9cHYz/dSK3/3IYuP9MCXz/Twl+/4Arxf+SRdP/kEPQ/7eL4P/j1e7/hWSi/2kxmv+TT8r/lU/T/5VR0f+NQc3/sX3g/+PX7v+Vdqz/aDCU/4tCx/9/LcP/Twh+/1QSgf+QQtD/mkva/5JA1f+7i+X/2Mbp/4Bdnv9fKI3/hEG9/5NH1P+WS9j/jUHR/6t12//Yx+X/lHau/2svnv+US9P/j0HP/1QSgv9dIIn/lEbW/5tM3/+VRNv/s3zl/+7h+v+fgLn/WCeG/2w3nf+LR8P/kUXP/4I5wP+xitX/4dnp/49or/+BO7n/mUzc/5VG1v9cIIn/XyGM/5ZL2/+cUOX/mk/i/59V4//n0vv/2Mnl/4Zfqv9dL4v/ZCyV/3I3pf+NZLX/08ff/9fJ5f+CR7f/lUvV/51P5P+WS9v/XiGL/14gi/2aTeH/oVHr/6BR6P+bR+n/vIPu/+zb+v/h0ez/qYjD/4hjqP+ehLb/2dDi/+TX8P+pd9T/j0PV/55R5v+iUu3/mk3h/14gi/1kJZL/nU/n/qNU8v+gU+//pVbv/6FQ7/+3evH/3MP3//Pp/f/47///9ez//9vA9v+uceX/m0vj/6NU7v+iU+//plXy/5xP6P5iJJH/Wyt+55pR3/2mWPj/pVj3/6RY9/+nWvb/pVX1/6db9v+sZvf/rWn2/6xm9/+oXPb/pVb3/6ZZ+P+kWPf/plf3/6ZX+P+ZUN79Wyt+5wAAAABzQJ3bn1Ln/6JU9P+hV/X/oVb0/6NV9P+iV/X/olb1/6JV9P+iVfT/o1X0/6NW9P+iVfT/olX0/6NU9P+eUub/bj2W2wAAAAACAAICAAAAAGo9jeeBRa//fEOs/XxErf98RK3/fESt/3xErf98RK3/fESt/3xErf98RK3/fESt/3tDrP19RKv/az6K5wAAAAACAAICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=="; } else { this_.image="data:image/x-icon;base64,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"; } }; ToggleImage(event); //find bar сверху (move find bar to the top)................................................ XPCOMUtils.defineLazyGetter(window, "gFindBar", function() { let XULNS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"; let findbar = document.createElementNS(XULNS, "findbar"); findbar.setAttribute("browserid", "content"); findbar.id = "FindToolbar"; gBrowser.parentNode.insertBefore(findbar, gBrowser); // Force a style flush to ensure that our binding is attached. findbar.clientTop; window.gFindBarInitialized = true; return findbar; }); //find bar, показать количество совпадений(find bar,show the number of matches)...@author slimx................. (function() { //add label to findbar var status = document.getAnonymousElementByAttribute(gFindBar, 'anonid', 'match-case-status'); var sep = document.createElement("toolbarspacer"); var count = document.createElement("label"); count.hidden = true; status.parentNode.insertBefore(sep, status); status.parentNode.insertBefore(count, status);//findbar-container gFindBar.__proto__._foundMatches = count; gFindBar.__proto__._updateMatchesCount = function(aRes) { if (!this._updateMatchCountTimeout) window.clearTimeout(this._updateMatchCountTimeout); this._updateMatchCountTimeout = window.setTimeout(function(aRes, aSelf) { aSelf._updateMatchesCountWorker(aRes); }, 0, aRes, this); } gFindBar.__proto__._updateMatchesCountWorker = function(aRes) { var word = this._findField.value; if (aRes == this.nsITypeAheadFind.FIND_NOTFOUND || !word) { this._foundMatches.hidden = true; this._foundMatches.value = ""; } else { var matchesCount = this._countMatches(word).toString(); if (matchesCount != "0") { if (matchesCount == "1") this._foundMatches.value = matchesCount + hits; else if (matchesCount == "-1") { var matchLimit = 100; this._foundMatches.value = " \>"+ matchLimit + hits; // var key = (matchLimit > 1000) ? "Decrease" : "Increase"; } else this._foundMatches.value = matchesCount + hits; this._foundMatches.hidden = false; //Findbar, удалить атрибут 'red'(Findbar, remove attribute 'red').............. var findToolbar = document.getElementById("FindToolbar"); findToolbar.removeAttribute("red"); } else { this._foundMatches.hidden = true; this._foundMatches.value = ""; //Findbar, установить атрибут 'red'(Findbar, set attribute 'red')............... var findToolbar = document.getElementById("FindToolbar"); findToolbar.setAttribute("red", "true"); } window.clearTimeout(this._updateMatchCountTimeout); } } gFindBar.__proto__._countMatches = function(aWord, aWindow) { var win = aWindow || this.browser.contentWindow; var countFound = 0; for (var i = 0, count; win.frames && i < win.frames.length; i++) { if ((count = this._countMatches(aWord, win.frames[i])) != -1) countFound += count; else return count; } var doc = win.document; if (!doc || !(doc instanceof HTMLDocument)) return countFound; var body = doc.body; var count = body.childNodes.length; var searchRange = doc.createRange(); var startPt = doc.createRange(); var endPt = doc.createRange(); searchRange.setStart(body, 0); searchRange.setEnd(body, count); startPt.setStart(body, 0); startPt.setEnd(body, 0); endPt.setStart(body, count); endPt.setEnd(body, count); var retRange = null; var finder = Components.classes["@mozilla.org/embedcomp/rangefind;1"] .createInstance() .QueryInterface(Components.interfaces.nsIFind); finder.caseSensitive = this._shouldBeCaseSensitive(aWord); var matchLimit = 100; while ((retRange = finder.Find(aWord, searchRange, startPt, endPt))) { if (this._rangeIsVisible(retRange, win)) { if (this._findMode == this.FIND_LINKS) { if (this._rangeStartsInLink(retRange)) ++ countFound; } else ++ countFound; } if (countFound == matchLimit) { countFound = -1; break; } startPt = doc.createRange(); startPt.setStart(retRange.startContainer, retRange.startOffset + 1); } return countFound; } gFindBar.__proto__._rangeIsVisible = function(aRange, aWindow) { var node = aRange.startContainer; if (node.nodeType == node.ELEMENT_NODE) { if (node.hasChildNodes) { var childNode = node.childNodes[aRange.startOffset]; if (childNode) node = childNode; } } while (node && node.nodeType != node.ELEMENT_NODE) node = node.parentNode; // There is no perfect way to check if a node is visible in JavaScript, // so use the best measures we can have if (node) { var style = aWindow.getComputedStyle(node, ""); if (style) { if (style.visibility == "hidden" || style.visibility == "collapse" || style.display == "none") return false; if (style.left != "auto" && style.width != "auto") if (style.left < 0 && style.left + style.width < 0) return false; if (style.top != "auto" && style.height != "auto") if (style.top < 0 && style.top + style.height < 0) return false; } } return true; } gFindBar.__proto__._rangeStartsInLink = function(aRange) { var isInsideLink = false; var node = aRange.startContainer; if (node.nodeType == node.ELEMENT_NODE) { if (node.hasChildNodes) { var childNode = node.childNodes[aRange.startOffset]; if (childNode) node = childNode; } } const XLink_NS = "http://www.w3.org/1999/xlink"; do { if (node instanceof HTMLAnchorElement) { isInsideLink = node.hasAttribute("href");m break; } else if (typeof node.hasAttributeNS == "function" && node.hasAttributeNS(XLink_NS, "href")) { isInsideLink = (node.getAttributeNS(XLink_NS, "type") == "simple"); break; } node = node.parentNode; } while (node); return isInsideLink; } //insert count function to original eval("gFindBar._updateCaseSensitivity=" + gFindBar._updateCaseSensitivity.toString().slice(0, -1) + "this._updateMatchesCount();}"); eval("gFindBar._updateStatusUI=" + gFindBar._updateStatusUI.toString().slice(0, -1) + "this._updateMatchesCount();}"); })(); //FindBar, поиск колесиком мыши(FindBar, Mouse Scroll find )................................................ gFindBar.addEventListener('DOMMouseScroll', function (event){ //Найти (Find) gFindBar.onFindAgainCommand(event.detail < 0); }, false); //переключить 'Поиск на странице' двойным средним кликом на странице(toggle Find Bar, if Double midlle Click in page).......... //добавляем обработчик для обработки нажатие на кнопку мыши на странице....... gBrowser.addEventListener("mouseup", function(event){ //если нажатие на среднюю кнопку мыши if (event.button !== 1) return; //если разрешено в настройках(about:config) if (!custombuttons.getPrefs("FindBar.ToggleWithDoubleMiddleClick")) return; var _this = this; //если установлен флаг if (_this.open){ //переключить 'Поиск на странице' gFindBar.hidden ? gFindBar.onFindCommand() : gFindBar.close(); Find(event); gFindBar._findField.focus(); } //устанавливаем флаг _this.open = true; //сбросить флаг по таймеру this.timer = 0; this.timer = setTimeout(function(){ _this.open = false;}, 600); }, false); //Автоматически очищать поле текстового ввода на Findbar............................................ gFindBar.addEventListener("DOMAttrModified", function(event){ 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'; |
iDev.Pi > 06-04-2012 16:11:53 |
bunda1 мой список тает на глазах |
iDev.Pi > 21-04-2012 14:07:21 |
Только что в консоли ошибок заметил такую ошибку: Error: TypeError: body is null Которая указывает на строку: |
bunda1 > 21-04-2012 18:17:55 |
iDev.Pi Выделить код Код: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 |
iDev.Pi > 21-04-2012 20:03:14 |
bunda1 |
bunda1 > 21-04-2012 21:30:34 |
iDev.Pi пишет
Как это? |
iDev.Pi > 21-04-2012 21:33:40 |
css transitions. выставить период транзиции на 1.5 сек - вот те и плавное угасание. |
bunda1 > 30-04-2012 20:38:54 |
Заметил нехороший баг, кнопка не подсвечивает текст на текущей странице при обновлении или загрузке текущей страницы если Java скрипты отключены на странице расширением NoScript. |
iDev.Pi > 01-05-2012 17:32:58 |
Баг: |
bunda1 > 02-05-2012 22:03:07 |
iDev.Pi |
bunda1 > 19-05-2012 15:39:10 |
Toggle Find+3(Firefox 7.0 +) Toggle Find+3 |
bunda1 > 10-06-2012 13:25:14 |
Toggle Find+3( Firefox 7.0 +) Toggle Find+3 |
voqabuhe > 04-07-2012 14:51:51 |
bunda1 |
bunda1 > 04-07-2012 18:40:52 |
voqabuhe пишет
Как это понять. Kнопка находится на закрытом панели или в панели настройки инструментов или где ? |
voqabuhe > 04-07-2012 20:08:32 |
bunda1 |
bunda1 > 04-07-2012 20:21:39 |
Так это быстрый поиск. |
voqabuhe > 08-07-2012 11:48:06 |
bunda1 пишет
Это понятно. А нельзя сделать, чтобы он происходил в Toggle Find+3? |
bunda1 > 08-07-2012 12:24:21 |
voqabuhe пишет
Попробую это сделать. |
voqabuhe > 11-08-2012 13:21:09 |
bunda1 |
bunda1 > 11-08-2012 14:12:14 |
voqabuhe пишет
Да, на Буду думать, чем заменить. 11-08-2012 14:23:49 |
voqabuhe > 11-08-2012 14:39:06 |
bunda1 пишет
Спасибо |
bunda1 > 11-08-2012 14:43:40 |
Toggle Find+3( Firefox 7.0 +) |
voqabuhe > 14-08-2012 12:02:38 |
bunda1 voqabuhe пишет
|
bunda1 > 14-08-2012 18:59:25 |
voqabuhe 14-08-2012 19:00:22 voqabuhe пишет
Ну тогда хорошо. |
voqabuhe > 14-08-2012 19:34:39 |
bunda1 пишет
Нет всё-таки не очень хорошо.
_content.focus(); |
bunda1 > 14-08-2012 21:11:21 |
Попробуй теперь Toggle Find+3( Firefox 7.0 +) |
voqabuhe > 14-08-2012 21:25:26 |
bunda1 |
iDev.Pi > 22-09-2012 20:14:38 |
старые версии имели меньше багов. |
bunda1 > 22-09-2012 20:41:27 |
Про какие баги речь? |
iDev.Pi > 22-09-2012 20:48:56 |
bunda1 |
bunda1 > 22-09-2012 21:07:57 |
1. Auto Highlight подсвечивает найденные на странице искомые слова, если панель поиска закрылась по таймеру. |
iDev.Pi > 22-09-2012 21:47:42 |
bunda1 пишет
Мммм, баг повторить на другой машине не удалось, баг снимается, но вместо него добавляется новый, более важный. 22-09-2012 21:57:09 |
bunda1 > 01-10-2012 19:02:26 |
iDev.Pi |
SendInfo > 01-10-2012 19:39:52 |
bunda1 пишет
Лучше бы вернул кнопку "Очистить поле поиска" |
bunda1 > 01-10-2012 20:25:26 |
SendInfo пишет
Сейчас кнопка Toggle Find+3 дает сразу две возможности очистить поле поиска: |
SendInfo > 01-10-2012 21:08:03 |
bunda1 пишет
Не вижу такого. - Включен финдбар мини. bunda1 пишет
Очень неудобно. |
bunda1 > 01-10-2012 21:19:00 |
SendInfo пишет
На финдбар мини этого нету. |
SendInfo > 01-10-2012 21:53:43 |
bunda1 пишет
Тогда не работает Find - Найти на странице bunda1 пишет
А оно надо забивать голову комбинациями хоткеев? bunda1 пишет
Не всегда - случаи разные бывают. Предлагаю: кнопка "Вставить и искать " по ПКМ очищает поле текстового ввода. |
bunda1 > 01-10-2012 22:03:05 |
SendInfo пишет
Хорошо, позже сделаю. |
iDev.Pi > 02-10-2012 01:32:43 |
bunda1 пишет
это невозможно: в старых версиях у тебя кнопка копировала элемент #FindToolbar в #appcontent и таким образом становилось, что у #FindToolbar и у #content (где располагается содержимое просматриваемой страницы) был общий родительский элемент #appcontent, а теперь это необходимое для создания стиля условие не выполняется и поэтому #FindToolbar-у нельзя задать правильное позиционирование через стиль. |
bunda1 > 02-10-2012 10:36:48 |
iDev.Pi Выделить код Код:// Панелъ поиска сверху ........................... .......................................................... 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; }); Ну тогда вот так: http://forum.mozilla-russia.org/uploade … Find+3.txt
|
iDev.Pi > 02-10-2012 14:02:36 |
bunda1 пишет
там позиция findbar'а задана через абсолютное значение, т.е. если у пользователя вверху не стандартное количество (или нестандартная высота) тулбаров, то findbar будет на них наезжать (или наоборот, между панелями и findbar'ом будет расстояние), там же в коде даже сказано "настройте под себя": Выделить код Код:... /* ADJUST POSITION OF FIND BAR If you are using small icons on the navigation bar move the find bar up by changing top: 59px; */ #FindToolbar { position: fixed; top: 67px; right: 17px; } /* ADJUST POSITION OF FIND BAR IN NORMAL (UN-MAXIMIZED) WINDOW MODE If you are using small icons on the navigation bar move the find bar up by changing top: 74px; */ #main-window[sizemode="normal"] #FindToolbar { top: 82px; right: 18px; } ... |
bunda1 > 02-10-2012 14:45:59 |
iDev.Pi |
SendInfo > 03-10-2012 21:59:30 |
bunda1 пишет
При использовании Find-Найти на странице для очистки поля текстового ввода приходится два ПКМ по кнопке "Вставить и искать " или предварительно убрать выделение с искомого и ПКМ. |
bunda1 > 03-10-2012 22:16:14 |
SendInfo |
iDev.Pi > 04-10-2012 02:56:01 |
bunda1 пишет
done Выделить код Код:@namespace url(http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul); #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] .findbar-textbox { box-shadow: 0 0 0 1em #f66 inset; } #FindToolbar:not([red]) .findbar-textbox[status="notfound"] { background: rgba(207,219,236,0.99) !important; color: black !important; box-shadow: none !important; } #FindToolbar[mini] .findbar-textbox { width: 16em !important; height: 21px !important; padding-right: 20px !important; margin-right: 2px !important; margin-left: -4px !important; } #FindToolbar[mini] { position: fixed; background: menu !important; box-shadow: 0px 10px 5px -10px rgba(0,0,0,.3) !important; border: 1px solid grey !important; } #FindToolbar[mini][top] { border-top: 0 !important; border-radius: 0 0 8px 8px !important; } #FindToolbar[mini][right] { right: 18px; } #FindToolbar:not([top]) + #content { -moz-box-ordinal-group: 0 !important; } #FindToolbar:not([top]) { -moz-box-ordinal-group: 1 !important; } #FindToolbar[mini]:not([top]) { border-radius: 8px 8px 0 0 !important; margin-top: -29px !important; } #FindToolbar[mini] .findbar-container > checkbox { margin-left: -24px !important; margin-right: -3px !important; } #FindToolbar[mini] toolbarspacer, #FindToolbar[mini] label[class="checkbox-label"], #FindToolbar[mini] toolbarbutton.findbar-find-next, #FindToolbar[mini] toolbarbutton.findbar-find-previous, #FindToolbar[mini] .findbar-highlight label, #FindToolbar[mini] .findbar-closebutton, #FindToolbar:not([pasteButton]) #pasteButton, #FindToolbar:not([mini]) #findButton, #FindToolbar[mini] .findbar-find-fast[anonid="find-label"], #FindToolbar[mini] .findbar-find-fast[anonid="match-case-status"], #FindToolbar[mini] .findbar-highlight, #FindToolbar[mini] .findbar-highlight[checked] { display: none !important; } #FindToolbar[mini] textbox.findbar-textbox { -moz-box-ordinal-group: 2 !important; } #FindToolbar[mini] checkbox { -moz-box-ordinal-group: 3 !important; } #FindToolbar[mini] #pasteButton { -moz-box-ordinal-group: 4 !important; } #FindToolbar[mini] #findButton { -moz-box-ordinal-group: 5 !important; } #pasteButton { list-style-image: url("chrome://browser/skin/appmenu-icons.png"); -moz-image-region: rect(0 48px 16px 32px); margin-right: 3px !important; } #findButton { list-style-image: url("chrome://global/skin/icons/Search-glass.png") !important; -moz-image-region: rect(0px, 16px, 16px, 0px); } P.s.: обновил свой список багов. |
bunda1 > 04-10-2012 20:53:44 |
iDev.Pi
|
bunda1 > 04-10-2012 22:37:44 |
iDev.Pi пишет
Это не мой баг, попробуй без Toggle Find+3 на стандартном панели поиска. И зачем это нужно ? |
iDev.Pi > 05-10-2012 01:13:41 |
bunda1 пишет
принято, багрепорт отзывается. bunda1 пишет
Исправил. bunda1 пишет
А зачем это нужно? bunda1 Выделить код Код:... #FindToolbar:not([red]) .findbar-textbox[status="notfound"] { background: rgba(207,219,236,0.99) !important; color: black !important; box-shadow: none !important; } ... Ведь если .findbar-textbox имеет атрибут status со значением notfound, то #FindToolbar имеет атрибут red, а значит правило не будет никогда выполняться. Или всё же есть такая ситуация, когда оно выполняется? |
bunda1 > 05-10-2012 08:07:48 |
iDev.Pi пишет
Нет, автовыделение работает: Toggle Find+3 05-10-2012 08:17:25 iDev.Pi пишет
Давно добавил и сам не помню пачему, надо проверить. |
_iD > 05-10-2012 15:42:43 |
bunda1 пишет
Как мне кажется, они оба добавляют эти значения в одном и том же ряде случаев, когда искомая комбинация не найдена на странице. А выделение снова заработало, когда обновил кнопку по твоей последней ссылке, спасибо. |
bunda1 > 05-10-2012 19:33:09 |
_iD пишет
Нет, я только что это проверил. Но может не надо было добавлять атрибут red а тот же notfound Я подумаю об этом. И пожалуйста, сделай так что бы твой стиль скрывал панель поиска(сверху, слева) на about:config и на chrome://browser/content/bookmarks/bookmarksPanel.xul и chrome://global/content/console.xul |
_iD > 05-10-2012 22:43:02 |
bunda1 Выделить код Код:#main-window[stylish-url="about:config"] #appcontent > #FindToolbar { display: none !important; } Если Stylish не установлен, то можно использовать такой стиль: Выделить код Код:#main-window[title="about:config - Mozilla Firefox"] #appcontent > #FindToolbar { display: none !important; } Но он имеет 2 недостатка: Выделить код Код:#main-window[title^="about:config"] #appcontent > #FindToolbar { display: none !important; } но тогда повышается вероятность ложных срабатываний: файндбар не будет отображаться на любых страницах с заголовком не равным, а начинающимся с "about:config". |
bunda1 > 05-10-2012 23:27:13 |
_iD пишет
Спасибо. Как добавить другие табы? Выделить код Код:#main-window[title="about:config - Mozilla Firefox"] #appcontent > #FindToolbar, #main-window[title="Управление дополнениями - Mozilla Firefox"] #appcontent > #FindToolbar, #main-window[title="Консоль ошибок - Mozilla Firefox"] #appcontent > #FindToolbar, #main-window[title="Bookmarks tab - Mozilla Firefox"] #appcontent > #FindToolbar { display: none !important; } |
iDev.Pi > 06-10-2012 00:15:24 |
bunda1 |
bunda1 > 06-10-2012 17:51:16 |
Спасибо, работает. |
bunda1 > 07-10-2012 00:02:43 |
iDev.Pi
Исправил: Toggle Find+3 07-10-2012 00:08:27 Удалил теперь не нужный код: Удалил лишний код Выделить код Код:#FindToolbar:not([red]) .findbar-textbox[status="notfound"] { background: rgba(207,219,236,0.99) !important; color: black !important; box-shadow: none !important; } |
iDev.Pi > 07-11-2012 13:08:34 |
Кнопка вываливает в консоль ошибок такое предупреждение: |
bunda1 > 07-11-2012 18:26:58 |
iDev.Pi и там такой ошибки быть не может. |
iDev.Pi > 07-11-2012 19:24:15 |
у меня тоже 647-ая строка такая же. |
Infocatcher > 07-11-2012 19:38:37 |
Причина в использовании mutation events. |
bunda1 > 07-11-2012 19:48:55 |
Спасибо, буду думать чем заменить DOMAttrModified |
iDev.Pi > 07-11-2012 20:28:35 |
bunda1 Use Mutation Observers instead if possible.И там всё расписано и даже пример есть. |
Infocatcher > 07-11-2012 20:34:04 |
iDev.Pi Самая полезная, про настройки для
(и далее) |
bunda1 > 07-11-2012 21:22:09 |
А вот пример бы не помешал, где там пример? А то я на английском не очень. |
iDev.Pi > 07-11-2012 21:47:34 |
bunda1 Выделить код Код:// выбираем целевой узел var target = document.querySelector('#some-id'); // создаём наблюдателя var observer = new MutationObserver(function(mutations) { mutations.forEach(function(mutation) { console.log(mutation.type); }); }); // конфигурируем наблюдателя var config = { attributes: true, childList: true, characterData: true } // делаем вызов функции, указав целевой узел и опции вызова observer.observe(target, config); // потом можем остановить наблюдение observer.disconnect(); вот рабочий пример: http://jsbin.com/ivamoh/53/edit |
bunda1 > 07-11-2012 22:43:21 |
Спасыбо за пример, полезная вещь и работает: Выделить код Код:// Поле текстового ввода на Findbar мигает желтим если достигнут низ/верх страницы // выбираем целевой узел var target = gFindBar.getElement("find-status-icon"); // создаём наблюдателя var observer = new MutationObserver(function(mutations) { mutations.forEach(function(mutation) { gFindBar.setAttribute("flash", "true"); setTimeout(function() { gFindBar.removeAttribute("flash") }, 700) }); }); // конфигурируем наблюдателя var config = { attributes: true, childList: true, characterData: true } // делаем вызов функции, указав целевой узел и опции вызова observer.observe(target, config); Но как то: Выделить код Код:var findStatus = gFindBar.getElement("find-status-icon"); findStatus.addEventListener("DOMAttrModified" ...... был привычней и понятней. |
iDev.Pi > 07-11-2012 22:45:47 |
по-моему, в битве длины кода против скорости его работы - скорость решает. |
bunda1 > 07-11-2012 22:57:33 |
iDev.Pi |
Infocatcher > 07-11-2012 22:59:37 |
bunda1
и
В общем, не про атрибуты это. И если не нужно отслеживать изменение атрибутов дочерних узлов, то и «childList: true» тоже не нужен:
И можно добавить 07-11-2012 23:08:33 07-11-2012 23:10:28
|
bunda1 > 07-11-2012 23:22:51 |
Спасибо, уже меньше кода и работает: Выделить код Код:// Поле текстового ввода на Findbar мигает желтим если достигнут низ/верх страницы // создаём наблюдателя var observer = new MutationObserver(function(mutations) { mutations.forEach(function(mutation) { gFindBar.setAttribute("flash", "true"); setTimeout(function() { gFindBar.removeAttribute("flash") }, 700) }); }); // конфигурируем наблюдателя var config = { attributes: true, attributeFilter: ["status"] } // делаем вызов функции, указав целевой узел и опции вызова observer.observe(gFindBar.getElement("find-status-icon"), config ); |
Kamui > 08-11-2012 08:33:44 |
bunda1 |
SendInfo > 09-11-2012 00:10:58 |
bunda1 Выделить код Код:// Автоматически очищать поле текстового ввода на Findbar .................................................... gFindBar.addEventListener("DOMAttrModified", function(event) { if ( gFindBar.hidden ) { 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 = ''; } else { findFieldClear(event); this.clear = false; }; }, false); P.S. Для меня не критично.Я этой опцией не пользуюсь - удалил этот код у себя из кнопки. |
bunda1 > 09-11-2012 00:45:25 |
Ок, решим. |
bunda1 > 10-11-2012 18:08:11 |
iDev.Pi пишет
Ну вроде исправил и код оптимизировал: http://forum.mozilla-russia.org/uploaded/Toggle Find+3 |
bunda1 > 19-11-2012 15:51:02 |
iDev.Pi |
iDev.Pi > 19-11-2012 19:16:49 |
bunda1 |
bunda1 > 19-11-2012 19:35:14 |
iDev.Pi |
voqabuhe > 13-12-2012 00:56:23 |
На |
bunda1 > 13-12-2012 02:06:30 |
voqabuhe пишет
У меня вроде работает, что пишет консоль. |
bunda1 > 13-12-2012 03:12:07 |
А нет, у меня на Nightly сейчас куча кнопок обвалилась. |
Infocatcher > 13-12-2012 11:15:34 |
Ну все, отключили javascript.options.xml.chrome. |
bunda1 > 13-12-2012 18:51:55 |
voqabuhe пишет
Попробуй: http://forum.mozilla-russia.org/uploaded/Toggle Find+3 e.txt |
voqabuhe > 13-12-2012 20:50:39 |
bunda1 пишет
Сначала вроде заработала, но не появился пункт в контекстном меню. Перезагрузился, так она вообще отвалилась и даже удалить не получалось, убрал её с панели, теперь не могу её вернуть, не хочет. |
bunda1 > 13-12-2012 21:06:22 |
voqabuhe |
voqabuhe > 13-12-2012 22:33:11 |
bunda1 пишет
Да пробовал, всё равно не удалялась, пришлось востанавливать из резервной копии.
var nCurrentNum = oButton. id. replace (/custombuttons-button/, ""); 13-12-2012 22:50:13 bunda1 пишет
Да похоже CB отваливается. У меня тоже код в одну строчку становится. Восстанавливаю кнопки из резервной копии, открываю редактор кнопки. Всё нормально, но как только жму ОК/сохранить, то после следующего открытия редактора код становится в одной строчке. Если просто закрывать редактор без сохранения, то такого не происходит. |
bunda1 > 14-12-2012 00:13:39 |
voqabuhe |
voqabuhe > 14-12-2012 01:53:44 |
bunda1 пишет
Ага, спасибо, работает. Только после каждого редактирования кнопки, начинают дублироваться пункты в контекстном меню страницы. |
bunda1 > 14-12-2012 02:31:09 |
voqabuhe пишет
После редактирования нужен рестарт, в кнопке так много обработчиков(18) и наблюдателей(2) и т.д., и т.п., что у меня руки не подимаютса писать код который бы блокировал их дублирование после редактирования. |
bunda1 > 31-01-2013 22:22:29 |
iDev.Pi |
iDev.Pi > 31-01-2013 22:38:31 |
bunda1 |
bunda1 > 31-01-2013 22:48:04 |
Спасибо, хотя и жаль. А то бывает что люди вообще скроллбар отключают. |
PEAKTOP > 01-03-2013 12:50:50 |
Панель поиска прикрепляется к верху страницы, хотя в настройках "FindBar сверху" не включена. Поменял в коде все "Top", на "Bottom" и включил опцию "FindBar сверху" результата тоже не дало. Как опустить панель вниз. Самое итересное, что после запуска FireFox панель поиска отображается снизу, а потом чудесным образом переезжает наверх. А можно опустить панель поиска в панель дополнений ( самый низ экрана) - как это сделано по умолчанию в стандартной строке поиска? |
voqabuhe > 01-03-2013 13:19:24 |
PEAKTOP пишет
Не подтверждаю, у меня все заявленные настройки работают. |
iDev.Pi > 01-03-2013 15:24:48 |
voqabuhe |
voqabuhe > 01-03-2013 16:47:05 |
iDev.Pi пишет
Ага, но я 19.0 версию в ночнушках уже проходил и у меня там всё работало |
iDev.Pi > 01-03-2013 17:00:56 |
voqabuhe |
bunda1 > 01-03-2013 20:43:14 |
PEAKTOP пишет
У меня на FF19 и Nightly22 с этим все порядке, может у тебя кнопка конфликтует с каким нибудь стилем для панели поиска или расширением. Расширение надо по очереди отключать и тогда узнаешь которое виновато. |
PEAKTOP > 02-03-2013 16:00:38 |
bunda1 пишет
C экспериментальной версией кнопки тоже самое - панель вверху страницы. Но обратил внимание, что если открыть окно редактирования кнопки и затем закрыть его по "ОК", панель возвращается вниз, но перестает вызываться по Ctrl + F. Повторное открытие-закрытие меню кнопки возвращает возможность вызовачерез Ctrl + F. Шайтан однако. код инициализации экспериментальной кнопки // Настройка функций кликов мыши для кнопки ................................................................ this.onclick = function(e) { // действие при клике ЛКМ .... // Объявляем переменные для этой вкладки ................................................................... // Проверить наличие строк в about:config и создать если не существует ...................................... ["FindBar.top","FindBar.mini","FindBar.right","FindBar.auto_Close","FindBar.autoclear","FindBar.Highlight", //this.setAttribute("Help", "alert('')"); // Блокировать повторный запуск функций и обработчиков при открытии настройки панелей ........................ // Подсказка для кнопки ..................................................................................... // Создать меню с настройками для кнопки .................................................................... // массив с данными для создание пунктов меню .... // цикл добавляет из массива атрибуты и обработчики к пунктам меню .... menuPopup.appendChild(mItem); // добавляем стандартное контекстное меню .... // Установить и удалить разные атрибуты для панели поиска .................................................... // Установить нужную иконку кнопки при старте браузера или при изменениях настроек автовыделения ............ // Приклеить элемент #FindToolbar к странице( #appcontent ) ................................................. // Показать количество совпадений на панели поиска, автор кода 'slimx' ....................................... gFindBar.__proto__._updateMatchesCountWorker = function(aRes) { window.clearTimeout(this._updateMatchCountTimeout); gFindBar.__proto__._countMatches = function(aWord, aWindow) { var countFound = 0; var doc = win.document; var body = doc.body; searchRange.setStart(body, 0); var retRange = null; finder.caseSensitive = this._shouldBeCaseSensitive(aWord); var matchLimit = 100; return countFound; gFindBar.__proto__._rangeIsVisible = function(aRange, aWindow) { if (node.nodeType == node.ELEMENT_NODE) { while (node && node.nodeType != node.ELEMENT_NODE) // There is no perfect way to check if a node is visible in JavaScript, return true; gFindBar.__proto__._rangeStartsInLink = function(aRange) { var node = aRange.startContainer; if (node.nodeType == node.ELEMENT_NODE) { const XLink_NS = "http://www.w3.org/1999/xlink"; return isInsideLink; // insert count function to original
// Переключить поиск на странице двойным средним кликом на странице .......................................... // Автоматически очищать поле текстового ввода на Findbar ....................................................
/* Очистить поле текстового ввода если кликнуть правим кликом на 'Найти:' // Поиск по странице из буфера обмена, если кликнуть средним кликом на findbar ............................... gFindBar._findField.value = str; /* Двойной клик в строке поиска включает и выключает автовыделение // ЛКМ в форму поиска - выделить текст в форме поиска ........................................................ // ЛКМ + ПКМ на поле текстового ввода очищают его ................................................. if ( e.type == "mousedown" ) { if ( e.type == "click" ) { // Сочетания клавиш для управление поиском на странице ....................................................... // Ctrl+ f, показать - скрыть панель поиска .... // Автоматически выделить слова или ссылки.................................................................... /* изменить цвет ссылок на страницах если содержат искомое слово, var hLink = ( custombuttons.getPrefs("FindBar.Highlight.Link") && !!value ); // обработчики для табов .... gBrowser.addEventListener("pageshow", function(e) { // обработчики и наблюдатель для панели поиска .... gFindBar.watch("hidden", function( prop, oldV, newV ) { // Добавляем подменю в контекстного меню на странице для выделенного текста .................................. var array = [ // Найти на странице ......................................................................................... // Очистить поле текстового ввода на Findbar ................................................................. // Добавляет или удаляет текст(выделенный / из буфера обмена) для автовыделения ..............................
/* Функция отдаст выделенный текст из страницы или текстового поля, // выделенный текст из текстового поля .... // Запустить поиск через Toggle Find+3 если нажать в главном меню на пункт меню 'Найти' ...................... // Создать кнопку "Вставить и искать" на Findbar ............................................................. b.addEventListener("click", function(e) { // Создать кнопку "Поиск" на Findbar ......................................................................... b.addEventListener("click", function(e) { if ( e.button == 2 ) gFindBar.onFindAgainCommand(true); // искать предыдущее // Поле текстового ввода на Findbar мигает желтим если достигнут низ/верх страницы ......................... // устанавливаем флаг, чтобы функции и обработчики не исполнялась дважды |
bunda1 > 02-03-2013 23:02:34 |
PEAKTOP пишет
Да что там у тебя с браузером что Сustom Buttons кнопки не работают как надо. Я изменил кнопку: Выделить код Код:// Настройка функций кликов мыши для кнопки ................................................................ this.onclick = function(e) { // действие при клике ЛКМ .... if ( e.button == 0 ) { gFindBar.hidden ? gFindBar.onFindCommand() : gFindBar.close(); Find(e); }; // действие при клике СКМ .... if ( e.button == 1 ) { gFindBar.hidden ? gFindBar.onFindCommand() : gFindBar.close(); goDoCommand("cmd_selectNone"); goDoCommand("cmd_paste"); Find(e); }; // действие при клике ПКМ .... if ( e.button == 2 && !e.ctrlKey && !e.shiftKey && !e.altKey && !e.metaKey ) { e.preventDefault(); document.getElementById(this.id + "-menuPopup").showPopup(this, -1, -1, "popup", "bottomleft", "topleft"); } }; // Объявляем переменные для этой вкладки ................................................................... var button = this; var alertsService = Components.classes["@mozilla.org/alerts-service;1"].getService(Components.interfaces.nsIAlertsService); // Проверить наличие строк в about:config и создать если не существует ...................................... if ( custombuttons.getPrefs("FindBar.version") !== '14') { ["FindBar.top","FindBar.mini","FindBar.right","FindBar.auto_Close","FindBar.autoclear","FindBar.Highlight", "FindBar.Highlight.Link","FindBar.pasteButton","FindBar.contextFindWords","FindBar.ToggleWithDoubleMiddleClick", "FindBar.Autohighlight.ToggleWithDoubleClick"].forEach(function(pref) { custombuttons.setPrefs( pref, false ) }); ["FindBar.version,14", "FindBar.CloseTimer,7", "ui.textHighlightBackground,#ef0fff", "FindBar.Highlight.value,"] .forEach(function(pref) { custombuttons.setPrefs( pref.split(",")[0], pref.split(",")[1] ) }); }; //this.setAttribute("Help", "alert('')"); // Блокировать повторный запуск функций и обработчиков при открытии настройки панелей ........................ if (this.hasAttribute("stop")) return; // Подсказка для кнопки ..................................................................................... this.infoToTooltip = function() { // получить и обрезать подсказку для автовыделение .... var val = Application.prefs.getValue("FindBar.Highlight.value", 0); var value = val.substring(0,50) + ( (val.length > 50) ? '....' : "" ); this.tooltipText = "Поиск по странице \nЛ: Показать - скрыть поиск по странице \nС: Поиск по странице из буфера обмена" + "\nП: Mеню + CB меню \n\nАвтовыделение: " + value; }; this.setAttribute("onmouseover", "this.infoToTooltip()"); // Создать меню с настройками для кнопки .................................................................... var menuPopup = document.getElementById("mainPopupSet").appendChild(document.createElement("menupopup")); menuPopup.id = this.id + "-menuPopup"; // массив с данными для создание пунктов меню .... this.array = [ { label: 'Автоматически закрыть', value: 'FindBar.auto_Close', cek:''}, { label: 'Закрыть через: |7| секунд', value: 'FindBar.CloseTimer', change:''}, { separator: '' }, { label: 'Кнопка "Вставить и искать" на FindBar', value: 'FindBar.pasteButton', func: toggleAttribute, cek:''}, { label: 'Find в контекстном меню', value: 'FindBar.contextFindWords', cek:''}, { separator: '' }, { label: 'Всегда открывать пустую поисковую форму', value: 'FindBar.autoclear', func: autoClear, cek:''}, { label: 'Переключать FindBar двойным средним кликом на странице', value: 'FindBar.ToggleWithDoubleMiddleClick', cek:''}, { label: 'Переключать aвтовыделение двойным кликом на поисковой форме', value: 'FindBar.Autohighlight.ToggleWithDoubleClick', cek:''}, { separator: '' }, { label: 'Автовыделение', value: 'FindBar.Highlight', func: toggleAttribute, cek:''}, { label: 'Автовыделение в ссылках', value: 'FindBar.Highlight.Link', cek:''}, { label: 'Добавить текст для автовыделение', value: 'add', func: toggleHighlightValue }, { label: 'Сбросить текст для автовыделение', value: 'clear', func: toggleHighlightValue }, { label: 'Изменить цвет: |#ef0fff| для автовыделение', value: 'ui.textHighlightBackground', change:''} ]; // цикл добавляет из массива атрибуты и обработчики к пунктам меню .... this.array.forEach(function( m ) { if ( "separator" in m ) { menuPopup.appendChild( document.createElement("menuseparator") ); return }; if ( "value" in m ) var p = custombuttons.getPrefs( m.value ) var mItem = document.createElement("menuitem"), arr = m.label.split("|"); mItem.setAttribute("label", ( "change" in m ) ? (arr[0] + p + arr[2]) : m.label ); if ( "cek" in m ) { mItem.setAttribute('type', 'checkbox'); mItem.setAttribute('checked', p ); mItem.setAttribute('onclick', 'custombuttons.setPrefs("' + m.value + '", !custombuttons.getPrefs("' + m.value + '"))'); } if ( "change" in m ) { mItem.addEventListener("command", function(e) { var val = custombuttons.promptBox( this.label, 'Отмена сохранит значение по умолчанию'); var pref = val[0] ? val[1] : arr[1]; custombuttons.setPrefs( m.value, pref ); this.label = arr[0] + pref + arr[2]; }, false); }; if ( "func" in m ) mItem.addEventListener("command", function(e) { m.func( m.value ) }, false); menuPopup.appendChild(mItem); }); // добавляем стандартное контекстное меню .... var separator = document.createElement("menuseparator"); menuPopup.appendChild( separator ); var cbContextPopup = document.getElementById("custombuttons-conte |