>Форум 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,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).......... 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,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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).......... 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,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"; } else { this_.image="data:image/x-icon;base64,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"; } }; ToggleImage(event); //find bar сверху (move find bar to the top)................................................ XPCOMUtils.defineLazyGetter(window, "gFindBar", function() { let XULNS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"; let findbar = document.createElementNS(XULNS, "findbar"); findbar.setAttribute("browserid", "content"); findbar.id = "FindToolbar"; gBrowser.parentNode.insertBefore(findbar, gBrowser); // Force a style flush to ensure that our binding is attached. findbar.clientTop; window.gFindBarInitialized = true; return findbar; }); //find bar, показать количество совпадений(find bar,show the number of matches)...@author slimx................. (function() { //add label to findbar var status = document.getAnonymousElementByAttribute(gFindBar, 'anonid', 'match-case-status'); var sep = document.createElement("toolbarspacer"); var count = document.createElement("label"); count.hidden = true; status.parentNode.insertBefore(sep, status); status.parentNode.insertBefore(count, status);//findbar-container gFindBar.__proto__._foundMatches = count; gFindBar.__proto__._updateMatchesCount = function(aRes) { if (!this._updateMatchCountTimeout) window.clearTimeout(this._updateMatchCountTimeout); this._updateMatchCountTimeout = window.setTimeout(function(aRes, aSelf) { aSelf._updateMatchesCountWorker(aRes); }, 0, aRes, this); } gFindBar.__proto__._updateMatchesCountWorker = function(aRes) { var word = this._findField.value; if (aRes == this.nsITypeAheadFind.FIND_NOTFOUND || !word) { this._foundMatches.hidden = true; this._foundMatches.value = ""; } else { var matchesCount = this._countMatches(word).toString(); if (matchesCount != "0") { if (matchesCount == "1") this._foundMatches.value = matchesCount + hits; else if (matchesCount == "-1") { var matchLimit = 100; this._foundMatches.value = " \>"+ matchLimit + hits; // var key = (matchLimit > 1000) ? "Decrease" : "Increase"; } else this._foundMatches.value = matchesCount + hits; this._foundMatches.hidden = false; //Findbar, удалить атрибут 'red'(Findbar, remove attribute 'red').............. var findToolbar = document.getElementById("FindToolbar"); findToolbar.removeAttribute("red"); } else { this._foundMatches.hidden = true; this._foundMatches.value = ""; //Findbar, установить атрибут 'red'(Findbar, set attribute 'red')............... var findToolbar = document.getElementById("FindToolbar"); findToolbar.setAttribute("red", "true"); } window.clearTimeout(this._updateMatchCountTimeout); } } gFindBar.__proto__._countMatches = function(aWord, aWindow) { var win = aWindow || this.browser.contentWindow; var countFound = 0; for (var i = 0, count; win.frames && i < win.frames.length; i++) { if ((count = this._countMatches(aWord, win.frames[i])) != -1) countFound += count; else return count; } var doc = win.document; if (!doc || !(doc instanceof HTMLDocument)) return countFound; var body = doc.body; var count = body.childNodes.length; var searchRange = doc.createRange(); var startPt = doc.createRange(); var endPt = doc.createRange(); searchRange.setStart(body, 0); searchRange.setEnd(body, count); startPt.setStart(body, 0); startPt.setEnd(body, 0); endPt.setStart(body, count); endPt.setEnd(body, count); var retRange = null; var finder = Components.classes["@mozilla.org/embedcomp/rangefind;1"] .createInstance() .QueryInterface(Components.interfaces.nsIFind); finder.caseSensitive = this._shouldBeCaseSensitive(aWord); var matchLimit = 100; while ((retRange = finder.Find(aWord, searchRange, startPt, endPt))) { if (this._rangeIsVisible(retRange, win)) { if (this._findMode == this.FIND_LINKS) { if (this._rangeStartsInLink(retRange)) ++ countFound; } else ++ countFound; } if (countFound == matchLimit) { countFound = -1; break; } startPt = doc.createRange(); startPt.setStart(retRange.startContainer, retRange.startOffset + 1); } return countFound; } gFindBar.__proto__._rangeIsVisible = function(aRange, aWindow) { var node = aRange.startContainer; if (node.nodeType == node.ELEMENT_NODE) { if (node.hasChildNodes) { var childNode = node.childNodes[aRange.startOffset]; if (childNode) node = childNode; } } while (node && node.nodeType != node.ELEMENT_NODE) node = node.parentNode; // There is no perfect way to check if a node is visible in JavaScript, // so use the best measures we can have if (node) { var style = aWindow.getComputedStyle(node, ""); if (style) { if (style.visibility == "hidden" || style.visibility == "collapse" || style.display == "none") return false; if (style.left != "auto" && style.width != "auto") if (style.left < 0 && style.left + style.width < 0) return false; if (style.top != "auto" && style.height != "auto") if (style.top < 0 && style.top + style.height < 0) return false; } } return true; } gFindBar.__proto__._rangeStartsInLink = function(aRange) { var isInsideLink = false; var node = aRange.startContainer; if (node.nodeType == node.ELEMENT_NODE) { if (node.hasChildNodes) { var childNode = node.childNodes[aRange.startOffset]; if (childNode) node = childNode; } } const XLink_NS = "http://www.w3.org/1999/xlink"; do { if (node instanceof HTMLAnchorElement) { isInsideLink = node.hasAttribute("href");m break; } else if (typeof node.hasAttributeNS == "function" && node.hasAttributeNS(XLink_NS, "href")) { isInsideLink = (node.getAttributeNS(XLink_NS, "type") == "simple"); break; } node = node.parentNode; } while (node); return isInsideLink; } //insert count function to original eval("gFindBar._updateCaseSensitivity=" + gFindBar._updateCaseSensitivity.toString().slice(0, -1) + "this._updateMatchesCount();}"); eval("gFindBar._updateStatusUI=" + gFindBar._updateStatusUI.toString().slice(0, -1) + "this._updateMatchesCount();}"); })(); //FindBar, поиск колесиком мыши(FindBar, Mouse Scroll find )................................................ gFindBar.addEventListener('DOMMouseScroll', function (event){ //Найти (Find) gFindBar.onFindAgainCommand(event.detail < 0); }, false); //переключить 'Поиск на странице' двойным средним кликом на странице(toggle Find Bar, if Double midlle Click in page).......... //добавляем обработчик для обработки нажатие на кнопку мыши на странице....... gBrowser.addEventListener("mouseup", function(event){ //если нажатие на среднюю кнопку мыши if (event.button !== 1) return; //если разрешено в настройках(about:config) if (!custombuttons.getPrefs("FindBar.ToggleWithDoubleMiddleClick")) return; var _this = this; //если установлен флаг if (_this.open){ //переключить 'Поиск на странице' gFindBar.hidden ? gFindBar.onFindCommand() : gFindBar.close(); Find(event); gFindBar._findField.focus(); } //устанавливаем флаг _this.open = true; //сбросить флаг по таймеру this.timer = 0; this.timer = setTimeout(function(){ _this.open = false;}, 600); }, false); //Автоматически очищать поле текстового ввода на Findbar.................................................. gFindBar.addEventListener("DOMAttrModified", function(event){ var _this = this; //устанавливаем флаг if (gFindBar.hidden){_this.clear = true} //... if (!custombuttons.getPrefs("FindBar.autoclear")) reset; if (gFindBar.hidden){gFindBar._findField.reset()} if (!gFindBar.hidden) { //Снять выделенные на странице если флаг - true if (_this.clear){goDoCommand("cmd_selectNone")} //сбросить флаг _this.clear = false; } }, false); //findbar очистить, кликнуть правим кликом на findbar's label-Найти: или на иконку поиска на FindBar mini(FindBar clear findText, right click on findbar's label, else Find button).............. //findbar поиск, кликнуть левым кликом на findbar's label-Найти: или на иконку поиска на FindBar mini(FindBar find, left click on findbar's label, else Find button).............. var FindButt = document.getAnonymousElementByAttribute(gFindBar, "anonid", "find-label"); FindButt.setAttribute("onclick", "event.stopPropagation(); clickFind(event);"); //.... var HighBut = document.getAnonymousElementByAttribute( gFindBar, "anonid", "highlight"); HighBut.addEventListener("click", function(event){ if (custombuttons.getPrefs("FindBar.mini")) { gFindBar.getElement("highlight").removeAttribute("checked"); //....... clickFind(event); } }, true); //..................... clickFind = function(event){ if ( event.button == 0 ) { event.preventDefault(); event.stopPropagation(); if (custombuttons.getPrefs("FindBar.Highlight")){Highlight(event)}; //Искать следующее gFindBar.onFindAgainCommand(false); } else if ( event.button == 2 ) { if (custombuttons.getPrefs("FindBar.Highlight")){Highlight(event)}; //Запускаем функцию findFieldClear или искать предыдущее custombuttons.getPrefs("FindBar.ClearButton") ? gFindBar.onFindAgainCommand(true) : findFieldClear(event); } }; //Поиск по странице из буфера обмена/выделенный текст, если кликнуть средним кликом на findbar или на иконку поиска на FindBar mini ....... //переключить кнопку 'Highlight' двойным левым кликом на на поле текстового ввода на FindBar............ //Стоп, при открытии настройки панелей(stop, if onDestroy) if (window.ToggleFindRun !== 'stop') (function () { //Поиск по странице из буфера обмен gFindBar.addEventListener("click", function(event){ if ( event.button != 1 )return; event.preventDefault(); event.stopPropagation(); //........ var sel = content.getSelection().toString(); var str =(!!sel) ? sel : readFromClipboard(); //Убираем пробелы с обоих концов текста. var str = str.replace(/^\s+|\s+$/g,""); //... gFindBar._findField.value = str; Find(event); }, true); //переключить кнопку 'Highlight'......... gFindBar._findField.addEventListener("dblclick", function(event){ if ( event.button != 0 )return; event.preventDefault(); event.stopPropagation() //.... if (!custombuttons.getPrefs("FindBar.mini")) return; if (custombuttons.getPrefs("FindBar.Highlight")) return; //Запускаем функцию toggleHighlight toggleHighlight(event); //Findbar, убрать фокус(Findbar, hide focus) _content.focus(); }, false); })(); //FindBar, автоматически закрыть(autohide Findbar)................................. //Стоп, при открытии настройки панелей(stop, if onDestroy) if (window.ToggleFindRun !== 'stop') (function () { function go() { gFindBar.close(); window.ACRun = ''; } function on() { if (!custombuttons.getPrefs("FindBar.auto_Close")) return; if (window.ACRun == 'stop') return; window.ACRun = 'stop'; timeoutId = 0; timeoutId = setTimeout(go, custombuttons.getPrefs("FindBar.CloseTimer") + '000') } function off() { if (!custombuttons.getPrefs("FindBar.auto_Close")) return; window.ACRun = ''; clearTimeout(timeoutId); } gFindBar.addEventListener("DOMAttrModified", function(event){if (gFindBar.hidden) off() }, false); addEventListener('mouseover', function(event){ if (!gFindBar.hidden) (event.target.nodeName !== 'findbar')? on(): off() }, false); })(); //FindBar, сочетания клавиш(Key config)......................................................... //Стоп, при открытии настройки панелей(stop, if onDestroy) if (window.ToggleFindRun !== 'stop')(function () { window.addEventListener('keydown', function (event){ //FindBar(ctrl+ F)показать - скрыть(Toggle Find Bar)......... if ((event.ctrlKey)&&(!event.altKey)&&(event.keyCode==70)) { event.preventDefault(); event.stopPropagation(); //переключить 'Поиск на странице' gFindBar.hidden ? gFindBar.onFindCommand() : gFindBar.close(); Find(event); gFindBar._findField.focus(); } //Findbar(ctrl+ALT+F), поиск по странице из буфера обмена(find from clipboard)............. if ((event.ctrlKey)&&(event.altKey)&&(event.keyCode==70)) { gFindBar.hidden ? gFindBar.onFindCommand() : gFindBar.close(); goDoCommand("cmd_selectNone"); goDoCommand("cmd_paste"); Find(event); } //Findbar(ctrl+ALT+H), FindBar, вести слова для выделение(set Highlight words)... if ((event.ctrlKey)&&(event.altKey)&&(event.keyCode==72)) { //Запускаем функцию HighlightAdd(run HighlightAdd) HighlightAdd(event); } }, false); })(); //переключить кнопку 'Highlight'(toggle Highlight)............................................ function toggleHighlight(event) { var highlightBtn = document.getElementById('FindToolbar').getElement('highlight'); //... if (!gFindBar._findField.style.color) { gFindBar._highlightDoc(true, gFindBar._findField.value); gFindBar._findField.style.color = prefs.getCharPref("ui.textHighlightBackground"); } else { gFindBar._highlightDoc(false); gFindBar._findField.removeAttribute("style"); } }; //Автоматически выделить заранее введенные слова (auto Highlight words permanent).................................................... Highlight = function(event) { //устанавливаем флаги... var m = true; if (event =='[object UIEvent]'){var m = false}; if (event =='[object DragEvent]'){var m = false}; if (event =='[object MouseEvent]'){var m = false}; //hide Highlight gFindBar._highlightDoc(false); //.... var FBNum = custombuttons.getPrefs("FindBar.AutohighlightNum"); var FBvalue = gFindBar._findField.value; //.... if (!gFindBar.hidden) { //... if (!!gFindBar._findField.style.color) { gFindBar._findField.removeAttribute("style"); } //Findbar, удалить атрибут 'red'(Findbar, remove attribute 'red').............. if (FBvalue.length == '0') { var findToolbar = document.getElementById("FindToolbar"); findToolbar.removeAttribute("red"); } //FindBar, auto find if (m) { //Findbar, фокус(Findbar, focus) gFindBar._findField.focus(); gFindBar.onFindCommand(); //Findbar, убрать фокус(Findbar, hide focus) _content.focus(); } } //auto Highlight if (custombuttonsUtils.getPrefs("FindBar.Highlight")) { if (gFindBar.hidden) { //getting prefs Unicode value var value = prefs.getComplexValue("FindBar.Highlight.value", Components.interfaces.nsISupportsString).data; } if (!gFindBar.hidden) { var value =(FBvalue.length > FBNum)? FBvalue : "??????"; } //Highlight gFindBar._highlightDoc(true, value); } }; if (window.ToggleFindRun !== 'stop') (function () { //добавляем обработчики..... //обработчики для табов.. gBrowser.tabContainer.addEventListener("TabSelect", Highlight, false); gBrowser.addEventListener("DOMContentLoaded", function(event){ //фылтр.... //стоп, если открыть новые таби if (event.target.location.href !== getBrowser().currentURI.spec) return; //стоп, если срабатывает на фрейме var document = event.originalTarget; if (document instanceof HTMLDocument && this.contentWindow.document !== document) return; Highlight(event)}, false); //обработчики для FindBar.. gFindBar._findField.addEventListener("input", Highlight, false); gFindBar._findField.setAttribute("ondrop","event.stopPropagation(); Find(event); "); gFindBar.addEventListener("DOMAttrModified", function(event){ if (!gFindBar.hidden) return; Highlight(event)}, false); })(); //FindBar. контекстного меню (context Menu)....................................... (function contextFindWords(){ // выходим, если функция уже выполнялась if (document.getElementById("contextFindWords")) return; const kXULNS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"; var contextMenu = document.getElementById("contentAreaContextMenu"); var separator = document.getElementById("context-sep-properties"); var eventTarget = null; var menu = document.createElementNS(kXULNS, "menu"); menu.id = "contextFindWords"; menu.setAttribute("label", "Find"); menu.hidden = true; contextMenu.insertBefore(menu, separator); var menuPopup = document.createElementNS(kXULNS, "menupopup"); menu.appendChild(menuPopup); var lst = [ { label:"Найти на странице", command:ContexFind }, { label:"Поиск по сайту(google)", command:Search }, { label:"Выделить текст на странице", command:HighlightSel }, { label:"Автовыделение, добавить текст", command:addSel } ]; for(var i = 0, m; m = lst[i]; i++){ var menuItem = document.createElementNS(kXULNS, "menuitem"); menuItem.setAttribute("label", m.label); menuItem.setAttribute("type", "m.radio"); if ("accesskey" in m) menuItem.setAttribute("accesskey", m.accesskey); menuItem.addEventListener("command", m.command, false); menuItem.id = "context-Find-Words-" + m.label.toString(); menuPopup.appendChild(menuItem); } var contextFind = document.getElementById("contextFindWords") contextMenu.addEventListener("popupshowing", setMenuDisplay, false); function setMenuDisplay(aEvent) { if (gContextMenu.isTextSelected) { if (custombuttons.getPrefs("FindBar.contextFindWords")) { contextFind.hidden = false; } else { contextFind.hidden = true; } } } function ContexFind(){ gFindBar.onFindCommand(); //Запускаем функцию Find Find(event); } function Search(){ var focusedWindow = document. commandDispatcher. focusedWindow; var text = focusedWindow. getSelection (). toString (); var doc = getBrowser (). contentDocument; try { var url = doc. location. hostname; } catch(e) { var url = ""; } text = escape (convertFromUnicode ("UTF-8", text)); url = encodeURIComponent (url); var searchUrl = "http://www.google.com/search?as_q=" + text + "&as_sitesearch=" + url; gBrowser.selectedTab = gBrowser.addTab(searchUrl); } function HighlightSel(){ gFindBar.toggleHighlight(false); var text = document.commandDispatcher.focusedWindow.getSelection(); gFindBar._highlightDoc(true, text); goDoCommand("cmd_selectNone"); } function addSel(){ //Запускаем функцию HighlightAdd HighlightAdd(event); } })(); //Если нажать в главном меню Firefox на пункт меню 'Найти'............................................. document.getElementById("cmd_find").setAttribute("oncommand", "gFindBar.onFindCommand(); Find(event);"); //Найти на странице.................................................... Find = function(event){ if (custombuttons.getPrefs("FindBar.Highlight")){Highlight(event)}; if (!gFindBar.hidden) gFindBar._find(gFindBar._findField.value); }; //Очистить поле текстового ввода на Findbar.................................................. function findFieldClear(event){ gFindBar._findField.reset(); gFindBar.onFindAgainCommand(false); //.... var findToolbar = document.getElementById("FindToolbar"); findToolbar.removeAttribute("red"); //... gFindBar._findField.focus(); //.... gFindBar._highlightDoc(false); }; //Добавить текст(выделенный / из буфера обмена) для автовыделения....................................... function HighlightAdd(event){ //Копируем выделенный текст в буфер document.getElementById("cmd_copy").doCommand(); // Get the root branch var prefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch); //setting Unicode value var str = Components.classes["@mozilla.org/supports-string;1"].createInstance(Components.interfaces.nsISupportsString); //читаем из буфера обмена и добавляем текст для автовыделения в 'about:config' str.data = readFromClipboard(); prefs.setComplexValue("FindBar.Highlight.value", Components.interfaces.nsISupportsString, str); //всплывающая подсказка custombuttons.alertSlide(AutoHighlight, str.data); //... goDoCommand("cmd_selectNone"); //Запускаем функцию Highlight(run Highlight) Highlight(event); }; //Поле текстового ввода на Findbar мигает желтим............................ function fflash(event){ var findToolbar = document.getElementById("FindToolbar"); //Следим за иконкой статуса на FindBar var findstatus = gFindBar.getElement("find-status-icon"); findstatus.addEventListener("DOMAttrModified",function(e){ if(findstatus.getAttribute("status")=="wrapped") { findToolbar.setAttribute("flash", "true"); setTimeout(function() {findToolbar.removeAttribute("flash");}, 700)}; }, false)}; //Запускаем функции fflash, fmini(Run the function fflash) document.addEventListener( "DOMContentLoaded", fflash(event), false); //Создать кнопку "Clear" на Findbar......................................................... var ubc=document.getAnonymousElementByAttribute( gFindBar, "anonid", "findbar-textbox"); var btn=document.createElementNS("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul", "toolbarbutton"); btn.setAttribute("id", "ClearButton"); btn.setAttribute("tooltiptext", "L = Очистить поле текстового ввода"); ubc.parentNode.insertBefore(btn, ubc.nextSibling); btn.addEventListener("click", function(event) { if ( event.button != 0 ) return; //Запускаем функцию findFieldClear findFieldClear(event); }, false); // FindToolbar стиль(style)....................................................................... (function(css) { var pi = document.createProcessingInstruction( 'xml-stylesheet', 'type="text/css" href="data:text/css;utf-8,' + encodeURIComponent(css) + '"' ); return document.insertBefore(pi, document.documentElement); } )(<![CDATA[ @namespace url(http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul); /*Find Toolbar.................*/ #FindToolbar { border-bottom: 1px solid grey !important; } #FindToolbar > .findbar-container > * { display: -moz-box !important; } #FindToolbar > hbox > label{-moz-appearance: none !important;font-weight: bold !important;} #find-field,.findbar-textbox{width: 250px !important;} #FindToolbar .findbar-find-fast.findbar-find-status, #FindToolbar .findbar-container>image, #FindToolbar[autohide] .findbar-closebutton {display: none !important;} #FindToolbar[red="true"] .findbar-textbox{box-shadow: 0 0 0 1em #f66 inset;} #FindToolbar:not([red="true"]) .findbar-textbox[status="notfound"]{ background: rgba(207,219,236,0.99) !important; color: black !important; box-shadow: none !important;} /*Find Toolbar, mini......................................... */ #FindToolbar[mini="true"] .findbar-textbox{ width: 16em !important; height:21px!important; padding-right: 20px !important; margin-right: 2px!important; margin-left:-4px!important} #FindToolbar[mini] { position: fixed; right: 18px; background: menu !important; box-shadow: 0px 10px 5px -10px rgba(0,0,0,.3) !important; border: 1px solid grey !important; border-top: 0 !important; border-radius: 0 0 8px 8px !important;} #FindToolbar[mini="true"] .findbar-container>checkbox{ margin-left:-24px !important; margin-right: -3px !important} #FindToolbar[mini] toolbarspacer, #FindToolbar[mini="true"] label[class="checkbox-label"], #FindToolbar[mini="true"] toolbarbutton.findbar-find-next, #FindToolbar[mini="true"] toolbarbutton.findbar-find-previous, #FindToolbar[mini="true"] .findbar-highlight label, #FindToolbar[mini="true"] .findbar-closebutton, #FindToolbar:not([ClearButton="true"]) #ClearButton, #FindToolbar[mini="true"] .findbar-find-fast[anonid="find-label"], #FindToolbar[mini="true"] .findbar-find-fast[anonid="match-case-status"] { display: none !important;} #FindToolbar[mini] .findbar-highlight, #FindToolbar[mini] .findbar-highlight[checked] { list-style-image: url("data:image/gif;base64,R0lGODlhEAAQAMQWAJmZzJlmzGZmzGZm/2aZ/5mZ/5nM/8zM/8z//5mZmWZmmf///8yZzMzMmZlmmZmZM8zMM8zMZsz/ZsyZZpmZZmZmM////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAHoAxYALAAAAAAQABAAAAVsoCUCgQCIaCoKA1G4p7q6RmEXcQoMxYEYQEMOJSAYEL+D8jC0CG6GJTKhUtiAPiSCmlK4er7FgiGzWLGIBUJRZliVCLMi0Sg7FHhq4gGJlFUNEBIQE38pExGDFIYoFIkQi4wWjhEVkiIUFQohADs=") !important; -moz-image-region: auto !important;} #FindToolbar[mini] .findbar-highlight[disabled="true"]:hover{ -moz-appearance: none !important; -moz-border-image: url("data:image/png;base64,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") 3 / 3px stretch stretch !important; padding: 2px 2px 1px 2px !important;} #ClearButton{ list-style-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAFgSURBVHjaYv7//z/j69evWR8+fMj19etXHgYGBhjmxoK5gJhDTEyMOT4+/v+pU6f+AwQQM1Azy5o1a/hevXolC5RUAmIFIJYHYlksWBKIhYEWsQEt/PXgwYPfAAHEADQNZKr21KlTD7x8+fLbfwIApAakFqQHpBcggIA0gwAQOxKjGdkQkB6QXoAAYgISzCC/AU3jZMADTExMwBgEoGpBLmcGCCCQAYxQQ/BqxgJAehgBAogJymEkUTNcD0AAMZFhMwoACCAmSjSDAEAAMTGQAM6cOYMhBhBAMAP+o9uelpZGSDNYD0AAgQJCGIgtgNG7BZvmWbNmYRgG4jMyMvoAmScAAogFSPwF4m/ApPwdlhZAmpAVo2sGqQXpAekFCCCKkzJAADFmZWXBMpMUUFAUmsJYcITjH6jNr4Gan4WEhHwCCCAGUHYGGsIKFABlYSGoIWI4MEhOCKQWpAekFyDAAO0k7MPVi8ODAAAAAElF") !important; -moz-image-region: auto !important; margin-right: 1px!important;} #FindToolbar[mini="true"] textbox.findbar-textbox{ -moz-box-ordinal-group: 2 !important} #FindToolbar[mini="true"] checkbox{ -moz-box-ordinal-group: 3 !important;} #FindToolbar[mini="true"] toolbarbutton.findbar-highlight{ -moz-box-ordinal-group: 4 !important;} #FindToolbar[mini="true"] #ClearButton{ -moz-box-ordinal-group: 4 !important;} #FindToolbar[mini="true"] .findbar-closebutton{ -moz-box-ordinal-group: 7 !important;} ]]>.toString()); //устанавливаем флаг window.ToggleFindRun = 'stop'; |
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,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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 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,AAABAAEAExMAAAEAIAAYBgAAFgAAACgAAAATAAAAJgAAAAEAIAAAAAAA8AUAAAAAAAAAAAAAAAAAAAAAAAAAAgACAAAAAAdUOucBYUD/AF09/QBcPP8BYkD/AF8//wBePf8AWTn/AE0y/wBLMf8AWTn/AWNC/wBbO/0BXj3/B1E45wAAAAAAAAACAAAAAAVZO9sCek3/AX5O/wB+T/8Afk//An9P/wB9TP8PhFf/No1r/yZqUf8AUDL/A3BF/wGBUP8AfU7/AH5O/wN6Tf8FWTvbAAAAAAhWPOcBgVH9AIpU/wSKVf8BiVT/AIlU/wSLV/8Ag0z/N6F3/9Xw5P+Wsaj/AEot/wN1S/8BiFX/AIlU/wCJVP8AilT/AH1P/QdTOucBaET/CIxY/giRWv8JkFn/CI9Z/wiPWf8MkV3/AIhR/0Cpgv/y//r/qb63/wBQMP8He07/BoxX/wiPWf8Ij1n/CJFa/wiMVv4CZUP/AWhF/QmVXf8Hml7/CJde/wmcYP8JmV//Dptj/wCUWP9GrYP/8f74/6zDuv8AWjX/CYJR/waWXP8ImV//CJdf/wmaYP8Ill3/AGlE/QNtRv8InF7/CKFk/wifYP8JoGP/Cp9j/wudZP8Ag0f/MpNp/9vw5/+cu67/AE4o/wtzSP8Lilf/CZlf/wueX/8JoGH/CJxe/wNuRv8GcEj/DaJi/w2oZ/8NpWT/D6dm/wejY/8LlV3/PZl1/5zEtP/5+/j/xtvS/z2GaP8LaUP/BW5E/weJVP8IoGH/C6hl/w2iYv8GcEj/BXNL/wyqZv8OsGn/D65o/w6uaf8ap2z/gcWn/9vn4P/L5dn/ruDK/87r3v/Y6OD/fbSc/xh0S/8IdEb/B5he/xKtaP8Mqmb/BXNK/wd3Sv8QsGv/DrZs/xC0bf8BrWP/f86r/9jn4P+OyK//OLN//ym6fP9FxIz/m+LC/9vy6P97s5n/AGc4/wmKU/8Qrmb/D7Fr/wd3Sv8JfEz/Fblx/yfDfv8rwoD/QsSK/9n16f+jxrf/IpRj/xevbv8nxH//HL11/zPCg/+07NP/1+ng/zSJY/8djFz/Ird1/xi4cv8JfEz/CX5P/yvFgP9F05L/Q9CQ/4vgt//V7uP/ZKKF/zGaaf9PypP/T9OV/1HRlf9BzY3/feCx/9fu4/92rJX/MJRo/0LHi/8tw3//CH5P/xKBVP9C0JD/S9qa/0DVkv+L5bv/xunY/12egP8ojV//Qb2E/0fUk/9L2Jb/QdGN/3Xbq//H5dj/dq6U/y+ea/9L05T/Qc+P/xKCVP8giV3/RtaU/0zfm/9E25X/fOWz/+H67v+AuZ//J4ZY/zedbP9Hw4v/Rc+R/znAgv+K1bH/2enh/2ivj/87uYH/TNyZ/0bWlf8giVz/IYxf/0vblv9Q5Zz/T+Ka/1Xjn//S++f/yeXY/1+qhv8vi13/LJVk/zelcv9ktY3/x9/T/8nl1/9Ht4L/S9WV/0/knf9L25b/IYte/yCLXv1N4Zr/Ueuh/1HooP9H6Zv/g+68/9v67P/R7OH/iMOp/2OoiP+Etp7/0OLZ/9fw5P931Kn/Q9WP/1Hmnv9S7aL/TeGa/yCLXv0lkmT/T+ed/lTyo/9T76D/Vu+l/1Dvof968bf/w/fc/+n98//v//j/7P/1/8D22/9x5a7/S+Ob/1Tuo/9T76L/VfKm/0/onP4kkWL/K35b51Hfmv1Y+Kb/WPel/1j3pP9a9qf/VfWl/1v2p/9m96z/afat/2b3rP9c9qj/Vvel/1n4pv9Y96T/V/em/1f4pv9Q3pn9K35b5wAAAABAnXPbUuef/1T0ov9X9aH/VvSh/1X0o/9X9aL/VvWi/1X0ov9V9KL/VfSj/1b0o/9V9KL/VfSi/1T0o/9S5p7/PZZu2wAAAAAAAgICAAAAAD2NaudFr4H/Q6x8/UStfP9ErXz/RK18/0StfP9ErXz/RK18/0StfP9ErXz/RK18/0Ose/1Eq33/Popr5wAAAAAAAgICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=="; } }; ToggleImage(event); //find bar сверху (move find bar to the top)................................................ XPCOMUtils.defineLazyGetter(window, "gFindBar", function() { let XULNS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"; let findbar = document.createElementNS(XULNS, "findbar"); findbar.setAttribute("browserid", "content"); findbar.id = "FindToolbar"; gBrowser.parentNode.insertBefore(findbar, gBrowser); // Force a style flush to ensure that our binding is attached. findbar.clientTop; window.gFindBarInitialized = true; return findbar; }); //find bar, показать количество совпадений(find bar,show the number of matches)...@author slimx................. (function() { //add label to findbar var status = document.getAnonymousElementByAttribute(gFindBar, 'anonid', 'match-case-status'); var sep = document.createElement("toolbarspacer"); var count = document.createElement("label"); count.hidden = true; status.parentNode.insertBefore(sep, status); status.parentNode.insertBefore(count, status);//findbar-container gFindBar.__proto__._foundMatches = count; gFindBar.__proto__._updateMatchesCount = function(aRes) { if (!this._updateMatchCountTimeout) window.clearTimeout(this._updateMatchCountTimeout); this._updateMatchCountTimeout = window.setTimeout(function(aRes, aSelf) { aSelf._updateMatchesCountWorker(aRes); }, 0, aRes, this); } gFindBar.__proto__._updateMatchesCountWorker = function(aRes) { var word = this._findField.value; if (aRes == this.nsITypeAheadFind.FIND_NOTFOUND || !word) { this._foundMatches.hidden = true; this._foundMatches.value = ""; } else { var matchesCount = this._countMatches(word).toString(); if (matchesCount != "0") { if (matchesCount == "1") this._foundMatches.value = matchesCount + hits; else if (matchesCount == "-1") { var matchLimit = 100; this._foundMatches.value = " \>"+ matchLimit + hits; // var key = (matchLimit > 1000) ? "Decrease" : "Increase"; } else this._foundMatches.value = matchesCount + hits; this._foundMatches.hidden = false; //Findbar, удалить атрибут 'red'(Findbar, remove attribute 'red').............. var findToolbar = document.getElementById("FindToolbar"); findToolbar.removeAttribute("red"); } else { this._foundMatches.hidden = true; this._foundMatches.value = ""; //Findbar, установить атрибут 'red'(Findbar, set attribute 'red')............... var findToolbar = document.getElementById("FindToolbar"); findToolbar.setAttribute("red", "true"); } window.clearTimeout(this._updateMatchCountTimeout); } } gFindBar.__proto__._countMatches = function(aWord, aWindow) { var win = aWindow || this.browser.contentWindow; var countFound = 0; for (var i = 0, count; win.frames && i < win.frames.length; i++) { if ((count = this._countMatches(aWord, win.frames[i])) != -1) countFound += count; else return count; } var doc = win.document; if (!doc || !(doc instanceof HTMLDocument)) return countFound; var body = doc.body; var count = body.childNodes.length; var searchRange = doc.createRange(); var startPt = doc.createRange(); var endPt = doc.createRange(); searchRange.setStart(body, 0); searchRange.setEnd(body, count); startPt.setStart(body, 0); startPt.setEnd(body, 0); endPt.setStart(body, count); endPt.setEnd(body, count); var retRange = null; var finder = Components.classes["@mozilla.org/embedcomp/rangefind;1"] .createInstance() .QueryInterface(Components.interfaces.nsIFind); finder.caseSensitive = this._shouldBeCaseSensitive(aWord); var matchLimit = 100; while ((retRange = finder.Find(aWord, searchRange, startPt, endPt))) { if (this._rangeIsVisible(retRange, win)) { if (this._findMode == this.FIND_LINKS) { if (this._rangeStartsInLink(retRange)) ++ countFound; } else ++ countFound; } if (countFound == matchLimit) { countFound = -1; break; } startPt = doc.createRange(); startPt.setStart(retRange.startContainer, retRange.startOffset + 1); } return countFound; } gFindBar.__proto__._rangeIsVisible = function(aRange, aWindow) { var node = aRange.startContainer; if (node.nodeType == node.ELEMENT_NODE) { if (node.hasChildNodes) { var childNode = node.childNodes[aRange.startOffset]; if (childNode) node = childNode; } } while (node && node.nodeType != node.ELEMENT_NODE) node = node.parentNode; // There is no perfect way to check if a node is visible in JavaScript, // so use the best measures we can have if (node) { var style = aWindow.getComputedStyle(node, ""); if (style) { if (style.visibility == "hidden" || style.visibility == "collapse" || style.display == "none") return false; if (style.left != "auto" && style.width != "auto") if (style.left < 0 && style.left + style.width < 0) return false; if (style.top != "auto" && style.height != "auto") if (style.top < 0 && style.top + style.height < 0) return false; } } return true; } gFindBar.__proto__._rangeStartsInLink = function(aRange) { var isInsideLink = false; var node = aRange.startContainer; if (node.nodeType == node.ELEMENT_NODE) { if (node.hasChildNodes) { var childNode = node.childNodes[aRange.startOffset]; if (childNode) node = childNode; } } const XLink_NS = "http://www.w3.org/1999/xlink"; do { if (node instanceof HTMLAnchorElement) { isInsideLink = node.hasAttribute("href");m break; } else if (typeof node.hasAttributeNS == "function" && node.hasAttributeNS(XLink_NS, "href")) { isInsideLink = (node.getAttributeNS(XLink_NS, "type") == "simple"); break; } node = node.parentNode; } while (node); return isInsideLink; } //insert count function to original eval("gFindBar._updateCaseSensitivity=" + gFindBar._updateCaseSensitivity.toString().slice(0, -1) + "this._updateMatchesCount();}"); eval("gFindBar._updateStatusUI=" + gFindBar._updateStatusUI.toString().slice(0, -1) + "this._updateMatchesCount();}"); })(); //FindBar, поиск колесиком мыши(FindBar, Mouse Scroll find )................................................ gFindBar.addEventListener('DOMMouseScroll', function (event){ //Найти (Find) gFindBar.onFindAgainCommand(event.detail < 0); }, false); //переключить 'Поиск на странице' двойным средним кликом на странице(toggle Find Bar, if Double midlle Click in page).......... //добавляем обработчик для обработки нажатие на кнопку мыши на странице....... gBrowser.addEventListener("mouseup", function(event){ //если нажатие на среднюю кнопку мыши if (event.button !== 1) return; //если разрешено в настройках(about:config) if (!custombuttons.getPrefs("FindBar.ToggleWithDoubleMiddleClick")) return; var _this = this; //если установлен флаг if (_this.open){ //переключить 'Поиск на странице' gFindBar.hidden ? gFindBar.onFindCommand() : gFindBar.close(); Find(event); gFindBar._findField.focus(); } //устанавливаем флаг _this.open = true; //сбросить флаг по таймеру this.timer = 0; this.timer = setTimeout(function(){ _this.open = false;}, 600); }, false); //Автоматически очищать поле текстового ввода на Findbar.................................................. gFindBar.addEventListener("DOMAttrModified", function(event){ 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,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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){ 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-contextpopup"); var clone = cbContextPopup.cloneNode(true); clone.setAttribute("onpopupshowing", "document.popupNode = document.getElementById('" + this.id + "')"); var menu = document.createElement("menu"); menu.setAttribute( "label", "Меню кнопки" ); menu.appendChild( clone ); menuPopup.appendChild( menu ); // Установить и удалить разные атрибуты для панели поиска .................................................... function toggleAttribute( s ) { if ( s == "FindBar.Highlight" ) { gFindBar.getElement('highlight').removeAttribute("checked"); Highlight(); return }; var atrr = s.substring(8); setTimeout(function(){ custombuttons.getPrefs( s ) ? gFindBar.setAttribute( atrr, "true") : gFindBar.removeAttribute( atrr ) }, 0); }; toggleAttribute("FindBar.pasteButton"); // Установить нужную иконку кнопки при старте браузера или при изменениях настроек автовыделения ............ var s = "FindBar.Highlight"; function toggleImage() { button.image = custombuttons.getPrefs( s ) ? "data:image/x-icon;base64,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" : "data:image/x-icon;base64,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" }; toggleImage(); var ps = Cc["@mozilla.org/preferences-service;1"].getService(Ci.nsIPrefBranch).QueryInterface(Ci.nsIPrefBranch2); ps.addObserver( s, toggleImage, false ); this.onDestroy = function() { ps.removeObserver( s, toggleImage, false ); }; // Показать количество совпадений на панели поиска, автор кода 'slimx' ....................................... (function() { var status = document.getAnonymousElementByAttribute(gFindBar, 'anonid', 'match-case-status'); var count = document.createElement("label"); count.id = 'hits'; count.hidden = true; status.parentNode.insertBefore(count, status); 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" ) { this._foundMatches.value = matchesCount + " hits"; if ( matchesCount == "-1") this._foundMatches.value = ">100 hits"; this._foundMatches.hidden = false; gFindBar._findField.removeAttribute("status", "notfound"); } else { this._foundMatches.hidden = true; this._foundMatches.value = ""; gFindBar._findField.setAttribute("status", "notfound"); } 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; } } 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"); 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; } eval("gFindBar._updateCaseSensitivity=" + gFindBar._updateCaseSensitivity.toString().slice(0, -1) + "this._updateMatchesCount();}"); eval("gFindBar._updateStatusUI=" + gFindBar._updateStatusUI.toString().slice(0, -1) + "this._updateMatchesCount();}"); })(); // FindBar, поиск колесиком мыши ............................................................................. gFindBar.addEventListener('DOMMouseScroll', function (e) { gFindBar.onFindAgainCommand(e.detail < 0); // искать следующее или предыдущее }, false); // Переключить поиск на странице двойным средним кликом на странице .......................................... gBrowser.addEventListener("mouseup", function(e) { if ( e.button !== 1 ) return; if ( !custombuttons.getPrefs("FindBar.ToggleWithDoubleMiddleClick") ) return; var _this = this; if ( _this.open ) { gFindBar.hidden ? gFindBar.onFindCommand() : gFindBar.close(); Find(e); gFindBar._findField.focus(); }; _this.open = true; setTimeout(function() { _this.open = false }, 600); // сбросить флаг по таймеру }, false); // Автоматически очищать поле текстового ввода на Findbar .................................................... function autoClear( closes ) { if ( !custombuttons.getPrefs("FindBar.autoclear") ) return; if ( closes == true) { if ( gFindBar._findField.value ) { window.FB_fFval = gFindBar._findField.value }; gFindBar._findField.value = ''; } if ( closes == false) { findFieldClear() }; }; /* Очистить поле текстового ввода если кликнуть правим кликом на 'Найти:' или поиск по странице если кликнуть левым кликом ..........................................................*/ document.getAnonymousElementByAttribute(gFindBar, "anonid", "find-label").addEventListener("click", function(e) { if ( e.button == 0 ) { gFindBar.onFindAgainCommand(false); // искать следующее } if ( e.button == 2 ) { findFieldClear(); // очистить поле текстового ввода } }, false); // Поиск по странице из буфера обмена, если кликнуть средним кликом на findbar ............................... gFindBar.addEventListener("click", function(e) { if ( e.button !== 1 ) return; e.preventDefault(); e.stopPropagation(); var str = ( gClipboard.read() ).replace(/^\s+|\s+$/g,""); // убираем пробелы с обоих концов текста. gFindBar._findField.value = str; Find(e); }, true); /* Двойной клик в строке поиска включает и выключает автовыделение или обычную подсветку текста из панели поиска .............................................................*/ gFindBar._findField.addEventListener("dblclick", function(e) { if ( e.button !== 0 ) return; e.preventDefault(); if ( custombuttons.getPrefs("FindBar.Autohighlight.ToggleWithDoubleClick") ) { var s = custombuttons.getPrefs("FindBar.Highlight"); custombuttons.setPrefs("FindBar.Highlight", !s); // переключить чекбокс у пункта меню 'Автовыделение' .... document.getElementsByAttribute("label", "Автовыделение")[0].setAttribute("checked", !s); gFindBar.getElement('highlight').removeAttribute("checked"); // выключаем кнопку 'Highlight' Highlight(false); }; window.content.focus(); // Findbar, убрать фокус }, false); // ЛКМ в форму поиска - выделить текст в форме поиска ........................................................ gFindBar._findField.addEventListener("click", function(e) { if ( e.button !== 0 ) return; if ( !this.sel ) { gFindBar._findField.select() }; this.sel = true; }, false); gFindBar._findField.addEventListener("blur", function() { this.sel = false }, false); // ЛКМ + ПКМ на поле текстового ввода очищают его ................................................. ["mousedown", "click"].forEach(function(type) { gFindBar._findField.addEventListener(type, clickToClear, false) }); 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(function(){ findFieldClear() }, 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; } } }; // Автоматически закрывать панель поиска если это разрешено в 'about:config' ................................. function closeFind() { if ( !custombuttons.getPrefs("FindBar.auto_Close") ) return; gFindBar.close(); window.ACRun = ''; }; function autoCloseOn() { if ( !custombuttons.getPrefs("FindBar.auto_Close") ) return; if ( window.ACRun == 'stop' ) return; window.ACRun = 'stop'; this.timeoutID = setTimeout( closeFind, custombuttons.getPrefs("FindBar.CloseTimer") + '000' ); }; function autoCloseOff() { if ( !custombuttons.getPrefs("FindBar.auto_Close") ) return; window.ACRun = ''; window.clearTimeout(this.timeoutID); }; window.addEventListener('mouseover', function(e) { if ( !gFindBar.hidden ) (e.target.nodeName !== 'findbar')? autoCloseOn(): autoCloseOff() }, false); // Сочетания клавиш для управление поиском на странице ....................................................... window.addEventListener('keydown', function(e) { // Ctrl+ f, показать - скрыть панель поиска .... if ( (e.ctrlKey) && (!e.altKey) && (!e.shiftKey) && (e.keyCode == 70) ) { e.preventDefault(); e.stopPropagation(); gFindBar.hidden ? gFindBar.onFindCommand() : gFindBar.close(); Find(e); gFindBar._findField.focus(); }; // Ctrl+ alt+ f, поиск по странице из буфера обмена .... if ( (e.ctrlKey) && (e.altKey) && (e.keyCode == 70) ) { gFindBar.hidden ? gFindBar.onFindCommand() : gFindBar.close(); goDoCommand("cmd_selectNone"); goDoCommand("cmd_paste"); Find(e); }; /* Ctrl+ snift+ f, открыть панель поиска с чистой поисковой формой или очистить поисковую форму или открыть панель поиска с предыдущим запросом/выделенным текстом или искать выделенный текст если панель поиска открыт если настройках кнопки включена 'Всегда открывать пустую поисковую форму' ....*/ if ( (e.ctrlKey) && (!e.altKey) && (e.shiftKey) && (e.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") ? setTimeout(function() { gFindBar._findField.value = val; Find(e) }, 10) : findFieldClear(); }; // Ctrl+ alt+ h, добавить текст(выделенный / из буфера обмена) для автовыделения .... if ( (e.ctrlKey) && (e.altKey) && (e.keyCode == 72) ) { HighlightAdd(); }; // поиск по мере набора если разрешено в 'about:config' и фокус на странице .... if ( custombuttons.getPrefs("accessibility.typeaheadfind") && ( 46 < e.keyCode && e.keyCode < 111 ) && /body|vbox/.test(e.target.localName) ) { if ( !this.firstLetter ) window.onkeypress = function(e) { this.firstLetter = String.fromCharCode(e.which) }; e.preventDefault(); e.stopPropagation(); if ( !gFindBar.hidden ) return; setTimeout(function() { gFindBar.onFindCommand(); gFindBar._findField.value = this.firstLetter }, 0); } }, false); // Автоматически выделить слова или ссылки.................................................................... Highlight = function(e) { gFindBar._highlightDoc(false); // удалить выделение var findValue = gFindBar._findField.value; // получить текст из панели поиска if ( !gFindBar.hidden ) { if ( findValue.length == 0 ) { gFindBar._findField.removeAttribute("status", "notfound"); }; // Findbar, удалить атрибут 'style' ..... if ( !!gFindBar._findField.style.color ) { gFindBar._findField.removeAttribute("style") }; // авто поиск с переклучением фокуса чтобы запустить подсчет количества совпадений .... if ( !/false|UIEvent|DragEvent|MutationRecord/.test(e) ) { gFindBar._findField.focus(); gFindBar.onFindCommand(); window.content.focus(); }; }; // получаем текст для автовыделения из 'about:config' или из панели поиска .... if ( custombuttons.getPrefs("FindBar.Highlight") ) { var value = gFindBar.hidden ? Application.prefs.getValue("FindBar.Highlight.value", 0) : ( findValue.length > 2 )? findValue: ""; }; if ( !!value ) gFindBar._highlightDoc(true, value); // выделение /* изменить цвет ссылок на страницах если содержат искомое слово, если разрешено в 'about:config' и включена автовыделение ....*/ var links = gBrowser.contentDocument.links; if ( !links ) return; var hLink = ( custombuttons.getPrefs("FindBar.Highlight.Link") && !!value ); // атрибуты для текущего таба .... if ( hLink || gBrowser.mCurrentTab.hasAttribute("Highlight_Link") ) { hLink ? gBrowser.mCurrentTab.setAttribute("Highlight_Link", "true") : gBrowser.mCurrentTab.removeAttribute("Highlight_Link"); /* цикл проверяет все ссылки на странице и изменяет цвет ссылки на цвет из 'about:config' если в ссылке найдено 'value' ....*/ for ( var i = 0; i < links.length; i++ ) { links[i].style.color = ''; // удалить выделение ссылок if ( hLink && String(links[i]).search(value) != -1 ) { links[i].style.color = custombuttons.getPrefs("ui.textHighlightBackground"); } } } }; /* Обработчики и наблюдатель следят за панелью поиска и загрузкой и переключением табов и запускают нужные коды и функции .........................................................................*/ // обработчики для табов .... gBrowser.tabContainer.addEventListener("TabSelect", function(e) { // стоп, если страница загружается if ( gBrowser.mCurrentTab.hasAttribute("busy") ) return; Highlight(e); }, false); gBrowser.addEventListener("pageshow", function(e) { // стоп, если открыть другие владки в фоновом режиме if ( e.target.location.href !== getBrowser().currentURI.spec ) return; Highlight(e); }, true); // обработчики и наблюдатель для панели поиска .... gFindBar._findField.addEventListener("drop", function(e) { Find(e) }, false); gFindBar._findField.addEventListener("input", function() { Find(false) }, false); gFindBar.getElement("find-case-sensitive").setAttribute("onclick", "Highlight(false)"); gFindBar.watch("hidden", function( prop, oldV, newV ) { autoClear( newV ); if ( newV ) { autoCloseOff(); Highlight(); } // если панель поиска закрывается return newV; }); // Добавляем подменю в контекстного меню на странице для выделенного текста .................................. (function () { var menu = document.createElement("menu"); var menuPopup = document.createElement("menupopup"); var contextMenu = document.getElementById("contentAreaContextMenu"); menu.setAttribute("label", "Find"); contextMenu.insertBefore(menu, document.getElementById("context-sep-properties") ); menu.appendChild(menuPopup); var array = [ { label:"Найти на странице", func: findToContex }, { label:"Поиск по сайту(google)", func: searchToSite }, { label:"Выделить текст на странице", func: highlightSel }, { label:"Автовыделение, добавить текст", func: addSel } ]; array.forEach(function( m ) { var mItem = document.createElement("menuitem"); mItem.setAttribute("label", m.label); mItem.addEventListener("command", m.func, false); menuPopup.appendChild( mItem ); }); contextMenu.addEventListener("popupshowing", function() { menu.hidden = !custombuttons.getPrefs("FindBar.contextFindWords") || !gContextMenu.isTextSelected; }, false); function findToContex() { gFindBar.onFindCommand(); Find(false); }; function searchToSite() { var text = escape( convertFromUnicode ("UTF-8", getSelect() ) ); var searchUrl = "http://www.google.com/search?as_q=" + text + "&as_sitesearch=" + encodeURIComponent( gBrowser.currentURI.host ); gBrowser.selectedTab = gBrowser.addTab( searchUrl ); }; function highlightSel() { gFindBar._highlightDoc(false); gFindBar._highlightDoc(true, getSelect() ); goDoCommand("cmd_selectNone"); }; function addSel() { toggleHighlightValue('add'); } })(); // Найти на странице ......................................................................................... Find = function(e) { if (e) e.preventDefault(); if (e) e.stopPropagation(); if ( custombuttons.getPrefs("FindBar.Highlight") ) { Highlight(e) }; if ( !gFindBar.hidden ) gFindBar._find( gFindBar._findField.value ); }; // Очистить поле текстового ввода на Findbar ................................................................. function findFieldClear() { if ( gFindBar._findField.value ) { window.FB_fFval = gFindBar._findField.value }; setTimeout(function() { gFindBar._findField.value = '' gFindBar._findField.removeAttribute("status", "notfound"); Highlight(); }, 0) }; // Добавляет или удаляет текст(выделенный / из буфера обмена) для автовыделения .............................. function toggleHighlightValue( arg ) { if ( arg == 'clear' ) { var str = '', title = button.label, notification = "Текст для автовыделение удален"; } if ( arg == 'add' && getSelect() ) { var str = getSelect(), title = "Автовыделение", notification = str; if ( custombuttons.getPrefs("FindBar.Highlight") ) { goDoCommand("cmd_selectNone") }; } Application.prefs.setValue("FindBar.Highlight.value", str); alertsService.showAlertNotification(button.image, title, notification, false, "", null, ""); Highlight(false); }; /* Функция отдаст выделенный текст из страницы или текстового поля, если текст не выделен из буфера обмена, если нет текста отдаст 'false' ................................... */ function getSelect() { // выделенный текст из страницы .... var selection = document.commandDispatcher.focusedWindow.getSelection().toString(); // выделенный текст из текстового поля .... if ( selection == '' ) { var theBox = document.commandDispatcher.focusedElement; if ( theBox && (theBox.type == "text" || theBox.type == "textarea") ) { var startPos = theBox.selectionStart; var endPos = theBox.selectionEnd; var selection = theBox.value.substring(startPos, endPos); } }; // текст из буфера обмена .... if ( selection == '' ) var selection = gClipboard.read(); // убираем пробелы с обоих концов текста .... if ( selection !== '' ) var selection = selection.toString().replace(/^\s+|\s+$/g,""); if ( selection == '') { var str = "Выделите или скопируйте текст!" alertsService.showAlertNotification(button.image, button.label, str, false, "", null, ""); }; return ( selection == '')? false: selection; }; // Запустить поиск через Toggle Find+3 если нажать в главном меню на пункт меню 'Найти' ...................... document.getElementById("cmd_find").setAttribute("oncommand", "gFindBar.onFindCommand(), Find(e)"); // Создать кнопку "Вставить и искать" на Findbar ............................................................. var textbox = document.getAnonymousElementByAttribute(gFindBar, "anonid", "findbar-textbox"); var b = document.createElementNS("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul", "toolbarbutton"); b.setAttribute("id", "pasteButton"); b.setAttribute("tooltiptext", "Л: Поиск выделенного текста/из буфера \nП: Очистить"); textbox.parentNode.insertBefore( b, textbox.nextSibling ); b.addEventListener("click", function(e) { if ( e.button == 0 ) { if ( !getSelect() ) return; gFindBar._findField.value = getSelect(); // вставить текст Find(e); }; if ( e.button == 2 ) { // очистить поле текстового ввода setTimeout(function() { findFieldClear() }, 0); }; }, false); // Поле текстового ввода на Findbar мигает желтим если достигнут низ/верх страницы ......................... var findStatusIcon = gFindBar.getElement("find-status-icon"); var observer = new MutationObserver(function(mutations) { gFindBar.setAttribute("flash", findStatusIcon.getAttribute("status") == "wrapped" ); setTimeout(function() { gFindBar.removeAttribute("flash") }, 700) }); observer.observe(findStatusIcon, { attributes: true, attributeFilter: ["status"] } ); // Стиль для панели поиска ................................................................................... (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); })('\ @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; }\ #find-field, .findbar-textbox { width: 250px !important; }\ #FindToolbar .findbar-textbox:not([style]) { color: black !important; }\ #FindToolbar > hbox > label { -moz-appearance: none !important; font-weight: bold !important; }\ \ #FindToolbar .findbar-find-fast.findbar-find-status,\ #FindToolbar .findbar-container>image,\ #FindToolbar[autohide] .findbar-closebutton {\ display: none !important; }\ \ #FindToolbar:not([pasteButton]) #pasteButton,\ #FindToolbar[mini] .findbar-find-fast[anonid="find-label"],\ #FindToolbar .findbar-find-fast[anonid="match-case-status"]{\ 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; }\ '); // устанавливаем флаг, чтобы функции и обработчики не исполнялась дважды this.setAttribute("stop","true"); |
PEAKTOP > 02-03-2013 23:57:39 |
Так откуда же мне знать. Действительно некоторые Custom Button не работают или работают не так как задумано. |
bunda1 > 03-03-2013 00:12:28 |
PEAKTOP |
PEAKTOP > 03-03-2013 23:00:49 |
bunda1, то что надо. Большое спасибо! |
PEAKTOP > 05-04-2013 17:36:35 |
Как в новом варианте кнопки, панель поиска опустить под вкладки, при расположении вкладок внизу страницы, как это было сделано в этом варианте. И зачем брал из меню кнопки стандартное меню? |
bunda1 > 05-04-2013 18:40:02 |
PEAKTOP пишет
Стандартное меню кнопки открывает Ctrl + ПКМ или Snift + ПКМ или двойной ПКМ. А убрал из меню кнопки потому что это лишний код без которого можно обойтись. Но можеш за: Выделить код Код:// цикл добавляет из массива атрибуты и обработчики к пунктам меню .... this.......... button.menuPopup.appendChild(mItem); }); добавить: Выделить код Код:// добавляем стандартное контекстное меню .... var separator = document.createElement("menuseparator"); this.menuPopup.appendChild( separator ); var cbContextPopup = document.getElementById("custombuttons-contextpopup"); var clone = cbContextPopup.cloneNode(true); clone.setAttribute("onpopupshowing", "document.popupNode = document.getElementById('" + this.id + "')"); var menu = document.createElement("menu"); menu.setAttribute( "label", "Меню кнопки" ); menu.appendChild( clone ); this.menuPopup.appendChild( menu ); А как ты разместил вкладки внизу страницы ? |
PEAKTOP > 05-04-2013 19:40:51 |
bunda1 пишет
Вкладки внизу страницы разместил с помощью расширения Tab Mix Plus |
bunda1 > 05-04-2013 20:13:04 |
PEAKTOP Нащёт опустить панель поиска под вкладки, попробуй удалить в кнопке: Выделить код Код:// Приклеить элемент #FindToolbar к странице( #appcontent ) ................................................. 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); findbar.clientTop; window.gFindBarInitialized = true; return findbar; }); Рестарт. Но тогда не будут работать настройки: FindBar мини, FindBar сверху, FindBar справа Выделить код Код:{ label: 'FindBar мини', value: 'FindBar.mini', func: toggleAttribute, cek:''}, { label: 'FindBar сверху', value: 'FindBar.top', func: toggleAttribute, cek:''}, { label: 'FindBar справа', value: 'FindBar.right', func: toggleAttribute, cek:''}, |
Ader > 05-04-2013 23:38:42 |
В данной версии (v14) заметил такую странность, если в настройках браузера включена функция => "Искать текст на странице по мере его набора", то копирование на странице с помощью "Ctrl+C" или кнопки на мышке невозможно - панель самопроизвольно открывается, а так же это наблюдается и при нажатии комбинации "Ctrl+любая буква" - панель открывается с уже введённой буквой которая была в комбинации "Ctrl+". В предыдущих версиях такого нет. И небольшая просьба, можно ли сделать так же как было в предыдущих версиях (v10 и v12),что бы при очистке поля текстового ввода нажатием ПКМ по "Найти", курсор автоматически фокусировался в данном поле,а так же подправить цвет поля текстового ввода когда искомого на странице не найдено на более светлый, а то почти не видно, что ты вообще искал - приходиться выделять текст в поисковом окне. |
Dumby > 06-04-2013 07:01:37 |
bunda1 скрытый текст Выделить код Код:// поиск по мере набора если разрешено в 'about:config' и фокус на странице .... if ( custombuttons.getPrefs("accessibility.typeaheadfind") && ( 46 < e.keyCode && e.keyCode < 111 ) && /body|vbox/.test(e.target.localName) ) { if ( !this.firstLetter ) window.onkeypress = function(e) { this.firstLetter = String.fromCharCode(e.which) }; e.preventDefault(); e.stopPropagation(); if ( !gFindBar.hidden ) return; setTimeout(function() { gFindBar.onFindCommand(); gFindBar._findField.value = this.firstLetter }, 0); } Если я правильно понял идею, то может быть так скрытый текст Куда-нибудь в начало кода поставить Выделить код Код:var fastFindBar; setTimeout(function() { fastFindBar = document.getElementById("browser-bottombox").firstChild; fastFindBar._quickFindTimeoutLength = 100; fastFindBar.style.visibility = "collapse"; }, 1000); А сам кусок тогда Выделить код Код:if (gFindBar.hidden && cbu.getPrefs("accessibility.typeaheadfind")) { setTimeout(function() { if (!fastFindBar.hidden) { gFindBar.onFindCommand(); var field = gFindBar._findField; field.value = fastFindBar._findField.value; field.selectionStart = field.value.length; } }, 50); } |
bunda1 > 06-04-2013 20:45:52 |
Ader 06-04-2013 20:58:56 Dumby пишет
Спасибо, это работает |
bunda1 > 06-04-2013 21:34:38 |
Ader пишет
У меня вроде нормально видно текст, даже если не найдено, наверно у тебя нестандартная тема. |
Ader > 06-04-2013 22:58:30 |
У меня вот так: В версиях 12 и 14 А вот в версии 10 было так же и у тебя, вот я и подумал,что дело в кнопке. P.S. |
bunda1 > 06-04-2013 23:15:55 |
Ader Выделить код Код:.findbar-textbox[status="notfound"] { -moz-appearance: none !important; box-shadow: 0 0 0 1em #f66 inset; } |
Ader > 06-04-2013 23:23:27 |
Насчёт цвета ты был прав - дело в теме. Уже разобрался. |
bunda1 > 06-04-2013 23:29:49 |
Ader пишет
http://forum.mozilla-russia.org/uploaded/Toggle Find+3 eksperiment.txt 06-04-2013 23:31:05 |
Ader > 06-04-2013 23:45:56 |
Да, это то,что "доктор прописал" - всё отлично работает. |
PEAKTOP > 07-04-2013 00:19:04 |
bunda1, а если секцию кода - "// Показать количество совпадений на панели поиска, автор кода 'slimx' ......................................." заменить кодом из старой версии, это на что-нибудь повлияет? секция старого кода Выделить код Код:// Показать количество совпадений на панели поиска, автор кода 'slimx' ....................................... (function() { var status = document.getAnonymousElementByAttribute(gFindBar, 'anonid', 'match-case-status'); var count = document.createElement("label"); count.id = 'hits'; count.hidden = true; status.parentNode.insertBefore(count, status); 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" ) { this._foundMatches.value = "найдено совпадений: "+ matchesCount; if ( matchesCount == "-1") this._foundMatches.value = "найдено >100 совпадений"; this._foundMatches.hidden = false; gFindBar._findField.removeAttribute("status", "notfound"); } else { this._foundMatches.hidden = true; this._foundMatches.value = ""; gFindBar._findField.setAttribute("status", "notfound"); } 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; } } 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"); 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; } eval("gFindBar._updateCaseSensitivity=" + gFindBar._updateCaseSensitivity.toString().slice(0, -1) + "this._updateMatchesCount();}"); eval("gFindBar._updateStatusUI=" + gFindBar._updateStatusUI.toString().slice(0, -1) + "this._updateMatchesCount();}"); })(); |
bunda1 > 07-04-2013 00:39:06 |
PEAKTOP |
PEAKTOP > 07-04-2013 14:19:06 |
bunda1, действительно ошибся, не из того окна редактора скопировал код. Спасибо за ответ. Буду пользоваться секцией старого кода. Для меня более привычно, что кол-во совпадений отображается в конце панели. |
iDev.Pi > 21-05-2013 02:24:24 |
bunda1 |
voqabuhe > 21-05-2013 10:24:07 |
iDev.P[b пишет
У меня в всё работает. |
bunda1 > 21-05-2013 19:52:09 |
iDev.Pi |
villa7 > 21-05-2013 21:29:15 |
bunda1 |
bunda1 > 28-05-2013 19:32:07 |
villa7 пишет
Добавлять в кнопку такую функцию не буду потому что вряд ли это кому то еще нужно. Выделить код Код:function autoFind(e) { if ( e.button !== 0 ) return; if ( /input|password|textarea|textbox|searchbar|findbar/.test( e.target.localName.toLowerCase() ) ) return; if ( e.type == 'mousedown' ) var lastSelection = getBrowserSelection(); if ( e.type == 'mouseup' ) { var selection = getBrowserSelection(); if ( selection && selection !== lastSelection && gFindBar.hidden ) gFindBar.onFindCommand(); } }; addEventListener("mouseup", autoFind, false, gBrowser ); addEventListener("mousedown", autoFind, false, gBrowser ); Если тебе нужна соответствующая настройка в меню кнопки я сделаю. |
villa7 > 28-05-2013 21:59:44 |
bunda1 |
bunda1 > 01-06-2013 11:10:35 |
villa7 пишет
Включить авто поиск при выделенные текста можно в настройках кнопки, кстати после редактирования кодов в этой кнопке не нужен рестарт. |
villa7 > 01-06-2013 12:12:48 |
bunda1 |
voqabuhe > 01-06-2013 13:19:09 |
bunda1 пишет
Очень удобно. Тогда логично бы сделать, чтобы выделенное слово добавлялось в строку поиска и когда Toggle Find+3 уже открыт. Но только чтобы это тоже отключалось. |
bunda1 > 01-06-2013 13:53:51 |
voqabuhe пишет
http://forum.mozilla-russia.org/uploaded/Toggle Find+3 eksperiment 2.txt |
iDev.Pi > 01-06-2013 14:46:50 |
bunda1 |
bunda1 > 01-06-2013 15:12:40 |
iDev.Pi |
voqabuhe > 01-06-2013 16:01:59 |
bunda1 01-06-2013 16:15:53 |
bunda1 > 01-06-2013 16:47:16 |
voqabuhe пишет
http://forum.mozilla-russia.org/uploaded/Toggle Find+3 eksperiment 2.txt |
voqabuhe > 01-06-2013 17:03:22 |
bunda1 |
villa7 > 02-06-2013 12:41:19 |
bunda1 |
selevo > 08-06-2013 06:50:16 |
а есть функция чтоб перещёлкивал вкладки на которых нашёл слово ? вот это расширение ставил... Крошка Ру пишет
очень странно ищет то только в текущей странице ,то х.з. в какой -то одной хотя слово есть как минимум в 10 вкладках.. |
villa7 > 09-06-2013 09:53:28 |
bunda1 |
Dumby > 09-06-2013 11:13:11 |
villa7 пишет
скрытый текст |
villa7 > 09-06-2013 11:52:43 |
Dumby |
bunda1 > 09-06-2013 12:30:28 |
Dumby |
SendInfo > 08-07-2013 23:04:17 |
Firefox 25.0a1(2013-07-08) кнопка умерла |
voqabuhe > 08-07-2013 23:15:41 |
SendInfo пишет
Подтверждаю. |
Dumby > 09-07-2013 14:07:36 |
, захотелось попрощаться, положил в начало кода скрытый текст Выделить код Код:Object.defineProperty(gBrowser, "fastFind", { get: function() { if (!this._fastFind) { this._fastFind = Cc["@mozilla.org/typeaheadfind;1"].createInstance(Ci.nsITypeAheadFind); this._fastFind.init(this.docShell); } return this._fastFind; }, configurable: true, enumerable: true }); |
voqabuhe > 09-07-2013 14:39:42 |
Dumby пишет
Как всегда отлично, спасибо Dumby пишет
Надолго? |
SendInfo > 09-07-2013 16:38:45 |
Dumby пишет
При вводе в адресной строке и любом текстовом поле открывается финдбар кнопки с перехватом набираемого. |
voqabuhe > 09-07-2013 16:49:59 |
SendInfo пишет
accessibility.typeaheadfind - false |
SendInfo > 09-07-2013 17:07:08 |
voqabuhe пишет
отсутствует переход "Искать предыдущее" , "Искать следующее" |
bunda1 > 09-07-2013 19:10:42 |
Dumby пишет
Что такое, лучше не надо. |
bunda1 > 09-07-2013 20:43:09 |
SendInfo пишет
Какой версией кнопки ты пользуешься? |
SendInfo > 09-07-2013 23:16:12 |
bunda1 пишет
FindBar.version 15 http://forum.mozilla-russia.org/uploade … ment 2.txt |
bunda1 > 10-07-2013 21:33:49 |
SendInfo |
voqabuhe > 10-07-2013 23:03:35 |
bunda1 |
bunda1 > 10-07-2013 23:28:06 |
voqabuhe пишет
Странно у меня на Nightly работает. Ты тоже используешь экспериментальную кнопку, что пишет консоль. И кстати prefs.js при проблемах с кнопкой не должен помогать. |
voqabuhe > 11-07-2013 00:19:52 |
bunda1 пишет
Да, похоже дело не в кнопке. Удалил prefs.js появился Find bar. Начал восстанавливать настройки и в какой-то момент он опять пропал. Запуск с отключенными дополнениями не помог. В консоли
11-07-2013 00:39:24 |
voqabuhe > 11-07-2013 02:11:17 |
bunda1 пишет
Какой версией ты пользуешься? У меня что-то ни одна нормально не работает. |
bunda1 > 11-07-2013 20:02:41 |
voqabuhe Я думаю что надо подождать пока они доделают иначе мне за ними не угнаться но отдельные возможности кнопки наверно можно перенести на новую панель поиска: |
voqabuhe > 11-07-2013 22:01:12 |
bunda1 пишет
Да я это ещё вчера увидел. bunda1 пишет
Убери пока из экспериментальной кнопки Показать поиск по странице при выделении текста, а то ей стало невозможно пользоваться №291 |
bunda1 > 11-07-2013 22:49:33 |
voqabuhe |
voqabuhe > 11-07-2013 23:13:26 |
bunda1 |
bunda1 > 12-07-2013 23:06:32 |
voqabuhe Показать поиск по странице при выделении текста можно отключить в настройках кнопки и эта функция не может быть связана с №291 |
voqabuhe > 13-07-2013 00:04:18 |
bunda1 |
bunda1 > 13-07-2013 00:36:24 |
А ты удали 09-07-2013 13:07:36 |
voqabuhe > 13-07-2013 01:33:05 |
bunda1 |
bunda1 > 13-07-2013 01:54:06 |
voqabuhe |
voqabuhe > 13-07-2013 11:51:56 |
bunda1 пишет
Не работает нормально, всё равно перехватывает выделение текста, открывается ПКМ в любом текстовом поле и соответственно не даёт ничего вводить. |
bunda1 > 13-07-2013 12:34:53 |
voqabuhe |
SendInfo > 13-07-2013 12:44:29 |
bunda1 пишет
Я не voqabuhe, но вот |
voqabuhe > 13-07-2013 12:50:15 |
bunda1 |
bunda1 > 13-07-2013 13:07:18 |
voqabuhe пишет
Да нет, просто Nightly не всех одинаково быстро обнавляется. Ну в общем проблему я увидел и буду разбираться. 13-07-2013 13:19:37 |
Dumby > 13-07-2013 13:42:07 |
bunda1 пишет
Хорошо если так, но если вдруг у кого-то alert(String(document.getAnonymousElementByAttribute(gFindBar, "anonid", "find-label"))); скрытый текст Выделить код Код:/* Очистить поле текстового ввода если кликнуть правим кликом на 'Найти:' или поиск по странице если кликнуть левым кликом ................................*/ addEventListener("click", function(e) { if ( e.button == 0 ) { gFindBar.onFindAgainCommand(false); // искать следующее } if ( e.button == 2 ) { clearFindField(); // очистить поле текстового ввода } }, false, document.getAnonymousElementByAttribute(gFindBar, "anonid", "find-label") ); а то листенер на окне повиснет. |
voqabuhe > 13-07-2013 14:28:11 |
bunda1 пишет
У меня без неё кнопка становится полностью не рабочей, даже по Ctrl+F Findbar не открывается. 13-07-2013 14:38:59 Dumby пишет
А вот это помогло. Кнопка стала полностью рабочей. Ну ты голова, спасибо. |
voqabuhe > 13-07-2013 16:04:46 |
bunda1
Как свой цвет задать? |
voqabuhe > 13-07-2013 17:02:06 |
Ещё один баг обнаружился. Поиск работает только на одном первоначально выбранном сайте, на уже открытых других сайтах поиск не пашет, требуется обновление страницы. |
SendInfo > 13-07-2013 19:51:56 |
voqabuhe пишет
У меня на 20130713 работает. |
SendInfo > 13-07-2013 21:33:22 |
Вобщем кнопка работает так как ей хочется ,а не так как надо.Выделяется только текущее.Предыдущее и следущее не выделяется. |
Dumby > 14-07-2013 18:28:24 |
voqabuhe пишет
Заменил свою злополучную добавку на эту, и, вроде, получше стало скрытый текст Выделить код Код:Object.defineProperty(gBrowser, "fastFind", { get: function() { if (!this._fastFind) { this._fastFind = Cc["@mozilla.org/typeaheadfind;1"].createInstance(Ci.nsITypeAheadFind); this._fastFind.init(this.docShell); this.CBTFOldDS = this.docShell; } if (this.CBTFOldDS != this.docShell) { this.CBTFOldDS = this.docShell; this._fastFind.setDocShell(this.docShell); } return this._fastFind; }, configurable: true, enumerable: true }); voqabuhe пишет
Там, ближе к концу кода, полно строчек со стилями, скрытый текст Выделить код Код:#FindToolbar > hbox > hbox > textbox[flash="true"] {box-shadow: 0 0 0 1em #00ff00 inset !important;}\ |
voqabuhe > 14-07-2013 23:16:14 |
Dumby пишет
Dumby пишет
Ну теперь просто всё шикарно. Спасибо. Ps У меня вроде как осталась только одна проблемка
Правда она меня не сильно беспокоит, т.к. я этим практически не пользуюсь, но всё же обидно да, что не работает. |
Dumby > 15-07-2013 18:41:01 |
voqabuhe пишет
Предположительно помогает, если сделать шаг назад - в этой строке заменить true на false скрытый текст Выделить код Код:addEventListener("click", function() { Highlight(true) }, false, gFindBar.getElement("find-case-sensitive") ); |
bunda1 > 15-07-2013 21:32:11 |
Dumby Выделить код Код:// Автоматически выделить слова или ссылки ................................ function Highlight(e) { gFindBar._highlightDoc(false); // удалить выделение var findValue = gFindBar._findField.value; // получить текст из панели поиска var hidden = gFindBar.hidden; if ( !hidden ) { if ( findValue.length == 0 ) { gFindBar._findField.removeAttribute("status", "notfound"); } // Findbar, удалить атрибут 'style' ..... if ( !!gFindBar._findField.style.color ) { gFindBar._findField.removeAttribute("style") } // поиск с переклучением фокуса для подсчета совпадений .... if ( e !== undefined && e == true ) { gFindBar._findField.focus(); gFindBar.onFindCommand(); window.content.focus(); } } // получаем текст для автовыделения из 'about:config' или из панели поиска .... if ( custombuttons.getPrefs("FindBar.Highlight") ) { var value = hidden ? Application.prefs.getValue("FindBar.Highlight.value", 0) : ( findValue.length > 2 )? findValue: ""; } if ( !!value ) gFindBar._highlightDoc(true, value); // выделение /* изменить цвет ссылок на страницах если содержат искомое слово, если разрешено в 'about:config' и включена автовыделение ....*/ var links = gBrowser.contentDocument.links; if ( !links ) return; var hLink = ( custombuttons.getPrefs("FindBar.Highlight.Link") && !!value ); // атрибуты для текущего таба .... if ( hLink || gBrowser.mCurrentTab.hasAttribute("Highlight_Link") ) { hLink ? gBrowser.mCurrentTab.setAttribute("Highlight_Link", "true") : gBrowser.mCurrentTab.removeAttribute("Highlight_Link"); /* цикл проверяет все ссылки на странице и изменяет цвет ссылки на цвет из 'about:config' если в ссылке найдено 'value' ....*/ for ( var i = 0; i < links.length; i++ ) { links[i].style.color = ''; // удалить выделение ссылок if ( hLink && String(links[i]).search(value) != -1 ) { links[i].style.color = custombuttons.getPrefs("ui.textHighlightBackground"); } } } }; http://forum.mozilla-russia.org/uploaded/Toggle Find+3 eksperiment 2.txt |
voqabuhe > 15-07-2013 22:36:37 |
Dumby пишет
Ну просто класс, спасибо тебе большое. |
SendInfo > 15-07-2013 22:57:12 |
SendInfo пишет
SendInfo пишет
Нашел свою ошибку - сделал как хотел. |
iDev.Pi > 16-07-2013 17:33:38 |
bunda1 А предложенное мной изменение - и сохранит возможность быстрого переключения подсветки вхождений на странице, и починит 3 поломанных варианта выделения текста в строке поиска. |
bunda1 > 16-07-2013 20:07:40 |
iDev.Pi пишет
Хорошая мысль но только иногда трудно кликнуть по счётчику вхождений, может лучше двойным правым по строке поиска |
iDev.Pi > 16-07-2013 22:44:35 |
Я тоже сначала именно об этом подумал, но двойной правый не удобен тем, что нужно гасить появление контекстного меню: потом будут проблемы с тем, чтобы его вызвать. |
bunda1 > 16-07-2013 23:10:02 |
iDev.Pi пишет
Гасить появление контекстного меню не проблема и проблемы с тем, чтобы его вызвать нет, кажется |
voqabuhe > 16-07-2013 23:46:15 |
bunda1 |
bunda1 > 16-07-2013 23:57:33 |
voqabuhe пишет
Исправим. |
iDev.Pi > 17-07-2013 00:38:34 |
bunda1 пишет
если их нет, то зачем его переключать? всё равно ничего на странице не подсветит же |
Dumby > 18-07-2013 18:22:50 |
bunda1 пишет
А если добавлять свойство в document ? скрытый текст Выделить код Код:/* изменить цвет ссылок на страницах если содержат искомое слово, если разрешено в 'about:config' и включена автовыделение ....*/ var prop1 = "somePropertyName1"; var prop2 = "somePropertyName2"; var hLink = cbu.getPrefs("FindBar.Highlight.Link") && value; var color = cbu.getPrefs("ui.textHighlightBackground"); function highlightLinks(win) { var doc = win.document; var links = doc.links; if ((hLink || prop1 in doc) && links) { hLink ? doc[prop1] = true : delete doc[prop1]; Array.forEach(links, function(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); |
bunda1 > 18-07-2013 23:48:56 |
Dumby |
bunda1 > 21-07-2013 13:21:55 |
iDev.Pi пишет
Вот переделал на двойной клик правый по панели поиска. Выделить код Код:#FindToolbar[mini] .findbar-case-sensitive.tabbable {\ -moz-appearance: checkbox !important;\ }\ но не могу переместить в поисковую форму и не знаю как ставить галочку или что то похожее в этот чекбокс при переключении на: если вообще возможно это сделать Css кодом |
iDev.Pi > 21-07-2013 14:26:56 |
bunda1 |
bunda1 > 21-07-2013 15:01:38 |
iDev.Pi пишет
Исправлю. iDev.Pi пишет
А если просто двойной клик на панели не важно где, можно по сётчику или по поисковую форму или просто по панели. Пусть каждый кликнет как понравится. И в меню упомянуть просто двойной клик. iDev.Pi пишет
Что такое, так не должно быть, буду разбиратся ! iDev.Pi пишет
Разумно, уберу пробелы. 21-07-2013 15:05:25 Выделить код Код:data:image/x-icon;base64,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 |
iDev.Pi > 21-07-2013 15:19:04 |
bunda1 пишет
мне двойной клик ПКМ кажется неудобным потому, что я как юзер к нему ну совсем не привык: я не знаю ни одного другого элемента интерфейса в лисе или в любой другой программе, где бы использовался двойной ПКМ для чего-то: двойной левой - используется, а двойной правой - не-а. bunda1 пишет
так работает, но лучше бы ты эту иконку в код запрятал. |
bunda1 > 21-07-2013 15:39:22 |
iDev.Pi 21-07-2013 15:43:36 iDev.Pi пишет
А я вот много где исползую двойной клик ПКМ и если програмисти двойной правый разрешили в Firefox то это неспроста, это намёк. |
iDev.Pi > 21-07-2013 16:58:11 |
bunda1 Кстати, заметил ещё пару багов: И ещё у меня есть ещё один фичереквест: а можно ли всё-таки добавить настройку для управления тем, будет ли выделенной на странице автоматически попадать в поле поиска при открытии панели поиска? Сейчас есть настройка "всегда открывать панель поиска пустой", но это немного не то (эта настройка - overkill для меня): хочется, чтобы между открытиями панели запоминался последний введённый пользователем запрос. Он и сейчас сохраняется, но если перед открытием панели - на странице что-то выделено - то сохранённый запрос заменяется выделением - и это поведение лично для меня - нежелательно, поэтому хочется, чтобы оно управлялось настройкой. p.s.: сейчас посмотрю на кнопку в Nightly (только обновлю её, а то давно не пользовался). |
bunda1 > 21-07-2013 17:11:38 |
iDev.Pi пишет
Странно но у меня автовыделение срабатывает с 0123456789()[]\/,!@#$%^&*-=_+`~<>?'";:{}№. или я что то не понял. 21-07-2013 17:12:28 iDev.Pi пишет
Исправлю 21-07-2013 17:14:49 iDev.Pi пишет
Ok |
iDev.Pi > 21-07-2013 17:18:13 |
bunda1 |
bunda1 > 21-07-2013 17:30:01 |
Ладно, да ну этого Nightly, а что там с 0123456789()[]\/,!@#$%^&*-=_+`~<>?'";:{}№. я все равно не понял. |
iDev.Pi > 21-07-2013 17:47:51 |
bunda1 |
villa7 > 23-07-2013 18:31:13 |
bunda1 |
bunda1 > 23-07-2013 18:58:53 |
villa7 пишет
Таймер включается не с момента выделения, а с любого момента открытые панели, если передвинуть курсор на панели поиска таймер сбрасывается, если курсор убрать с панели поиска таймер опять включается заново. villa7 пишет
Но есть же возможность переключать FindBar двойным средним кликом, которую легко переделать на двойной левый или правый клик. Но если хочешь сделаю для тебя закрытие по клику, это не трудно. |
villa7 > 23-07-2013 19:55:01 |
bunda1
Это когда мышка не шевелится, страница не прокручивается, и не понятно юзер за компутером живой аль уже нет |
bunda1 > 23-07-2013 20:06:12 |
Выделить код Код:// Переключить поиск на странице двойным средним кликом на странице ................................ addEventListener("mouseup", function(e) { if ( e.button !== 1 ) return; if ( !cbu.getPrefs("FindBar.ToggleWithDoubleMiddleClick") ) return; var _this = this; if ( _this.open ) { gFindBar.hidden ? gFindBar.onFindCommand() : gFindBar.close(); Find(e); gFindBar._findField.focus(); }; _this.open = true; setTimeout(function() { _this.open = false }, 600); // сбросить флаг по таймеру }, false, gBrowser ); Поменяй в if ( e.button !== 1 ) return; 1 на 2 |
villa7 > 23-07-2013 21:58:22 |
bunda1 пишет
Сама кнопка нажимается по правому клику, а панель не скрывается 22 |
bunda1 > 23-07-2013 22:26:27 |
villa7 пишет
У меня скрывается, может у тебя конфликт с каким ни будь расширением или кнопкой. Проверь. |
villa7 > 23-07-2013 23:08:04 |
bunda1
Мне втемяшилось что правый одинарный клик, со злости начал клацать по странице, панель скрылась, получилось что двойным правым скрывается, правильно? может тогда попробовать лучше двойным левым, удобней как то, пробовал цифры менять не получается. |
bunda1 > 24-07-2013 18:50:34 |
villa7 пишет
Да правильно, двойным правым. villa7 пишет
if ( e.button !== 0 ) return; |
villa7 > 24-07-2013 21:29:30 |
[ bunda1 пишет
Скрывает только после очистки поиска, тут уж наверно ничего не сделать, так как двойной левый работает ещё и на выделение при котором опять же появляется панель. Ладно, хоть правый теперь есть. Спасибо. |
villa7 > 25-07-2013 16:47:38 |
bunda1 |
toxa > 25-07-2013 17:56:28 |
Как можно записать условие: если открыта панель перевода расширения S3. Google Переводчик, то... <выполнить действие>? |
bunda1 > 25-07-2013 19:19:46 |
toxa пишет
Вот пример: Выделить код Код:var s3gt = document.getElementById('s3gt-toolbar-panel'); if ( !s3gt.hasAttribute('collapsed') ) alert('открыта панель перевода'); var observer = new MutationObserver(function() { if ( !s3gt.hasAttribute('collapsed') ) alert('открыта панель перевода'); }); observer.observe( s3gt, { attributes: true } ); addDestructor(function() { observer.disconnect() }); Вместо alert('открыта панель перевода'); пропиши свой код который ты хочешь запустить если открыта панель перевода расширения S3. |
toxa > 25-07-2013 22:13:58 |
bunda1, спасибо! |
toxa > 26-07-2013 11:42:39 |
Я использую этот кусок кода чтобы все ссылки. закладки и пр. открывались в новой вкладке скрытый текст Выделить код Код:// Bookmarks/History/Homepage/URL/Search открывать в новой вкладке ...................................... eval("whereToOpenLink = " + whereToOpenLink.toString() .replace(/return "current";/g, "{"+(function() { var node = e && e.originalTarget; while (node) { switch (node.id) { case "bookmarksMenuPopup": case "goPopup": case "appmenu_bookmarksPopup": case "appmenu_historyMenupopup": case "personal-bookmarks": case "bookmarks-menu-button": case "historymenu_history": case "home-button": case "page-proxy-stack": case "go-button": case "urlbar-go-button": case "PopupAutoCompleteRichResult": case "searchbar": case "PopupAutoComplete": return "tab"; } node = node.parentNode; } return "current"; }).toString().replace(/^.*{|}$/g, "")+"}") ); //Bookmarklet eval("openLinkIn = " + openLinkIn.toString() .replace(/(?=if \(where == "save"\))/, 'if (url.substr(0, 11) == "javascript:") where = "current";') .replace(/(?=var loadInBackground)/, 'if (w.gBrowser.currentURI.spec == "about:blank" && !w.gBrowser.mCurrentTab.hasAttribute("busy")) where = "current";') ); // document.getElementById("sidebar-box").addEventListener("load", function(event) { var document = event.target; if (document.location == "chrome://browser/content/bookmarks/bookmarksPanel.xul" || document.location == "chrome://browser/content/history/history-panel.xul") { eval("document.defaultView.whereToOpenLink = " + document.defaultView.whereToOpenLink.toString() .replace(/return "current";/g, 'return "tab";') ); eval("document.defaultView.openLinkIn = " + document.defaultView.openLinkIn.toString() .replace(/(?=if \(where == "save"\))/, 'if (url.substr(0, 11) == "javascript:") where = "current";') .replace(/(?=var loadInBackground)/, 'if (w.gBrowser.currentURI.spec == "about:blank" && !w.gBrowser.mCurrentTab.hasAttribute("busy")) where = "current";') ); } }, true); // eval("gURLBar.handleCommand = " + gURLBar.handleCommand.toString() .replace(/aTriggeringEvent\s*&&\s*aTriggeringEvent.altKey/, "!($&)") .replace("aTriggeringEvent.preventDefault();", "") .replace("aTriggeringEvent.stopPropagation();", "") ); Всё хорошо, но есть один минус. На 9-й версии (на более новых версиях я этого не замечал) если я запускаю букмарклет через ключевое слово из адресной строки, открывается пустая страница. Если запускать букмарклет кликом или даже вставить код в адресную строку, работает нормально. И если открыть эту кнопку на редактирование и даже ничего не изменять, а сразу нажать ОК, после этого уже всё время букмарклеты запускаются как положено. Кажется как вроде эта кнопка почему-то не инициализируется при запуске браузера. Можно это дело подправить? |
bunda1 > 26-07-2013 20:47:43 |
toxa |
iDev.Pi > 28-07-2013 01:42:30 |
bunda1 пишет
ping |
bunda1 > 28-07-2013 02:14:18 |
Завтра или уже сегодня займусь. |
bunda1 > 31-07-2013 22:30:54 |
iDev.Pi пишет
http://forum.mozilla-russia.org/uploaded/Toggle Find+3 eksperiment 2.txt |
iDev.Pi > 01-08-2013 00:49:37 |
bunda1 А изменение только в iDev.Pi пишет
? iDev.Pi пишет
? |
voqabuhe > 01-08-2013 11:17:41 |
bunda1 пишет
Опять учесть регистр не работает и №324 уже не помогает. |
bunda1 > 01-08-2013 19:10:15 |
iDev.Pi пишет
Работает по умолчанию без переключения в меню и в коде. 01-08-2013 19:15:49 voqabuhe пишет
Так из Nightly чекбокс переключения регистра вообще убрали. Я безуспешно пытался его вернуть и забыл про это, оставил не доделанный код. Попробуй теперь: Toggle Find+3 eksperiment 2.txt |
Infocatcher > 01-08-2013 19:18:29 |
bunda1 пишет
Эммм... а я вижу на оригинальной панели поиска кнопку-чекбокс справа. |
voqabuhe > 01-08-2013 19:36:02 |
bunda1 пишет
Теперь всё нормально. Спасибо. |
bunda1 > 01-08-2013 19:38:52 |
Infocatcher пишет
|
iDev.Pi > 02-08-2013 05:59:35 |
bunda1 пишет
Извини, но лично для меня, эта необходимость в доп. кликах - лишает добавление этой фичи всякого смысла. |
bunda1 > 02-08-2013 20:50:47 |
iDev.Pi
Мда, какое то сложное описание и действие для CTRL + SHIFT + F |
iDev.Pi > 03-08-2013 19:53:58 |
bunda1 bunda1 пишет
В принципе, если сейчас отключить настройку "Всегда открывать пустую поисковую форму" - то так и происходит. Но только в случаях, если на странице ничего не выделено, а хотелось бы конечно настройку (можно даже просто переменную в коде, для "продвинутых юзеров"), чтобы управлять аналогичным поведением и в случае, если на странице что-то выделено. |
bunda1 > 03-08-2013 20:20:36 |
iDev.Pi пишет
Ok iDev.Pi пишет
Вот это странно. Поменяю в меню настроек Всегда открывать пустую поисковую форму на Открывать панель поиска без выделенного текста + скрытая настройка. 03-08-2013 20:36:42 |
iDev.Pi > 03-08-2013 20:47:08 |
bunda1 |
bunda1 > 03-08-2013 20:56:23 |
iDev.Pi |
iDev.Pi > 04-08-2013 04:17:00 |
bunda1 |
villa7 > 06-08-2013 10:14:42 |
bunda1 |
voqabuhe > 06-08-2013 10:45:34 |
bunda1 |
bunda1 > 06-08-2013 19:08:44 |
voqabuhe 06-08-2013 19:10:54 villa7 пишет
Это как намёк добавить это в Toggle Find+3 ? |
voqabuhe > 06-08-2013 22:20:34 |
bunda1 |
bunda1 > 06-08-2013 22:40:48 |
voqabuhe пишет
Что за маленькая кнопка Поиск с учётом регистра можно уточнить? |
villa7 > 06-08-2013 23:34:03 |
bunda1 пишет
А сие возможно? Просто мне кажется чуть оперативней бы было, не надо прокручивать страницу или тянутся к кнопке. |
voqabuhe > 06-08-2013 23:42:50 |
bunda1 пишет
Вот |
voqabuhe > 10-08-2013 22:37:12 |
bunda1 |
bunda1 > 13-08-2013 22:17:19 |
voqabuhe |
voqabuhe > 13-08-2013 23:51:49 |
bunda1 пишет
Почему сразу на 23, или ты от жизни отстал? это 26, если чё. Да вроде как удалось с помощью Стилиш внизу реанимировать, пока ещё работает. bunda1 пишет
Но хоть занимаешься ей? Уж очень для меня стала незаменимой эта кнопочка, крепко подсел я на неё |
iDev.Pi > 14-08-2013 01:58:22 |
voqabuhe |
bunda1 > 14-08-2013 18:38:20 |
voqabuhe пишет
И что даже чекбокс для регистра работает ? И кнопку я поддерживаю ведь сам ею пользуюсь. |
villa7 > 14-08-2013 19:17:01 |
bunda1 |
voqabuhe > 14-08-2013 19:32:59 |
bunda1 пишет
Это не чекбокс, а кнопка для регистра так выглядит №384 , но работает. bunda1 пишет
Да я это знаю и очень благодарен тебе за это. Я имел ввиду восстановление её для , а то мне и с кнопочкой расставаться не хочется и с слазить нет желания. |
bunda1 > 14-08-2013 19:35:17 |
villa7 14-08-2013 19:37:16 voqabuhe пишет
Попробую |
voqabuhe > 14-08-2013 19:55:09 |
bunda1 пишет
Спасибо, обнадёжил |
villa7 > 14-08-2013 20:46:30 |
bunda1 пишет
Выделяю фразу в гугл, перехожу на сайт, и страница сайта сразу открывается на выделенной фразе, то есть не надо вручную крутить в самый низ страницы. |
bunda1 > 14-08-2013 21:20:45 |
villa7 пишет
А если на той странице несколько таких фраз ? |
villa7 > 14-08-2013 21:26:51 |
bunda1 пишет
Потом как обычно, либо прокручиваешь, либо по кнопке, у меня стоит автовыделение потому все совпадения подсвечены, хотя как правило нужная фраза бывает единична. |
bunda1 > 14-08-2013 21:49:48 |
villa7 пишет
Сделать можно, попробую. |
iDev.Pi > 17-08-2013 22:38:52 |
bunda1 пишет
у кнопки снова срабатывает переключение подсветки по двойному клику левой в поле поиска. |
bunda1 > 19-08-2013 11:47:28 |
iDev.Pi пишет
http://forum.mozilla-russia.org/uploaded/Toggle Find+3 eksperiment 2.txt |
iDev.Pi > 20-08-2013 01:55:29 |
bunda1 |
bunda1 > 20-08-2013 08:52:55 |
iDev.Pi пишет
Да |
dedmazai1870 > 23-09-2013 15:03:37 |
Ссылка на кнопку в 1-ом сообщении отсутствует. Она есть на форуме? Ткните носом, пожалуйста. |
Zaycoff > 23-09-2013 15:17:02 |
dedmazai1870 |
voqabuhe > 23-09-2013 15:18:00 |
dedmazai1870 пишет
А №2, я понимаю, ты уже не осилил? |
dedmazai1870 > 23-09-2013 17:12:45 |
Zaycoff voqabuhe пишет
Так получилось... Спасибо. |
iDev.Pi > 28-09-2013 20:16:48 |
bunda1 |
bunda1 > 30-09-2013 18:59:31 |
iDev.Pi пишет
Двойной правый на кнопке. Выделить код Код:// Создать меню с настройками для кнопки ................................ ...... ...... menu.setAttribute("onclick", "event.stopPropagation()"); вот это Выделить код Код:// добавляем стандартное контекстное меню .... menu.appendChild( document.createElement("menuseparator") ); var cbContextPopup = document.getElementById("custombuttons-contextpopup"); var clone = cbContextPopup.cloneNode(true); clone.setAttribute("onpopupshowing", "document.popupNode = document.getElementById('" + _id + "')"); var cbMenu = document.createElement("menu"); cbMenu.setAttribute("label", "Меню кнопки"); cbMenu.appendChild( clone ); menu.appendChild( cbMenu ); iDev.Pi пишет
Просто так код компактней. А почему надо иконки вложить в код, я не догоняю. В чём проблема. Выделить код Код:// Установить нужную иконку кнопки при старте браузера или при изменениях настроек автовыделения ................................ var s = "FindBar.Highlight"; function toggleImage() { var icon = self.ownerDocument.getAnonymousElementByAttribute( self, "class", "toolbarbutton-icon"); icon.src = cbu.getPrefs( s ) ? self.image : "data:image/x-icon;base64,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"; }; toggleImage(); gPrefService.addObserver( s, toggleImage, false ); addDestructor(function() { gPrefService.removeObserver( s, toggleImage, false ) }); на Выделить код Код:// Установить нужную иконку кнопки при старте браузера или при изменениях настроек автовыделения ................................ var s = "FindBar.Highlight"; function toggleImage() { var icon = self.ownerDocument.getAnonymousElementByAttribute( self, "class", "toolbarbutton-icon"); 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(function() { gPrefService.removeObserver( s, toggleImage, false ) }); |
iDev.Pi > 30-09-2013 21:47:27 |
bunda1 пишет
не знал, спасибо, подойдёт. bunda1 пишет
Я считаю, что это не тот случай, чтобы жертвовать удобностью дистрибуции кода ради его компактности. Спасибо за код, изменил у себя, работает. |
dedmazai1870 > 10-10-2013 19:45:08 |
По клавишам Ctrl+Shift+F должен вызывться AdBlock, а у меня панель поиска после установки кнопки стала выскакивать и по Ctrl+F и по Ctrl+Shift+F. Подскажите, пожалуйста, это так задумано или проблемы только у меня? |
bunda1 > 10-10-2013 21:02:30 |
dedmazai1870 пишет
Так задумано, но можно удалить в кнопке: Выделить код Код:// Сочетания клавиш для управление поиском на странице ....................................................... window.addEventListener('keydown', function(e) { ....................................................... ....................................................... }, false); + рестарт. |
dedmazai1870 > 10-10-2013 23:50:07 |
bunda1 |
PEAKTOP > 24-10-2013 00:26:08 |
Подскажите, пожалуйста, у кого-нибудь такая проблема возникает- при активной панели поиска (отображается на экране, при этом абсолютно не важно где находится курсор - в поле поиска или нет и введён/не введён текст поиска), при открытии новой пустой вкладки, курсор вместо того, чтобы остаться в адресной строке, перемещается неизвестно куда, подозреваю, что фоку переходит на панель поиска, т.к. после нажатия клавиши TAB он (курсор) появляется в поле поиска поисковой панели. |
iDev.Pi > 29-10-2013 19:50:01 |
прос bunda1, alarm! |
voqabuhe > 29-10-2013 20:56:45 |
iDev.Pi пишет
У меня и в всё работает, были проблемы когда Mozilla строку поиска вверх перемещала, а как вернули на место, то всё нормализовалось. |
iDev.Pi > 30-10-2013 05:00:51 |
okkamas_knife пишет
я ж не обвиняю никого ни в чём, а просто пингую bunda1, оповещая его о конфликте с текущей релизной версией . |
bunda1 > 30-10-2013 09:06:27 |
iDev.Pi |
bunda1 > 02-11-2013 22:46:41 |
iDev.Pi пишет
http://forum.mozilla-russia.org/uploaded/Toggle Find+3 eksperiment 2.txt и Выделить код Код:background-image: url("chrome://global/skin/checkbox/cbox-check-dis.gif") !important из chrome://global/skin/checkbox.css |
dedmazai1870 > 03-11-2013 10:32:54 |
bunda1 пишет
У меня при нажатии любой клавиши Ctrl, Alt и т.п. сразу выскакивает строка поиска, не дожидаясь нажатия F. |
iDev.Pi > 04-11-2013 03:41:38 |
bunda1 bunda1 пишет
стиль лишь визуально сделает эту кнопку чекбоксом, но фактически это и остаётся кнопкой же. С другой стороны - этого может быть и достаточно скрытый текст Выделить код Код:@namespace url(http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul); .findbar-case-sensitive { -moz-user-focus: normal !important; -moz-user-select: none !important; display: -moz-box !important; -moz-box-sizing: border-box !important; -moz-appearance: checkbox-container !important; -moz-box-align: center !important; -moz-binding: url("chrome://global/content/bindings/checkbox.xml#checkbox") !important; } Этого бы должно хватить, но не хватает. 04-11-2013 03:43:56 |
bunda1 > 17-11-2013 23:32:50 |
iDev.Pi |
iDev.Pi > 18-11-2013 01:35:08 |
bunda1 пишет
сделаю. bunda1 пишет
Я правильно понял, что ты просишь переместить эту кнопку для режима "НЕ мини" направо от текстового поля, чтобы было как в режиме "мини"? bunda1 пишет
а вроде (пока лишь "вроде") он исчез. и маленькая поправка опечаток в тексте менюшки: |
bunda1 > 18-11-2013 02:04:15 |
iDev.Pi пишет
Да если это возможно, я пытался переместить эту кнопку для режима "НЕ мини" направо от текстового поля но не получилось. iDev.Pi пишет
Хорошо. iDev.Pi пишет
Я думаю что не исчез, дело том что запуск счётчика в некоторых случаях убирает фокус из панели поиска. Хотя я сейчас я подумал что можно же фокус также возвратить но тут тоже могут проблемы с пропажей фокуса с страницы и тп. Вообще с этой кнопкой столько проблем потому что надо учесть сразу много разных факторов. |
iDev.Pi > 20-11-2013 00:24:12 |
bunda1 пишет
bunda1 пишет
Выделить код Код:#FindToolbar:not([mini]) hbox[anonid="findbar-textbox-wrapper"] { -moz-box-ordinal-group: 1 !important; margin-left: -18px !important; } #FindToolbar:not([mini]) #pasteButton { -moz-box-ordinal-group: 2 !important; margin-left: 18px !important; } #FindToolbar:not([mini]) * { -moz-box-ordinal-group: 99 !important; } |
bunda1 > 21-11-2013 00:08:24 |
Спасибо так лучше: Экспериментальная версия |
iDev.Pi > 21-11-2013 01:56:52 |
bunda1 пишет
у тебя на скриншоте выглядит иначе, чем у меня: |
PEAKTOP > 12-12-2013 12:16:31 |
А как опустить панель под вкладки при их расположении внизу страницы? |
bunda1 > 12-12-2013 20:35:51 |
PEAKTOP пишет
А как ты их туда передвинул? |
PEAKTOP > 13-12-2013 04:21:48 |
bunda1, с помощью дополнения Tab Mix Plus |
voqabuhe > 17-12-2013 19:42:55 |
bunda1 пишет
№425 |
bunda1 > 17-12-2013 21:47:26 |
voqabuhe |
Vladik > 18-12-2013 01:11:47 |
bunda1
Скажите, а где можно скачать как бы финальную версию кнопки, со всеми последними исправлениями? |
bunda1 > 18-12-2013 15:37:15 |
Vladik пишет
|
voqabuhe > 18-12-2013 19:43:47 |
bunda1 пишет
Ой спасибо. Весь в ожидание. |
bunda1 > 19-12-2013 17:19:59 |
voqabuhe пишет
|
PEAKTOP > 19-12-2013 17:22:00 |
bunda1, а мою просьбу возможно реализовать? |
bunda1 > 19-12-2013 17:49:54 |
PEAKTOP Выделить код Код:// Приклеить элемент #FindToolbar к странице, автор кода 'Dumby' ................................ delete window.gFindBar; window.gFindBar = document.getElementById("FindToolbar"); if ( !gFindBar || gFindBar.parentNode != gBrowser.parentNode) { gFindBar = gBrowser.parentNode.insertBefore(document.createElement("findbar"), gBrowser); gFindBar.setAttribute("browserid", "content"); gFindBar.id = "FindToolbar"; gFindBar.clientTop; delete window.gFindBarInitialized; window.gFindBarInitialized = true; gFindBar._selectionMaxLen = 1000; // лимит символов для поиска и aвтовыделение } |
voqabuhe > 19-12-2013 19:16:38 |
bunda1 пишет Ну спасибо, вот порадовал. Вобщем всё просто замечательно Единственно что заметил, какой-то странный баг, если копировать текст ссылки, такое есть в кнопке Link Master (Context menu). Так вот, копируем текст ссылки, а потом нажимаем на кнопку "Вставить и искать" на Findbar, но вставка происходит не всегда. Т.е из одной ссылки вставляет, а из другой нет, закономерности не заметил. Если очистить перед вставкой строку поиска, то срабатывает всегда. Но это я уже так, "с жиру", это совершенно не критично, тем более, что СКМ срабатывает всегда, так что в принципе можно особо и не заморачиваться. И ещё раз огромное тебе спасибо. |
PEAKTOP > 20-12-2013 00:23:12 |
bunda1 пишет
Каждому своё Я уже за более чем 12 лет конкретно привык к такому расположению вкладок. Помощь у Dumby попросил. Надеюсь, что он поможет. |
Teu > 26-12-2013 11:43:05 |
Подскажите пожалуйста, как добавить margin к счетчику найденного, и добавить иконку "Выделить все" в мини FindBar? Еще можно ли сделать закрытие одинарным ПКМ по панели? Отменная кнопка, спасибо большое! |
bunda1 > 26-12-2013 23:45:14 |
Teu пишет
Конечно можно добавить margin внизу в коде: Насчёт добавить иконку "Выделить все" в мини FindBar мне не понятно! Где выделить, что за иконка и где именно добавить. Закрытие одинарным ПКМ по панели сделаю завтра. |
villa7 > 27-12-2013 07:04:18 |
bunda1 |
Teu > 27-12-2013 10:48:07 |
bunda1 Иконку элемента Highlight All, раньше же её нужно было постоянно нажимать, правда здесь есть Автовыделение, которое я позже заметил. Шикарно получилось, ЛКМ по пустому месту перемещаешь куда удобно, а ПКМ закрываешь. скрытый текст |
bunda1 > 27-12-2013 23:48:47 |
villa7 пишет
Ну вроде у меня в последней версии кнопки 09-03-2012 19:55:07 есть: Но все равно спасибо 27-12-2013 23:59:38 Teu пишет
Добавь за: Выделить код Код:// Отслеживать клики на панели поиска ................................ addEventListener("click", function(e) { это: Выделить код Код:if ( !/toolbarbutton|div/.test( e.originalTarget.localName ) && e.button == 2 ) { gFindBar.close(); return; } |
villa7 > 29-12-2013 15:45:47 |
В версии для 26 http://forum.mozilla-russia.org/uploade … nt%202.txt |
voqabuhe > 29-12-2013 16:17:17 |
villa7 пишет
В версии для тоже есть этот баг. |
bunda1 > 29-12-2013 17:45:05 |
villa7 пишет
А если заменить: Выделить код Код:/* Функция отдаст выделенный текст из страницы или текстового поля, если текст не выделен из буфера обмена, если нет текста отдаст 'false' ................................*/ function getSelect() { var sel = gFindBar._getInitialSelection(); // из страницы if ( sel == '' ) var sel = gClipboard.read(); // из буфера обмена if ( sel == '' ) { var str = "Выделите или скопируйте текст!" alertsService.showAlertNotification( self.image, self.label, str, false, "", null, "" ); }; return ( sel == '' ) ? false: sel.toString().replace(/^\s+|\s+$/g,""); }; на: Выделить код Код:/* Функция отдаст выделенный текст из страницы или текстового поля, если текст не выделен из буфера обмена, если нет текста отдаст 'false' ................................*/ function getSelect() { var sel = document.commandDispatcher.focusedWindow.getSelection().toString(); // из страницы // из текстового поля if ( sel == '' ) { var theBox = document.commandDispatcher.focusedElement; if ( theBox && (theBox.type == "text" || theBox.type == "textarea") ) { var startPos = theBox.selectionStart; var endPos = theBox.selectionEnd; var sel = theBox.value.substring(startPos, endPos); } } if ( sel == '' ) var sel = gClipboard.read(); // из буфера обмена // убираем пробелы с обоих концов текста .... if ( sel !== '' ) var sel = sel.toString().replace(/^\s+|\s+$/g,""); if ( sel == '') { var str = "Выделите или скопируйте текст!" alertsService.showAlertNotification( button.image, button.label, str, false, "", null, "" ); }; return ( sel == '') ? false: sel; }; |
villa7 > 29-12-2013 18:28:42 |
bunda1 |
bunda1 > 29-12-2013 18:51:06 |
Я не понимаю где проблема что у тебя перестало сохранять текст с форматированием? |
villa7 > 29-12-2013 19:02:52 |
bunda1 |
bunda1 > 29-12-2013 19:07:56 |
А где форматирование не работает. 29-12-2013 19:09:03 |
villa7 > 29-12-2013 19:19:18 |
bunda1 |
voqabuhe > 29-12-2013 19:25:53 |
bunda1 |
bunda1 > 29-12-2013 19:26:45 |
villa7 пишет
Ладно буду исправлять. Увидел ошибки. |
voqabuhe > 29-12-2013 19:35:43 |
villa7 пишет
А значит я не так понял. У меня текст копируется только в Toggle Find+3, а если вставлять ещё куда-то, то будет вставляться предыдущий текст скопированный обычным способом. |
bunda1 > 29-12-2013 19:41:31 |
У меня кстати при таком раскладе вообще не копирует длинные тексты из страницы, выделенные пропадает. |
villa7 > 29-12-2013 20:00:26 |
bunda1 пишет
Да, у меня так же, даже не выделяет. |
bunda1 > 29-12-2013 20:12:51 |
villa7 пишет
И как же ты сохраняешь? |
villa7 > 29-12-2013 21:34:25 |
bunda1 |
bunda1 > 29-12-2013 21:54:49 |
villa7 пишет
Не ужели Toggle Find+3 копирует не должна же! |
villa7 > 30-12-2013 02:30:51 |
bunda1 |
bunda1 > 04-01-2014 15:51:35 |
villa7 пишет
Виноват оказался конфликт с Autocopy +, вот исправил: Toggle Find+3 для FF25 - FF26 |
villa7 > 04-01-2014 17:12:35 |
bunda1 |
bunda1 > 04-01-2014 17:20:08 |
villa7 пишет
Вот же проблема, буду исправлять. |
bunda1 > 04-01-2014 23:02:07 |
villa7 |
villa7 > 04-01-2014 23:26:07 |
bunda1 |
bunda1 > 04-01-2014 23:31:47 |
villa7 пишет
Не понял при чём тут поисковики и Гугл. |
villa7 > 04-01-2014 23:52:53 |
bunda1 |
bunda1 > 05-01-2014 00:11:55 |
villa7 пишет
Да вроде не должно было что поменяются для Гугл, я в Toggle Find+3 только таймер добавил в поиск по выделению текста. Что бы Autocopy + успевал копировать текст на странице а не из панели поиска. |
villa7 > 05-01-2014 14:10:42 |
bunda1 |
bunda1 > 05-01-2014 17:31:01 |
villa7 пишет
А в меню кнопки включено Запуск поиска выделением текста |
villa7 > 05-01-2014 17:37:56 |
bunda1 Упс, похоже мой косяк, почему то стало конфликтовать с Autocopy+ |
bunda1 > 05-01-2014 17:55:47 |
villa7 пишет
Отключи в Autocopy+ Выделенный текст мигает при автокопировании |
villa7 > 05-01-2014 18:13:15 |
bunda1 пишет
Ура! Точно из за этого не работало. Теперь всё вроде нормально. Спасибо тебе что возишься с такими чайниками как я)) |
voqabuhe > 06-01-2014 02:07:09 |
В Toggle Find+3 для Nightly вылезла кнопка Clear, как будет время убери её плиз. |
villa7 > 06-01-2014 08:58:35 |
bunda1 |
villa7 > 19-01-2014 16:39:13 |
bunda1 |
bunda1 > 19-01-2014 16:40:41 |
Попробую. |
bunda1 > 22-01-2014 23:42:03 |
voqabuhe пишет
|
voqabuhe > 23-01-2014 00:47:29 |
bunda1 пишет
Спасибо. А вот эту просьбу видел/помнишь №475? Правда это не сильно критично, я её стилем убрал, но тем неменее напомню. |
bunda1 > 23-01-2014 09:37:57 |
voqabuhe пишет
В Toggle Find+3 нет кнопки Clear, её что то другое добавляет, может расширение. |
voqabuhe > 23-01-2014 11:16:43 |
bunda1 пишет
Да нет, это вылазит кнопка .findbar-clear.tabbable от стандартного Findbar. |
bunda1 > 23-01-2014 20:50:38 |
voqabuhe |
voqabuhe > 23-01-2014 22:17:01 |
bunda1 пишет
А в режими не мини есть кнопка Clear? |
bunda1 > 23-01-2014 22:27:09 |
Мистика однако, дай пожалуйста css код для удаления этой .findbar-clear.tabbable и я его добавлю в кнопку. |
voqabuhe > 24-01-2014 00:20:56 |
bunda1 |
bunda1 > 24-01-2014 00:29:47 |
voqabuhe пишет
Нет! voqabuhe пишет
Хорошо. |
Infocatcher > 24-01-2014 00:45:54 |
bunda1 пишет
А чем собственно .findbar-clear не устраивает? |
bunda1 > 24-01-2014 09:37:48 |
Infocatcher пишет
Toggle Find тоже даёт 2 способа отчисти поисковой формы и как я понял .findbar-clear налезает на другие кнопки которые на панель поиска добавляет Toggle Find 06-01-2014 01:07:09 |
Infocatcher > 24-01-2014 11:46:32 |
bunda1 |
bunda1 > 24-01-2014 19:50:23 |
А ну да .findbar-clear наверно лучше. |
iDev.Pi > 06-02-2014 20:18:39 |
bunda1 |
bunda1 > 07-02-2014 00:30:46 |
Попробую, думаю что смогу. |
bunda1 > 08-02-2014 00:11:51 |
iDev.Pi пишет
Я так понимаю что мини-файндбар автоматически закрывается. Я попробовал при этом печатать в окошко Google и в http://translit.ru/keyboard/ и фокус не сбивается. Может я что то не правильно понял. |
iDev.Pi > 10-02-2014 04:52:48 |
bunda1
И этот глюк исчез сам собой :-/ |
iDev.Pi > 01-03-2014 05:36:45 |
iDev.Pi пишет
снова появился на странице википедии, а тем временем в консоли вот такое:
|
bunda1 > 03-03-2014 19:37:07 |
iDev.Pi |
PEAKTOP > 05-04-2014 19:21:53 |
Обратил внимание, что при расположении панели поиска "Сверху" и включении в настройках Дополнительные —> Общие "По возможности использовать аппаратное ускорение", появление/скрытие панели поиска происходит с большой задержкой и фризами. Кусок кода Выделить код Код:// Приклеить элемент #FindToolbar к странице( #appcontent ) ................................ if ( gFindBar.getAttribute("browserid") !== "content") { 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 ); findbar.clientTop; window.gFindBarInitialized = true; return findbar; }); }; |
bunda1 > 05-04-2014 20:13:07 |
Это старый кусок кода но можешь попробовать заменить в gBrowser.parentNode.insertBefore( findbar, gBrowser ); на document.getElementById('addon-bar') или document.getElementById('TabsToolbar') или на что то подобное. Делай рестарт. 05-04-2014 20:14:08 PEAKTOP пишет
Не наблюдаю и даже не знаю в чём проблема |
PEAKTOP > 05-04-2014 23:32:56 |
bunda1, пробовал менять на оба значения, а также заменял апострофы на кавычки, но кнопка работать не желает. Также пробовал делать те же манипуляции в новой версии кнопки. Эффект тот же. |
bunda1 > 06-04-2014 00:01:54 |
Мда, проблема. Я тоже попробовал разместить панель поиска внизу окна и не получается. Думаю что это сделать можно но сложно. Может позже. |
PEAKTOP > 06-04-2014 00:08:52 |
Вот и я о том же. А её расположение сверху крайне неудобно. Добиться хотя бы, чтобы она располагалась над вкладками — как стандартная панель поиска. |
bunda1 > 06-04-2014 00:52:05 |
PEAKTOP пишет
Нет, у меня нет. |
PEAKTOP > 06-04-2014 00:57:49 |
bunda1, у тебя и панель располагается где положено |
bunda1 > 06-04-2014 01:57:39 |
PEAKTOP пишет
Что то не помню кнопку закрытия по одиночному ПКМ. Может то была спец версия кнопки сделанная по просьбе трудящихся. |
PEAKTOP > 07-04-2014 15:13:18 |
bunda1, ты прав, это было пожелание одного из форумчан. Добавил у себя этот обработчик в последнюю версию кнопки. |
iDev.Pi > 08-04-2014 15:52:44 |
bunda1 пишет
пинг. Проблема всё ещё актуальна. |
bunda1 > 08-04-2014 16:01:54 |
iDev.Pi пишет
Ok, сейчас у меня отпуск можно будет заняться. |
iDev.Pi > 10-04-2014 17:00:40 |
bunda1 |
Kamui > 23-04-2014 17:28:34 |
bunda1 Выделить код Код:var curHit, allHits; const fff = gFindBar._findField, lab = fff.parentNode.insertBefore( document.createElement("label"), fff ), nrm = Ci.nsISelectionController.SELECTION_NORMAL; lab.id = "hits"; addDestructor(function() fff.parentNode.removeChild(lab) ); function updateHits(arg) { if ( gFindBar.hidden ) return; var win = arg instanceof Ci.nsIDOMWindow && arg || content; if ( win == content ) curHit = allHits = 0; var word = fff.value; var controller = gBrowser.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 finder = Cc["@mozilla.org/embedcomp/rangefind;1"].createInstance().QueryInterface(Ci.nsIFind); finder.caseSensitive = gFindBar._shouldBeCaseSensitive(word); while ((retRange = finder.Find(word, searchRange, startPt, endPt))) { allHits++; if ( !curHit) { var sel = controller.getSelection(nrm), range; if ( sel.toString() ) range = sel.getRangeAt(0); else { var editableNode = gBrowser.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, function(frame) updateHits(frame)); } if ( win != content ) return; lab.value = curHit + "/" + allHits; if ( fff.value ) lastValueOfFind = fff.value; // запомнить // поле текстового ввода красное если ничего не найдено .... allHits == 0 && fff.value ? fff.setAttribute("status", "notfound") : fff.removeAttribute("status"); // поле текстового ввода мигает желтим если достигнут низ/верх страницы .... if ( !!arg && arg == "flash" && allHits > 2 && gFindBar._findStatusDesc.textContent !== '') { fff.setAttribute("flash", true ); setTimeout(function() { fff.removeAttribute("flash") }, 700); } }; updateHits(); // FindBar, поиск колесиком мыши ................................ addEventListener('DOMMouseScroll', function (e) { gFindBar.onFindAgainCommand( e.detail < 0 ); updateHits("flash"); }, false, gFindBar ); // Отслеживать клики на панели поиска ................................ addEventListener("click", function(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") && targ.getAttribute('oncommand').startsWith("onFind") ) { // кнопки next, previous updateHits("flash"); } }, false, gFindBar ); Ни одна версия кода, которые я смог найти, не работает. |
etoins srldu > 23-04-2014 21:15:42 |
Kamui пишет
Без кнопки Toggle Find+3 такой код не будет работать на FF28. Но можно объединить код с кодом открывающем панель поиска и открывать панель поиска кнопкой с кодом тогда работать будет: Выделить код Код:// Настройка функций кликов мыши для кнопки ................................ this.onclick = function(e) { // действие при клике ЛКМ .... if ( e.button == 0 ) { gFindBar.hidden ? gFindBar.onFindCommand() : gFindBar.close(); }; // действие при клике СКМ .... if ( e.button == 1 ) { gFindBar.hidden ? gFindBar.onFindCommand() : gFindBar.close(); goDoCommand("cmd_paste"); }; }; setTimeout(function() { 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(function() fff.parentNode.removeChild(lab) ); function updateHits(arg) { if ( gFindBar.hidden ) return; var win = arg instanceof Ci.nsIDOMWindow && arg || content; if ( win == content ) curHit = allHits = 0; var word = fff.value; var controller = gBrowser.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 finder = Cc["@mozilla.org/embedcomp/rangefind;1"].createInstance().QueryInterface(Ci.nsIFind); finder.caseSensitive = gFindBar._shouldBeCaseSensitive(word); while ((retRange = finder.Find(word, searchRange, startPt, endPt))) { allHits++; if ( !curHit) { var sel = controller.getSelection(nrm), range; if ( sel.toString() ) range = sel.getRangeAt(0); else { var editableNode = gBrowser.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, function(frame) updateHits(frame)); } if ( win != content ) return; lab.value = curHit + "/" + allHits; if ( fff.value ) lastValueOfFind = fff.value; // запомнить // поле текстового ввода красное если ничего не найдено .... allHits == 0 && fff.value ? fff.setAttribute("status", "notfound") : fff.removeAttribute("status"); }; updateHits(); // FindBar, поиск колесиком мыши ................................ addEventListener('DOMMouseScroll', function (e) { gFindBar.onFindAgainCommand( e.detail < 0 ); updateHits("flash"); }, false, gFindBar ); // Отслеживать клики на панели поиска ................................ addEventListener("click", function(e) { if ( e.button == 1 ) { // поиск из буфера обмена e.preventDefault(); var str = ( gClipboard.read() ).replace(/^\s+|\s+$/g,""); // убираем пробелы с концов текста gFindBar._findField.value = str; updateHits(); } var targ = e.originalTarget if ( targ.hasAttribute("anonid") && targ.getAttribute('oncommand').startsWith("onFind") ) { // кнопки next, previous updateHits("flash"); } }, false, gFindBar ); }, 500); |
Kamui > 24-04-2014 17:44:25 |
etoins srldu Выделить код Код:// Приклеить элемент #FindToolbar к странице( #appcontent ) ................................ delete window.gFindBar; window.gFindBar = document.getElementById("FindToolbar"); if ( !gFindBar || gFindBar.parentNode != gBrowser.parentNode) { gFindBar = gBrowser.parentNode.insertBefore(document.createElement("findbar"), gBrowser); gFindBar.setAttribute("browserid", "content"); gFindBar.id = "FindToolbar"; gFindBar.clientTop; delete window.gFindBarInitialized; window.gFindBarInitialized = true; gFindBar._selectionMaxLen = 1000; // лимит символов для поиска и aвтовыделение } Не знаю нужен ли до сих пор этот код: Выделить код Код:// Исправить проблему с fastFind для FF25+, автор кода 'Dumby' ................................ Object.defineProperty(gBrowser, "fastFind", { get: function() { if (!this._fastFind) { this._fastFind = Cc["@mozilla.org/typeaheadfind;1"].createInstance(Ci.nsITypeAheadFind); this._fastFind.init(this.docShell); this.CBTFOldDS = this.docShell; } if (this.CBTFOldDS != this.docShell) { this.CBTFOldDS = this.docShell; this._fastFind.setDocShell(this.docShell); } return this._fastFind; }, configurable: true, enumerable: true }); И самый важный кусок кода: Выделить код Код:// Ctrl+ f, показать - скрыть панель поиска .... ................................ addEventListener('keydown', function(e) { if ( (e.ctrlKey) && (!e.altKey) && (!e.shiftKey) && (e.keyCode == 70) ) { e.preventDefault(); e.stopPropagation(); gFindBar.hidden ? gFindBar.onFindCommand() : gFindBar.close(); gFindBar._findField.focus(); } }, false, window ); |
etoins srldu > 24-04-2014 22:32:41 |
Нет.
Но тогда вот так: Выделить код Код:// Удалить оргинальный панель поиска и создать с дополнительными возможностями, автор кода 'Dumby' ................................ delete window.gFindBar; window.gFindBar = document.getElementById("FindToolbar"); if ( !gFindBar || gFindBar.parentNode != gBrowser.parentNode) { Array.forEach(gBrowser.tabs, function(tab) { if ( !tab._findBar ) return; tab._findBar.parentNode.removeChild( tab._findBar ); delete tab._findBar; }); gFindBar = gBrowser.parentNode.insertBefore(document.createElement("findbar"), gBrowser); gFindBar.setAttribute("browserid", "content"); gFindBar.id = "FindToolbar"; gFindBar.clientTop; delete window.gFindBarInitialized; window.gFindBarInitialized = true; gFindBar._selectionMaxLen = 1000; // лимит символов для поиска и подсветки }; addEventListener("keypress", gFindBar ); // добавить поиск по мере набора текста // Показать количество совпадений на панели поиска, автор кода '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(function() fff.parentNode.removeChild(lab) ); function updateHits(arg) { if ( gFindBar.hidden ) return; var win = arg instanceof Ci.nsIDOMWindow && arg || content; if ( win == content ) curHit = allHits = 0; var word = fff.value; var controller = gBrowser.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 finder = Cc["@mozilla.org/embedcomp/rangefind;1"].createInstance().QueryInterface(Ci.nsIFind); finder.caseSensitive = gFindBar._shouldBeCaseSensitive(word); while ((retRange = finder.Find(word, searchRange, startPt, endPt))) { allHits++; if ( !curHit) { var sel = controller.getSelection(nrm), range; if ( sel.toString() ) range = sel.getRangeAt(0); else { var editableNode = gBrowser.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, function(frame) updateHits(frame)); } if ( win != content ) return; lab.value = curHit + "/" + allHits; if ( fff.value ) 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(function() { fff.removeAttribute("flash") }, 700); } lastCurHit = curHit; }; updateHits(); // FindBar, поиск колесиком мыши ................................ addEventListener('DOMMouseScroll', function (e) { gFindBar.onFindAgainCommand( e.detail < 0 ); updateHits("flash"); }, false, gFindBar ); // Отслеживать клики на панели поиска ................................ addEventListener("click", function(e) { if ( e.button == 1 ) { // поиск из буфера обмена e.preventDefault(); var str = ( gClipboard.read() ).replace(/^\s+|\s+$/g,""); // убираем пробелы с концов текста gFindBar._findField.value = str; updateHits(); } var targ = e.originalTarget if ( targ.hasAttribute("anonid") && targ.getAttribute('oncommand').startsWith("onFind") ) { // кнопки next, previous updateHits("flash"); } }, false, gFindBar ); // Ctrl+ f, показать - скрыть панель поиска .... ................................ addEventListener('keydown', function(e) { if ( (e.ctrlKey) && (!e.altKey) && (!e.shiftKey) && (e.keyCode == 70) ) { e.preventDefault(); e.stopPropagation(); gFindBar.hidden ? gFindBar.onFindCommand() : gFindBar.close(); gFindBar._findField.focus(); updateHits(); } }, false, window ); |
iDev.Pi > 24-04-2014 23:06:40 |
bunda1 == etoins srldu ? |
etoins srldu > 25-04-2014 11:08:41 |
iDev.Pi пишет
Да, дело в том что у меня отпуск и я не помню пароль. |
Kamui > 25-04-2014 17:44:39 |
etoins srldu пишет
Все равно какая-то неразбериха с нумерацией результатов. Например на этой странице искал слово "но", было найдено 46 совпадений, первое нумеруется 46/46 нажимаю поиск далее, второе совпадение нумеруется 1/46, нажимаю поиск назад, первое совпадение нумеруется как 2/46, нажимаю еще раз поиск назад, последнее совпадение нумеруется как 1/46 и далее по кругу. |
PEAKTOP > 25-04-2014 20:33:00 |
В FF 24.0.5 ESR наблюдаю задвоенность элемента "Учесть регистр" и неправильное расположение кнопки "Подсветить всё", раньше она располагалась в конце панели. |
PEAKTOP > 08-05-2014 03:26:54 |
А можно как-нибудь запретить панели поиска перехватывать нажатие Ctrl +F на вкладках "Библиотека", "Журнал" и т.д.? Использую CB - Открывать библиотеку в вкладке и последнюю активную папку библиотеки. Возникает существенное неудобство — находясь в библиотеке, журнале и т.д. по нажатию Ctrl + F курсор должен переместится в поле поиска по содержимому этого раздела, а вместо этого открывается панель поиска по странице, которая естественно ничего найти не сможет. |
etoins srldu > 08-05-2014 11:19:41 |
PEAKTOP пишет
Легко, до субботы сделаю. |
PEAKTOP > 08-05-2014 12:04:14 |
Ждём, надеемся и верим. Забыл упомянуть — что использую этот код кнопки — Toggle Find+3 для FF24 - FF26. В будущих версиях — FF 29 эта возможность тоже пригодится |
bunda1 > 08-05-2014 16:12:32 |
PEAKTOP пишет
Хорошо |
bunda1 > 09-05-2014 19:47:36 |
PEAKTOP пишет
Вот универсальная Toggle Find+3 для FF17+ |
PEAKTOP > 22-05-2014 14:23:23 |
bunda1, благодарю за исправленную версию. А можно ещё чуток подправить для FF 24.0.5 — чтобы пункты "Учесть регистр" и "Подсветить всё" располагались псоле кнопок "Далее" и "Назад"? |
bunda1 > 22-05-2014 20:19:59 |
PEAKTOP пишет
У меня на FF24 так и есть, возможно у тебя посторонний стиль или расширение конфликтует. |
PEAKTOP > 23-05-2014 11:21:22 |
bunda1, глобальных стилей у меня нет, стоит только тема оформления - Classic Compact 24.0.2, т.к. последняя не работает с FF 24-й линейки . Да и расширений связанных с "поиском" не наблюдается. Сейчас попробую на чистом профиле + с этой темой оформления. 1. Опустить панель поиска вниз Заменил: Выделить код Код:if ( !gFindBar || gFindBar.parentNode != gBrowser.parentNode) { Array.forEach(gBrowser.tabs, function(tab) { if ( !tab._findBar ) return; tab._findBar.parentNode.removeChild( tab._findBar ); delete tab._findBar; }); gFindBar = gBrowser.parentNode.insertBefore(document.createElement("findbar"), gBrowser); На: Выделить код Код:if (!gFindBar) { var addonbar = document.getElementById("addon-bar"); gFindBar = addonbar.parentNode.insertBefore(document.createElement("findbar"), addonbar); Мой код инициализации кнопки Выделить код Код:// Настройка функций кликов мыши для кнопки ................................ this.onclick = function(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; // отступ справа у мини панели поиска const alertsService = Cc["@mozilla.org/alerts-service;1"].getService(Ci.nsIAlertsService); const fxVersion = parseInt( Application.version ); if ( fxVersion < 25 ) gFindBar.setAttribute("fxVersion", "17-24"); // Проверить наличие строк в 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(function(pref) { cbu.setPrefs( pref, false ) }); ["FindBar.version,15", "FindBar.CloseTimer,7", "ui.textHighlightBackground,#ef0fff", "FindBar.Highlight.value,"] .forEach(function(pref) { cbu.setPrefs( pref.split(",")[0], pref.split(",")[1] ) }); }; // Подсказка для кнопки ................................ this.onmouseover = 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еню кнопки \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: 'accessibility.typeaheadfind', cek:''}, { label: 'Запуск поиска выделением текста', value: 'FindBar.auto_Find', 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(function( 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", function(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", function(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(function(){ 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(function(s) { toggleAttribute( s ) }); // Установить нужную иконку кнопки при старте браузера или при изменениях настроек автовыделения ................................ var s = "FindBar.Highlight"; function toggleImage() { var icon = self.ownerDocument.getAnonymousElementByAttribute( self, "class", "toolbarbutton-icon"); 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(function() { gPrefService.removeObserver( s, toggleImage, false ) }); // Удалить оргинальный панель поиска и создать с дополнительными возможностями, автор кода 'Dumby' ................................ delete window.gFindBar; window.gFindBar = document.getElementById("FindToolbar"); window.gFindBar = document.getElementById("FindToolbar"); if (!gFindBar) { var addonbar = document.getElementById("addon-bar"); gFindBar = addonbar.parentNode.insertBefore(document.createElement("findbar"), addonbar); gFindBar.setAttribute("browserid", "content"); gFindBar.id = "FindToolbar"; gFindBar.clientTop; delete window.gFindBarInitialized; window.gFindBarInitialized = true; gFindBar._selectionMaxLen = 1000; // лимит символов для поиска и подсветки }; addEventListener("keypress", gFindBar ); // добавить поиск по мере набора текста // Показать количество совпадений на панели поиска, автор кода '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(function() fff.parentNode.removeChild(lab) ); function updateHits(arg) { if ( gFindBar.hidden ) return; var win = arg instanceof Ci.nsIDOMWindow && arg || content; var finder = (fxVersion > 26 ? 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, function(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(function() { fff.removeAttribute("flash") }, 600); } lastCurHit = curHit; }; updateHits(); // FindBar, поиск колесиком мыши ................................ addEventListener('DOMMouseScroll', function (e) { gFindBar.onFindAgainCommand( e.detail < 0 ); updateHits("flash"); }, false, gFindBar ); // Отслеживать клики на панели поиска ................................ addEventListener("click", function(e) { if ( e.button == 1 ) { // поиск из буфера обмена e.preventDefault(); var str = ( gClipboard.read() ).replace(/^\s+|\s+$/g,""); // убираем пробелы с концов текста gFindBar._findField.value = str; Highlight("hits", "greenLight"); } if ( !/toolbarbutton|div/.test( e.originalTarget.localName ) && e.button == 2 ) { gFindBar.close(); return; } var targ = e.originalTarget if ( !targ.hasAttribute("anonid") ) return; if ( targ.value == 'Найти:') { // кнопка 'Найти:' < FF24 e.button ? clearFindField() : gFindBar.onFindAgainCommand(false); updateHits("flash"); } if ( targ.getAttribute('oncommand').startsWith("onFind") ) { // кнопки next, previous setTimeout(updateHits, 0, "flash"); } }, false, gFindBar ); // Двойной клик на панели поиска включает и выключает автовыделение или стандартную подсветку текста ................................ addEventListener("dblclick", function(e) { if ( e.originalTarget.nodeName == 'div' && e.button == 0 ) return; if ( /toolbarbutton|checkbox/.test( e.originalTarget.localName ) ) return; if ( cbu.getPrefs("FindBar.Autohighlight.ToggleWithDoubleClick") ) { var s = cbu.getPrefs("FindBar.Highlight"); cbu.setPrefs("FindBar.Highlight", !s ); menu.childNodes[14].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 textbox = gFindBar.getElement('findbar-textbox'); var inputBox = document.getAnonymousElementByAttribute( textbox, "class", "textbox-input-box"); setTimeout(function() { document.getAnonymousElementByAttribute( inputBox, "anonid", "input-box-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(function() { 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(function(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.originalTarget.localName.toLowerCase() ) ) return; if ( e.type == 'mousedown' ) var lastSelection = getBrowserSelection(); if ( e.type == 'mouseup' ) { var selection = getBrowserSelection(); if ( selection && selection !== lastSelection ) { setTimeout(function() { gFindBar.onFindCommand(); updateHits(); if ( lab.value !== '0/0' ) Highlight("", "greenLight"); else Highlight(); }, 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(function() { 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 = function() { removeEventListener('mouseover', closeFind, false, window ) }; } }; // Переключать панель поиска двойным средним кликом на странице ................................ addEventListener("mouseup", function(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(function() { self.flag = false }, 600); // сбросить флаг по таймеру }, false, gBrowser ); // Сочетания клавиш для управление поиском на странице ................................ addEventListener('keydown', function(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"); return; } // 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(); 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"); return; } /* 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(function() { gFindBar._findField.value = val; Highlight("hits", "greenLight"); }, 10) : clearFindField(); return; } // Ctrl+ alt+ h, добавить текст(выделенный / из буфера обмена) для автовыделения .... if ( (e.ctrlKey) && (e.altKey) && (e.keyCode == 72) ) { toggleHighlightValue('add'); return; } }, false, window ); // Автоматически выделить слова и ссылки ................................ function Highlight( hits, green ) { var findValue = gFindBar._findField.value; var hidden = gFindBar.hidden; if ( !hidden ) { // выделить зеленным искомый текст на странице .... if ( !!green && green == "greenLight") setTimeout(function() { gFindBar._find() }, 10); // для запуска подсчета совпадений .... if ( !!hits && hits == "hits" ) setTimeout( updateHits, 20); } // получаем текст для автовыделения из 'about:config' или из панели поиска .... if ( cbu.getPrefs("FindBar.Highlight") ) { var value = hidden ? Application.prefs.getValue("FindBar.Highlight.value", 0) : ( findValue.length > 2 ) ? findValue: ""; } // удалить и запустить подсветку совпадений .... var finder = fxVersion > 26 ? gBrowser.finder : gFindBar; var lighted = finder[fxVersion > 26 ? "_highlight" : "_highlightDoc"].bind( finder ); lighted(false), 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; var links = doc.links; if ( ( hLink || "prop1" in doc ) && links ) { hLink ? doc.prop1 = true : delete doc.prop1; Array.forEach( links, function(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 ); }; // Обработчики следят за переключением табов и запускают автовыделение ................................ addEventListener("TabSelect", function(e) { if ( !gBrowser.mCurrentTab.hasAttribute("busy") ) Highlight("hits"); gFindBar._findField.removeAttribute("style"); gFindBar.getElement('highlight').removeAttribute("checked"); }, false, gBrowser.tabContainer ); var listener = { onStateChange: function(aWebProgress, aRequest, aFlag, aStatus) { if ( gBrowser.currentURI.spec == 'chrome://global/content/console.xul') return; if ( aFlag & Ci.nsIWebProgressListener.STATE_STOP ) Highlight("hits"); }}; gBrowser.addProgressListener( listener ); addDestructor(function() { gBrowser.removeProgressListener( listener ) }); // Обработчики следят за панелью поиска, запускают автовыделение и другие функции ................................ addEventListener("drop", function(e) { Highlight("hits", "greenLight") }, false, gFindBar._findField ); addEventListener("input", function() { Highlight("hits", "greenLight") }, false, gFindBar._findField ); gFindBar.watch("hidden", function( prop, oldV, hidden ) { setTimeout(function() { 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; }); // Добавляем подменю в контекстного меню на странице для выделенного текста ................................ (function () { var contextMenu = document.getElementById("contentAreaContextMenu"); var menu = document.createElement("menu"); menu.setAttribute("label", "Find"); contextMenu.insertBefore( menu, document.getElementById("context-sep-properties") ); addEventListener("popupshowing", function() { menu.hidden = !cbu.getPrefs("FindBar.contextFindWords") || !gContextMenu.isTextSelected; }, false, contextMenu ); addDestructor(function() { contextMenu.removeChild( menu ) }); var array = [ { label:"Найти на странице", func: findToContex }, { label:"Выделить текст на странице", func: highlightSel }, { label:"Автовыделение, добавить текст", func: addSel } ]; var menuPopup = menu.appendChild( document.createElement("menupopup") ); array.forEach(function( m ) { var mItem = document.createElement("menuitem"); mItem.setAttribute("label", m.label); mItem.func = m.func; menuPopup.appendChild( mItem ); }); addEventListener("command", function(e) { e.target.func() }, false, menu ); function findToContex() { gFindBar.onFindCommand(); Highlight("hits", "greenLight"); }; function highlightSel() { var finder = fxVersion > 26 ? gBrowser.finder : gFindBar; var lighted = finder[fxVersion > 26 ? "_highlight" : "_highlightDoc"].bind( finder ); lighted(false), lighted(true, getSelect() ); goDoCommand("cmd_selectNone"); }; function addSel() { toggleHighlightValue('add'); }; })(); // Очистить поле текстового ввода на Findbar ................................ function clearFindField() { setTimeout(function() { 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") }; } Application.prefs.setValue("FindBar.Highlight.value", str); alertsService.showAlertNotification( self.image, title, notification, false, "", null, ""); Highlight(); }; // Получить выделенный текст из страницы или из буфера обмена, если нет текста получить 'false' ................................ function getSelect() { var sel = document.commandDispatcher.focusedWindow.getSelection().toString(); // из страницы if ( sel == '' ) { var theBox = document.commandDispatcher.focusedElement; if ( theBox && (theBox.type == "text" || theBox.type == "textarea") ) { var startPos = theBox.selectionStart; var endPos = theBox.selectionEnd; var sel = theBox.value.substring(startPos, endPos); } } if ( sel == '' ) var sel = gClipboard.read(); // из буфера обмена if ( sel == '' ) alertsService.showAlertNotification( self.image, self.label, "Выделите или скопируйте текст!", false, "", null, "" ); return ( sel == '' ) ? false : sel.toString().replace(/^\s+|\s+$/g,""); // убираем пробелы с концов текста }; // Запустить поиск через Toggle Find+3 если нажать в главном меню на пункт меню 'Найти' ................................ addEventListener("command", function(e) { 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(function() { check.parentNode.removeChild( check ) }); check.addEventListener("command", function() { gFindBar._setCaseSensitivity(this.checked); Highlight("hits", "greenLight") }); // Создать кнопку "Поиск" на Findbar ................................ var search = document.createElement("toolbarbutton"); search.setAttribute("id", "findButton"); search.setAttribute("tooltiptext", "Л: Искать следущее \nС: Поиск текста из буфера \nП: Искать предыдущее"); gFindBar.getElement("findbar-container").appendChild( search ); addDestructor(function() { search.parentNode.removeChild( search ) }); search.addEventListener("click", function(e) { if ( 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="); gFindBar.getElement("findbar-container").appendChild( paste ); addDestructor(function() { paste.parentNode.removeChild( paste ) }); paste.addEventListener("click", function(e) { if ( e.button == 0 ) { if ( !getSelect() ) return; gFindBar._findField.value = getSelect(); // вставить текст Highlight("hits", "greenLight"); }; if ( e.button == 2 ) { setTimeout(function() { 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[mini] #hits { -moz-appearance: none !important; margin-top: 3px !important; }\ #FindToolbar > hbox > label { -moz-appearance: none !important; font-weight: bold !important; }\ #FindToolbar .findbar-textbox:not([style]):not([status="notfound"]) { color: black !important; }\ #FindToolbar:not([mini]) #hits { text-align: right; width: 4.1em !important; margin-left: -13px; margin-right: -1px; color: green; }\ \ #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] .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[mini] .findbar-find-fast[anonid="find-label"],\ #FindToolbar[mini] .findbar-highlight,\ #FindToolbar[mini] .findbar-highlight[checked] {\ display: none !important;\ }\ /* расположение элементов на панели поиска ....*/\ #FindToolbar:not([mini]) hbox[anonid="findbar-textbox-wrapper"] {\ -moz-box-ordinal-group: 1 !important;\ margin-left: -10px !important;\ }\ #FindToolbar:not([mini]) #pasteButton {\ -moz-box-ordinal-group: 2 !important;\ margin-left: 5px !important;\ margin-right: 15px !important;\ }\ #FindToolbar:not([mini]) #findCheckbox { -moz-box-ordinal-group: 3 !important; }\ #FindToolbar:not([mini]):not([pasteButton]) #findCheckbox { margin-left: 35px !important; }\ #FindToolbar:not([mini]) .findbar-highlight.tabbable { -moz-box-ordinal-group: 4 !important; }\ #FindToolbar:not([mini]) * { -moz-box-ordinal-group: 99 !important; }\ \ #FindToolbar[mini] textbox.findbar-textbox { -moz-box-ordinal-group: 1 !important; }\ #FindToolbar[mini] #findCheckbox { -moz-box-ordinal-group: 2 !important; }\ #FindToolbar[mini] #pasteButton { -moz-box-ordinal-group: 3 !important; }\ #FindToolbar[mini] #findButton { -moz-box-ordinal-group: 4 !important; }\ \ /* не показывать панель поиска на страницах ....*/\ #main-window[title="about:config - Mozilla Firefox"] #appcontent > #FindToolbar,\ #main-window[title="Управление дополнениями - Mozilla Firefox"] #appcontent > #FindToolbar,\ #main-window[title="Bookmarks tab - Mozilla Firefox"] #appcontent > #FindToolbar {\ display: none !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); }\ ')); const sss = Cc["@mozilla.org/content/style-sheet-service;1"].getService(Ci.nsIStyleSheetService); sss.loadAndRegisterSheet(uri, sss.AGENT_SHEET); addDestructor(function() { sss.unregisterSheet(uri, sss.AGENT_SHEET) }); |
bunda1 > 23-05-2014 21:42:45 |
PEAKTOP |
PEAKTOP > 24-05-2014 00:01:07 |
bunda1, благодарю. То, что доктор прописал. Как всегда выручаешь. Допилил нужные мне функции — опустил панель вниз и закрытие по ПКМ. |
villa7 > 25-05-2014 20:09:38 |
bunda1 |
bunda1 > 25-05-2014 20:30:06 |
villa7 |
villa7 > 25-05-2014 21:10:50 |
bunda1 > 25-05-2014 21:58:42 |
На FF28 все нормально, а на FF29 не могу проверить. |
bunda1 > 25-05-2014 22:47:22 |
На FF29 тоже все нормально, попробуй за: Выделить код Код:// Запускать поиск выделением текста если это разрешено в '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; поставить проверочной: и напиши что он покажет. |
villa7 > 25-05-2014 23:07:44 |
bunda1 Знаешь, вроде конфликт с кнопкой Autocopy, удалил её, сейчас работает нормально. Буду перепроверять. Да, надо было просто обновить Autocopy, теперь всё нормально, извини за беспокойство. |
bunda1 > 25-05-2014 23:22:27 |
Значит: Выделить код Код:if ( /input|password|textarea|textbox|searchbar|findbar|tabbrowser/.test( e.target.localName ) ) return; не фильтрует textarea. Странно
Да такой конфлыкт может быть завтра посмотрю что там с кнопкой Autocopy. |
villa7 > 25-05-2014 23:25:31 |
bunda1 |
bunda1 > 25-05-2014 23:30:19 |
dddaaakkk > 30-05-2014 02:32:06 |
А подскажите, пожалуйста, что за расширение (или кнопка?) добавляет текст с информацией в Url-bar как на картинке: Простите за оффтопик ... |
villa7 > 30-05-2014 04:01:38 |
dddaaakkk |
villa7 > 02-06-2014 22:57:04 |
bunda1 |
seven.ap > 12-06-2014 15:32:54 |
bunda1 зашел в тему сказать спасибо за данную кнопку парочка минусов и думаю это касается только меня |
bunda1 > 12-06-2014 22:36:49 |
Вроде у меня Ctrl + F закрывает поиск на FF29, не понятно в чём дело.
Тоже не замечаю, может конфликт с каким то расширением. И спасибо за спасибо. |
villa7 > 12-06-2014 23:44:44 |
bunda1
На чистом профиле так же себя ведет, выше я об этом писал. Набираешь слово и не успеваешь все совпадения пройти как панель и подсветка исчезает, а при выделении слова всё нормально. |
bunda1 > 12-06-2014 23:59:43 |
villa7 пишет
А вот оно что, да есть такое, в ближайшее время займусь. |
villa7 > 13-06-2014 04:50:53 |
bunda1 |
PEAKTOP > 26-09-2014 18:10:44 |
1. Можно как-нибудь уменьшить высоту панели в FF 31-32 до 22px, а то уж очень много места она стала отъедать? Выделить код Код:// Настройка функций кликов мыши для кнопки ................................ this.onclick = function(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"); } }; |
bunda1 > 27-09-2014 11:09:50 |
Замени там:
Это на обычном, не на мини панели? |
PEAKTOP > 27-09-2014 12:28:51 |
bunda1 пишет
На обычном. |
bunda1 > 27-09-2014 12:50:41 |
PEAKTOP пишет
Вечером посмотрю, сейчас я на работе. |
PEAKTOP > 27-09-2014 13:17:55 |
bunda1 пишет
При таком варианте панель поиска закрывается при клике ПКМ на кнопке, а мне надо, чтобы она закрывалась при клике ПКМ на самой панели. |
bunda1 > 27-09-2014 13:24:14 |
За: Выделить код Код:// Отслеживать клики на панели поиска ................................ addEventListener("click", function(e) { if ( e.button == 1 ) { // поиск из буфера обмена e.preventDefault(); var str = ( gClipboard.read() ).replace(/^\s+|\s+$/g,""); // убираем пробелы с концов текста gFindBar._findField.value = str; Highlight("hits", "greenLight"); } это: |
PEAKTOP > 27-09-2014 15:07:19 |
Сработало! Благодарю! |
seven.ap > 05-10-2014 00:53:40 |
а можно как то через это расширение искать на странице одновременно два разных слова? |
bunda1 > 05-10-2014 02:03:33 |
seven.ap пишет
Нет. |
seven.ap > 05-10-2014 11:41:38 |
bunda1 пишет
у Маков поле поиска вызывается через сочетание Command + F но не закрывается панелька, а CTRL+F как ни странно все закрывается и открывается bunda1 пишет
а цветовой подсветкой вы не занимались? |
bunda1 > 05-10-2014 13:20:29 |
seven.ap пишет
Не понял. |
seven.ap > 07-10-2014 15:49:37 |
bunda1 villa7 пишет
bunda1 пишет
|
lokiju > 25-01-2015 12:12:35 |
[firefox]38.0a1(2014-01-24) не копируется выделенное в поле поиска из контекстного меню по "Найти на странице" и не ищет. |
bunda1 > 26-01-2015 22:59:49 |
lokiju пишет
Не смог проверить, у меня на FF 38.0a1(2014-01-26) вообще ничего не работает, даже страницы не грузятся. |
voqabuhe > 16-04-2015 14:23:30 |
bunda1 |
bunda1 > 17-04-2015 19:16:02 |
voqabuhe пишет
Попробуй удалить: но тогда не будет работать Быстрый поиск по мере набора текста |
voqabuhe > 17-04-2015 19:57:17 |
bunda1 |
bunda1 > 17-04-2015 20:00:43 |
voqabuhe пишет
Временная мера, а дальше буду думать. В принципе решение есть но хочется сделать красиво. 17-04-2015 20:01:40 voqabuhe пишет
Странно, что за дела. |
voqabuhe > 17-04-2015 20:30:25 |
bunda1 пишет
Может просто каким-то образом стал работать стандартный поиск ? Сделал такой вывод из того, что кнопка из контекстного меню его не отключает. bunda1 пишет
Дык может давай временную меру, а потом будешь думать как делать красиво. |
bunda1 > 17-04-2015 22:24:29 |
voqabuhe |
voqabuhe > 17-04-2015 22:35:18 |
bunda1 |
bunda1 > 17-04-2015 22:41:35 |
voqabuhe пишет
Плохо. И CB на FF39 тоже что глючит и до FF40 не обновляется. |
voqabuhe > 17-04-2015 23:19:07 |
bunda1 Если чё Выделить код Код:// Настройка функций кликов мыши для кнопки ................................ this.onclick = function(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"); } }; // Настройки и переменные для кнопки ................................ const findbarRight = 18; // отступ справа у мини панели поиска const addKeyboardShortcuts = true; // разрешить дополнительные сочетания клавиш для панели поиска const 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(function(pref) { cbu.setPrefs( pref, false ) }); ["FindBar.version,15", "FindBar.CloseTimer,7", "ui.textHighlightBackground,#ef0fff", "FindBar.Highlight.value,"] .forEach(function(pref) { cbu.setPrefs( pref.split(",")[0], pref.split(",")[1] ) }); }; // Подсказка для кнопки ................................ this.onmouseover = 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еню кнопки \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(function( 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", function(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", function(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(function(){ 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(function(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(function() gPrefService.removeObserver( s, toggleImage )); // Удалить оргинальный панель поиска и создать новый с дополнительными возможностями, автор кода 'Dumby' ................................ delete window.gFindBar; window.gFindBar = document.getElementById("FindToolbar"); if ( !gFindBar || gFindBar.parentNode != gBrowser.parentNode) { Array.forEach(gBrowser.tabs, function(tab) { if ( !tab._findBar ) return; tab._findBar.parentNode.removeChild( tab._findBar ); // удалить на FF25+ delete tab._findBar; }); var fastFindBar = document.getElementById("browser-bottombox").firstChild; if ( fastFindBar.localName == 'findbar' ) fastFindBar.parentNode.removeChild( fastFindBar ); // удалить на FF17-24 gFindBar = gBrowser.parentNode.insertBefore(document.createElement("findbar"), gBrowser); gFindBar.setAttribute("browserid", "content"); parseInt(Application.version) < 25 && gFindBar.setAttribute("oldFindBar", "true"); gFindBar.id = "FindToolbar"; gFindBar.clientTop; delete window.gFindBarInitialized; window.gFindBarInitialized = true; gFindBar._selectionMaxLen = 1000; // лимит символов для поиска и подсветки gFindBar._quickFindTimeoutLength = 5000000; // время закрытия панели поиска эсли тот открыт по мере набора текста }; addEventListener("keypress", gFindBar ); // добавить поиск по мере набора текста // Показать количество совпадений на панели поиска, автор кода '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(function() 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, function(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(function() { fff.removeAttribute("flash") }, 600); } lastCurHit = curHit; }; updateHits(); // FindBar, поиск колесиком мыши ................................ addEventListener('DOMMouseScroll', function(e) { gFindBar.onFindAgainCommand( e.detail < 0 ); updateHits("flash"); }, false, gFindBar ); // Отслеживать клики на панели поиска ................................ addEventListener("click", function(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 == 'Найти:') { // кнопка 'Найти:' < FF24 e.button ? clearFindField() : gFindBar.onFindAgainCommand(false); updateHits("flash"); } if ( targ.getAttribute('oncommand').startsWith("onFind") ) { // кнопки next, previous setTimeout(updateHits, 0, "flash"); } }, false, gFindBar ); // Двойной клик на панели поиска включает и выключает автовыделение или стандартную подсветку текста ................................ addEventListener("dblclick", function(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[14].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(function() 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(function() { 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(function(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(function() { gFindBar.onFindCommand(); updateHits(); if ( lab.value !== '0/0' ) Highlight("", "greenLight"); else Highlight(); }, 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(function() { 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 = function() { removeEventListener('mouseover', closeFind, false, window ) }; } }; // Переключать панель поиска двойным средним кликом на странице ................................ addEventListener("mouseup", function(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(function() { self.flag = false }, 600); // сбросить флаг по таймеру }, false, gBrowser ); // Сочетания клавиш для управление поиском на странице ................................ addEventListener('keydown', function(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"); return; } // 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(); return; } 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"); return; } /* 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(function() { gFindBar._findField.value = val; Highlight("hits", "greenLight"); }, 10) : clearFindField(); return; } // 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(function() { gFindBar._find() }, 10); // для запуска подсчета совпадений .... if ( !!hits && hits == "hits" ) setTimeout( updateHits, 20); } // получаем текст для автовыделения из 'about:config' или из панели поиска .... if ( cbu.getPrefs("FindBar.Highlight") ) { var value = hidden ? Application.prefs.getValue("FindBar.Highlight.value", 0) : ( findValue.length > 2 ) ? findValue: ""; } // удалить и запустить подсветку совпадений .... var finder = gBrowser.finder || gFindBar; var lighted = (finder._highlightDoc || finder._highlight).bind(finder); 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; var links = doc.links; if ( ( hLink || "prop1" in doc ) && links ) { hLink ? doc.prop1 = true : delete doc.prop1; Array.forEach( links, function(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(function() gBrowser.removeProgressListener( listener ) ); // Обработчики следят за панелью поиска, запускают автовыделение и другие функции ................................ addEventListener("drop", function(e) { Highlight("hits", "greenLight") }, false, gFindBar._findField ); addEventListener("input", function() { Highlight("hits", "greenLight") }, false, gFindBar._findField ); gFindBar.watch("hidden", function( prop, oldV, hidden ) { setTimeout(function() { 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; }); // Добавляем подменю в контекстного меню на странице для выделенного текста ................................ (function() { var contextMenu = document.getElementById("contentAreaContextMenu"); var menu = document.createElement("menu"); menu.setAttribute("label", "Find"); contextMenu.insertBefore( menu, document.getElementById("context-sep-properties") ); addEventListener("popupshowing", function() { menu.hidden = !cbu.getPrefs("FindBar.contextFindWords") || !gContextMenu.isTextSelected; }, false, contextMenu ); addDestructor(function() contextMenu.removeChild( menu ) ); var array = [ { label:"Найти на странице", func: findToContex }, { label:"Выделить текст на странице", func: highlightSel }, { label:"Автовыделение, добавить текст", func: addSel } ]; var menuPopup = menu.appendChild( document.createElement("menupopup") ); array.forEach(function( m ) { var mItem = document.createElement("menuitem"); mItem.setAttribute("label", m.label); mItem.func = m.func; menuPopup.appendChild( mItem ); }); addEventListener("command", function(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'); }; })(); // Очистить поле текстового ввода на Findbar ................................ function clearFindField() { setTimeout(function() { 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") }; } Application.prefs.setValue("FindBar.Highlight.value", str); alertsService.showAlertNotification( self.image, title, notification, false, "", null, ""); Highlight(); }; // Получить выделенный текст из страницы или из буфера обмена, если нет текста получить 'false' ................................ function getSelect() { var sel = document.commandDispatcher.focusedWindow.getSelection().toString(); // из страницы if ( sel == '' ) { var theBox = document.commandDispatcher.focusedElement; if ( theBox && (theBox.type == "text" || theBox.type == "textarea") ) { var startPos = theBox.selectionStart; var endPos = theBox.selectionEnd; sel = theBox.value.substring(startPos, endPos); } } if ( sel == '' ) sel = gClipboard.read(); // из буфера обмена if ( sel == '' ) alertsService.showAlertNotification( self.image, self.label, "Выделите или скопируйте текст!", false, "", null, "" ); return ( sel == '' ) ? false : sel.toString().replace(/^\s+|\s+$/g,""); // убираем пробелы с концов текста }; // Запустить поиск через Toggle Find+3 если нажать в главном меню на пункт меню 'Найти' ................................ addEventListener("command", function() { 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(function() check.parentNode.removeChild( check ) ); check.addEventListener("command", function() { 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(function() search.parentNode.removeChild( search ) ); search.addEventListener("click", function(e) { if ( 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="); gFindBar.getElement("findbar-container").appendChild( paste ); addDestructor(function() paste.parentNode.removeChild( paste ) ); paste.addEventListener("click", function(e) { if ( e.button == 0 ) { if ( !getSelect() ) return; gFindBar._findField.value = getSelect(); // вставить текст Highlight("hits", "greenLight"); }; if ( e.button == 2 ) { setTimeout(function() { 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: black !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;\ }\ /* расположение элементов на панели поиска ....*/\ #FindToolbar[oldFindBar][pasteButton]:not([mini]) .findbar-find-next {\ margin-left: 28px !important;\ }\ #FindToolbar[oldFindBar]:not([mini]) #pasteButton {\ margin-left: -374px !important;\ }\ #FindToolbar:not([mini]):not([oldFindBar]) #findCheckbox { -moz-box-ordinal-group: 3 !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]:not([oldFindBar]) #findCheckbox { margin-left: -36px !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; }\ \ /* не показывать панель поиска на страницах ....*/\ #main-window[title="about:config - Mozilla Firefox"] #appcontent > #FindToolbar,\ #main-window[title="Управление дополнениями - Mozilla Firefox"] #appcontent > #FindToolbar,\ #main-window[title="Bookmarks tab - Mozilla Firefox"] #appcontent > #FindToolbar {\ display: none !important; }\ ')); const sss = Cc["@mozilla.org/content/style-sheet-service;1"].getService(Ci.nsIStyleSheetService); sss.loadAndRegisterSheet(uri, 0); addDestructor(function() { sss.unregisterSheet(uri, 0) }); 17-04-2015 23:23:17 bunda1 пишет
Так скачай архив с ftp и обнови сам. |
Dumby > 18-04-2015 00:05:06 |
voqabuhe пишет
Некрасиво я могу попробовать подогнать. Рестарт. Ещё там изменил, может фавиконка появится, а может нет. скрытый текст Выделить код Код://addEventListener("keypress", gFindBar ); // добавить поиск по мере набора текста if (gFindBar instanceof Ci.nsIDOMEventListener) addEventListener("keypress", gFindBar); else if (gFindBar instanceof Ci.nsIMessageListener) { var listenMessages = function(noListen) { for(var msg of ["Findbar:Keypress", "Findbar:Mouseup"]) noListen ? messageManager.removeMessageListener(msg, gFindBar) : messageManager.addMessageListener(msg, gFindBar); } listenMessages(); addDestructor(listenMessages); gFindBar.receiveMessage = function(aMessage) { switch (aMessage.name) { case "Findbar:Mouseup": if (!this.hidden && this._findMode != this.FIND_NORMAL) this.close(); break; case "Findbar:Keypress": var msg = {findMode: this._findMode, findAsYouType: gFindBar._findAsYouType}; gBrowser.selectedBrowser.messageManager.sendAsyncMessage("Findbar:UpdateState", msg); return this._onBrowserKeypress(aMessage.data); } } } bunda1 пишет
Может здесь (не проверял). |
voqabuhe > 18-04-2015 00:32:36 |
Dumby пишет
Спасибо, работает. Ну а красоту bunda1 оценит. Dumby пишет
Там всего 5 секунд, это они там просто так выставляются. Dumby пишет
Спасибо. Но увы, к сожалению не появилась. 18-04-2015 00:48:34 |
lokiju > 18-04-2015 01:02:21 |
lokiju пишет
У меня всё так же. Дополнение: то есть, если выделить текст (слово/ букву) и выбрать пункт контекстного меню "Найти на странице" - открывается пустая панель поиска, поиск не производится. Если скопировать и вставить в текстовое поле на панели поиска , то все работает поиск, выделение, показ количества найденого. Если ввести вручную, с клавиатуры - тоже всё работает. bunda1 пишет
У меня в коде кнопки нет такого. |
Dumby > 18-04-2015 22:21:03 |
voqabuhe пишет
Не готов согласиться. Я вижу значение 5000000.
Сожалею, что не смог реализовать, извини.
Ещё предложил бы рассмотреть такой вариант. скрытый текст Выделить код Код://addEventListener("keypress", gFindBar ); // добавить поиск по мере набора текста if (gFindBar instanceof Ci.nsIDOMEventListener) addEventListener("keypress", gFindBar); else if (gFindBar instanceof Ci.nsIMessageListener) { var onTabSelect = function(e) gFindBar.browser = e.target.linkedBrowser; onTabSelect({target: gBrowser.selectedTab}); addEventListener("TabSelect", onTabSelect, false, gBrowser.tabContainer); } |
voqabuhe > 18-04-2015 23:48:50 |
Dumby пишет
Тогда наверное я недопонял значение этой настройки. Я подумал что это Закрыть через: 5 секунд в меню. Выделить код Код:gFindBar._quickFindTimeoutLength = 5000000; // время закрытия панели поиска эсли тот открыт по мере набора текста Dumby пишет
Да ну, какие могут быть извинения, я тебе и так очень благодарен за великолепные кнопки. Да и отсутствие фавиконки в дубликатах не такой уж и большой недостаток. Нет так нет и фиг с ним. Короче спасибо ещё раз. 19-04-2015 00:08:29 Dumby пишет
У меня не работает. Поиск не переключается, а панель поиска искажается. |
bunda1 > 19-04-2015 00:14:57 |
Dumby пишет
Код работает но ломает вид FindBar мини, вот: 19-04-2015 00:16:58 voqabuhe пишет
Странно но у меня работает. 19-04-2015 00:18:23 lokiju пишет
Буду исправлять. |
voqabuhe > 19-04-2015 00:36:10 |
Dumby Например на этих http://polismi.ru/ http://www.rg.ru/ |
bunda1 > 22-04-2015 21:34:31 |
Dumby В для кнопки не работает важная команда для панели поиска: gFindBar.onFindCommand();, с этим кодом тоже: Выделить код Код:if (gFindBar instanceof Ci.nsIDOMEventListener) addEventListener("keypress", gFindBar); else if (gFindBar instanceof Ci.nsIMessageListener) { var listenMessages = function(noListen) { for(var msg of ["Findbar:Keypress", "Findbar:Mouseup"]) noListen ? messageManager.removeMessageListener(msg, gFindBar) : messageManager.addMessageListener(msg, gFindBar); } listenMessages(); addDestructor(listenMessages); gFindBar.receiveMessage = function(aMessage) { switch (aMessage.name) { case "Findbar:Mouseup": if (!this.hidden && this._findMode != this.FIND_NORMAL) this.close(); break; case "Findbar:Keypress": var msg = {findMode: this._findMode, findAsYouType: gFindBar._findAsYouType}; gBrowser.selectedBrowser.messageManager.sendAsyncMessage("Findbar:UpdateState", msg); return this._onBrowserKeypress(aMessage.data); } } } а с этим кодом команда работает но при переключении на другую вкладку пропадает текст из панели поиска: Выделить код Код:if (gFindBar instanceof Ci.nsIDOMEventListener) addEventListener("keypress", gFindBar); else if (gFindBar instanceof Ci.nsIMessageListener) { var onTabSelect = function(e) gFindBar.browser = e.target.linkedBrowser; onTabSelect({target: gBrowser.selectedTab}); addEventListener("TabSelect", onTabSelect, false, gBrowser.tabContainer); } |
Dumby > 25-04-2015 00:43:27 |
bunda1 пишет
Может пробросить скрытый текст Выделить код Код:if (gFindBar instanceof Ci.nsIDOMEventListener) addEventListener("keypress", gFindBar); else if (gFindBar instanceof Ci.nsIMessageListener) { var onTabSelect = function(e) { e.target.linkedBrowser._lastSearchString = e.detail.previousTab.linkedBrowser._lastSearchString; gFindBar.browser = e.target.linkedBrowser; } onTabSelect({target: gBrowser.selectedTab, detail: {previousTab: gBrowser.selectedTab}}); addEventListener("TabSelect", onTabSelect, false, gBrowser.tabContainer); var foundMatches = gFindBar.getElement("found-matches"); foundMatches.value = ""; Object.defineProperty(foundMatches, "value", {value: ""}); } |
Dumby > 25-04-2015 20:05:16 |
Тьфу! |
bunda1 > 25-04-2015 21:26:47 |
Dumby Вроде всё работает, есть правда не понятные глюки с авто выделением но это постараюсь исправить сам. |
monsoon > 08-05-2015 14:53:30 |
А можно ли на какую-нибудь клавишу + клик добавить отключение кнопки? |
lokiju > 08-05-2015 15:23:02 |
monsoon |
monsoon > 08-05-2015 20:31:58 |
lokiju |
bunda1 > 08-05-2015 21:19:01 |
monsoon пишет
Кнопка Toggle Find удаляет оригинальную панель поиска с которым работает Findbar Tweak и создаёт новый поэтому отключения инициализации кнопки не помогает. Так просто тут не исправить ситуацию. |
monsoon > 15-05-2015 15:45:00 |
Изменил строчку кода под себя, чтобы по Ctrl+F панель не закрывалась. Возможно стоит добавить такую возможность и опцию для этого в меню. Впервые встретил в FindBar Tweak (FBT) возможность динамической пометки текущего результата поиска. Выводом результатов поиска в виде отдельных строк пользовался еще со 2-го макстона. |
bunda1 > 16-05-2015 19:22:03 |
Не понял, можно поконкретней на примере.
Не смогу |
monsoon > 18-05-2015 10:07:53 |
bunda1 пишет
Специально для примера выложил гифку или она при клике не открывается?
Жаль. Эта возможность во всех виденных реализациях осуществляется по кнопке или ссылке (в макстоне) на панели поиска. Т.е. те кому она не нужна, просто не будут ей пользоваться. |
villa7 > 25-05-2015 20:59:52 |
bunda1 |
lokiju > 25-05-2015 23:27:30 |
villa7 lokiju пишет
Ждите. Я вот с 25-01-2015 жду. |
bunda1 > 27-05-2015 19:41:41 |
villa7 пишет
Вроде на FF 38.0.5 вот этот код работает: |
villa7 > 28-05-2015 14:35:52 |
bunda1
Нет, выделение не работает |
emlen > 29-05-2015 12:29:20 |
Очень не хватает возможности кликнуть по выделенной текстовой ссылке на странице ПКМ и выбрать "перейти по ссылке в новой вкладке".. Не ожидается такого доп. функционала у кнопочки? |
turbot > 29-05-2015 13:04:58 |
emlen |
emlen > 29-05-2015 14:17:47 |
turbot пишет
turbot, оно, супер!!! Спасибо огромное! |
villa7 > 30-05-2015 22:13:33 |
bunda1 |
bunda1 > 30-05-2015 23:03:22 |
villa7 пишет
Завтра займусь, вроде проблема не должна быть сложной. |
bunda1 > 01-06-2015 21:10:19 |
villa7 пишет
С наскока исправить не получается, похоже проблема серьезная |
villa7 > 01-06-2015 23:10:25 |
bunda1 |
villa7 > 01-07-2015 02:01:49 |
Блин, ну не как без твоей кнопки, удобно и привык, месяц пользуюсь другими расширениями, всё не то, лишние телодвижения приходится делать. Слышно там что нибудь? |
Ultima2m > 01-07-2015 12:15:25 |
emlen пишет
А скрипт "линкификатор" чем хуже? Все текстовые ссылки будут кликабельными. |
Dumby > 02-07-2015 21:13:53 |
villa7 пишет
Ну, если прям совсем никак, скрытый текст Выделить код Код:// Запускать поиск выделением текста если это разрешено в '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(function() { gFindBar.onFindCommand(); updateHits(); if ( lab.value !== '0/0' ) Highlight("", "greenLight"); else Highlight(); }, 50); } } }; addEventListener("mouseup", autoFind, false, gBrowser ); addEventListener("mousedown", autoFind, false, gBrowser ); Выделить код Код:// Запускать поиск выделением текста мышью, если это разрешено в 'about:config' ................................ ({ prefName: "FindBar.auto_Find", init() { Services.prefs.addObserver(this.prefName, this, false); this.observe(null, null, this.prefName); addDestructor(this.destroy, this); }, destroy(reason) { if (reason != "update" && reason != "delete") return; Services.prefs.removeObserver(this.prefName, this); this.listen(false); }, observe(subject, topic, data) { data == this.prefName && this.listen(Services.prefs.getBoolPref(this.prefName)); }, listen(state) state ? gBrowser.addEventListener("mouseup", this, false) : gBrowser.removeEventListener("mouseup", this, false) , handleEvent(e) { if ( e.button || e.originalTarget instanceof XULElement || e.target instanceof Ci.nsIDOMNSEditableElement || e.target.ownerGlobal.top != content || gBrowser.currentURI.spec.startsWith("about:stylish-edit") || !getBrowserSelection() ) return; gFindBar.browser = gBrowser.selectedBrowser; gFindBar.onFindCommand().then(() => { updateHits(); lab.value == "0/0" ? Highlight() : Highlight("", "greenLight") }, Cu.reportError); } }).init(); |
bunda1 > 04-07-2015 00:04:01 |
villa7 пишет
Попробуй Toggle Find для FF28+ Toggle Find для FF28+ |
villa7 > 09-07-2015 21:08:41 |
Dumby |
lokiju > 10-07-2015 10:52:24 |
villa7, |
villa7 > 10-07-2015 11:07:43 |
lokiju |
lokiju > 10-07-2015 14:46:08 |
villa7, значит это не мой персональный глюк, а общий косяк. Ждём ответа bunda1. |
voqabuhe > 10-07-2015 16:08:10 |
villa7, lokiju |
villa7 > 10-07-2015 16:20:46 |
voqabuhe |
Kamui > 10-07-2015 17:16:44 |
voqabuhe пишет
Аналогично, счетчик работает, но bunda1 специльно для меня переделывал его как-то давно: Выделить код Код:const forceFind = false, forceFindCS = true; // Приклеить элемент findbar к странице( #appcontent ) ................................ const fbID = "FindToolbar-m"; delete window.gFindBar; window.gFindBar = document.getElementById(fbID); if (!gFindBar) { gFindBar = gBrowser.parentNode.insertBefore(document.createElement("findbar"), gBrowser); gFindBar.id = fbID; gFindBar.setAttribute("browserid", "content"); gFindBar.clientTop; delete window.gFindBarInitialized; window.gFindBarInitialized = true; gFindBar._selectionMaxLen = 1000; // лимит символов для поиска } // Ctrl+F, показать - скрыть панель поиска .................................... function toggleFindbar() gFindBar.hidden ? gFindBar.onFindCommand() : gFindBar.close(); addEventListener("keydown", function(e) e.keyCode == e.DOM_VK_F && e.ctrlKey && !e.altKey && !e.shiftKey && !e.preventDefault() && toggleFindbar() , false); this.onclick = function(e) { if (!e.button) toggleFindbar() }; // Показать количество совпадений на панели поиска ................................ const textbox = gFindBar.getElement("findbar-textbox"), nrm = Ci.nsISelectionController.SELECTION_NORMAL, labID = "hits-m"; var lab = document.getElementById(labID); if (!lab) { lab = textbox.parentNode.insertBefore(document.createElement("label"), textbox); lab.id = labID; } var curHit, allHits; function updateHits(arg) { if (gFindBar.hidden) return; var word = textbox.value; if (!word) { lab.value = "0/0"; textbox.removeAttribute("status"); return; } var win = arg instanceof Window && arg || content; if (win == content) curHit = allHits = 0; var findbarFinder = gFindBar._browser.finder; var controller = findbarFinder._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 finder = Cc["@mozilla.org/embedcomp/rangefind;1"].createInstance().QueryInterface(Ci.nsIFind); finder.caseSensitive = gFindBar._shouldBeCaseSensitive(word); while ((retRange = finder.Find(word, searchRange, startPt, endPt))) { allHits++; if (!curHit) { var sel = controller.getSelection(nrm), range; if (sel.toString()) range = sel.getRangeAt(0); else { var editableNode = findbarFinder._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, function(frame) updateHits(frame)); } if (win != content) return; allHits ? textbox.removeAttribute("status") : textbox.setAttribute("status", "notfound"); forceFind && !curHit && allHits && gFindBar._find(); lab.value = curHit + "/" + allHits; } updateHits(); gFindBar.updateHits = updateHits; function insUpd(methodName, code) { const method = gFindBar[methodName]; gFindBar[methodName] = Function("arguments.callee.method.apply(this, arguments);" + (code || "") + " this.updateHits();"); gFindBar[methodName].method = method; addDestructor(function() gFindBar[methodName] = method); } insUpd("_find"); insUpd("_findAgain"); insUpd("_setCaseSensitivity", forceFindCS && " this._find();"); const progressListener = { onStateChange: function(wpr, req, state) state & Ci.nsIWebProgressListener.STATE_STOP && setTimeout(updateHits, 320), onLocationChange: function(wpr, req) !req && updateHits() }; addDestructor(function() gBrowser.removeProgressListener(progressListener)); function onFindbar() { gBrowser[(gFindBar.hidden ? "remove" : "add") + "ProgressListener"](progressListener); !gFindBar.hidden && updateHits(); } onFindbar(); const observer = MutationObserver(onFindbar); observer.observe(gFindBar, { attributes: true, attributesFilter: ["hidden"] }); addDestructor(function() observer.disconnect()); |
villa7 > 10-07-2015 21:07:40 |
Kamui |
voqabuhe > 10-07-2015 21:53:50 |
villa7 пишет
Про все функции не скажу, давно не проверял, но тем что пользуюсь, всё работает. |
villa7 > 10-07-2015 22:40:05 |
voqabuhe |
lokiju > 10-07-2015 22:51:06 |
villa7 пишет
Тоже самое. Выделенное после нажатия Find - Найти на странице не копируется в финдбар-текстбокс |
voqabuhe > 11-07-2015 00:36:04 |
villa7 11-07-2015 00:40:33 lokiju пишет
И эта функция у меня работает. Ребята похоже у вас какие-то проблемы. Тогда ждите bunda1, он вам скажет чё и как. |
bunda1 > 11-07-2015 11:59:52 |
villa7, lokiju 11-07-2015 12:01:53 |
voqabuhe > 11-07-2015 12:15:59 |
bunda1 пишет
А вот оно чё, а я всегда колесом кручу, а кнопкой только строку очищаю. Поэтому у меня всё ОК. |
bunda1 > 11-07-2015 12:23:27 |
voqabuhe пишет
Я тоже не сразу понял потому что только колесом ищу. |
lokiju > 11-07-2015 13:59:00 |
bunda1 11-07-2015 14:04:16 |
bunda1 > 11-07-2015 14:17:00 |
lokiju пишет
Не понял о чём речь , может включи Автовыделение. |
lokiju > 11-07-2015 14:44:02 |
bunda1 автовыделение включено, но похоже оно не срабатывает. |
bunda1 > 11-07-2015 14:58:34 |
lokiju пишет
Странно, мне на FF42 это работает, если текущая позиция отмечается зелёным то должно и подсвечиваться все найденные позиции на странице, потому что это запускает одна функция. Может какое расширение или кнопка конфликтует. |
voqabuhe > 11-07-2015 15:01:10 |
lokiju пишет
lokiju пишет
А ты учитываешь, что оно срабатывает начиная с трёх букв? |
lokiju > 11-07-2015 18:36:18 |
bunda1 пишет
Выделение вручную работает по нажатию Find - Выделить текст на странице . Подождём , что напишет villa7. Потому что конфликтовать вроде как не с чем(нет ничего связаного с выделением, подсветкой и копированием) |
villa7 > 12-07-2015 07:07:44 |
Даже не знаю исправимо сие или нет, но после обновления кода стало конфликтовать с этим |
bunda1 > 20-07-2015 21:36:02 |
villa7 пишет
|
lokiju > 20-07-2015 22:28:24 |
bunda1 пишет
Подсветка найденных позиций заработала. bunda1, спасибо . У меня работает всё, чем пользуюсь. Такой вопрос : хочу уменьшить размер иконки кнопки, не получается. Что неправильно? Выделить код Код:this.Attribute("style","menupopup>.toolbarbutton-icon{ -moz-appearance: none !important; margin: 0 !important; padding: 2px !important;width: 16px !important;height: 20px !important;") |
bunda1 > 21-07-2015 07:12:44 |
lokiju Выделить код Код:// Стиль для панели поиска ................................ var uri = makeURI('data:text/css,'+ encodeURIComponent('\ |
Kamui > 26-08-2015 21:28:12 |
bunda1 Выделить код Код:const forceFind = false, forceFindCS = true; // Приклеить элемент findbar к странице( #appcontent ) ................................ const fbID = "FindToolbar-m"; delete window.gFindBar; window.gFindBar = document.getElementById(fbID); if (!gFindBar) { gFindBar = gBrowser.parentNode.insertBefore(document.createElement("findbar"), gBrowser); gFindBar.id = fbID; gFindBar.setAttribute("browserid", "content"); gFindBar.clientTop; delete window.gFindBarInitialized; window.gFindBarInitialized = true; gFindBar._selectionMaxLen = 1000; // лимит символов для поиска } // Ctrl+F, показать - скрыть панель поиска .................................... function toggleFindbar() gFindBar.hidden ? gFindBar.onFindCommand() : gFindBar.close(); addEventListener("keydown", function(e) e.keyCode == e.DOM_VK_F && e.ctrlKey && !e.altKey && !e.shiftKey && !e.preventDefault() && toggleFindbar() , false); this.onclick = function(e) { if (!e.button) toggleFindbar() }; // Показать количество совпадений на панели поиска ................................ const textbox = gFindBar.getElement("findbar-textbox"), nrm = Ci.nsISelectionController.SELECTION_NORMAL, labID = "hits-m"; var lab = document.getElementById(labID); if (!lab) { lab = textbox.parentNode.insertBefore(document.createElement("label"), textbox); lab.id = labID; } var curHit, allHits; function updateHits(arg) { if (gFindBar.hidden) return; var word = textbox.value; if (!word) { lab.value = "0/0"; textbox.removeAttribute("status"); return; } var win = arg instanceof Window && arg || content; if (win == content) curHit = allHits = 0; var findbarFinder = gFindBar._browser.finder; var controller = findbarFinder._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 finder = Cc["@mozilla.org/embedcomp/rangefind;1"].createInstance().QueryInterface(Ci.nsIFind); finder.caseSensitive = gFindBar._shouldBeCaseSensitive(word); while ((retRange = finder.Find(word, searchRange, startPt, endPt))) { allHits++; if (!curHit) { var sel = controller.getSelection(nrm), range; if (sel.toString()) range = sel.getRangeAt(0); else { var editableNode = findbarFinder._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, function(frame) updateHits(frame)); } if (win != content) return; allHits ? textbox.removeAttribute("status") : textbox.setAttribute("status", "notfound"); forceFind && !curHit && allHits && gFindBar._find(); lab.value = curHit + "/" + allHits; } updateHits(); gFindBar.updateHits = updateHits; function insUpd(methodName, code) { const method = gFindBar[methodName]; gFindBar[methodName] = Function("arguments.callee.method.apply(this, arguments);" + (code || "") + " this.updateHits();"); gFindBar[methodName].method = method; addDestructor(function() gFindBar[methodName] = method); } insUpd("_find"); insUpd("_findAgain"); insUpd("_setCaseSensitivity", forceFindCS && " this._find();"); const progressListener = { onStateChange: function(wpr, req, state) state & Ci.nsIWebProgressListener.STATE_STOP && setTimeout(updateHits, 320), onLocationChange: function(wpr, req) !req && updateHits() }; addDestructor(function() gBrowser.removeProgressListener(progressListener)); function onFindbar() { gBrowser[(gFindBar.hidden ? "remove" : "add") + "ProgressListener"](progressListener); !gFindBar.hidden && updateHits(); } onFindbar(); const observer = MutationObserver(onFindbar); observer.observe(gFindBar, { attributes: true, attributesFilter: ["hidden"] }); addDestructor(function() observer.disconnect()); 1. Если слово на странице выделено и я нажимаю ctrl+f, то выделенное слово не ищется, а должно. Я не заметил когда все это пропало, начало надоедать недавно, можно с этим что-то сделать? |
villa7 > 20-10-2015 14:13:15 |
bunda1 |
bunda1 > 28-10-2015 10:35:11 |
villa7 пишет
А ты хочешь что бы скрипт при выделении слова открывал контекстное меню и при этом слово вставлялся в поисковик, как то это не удобно. |
villa7 > 28-10-2015 11:30:28 |
bunda1 |
bunda1 > 28-10-2015 11:37:48 |
Понял. Кстати где то был CB код который раскрывает контекстное меню по двойному клику на странице. |
villa7 > 06-11-2015 10:43:40 |
bunda1 скрытый текст Инициализация Выделить код Код:/*======= Auto context menu on selection =======*/ this.setAttribute("type","checkox"); var prefs=Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch); try{ var cb_autoContextmenu = prefs.getBoolPref("cb_autoContextmenu" ); }catch(e){ prefs.setBoolPref("cb_autoContextmenu",true ); } this.checked = prefs.getBoolPref("cb_autoContextmenu" ); var autoContextmenu = { exec: function(event) { var prefs=Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch); if (event.button != 0) return; if( !prefs.getBoolPref("cb_autoContextmenu" ) ) return; selection = document.commandDispatcher.focusedWindow.getSelection(); if (!selection.isCollapsed && (selection.toString() != autoContextmenuPrevSelection)) { autoContextmenuPrevSelection = document.commandDispatcher.focusedWindow.getSelection().toString(); var mouseEvent = document.createEvent('MouseEvents'); if (mouseEvent) { mouseEvent.initMouseEvent('contextmenu', true, true, window, 1, event.screenX, event.screenY, event.clientX, event.clientY, false, false, false, false, 2, null); event.target.dispatchEvent(mouseEvent); } } } }; var autoContextmenuPrevSelection = null; document.addEventListener('mouseup', function(event) { autoContextmenu.exec(event); }, false); |
bunda1 > 13-11-2015 15:36:22 |
villa7 |
bunda1 > 13-11-2015 18:05:05 |
villa7 Выделить код Код:this._handleClick =()=> cbu.setPrefs(s, !cbu.getPrefs(s)); var s = 'CB.autoContextMenu'; cbu.isPref(s, true); toggleImage(); function toggleImage() self.checked = cbu.getPrefs(s); gPrefService.addObserver(s, toggleImage, false); addDestructor(()=> gPrefService.removeObserver(s, toggleImage) ); function autoContextMenu(e) { if ( e.button || !cbu.getPrefs(s) || gBrowser.currentURI.spec.startsWith("about:stylish-edit") || document.commandDispatcher.focusedWindow.getSelection().isCollapsed ) return; var mouseEvent = document.createEvent('MouseEvents'); mouseEvent.initMouseEvent('contextmenu', 1, 1, window, 1, e.screenX, e.screenY, e.clientX, e.clientY, 0, 0, 0, 0, 2, null); e.target.dispatchEvent(mouseEvent); }; addEventListener('mouseup', autoContextMenu, false, gBrowser); или так: userChrome.js/Dblclick-ContextMenu.uc.js at master · ardiman/userChrome.js · GitHub |
villa7 > 13-11-2015 20:34:10 |
bunda1 скрытый текст Выделить код Код:(function () { // Context Search mini 2013-10-10 var options = { loadInBackground: false, // true - открывать вкладки в фоне pinnedEngineName: "", // оставить пустым если не нужно закреплять // определенный поисковик // примеры pinnedEngineName: "Google" или pinnedEngineName: "Яндекс" или pinnedEngineName: "" hideDefaultEngineInPopupSubMenu: false, // true - не добавлять поисковик по умолчанию в выпадающий список (подменю) поисковиков campactMenu: true, // true - поисковики в выпадающем списке (подменю) без назаваний campactMenuLengthPerLine: 3, // максимальное количество элементов в одной строке // от 3 до 10, по умолчанию 5 searchBySite: { enable: false, // true - добавить поисковики по сайту iconsOn: true, // true - добавить иконки для поисковиков по сайту useDefaultNamesList: true, // true - использовать список поисковиков по умолчанию addCustomNames: false, // true - добавить свои поисковики по сайту customNamesList: [ ["Rambler", ["Rambler", "Рамблер"]] ] // например ["Rambler", ["Rambler", "Рамблер"]] // первая ячека название на английском // вторая ячека массив с предполагаемыми именами поисковика // может состоять из нескольких значений // ["Name1", ["Name1"]], // ["Name2", ["Name2", "Имя2"]], // ["Name3", ["Name3", "Имя3", "Nev3"]] }, searchImageByText: { enable: false, // true - добавить поиск изображения по тексту useDefaultNamesList: true, addCustomNames: false, customNamesList: [ [ "name", "link", "image" ] ] }, searchByImage: { enable: false, // true - добавить поиск по изображению useDefaultNamesList: true, addCustomNames: false, customNamesList: [ [ "name", "link", "image" ] ] }, searchInCache: { enable: false, // true - добавить поиск в кэше // нужно доработать useDefaultNamesList: true, addCustomNames: false, customNamesList: [ [ "name", "link", "image" ] ] } }; function _localize(sid) { let strings = { en: { searchBySite: "Search this site", searchImageByText: "Search image by text", searchByImage: "Search by image", searchInCache: "Search this page in cache" }, ru: { searchBySite: "Поиск по этому сайту", searchImageByText: "Поиск изображения по тексту", searchByImage: "Поиск по изображению", searchInCache: "Поиск этой страницы в кэше" } }; //let locale = (Application.prefs.getValue("general.useragent.locale", false) || "en").match(/^[a-z]*/)[0]; function getBrowserUILocale() { // Browser UI locale return Components.classes["@mozilla.org/chrome/chrome-registry;1"] .getService(Components.interfaces.nsIXULChromeRegistry) .getSelectedLocale("global"); } let locale = ""; // ru, en if (!locale || locale == "") locale = getBrowserUILocale().match(/^[a-z]*/)[0]; _localize = function (sid) { return strings[locale] && strings[locale][sid] || strings.en[sid] || sid; }; return _localize.apply(this, arguments); } let XULNS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"; let XHTMLNS = "http://www.w3.org/1999/xhtml" var contextSearcherObj = { initialized: false, init: function() { if(this.initialized) return; this.initialized = true; this.nodeIds = { searchMenu: "contextSearchMiniByBunda1-menu", searchMenuPopup: "contextSearchMiniByBunda1-popup", searchByImageMenu: "contextSearchMiniByBunda1-image-search-menu", searchByImageMenuPopup: "contextSearchMiniByBunda1-image-search-popup" }; if (document.getElementById(this.nodeIds.searchMenu)) return; var searchService = Cc["@mozilla.org/browser/search-service;1"].getService(Ci.nsIBrowserSearchService); var contextMenu = document.getElementById("contentAreaContextMenu"); var searchSelect = document.getElementById("context-searchselect"); searchSelect.style.display = "none"; var searchMenu = contextMenu.insertBefore(document.createElementNS(XULNS, "menu"), searchSelect); this.searchService = searchService; this.contextMenu = contextMenu; this.searchSelect = searchSelect; this.searchMenu = searchMenu; this.param = { isPinnedEngine: false, pinnedEngineName: "" }; try { this.createSearchMenu(); if (options.searchByImage.enable) this.createSearchByImageMenu(); } catch (ex) { this.destroy(); Components.utils.reportError(ex); return; } if (options.campactMenu) this.loadStyles(); var observeStatus = new MutationObserver(function () { searchMenu.hidden = searchSelect.hidden; }); observeStatus.observe(searchSelect, { attributes: true, attributeFilter: ["hidden"] }); /*var prefService = Components.classes["@mozilla.org/preferences-service;1"] .getService(Components.interfaces.nsIPrefService); this.branch = prefService.getBranch("browser.search."); if (!("addObserver" in this.branch)) this.branch.QueryInterface(Components.interfaces.nsIPrefBranch2); this.branch.addObserver("", this, false);*/ /* var searchPref = "browser.search."; gPrefService.addObserver(searchPref, this, false);*/ /*let os = Cc["@mozilla.org/observer-service;1"]. getService(Ci.nsIObserverService); os.addObserver(this, "browser-search-engine-modified", false);*/ Services.obs.addObserver(this, "browser-search-engine-modified", false); Services.ww.registerNotification(this); addEventListener("popupshowing", this, false, contextMenu); addDestructor(function (reason) { observeStatus.disconnect(); Services.ww.unregisterNotification(this); //this.branch.removeObserver("", this); //gPrefService.removeObserver(searchPref, this, false); //os.removeObserver(this, "browser-search-engine-modified", false); Services.obs.removeObserver(this, "browser-search-engine-modified", false); this.destroy(); if (reason != "destructor") this.unloadStyles(); }, this); }, destroy: function() { if(!this.initialized) return; this.initialized = false; var contextMenu = this.contextMenu; if (!contextMenu) return; if (this.searchMenu) contextMenu.removeChild(this.searchMenu); if (this.searchByImageMenu) contextMenu.removeChild(this.searchByImageMenu); if (this.searchSelect) this.searchSelect.style.removeProperty("display"); }, update: function() { this.searchMenu.textContent = ""; this.createSearchMenu(); delete this.updateTimeoutID; }, get isSeaMonkey() { delete this.isSeaMonkey; return this.isSeaMonkey = Services.appinfo.name == "SeaMonkey"; }, observe: function(subject, topic, data) { switch (topic) { case "domwindowclosed": if (subject.document.documentElement.getAttribute("windowtype") == "Browser:SearchManager") { this.update(); } break; /*case "nsPref:changed": switch (data) { case "defaultenginename": case "browser.search.defaultenginename": this.update(); break; } break;*/ case "browser-search-engine-modified": /*switch (data) { case "engine-default": case "engine-current": // engine-default case "engine-changed": case "engine-removed":*/ if (typeof this.updateTimeoutID == "number") { window.clearTimeout(this.updateTimeoutID); delete this.updateTimeoutID; } let _this = this; this.updateTimeoutID = window.setTimeout(function () { _this.update(); }, 1000); /*break; }*/ break; } }, handleEvent: function(e) { //var contextMenu = this.contextMenu; //var menu = this.menu; //var imageMenu = this.imageMenu; switch (e.type) { case "popupshowing": this.popupshowingEvent(e); break; } }, popupshowingEvent: function(e) { var trgId = e.target.id; if (trgId) { if (trgId == "contentAreaContextMenu") { this.contextMenuPopup(e); if (this.searchByImageMenu) this.searchByImageMenuPopup(e); } else if (trgId == this.nodeIds.searchMenuPopup) this.searchMenuPopup(e); } }, _stylesLoaded: false, loadStyles: function() { if(this._stylesLoaded) return; this._stylesLoaded = true; var sss = this.sss; var cssURI = this.cssURI = this.makeCSSURI(); if(!sss.sheetRegistered(cssURI, sss.USER_SHEET)) sss.loadAndRegisterSheet(cssURI, sss.USER_SHEET); }, unloadStyles: function() { if(!this._stylesLoaded) return; this._stylesLoaded = false; var sss = this.sss; if(sss.sheetRegistered(this.cssURI, sss.USER_SHEET)) sss.unregisterSheet(this.cssURI, sss.USER_SHEET); }, get sss() { delete this.sss; return this.sss = Components.classes["@mozilla.org/content/style-sheet-service;1"] .getService(Components.interfaces.nsIStyleSheetService); }, makeCSSURI: function() { var cssStr = '\ @namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul");\n\ @-moz-document url("' + window.location.href + '") {\n\ #' + this.nodeIds.searchMenuPopup + ' > hbox > .menuitem-iconic[campactMenu="true"] {\n\ /*width: 2em !important;*/\n\ }\n\ #' + this.nodeIds.searchMenuPopup + ' > hbox > .menuitem-iconic[campactMenu="true"] * {\n\ /*padding-left: 0 !important;\n\ padding-right: 0 !important;\n\ margin-left: 0 !important;\n\ margin-right: 0 !important;*/\n\ }\n\ #' + this.nodeIds.searchMenuPopup + ' > hbox > spacer[campactMenu="true"] {\n\ width: 2em !important;\n\ }\n\ #' + this.nodeIds.searchMenuPopup + ' > hbox > .menuitem-iconic[campactMenu="true"] {\n\ width: 3em !important;\n\ height: 2em !important;\n\ }\n\ #' + this.nodeIds.searchMenuPopup + ' > hbox >.menuitem-iconic[campactMenu="true"] > image {\n\ margin-left: .8em !important;\n\ }\n\ }\n\ '; return Services.io.newURI("data:text/css," + encodeURIComponent(cssStr), null, null); }, searchCommandHandler: function(event, trg) { var inBg = options.loadInBackground || false; if (event.type == "click" && event.button && event.button == 1) { inBg = !inBg; } var searchBySite = ""; if (event.target.hasAttribute("searchBySite")) { searchBySite = " site:" + gBrowser.currentURI.host; } else if (event.target.hasAttribute("searchInCache")) { searchBySite = content.location.href; } let selectedText = this.isSeaMonkey ? content.getSelection().toString() : getBrowserSelection(); if (event.target.engine.imageLink) { gBrowser.loadOneTab(event.target.engine.imageLink + /*getBrowserSelection()*/ selectedText, { relatedToCurrent: true, inBackground: inBg }); } else if (event.target.engine.cacheLink) { gBrowser.loadOneTab(event.target.engine.cacheLink + /*getBrowserSelection()*/ searchBySite, { relatedToCurrent: true, inBackground: inBg }); } else { let submission = event.target.engine.getSubmission(/*getBrowserSelection()*/ selectedText + searchBySite, null); gBrowser.loadOneTab(submission.uri.spec, { relatedToCurrent: true, postData: submission.postData, inBackground: inBg }); } if (trg == "menu") { setTimeout(function () { document.getElementById("contentAreaContextMenu").hidePopup(); }, 0); } }, contextMenuPopup: function(e) { var searchService = this.searchService; var contextMenu = this.contextMenu; var menu = this.searchMenu; var thisIsSM = this.isSeaMonkey; function getMenuLabel(str) { try { if (thisIsSM) { let bundle = document.getElementById("contentAreaCommandsBundle"); return bundle.getFormattedString(str, [engineName, selectedText]); } else return gNavigatorBundle.getFormattedString(str, [engineName, selectedText]); } catch (ex) { return false; } } for(let i in searchFormattedString) { menuLabel = getMenuLabel(searchFormattedString[i]); if (menuLabel) break; else if (!menuLabel && i == searchFormattedString.length-1) menuLabel = engineName; } menu.label = menuLabel; }, searchMenuPopup: function(e) { var popup = e.target; var items; if (!popup.items) { var itemsObj = popup.getElementsByTagName("menuitem"); popup.items = []; Array.slice(itemsObj).forEach(function(elem) { if (typeof elem == "object" && elem.nodeName == "menuitem" && elem.hasAttribute("searchBySite") || elem.hasAttribute("searchInCache")) popup.items.push(elem); }); items = popup.items; } else { items = popup.items; } var menus; if (!popup.menus) { var itemsObj = popup.getElementsByTagName("menu"); popup.menus = []; Array.slice(itemsObj).forEach(function(elem) { if (typeof elem == "object" && elem.nodeName == "menu" && elem.hasAttribute("searchBySite") || elem.hasAttribute("searchInCache")) popup.menus.push(elem); }); menus = popup.menus; } else { menus = popup.menus; } var siteSearchDomain; var gBrowser = gBrowser || getBrowser(); function isDomain() { try { siteSearchDomain = gBrowser.currentURI.host; } catch (ex) { return false; } return true; } if (isDomain()) { items.forEach(function(elem) { //if (elem.hasAttribute("searchBySite")) // elem.setAttribute("tooltiptext", siteSearchDomain); elem.removeAttribute("disabled"); }); menus.forEach(function(elem) { if (elem.hasAttribute("searchBySite")) elem.setAttribute("tooltiptext", siteSearchDomain); else if (elem.hasAttribute("searchInCache")) elem.setAttribute("tooltiptext", content.document.title); elem.removeAttribute("disabled"); }); } else { items.forEach(function(elem) { //if (elem.hasAttribute("searchBySite")) // elem.removeAttribute("tooltiptext"); elem.setAttribute("disabled", "true"); }); menus.forEach(function(elem) { if (elem.hasAttribute("searchBySite") || elem.hasAttribute("searchInCache")) elem.removeAttribute("tooltiptext"); elem.setAttribute("disabled", "true"); }); } }, createSearchMenu: function() { var searchService = this.searchService; var contextMenu = this.contextMenu; var menu = this.searchMenu; var engines = searchService.getVisibleEngines({}); menu.setAttribute("id", this.nodeIds.searchMenu); menu.setAttribute("class", "menu-iconic"); this.param.isPinnedEngine = false; this.param.pinnedEngineName = ""; var pinnedEngineName = options.pinnedEngineName; if (pinnedEngineName != "") { for (let i in engines) { if (engines[i].name != pinnedEngineName) continue; menu.setAttribute("label", engines[i].name); menu.setAttribute("image", engines[i].iconURI.spec); menu.engine = engines[i]; this.param.isPinnedEngine = true; this.param.pinnedEngineName = pinnedEngineName; break; } } let rEngine = this.isSeaMonkey ? "currentEngine" : "defaultEngine"; if (!this.param.isPinnedEngine) { menu.setAttribute("label", searchService[rEngine].name); menu.setAttribute("image", searchService[rEngine].iconURI.spec); menu.engine = searchService[rEngine]; } menu.gObj = this; menu.setAttribute("onclick", "if (event.target == this && event.target.engine) this.gObj.searchCommandHandler(event, 'menu');"); menu.popup = menu.appendChild(document.createElementNS(XULNS, "menupopup")); var popup = this.searchMenu.popup; popup.setAttribute("id", this.nodeIds.searchMenuPopup); popup.setAttribute("position", "after_end"); var counterMaxLength = options.campactMenuLengthPerLine; if (typeof counterMaxLength != "number" || 3 > counterMaxLength || counterMaxLength > 10) counterMaxLength = 5; var counter = 0; var hBox; function itemCreateCampact(engine, last) { if(counter == 0) { hBox = document.createElementNS(XULNS, "hbox"); let item = document.createElementNS(XULNS, "spacer"); //item.setAttribute("style", "width: 2em"); item.setAttribute("campactMenu", "true"); hBox.appendChild(item); } counter++; var item = document.createElementNS(XULNS, "menuitem"); item.engine = engine; item.setAttribute("class", "menuitem-iconic"); item.setAttribute("tooltiptext", engine.name); //item.setAttribute("src", engine.iconURI.spec); var image = document.createElementNS(XULNS, "image"); image.setAttribute("src", engine.iconURI.spec); item.appendChild(image); //item.setAttribute("style", "max-width: 2em"); item.setAttribute("campactMenu", "true"); hBox.appendChild(item); if (counter == counterMaxLength || last) { popup.appendChild(hBox); counter = 0; } } var separator = {}; function itemCreate(engine, reason) { var item = document.createElementNS(XULNS, "menuitem"); item.setAttribute("class", "menuitem-iconic"); item.engine = engine; if (reason && !separator[reason]) { /*let sep = separator[reason] = document.createElementNS(XULNS, "menuseparator"); sep.setAttribute(reason, "true"); popup.appendChild(sep); let item = document.createElementNS(XULNS, "label"); //item.setAttribute("class", "menuitem-iconic"); item.setAttribute("value", _localize(reason) + ":"); item.setAttribute("style", "padding-left: 2em"); popup.appendChild(item);*/ if (!separator["menuseparator"]) { let sep = separator["menuseparator"] = document.createElementNS(XULNS, "menuseparator"); popup.appendChild(sep); } let subMenu = separator[reason] = document.createElementNS(XULNS, "menu"); subMenu.setAttribute("class", "menu-iconic"); subMenu.setAttribute("label", _localize(reason)); subMenu.setAttribute(reason, "true"); subMenu.popup = subMenu.appendChild(document.createElementNS(XULNS, "menupopup")); popup.appendChild(subMenu); } if (reason == "searchBySite") { item.setAttribute("label", engine.name); if (options.searchBySite.iconsOn) { item.setAttribute("src", engine.iconURI.spec); } item.setAttribute(reason, "true"); } else if (reason == "searchImageByText" || reason == "searchInCache") { item.setAttribute("label", engine.name); item.setAttribute("src", engine.iconURI_spec); item.setAttribute(reason, "true"); } else { item.setAttribute("label", engine.name); item.setAttribute("src", engine.iconURI.spec); } //popup.appendChild(item); if (reason) { let subMenu = separator[reason]; subMenu.popup.appendChild(item); } else popup.appendChild(item); } for (let i in engines) { if (options.hideDefaultEngineInPopupSubMenu && this.param.isPinnedEngine && engines[i].name == pinnedEngineName || options.hideDefaultEngineInPopupSubMenu && !this.param.isPinnedEngine && engines[i].name == searchService[rEngine].name) { continue; } if (options.campactMenu) itemCreateCampact(engines[i], i == engines.length-1); else itemCreate(engines[i]); } function searchBySite_itemCreate() { var namesList = []; if (options.searchBySite.useDefaultNamesList) { let defaultNamesList = [ ["Google", ["Google"]], ["Yandex", ["Yandex", "Яндекс"]], ["Yahoo", ["Yahoo"]], ["Bing", ["Bing"]], ["DuckDuckGo", ["DuckDuckGo"]] ]; namesList = namesList.concat(defaultNamesList); } if (options.searchBySite.addCustomNames && Array.isArray(options.searchBySite.customNamesList)) { namesList = namesList.concat(options.searchBySite.customNamesList); } //let i_skips = []; function isNameExist(names, engine) { for (let i in names) { if (names[i] != engine && i != names.length-1) continue; else if (names[i] == engine) return true; return false; } } namesList.forEach(function(elem) { for (let i in engines) { if (/*i_skips.indexOf(i) != -1 ||*/ !(elem[1].some(function(listName) listName == engines[i].name)) /*!isNameExist(elem[1], engines[i].name)*/ /*elem[1].indexOf(engines[i].name) == -1*/) continue; itemCreate(engines[i], "searchBySite"); //i_skips.push(i); break; } }); } if (options.searchBySite.enable) { searchBySite_itemCreate(); } function searchImageByText_itemCreate() { var namesList = []; if (options.searchImageByText.useDefaultNamesList) { let defaultNamesList = [ [ "Google", "https://www.google.ru/search?tbm=isch&q=", "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAB41BMVEUAAAB7wUJ6wUJ6wUJ6wUL1nxn1oBn1oBn1nxl6wUJ6wUJ6wUJrvUT1mxr1nxn1nxlfu0Z8wkLznhv0mhp6wUJWuUdaukfLrSv4rhX1nxl5wUJyv0TQrCnyjhz1kyH2pRj1oBl7wkNbukfzjR3zkxv1liHuMDXuGTf2rxN7wUJeu0apuDfzjhz1nBvuNizwZi/3sxP2pBh9wkGvuTbvoRvuJy/xcC33qRhbl7F2uGOMwT94havnRTzuMjjwTTNRislRjcZ5uVpnvU0rk9Fhjr3aTkPuLTVQkM1PgsKHxD9/w0JfnKsAouPtHCTvQDRRkM1Qjstfn6p2jLHvOzDvQDVQkM1Rkc1RjstOh8Z/h6buLirtGyTvOzHvQDXwQDVPkcftPzdRkc1QkMxRkM0xlNLuNSzwQDXvQDVQkM1Rkc1QkM1Rkc3vQDTvQDXvQDXwQDV7wUL2oBr1nxn2oBl6wUJ7wkN9wkF9wkJ6wUP0lRv3qhf1oBn4rhX3qhb1nhp8wkL0nBruGjLuIzf3qRZ/w0JcukbuLCntIzl+wkFkvEbtGyVPhMRyv0QAmNfuLCruMDVRkc1ViccKltTvQDVRhcUAmdfvQDRRks5RiskcltTwQzdQkM07k9DtGyPvQzdQkMzvPzSgiRCBAAAAcHRSTlMAM9bsfmzq30TnaEIQF1b390JR9nP98873iO4nsPyvO3Vly1783sVB8T/5j+2SiIXyKITTeqTRY0ThWl/g9jAn2cBPbNfJFWXVrOjTge5EeeC0qPBsYPfUstjGvOP+dnp0+pmBR1GEikvl8paC8etfYXu9TgAAAAlwSFlzAAAASAAAAEgARslrPgAAAQJJREFUGNM1j8VWQzEARAco8NDiLsXdXQvF3d3dIQ2vOBR3CQSCFPtUUg7Mbu5i7hnY2Npp8Bd7B0cFToQQZxdXwE1xN9JVLVRiUsmah6eXNzVKQOFD1PUNXz//za0ASul2IKBRg4IREroThnAt1cmlCFMkoqJ3Y2LjEL+nSJBgTkxK3k9JPThMSz/KsMoyj0+ysoGc07PcvF97fsH5RSFQVHxZUmrt+quycvO1oeKmsur2rlqCGlaLuvqG+4dGNPFmCVpYK9D2+NQOdIhOoKubPff0vrz29Q8MvvGhYTAZC3sfGf34FFwIgTHLFxufmASmpme+OeeYnZtf+L+/uLS88gMT2kW5QAjbFwAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAxMi0wNC0wNlQxMDoxMzowNSswNDowMIQ8zwwAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMTItMDQtMDZUMTA6MTM6MDUrMDQ6MDD1YXewAAAAAElFTkSuQmCC" ], [ "Yandex", "http://images.yandex.ru/yandsearch?text=", "data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAQAABILAAASCwAAAAAAAAAAAAAAkdx+AJHc5wCR3P8Akdz/AJHc/wCR3P8Akdz/AJHc/wCR3P8Akdz/AJHc/wCR3JYArvIAAK7yAACu8gAArvIAA5Pd5wCr8P8ArvL/AK7y/wCu8v8ArvL/AK7y/wCu8v8ArvL/AK7y/wCu8v8CnOT/A5PdewCu8gAArvIAAK7yAAeV3/8AsPP/ALDz/wCw8/8AsPP/ALDz/wCw8/8AsPP/ALDz/wCw8/8AsPP/Aa3x/weW4P8Hld8PALDzAACw8wAMmOH///////////////////////////////////////////////////////////8GpOr/DJjhigCy9AAAsvQAEZzk//////8VpOn/Fbr1/xW69f+c4fv/ddb5/xW69f8VuvX/Fbr1/x2o6v//////AbT0/w+f5v8RnOQ8ALX1ABeg5v//////F6bp/xe48/8XuPP/hdf3/4XX9/80wPT/F7jz/xe48/8dqOr//////wC49v8IsPD/F6DmpQC49gAepOn//////wOe6P8DrvD/A67w/1/G8/9fxvP/TsLy/wSu8P8DrvD/CaHo//////8Au/j/ALv4/xep7f8epOlmJKjs//////9GvfD/ft78/37e/P///////////+f5/v+A3/z/ft78/03A8P//////AL75/wC++f8Huvf/JKjszyut7///////OLvw/2Pa/P9j2vz///////////+R5f3/Y9r8/2Pa/P8/vvD//////wDC+v8Awvr/CL74/yut788xsfL//////ya48P9F1fz/RdX8///////N8/7/RdX8/0XV/P9F1fz/Lrnw//////8Axfv/AMX7/yW29P8xsfJmOLX1//////8XtfD/KNH8/yjR/P/8/v//UNr9/yjR/P8o0fz/KNH8/x+48P//////AMn8/xTC+v84tfWlAMn8AD659///////ALHw/wCx8P8AsfD/Gbjw/wCx8P8AsfD/ALHw/wCx8P8JtPD//////wPM/v83u/j/Prn3PADN/gBDvfr///////////////////////////////////////////////////////////8lxvz/Q736igTR/gAE0f4ASMD8/xLV//8S1f//EtX//xLV//8S1f//EtX//xLV//8S1f//EtX//xLV//8Y0///R8D8/0jA/A8S1f8AEtX/AEzD/uRa2f//XNz//1zc//9c3P//XNz//1zc//9c3P//XNz//1zc//9c3P//Ucv+/0zD/nhc3P8AXNz/AFzc/wBPxf97T8X/5E/F//9Pxf//T8X//0/F//9Pxf//T8X//0/F//9Pxf//T8X//0/F/5Zc3P8AXNz/AFzc/wBc3P8AAA8AAAAHAAAAAwAAAAMAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAMAAAADAAAABwAAAA8AAA==" ] ]; namesList = namesList.concat(defaultNamesList); } if (options.searchImageByText.addCustomNames && Array.isArray(options.searchImageByText.customNamesList)) { namesList = namesList.concat(options.searchImageByText.customNamesList); } namesList.forEach(function(elem) { let engine = {}; engine.name = elem[0]; engine.imageLink = elem[1]; engine.iconURI_spec = elem[2]; itemCreate(engine, "searchImageByText"); }); } if (options.searchImageByText.enable) { searchImageByText_itemCreate(); } function searchInCache() { var namesList = []; if (options.searchInCache.useDefaultNamesList) { let defaultNamesList = [ [ "Google", "https://www.google.com/search?q=cache:", "data:image/x-icon;base64,AAABAAIAEBAAAAAAAAB9AQAAJgAAACAgAAAAAAAA8gIAAKMBAACJUE5HDQoaCgAAAA1JSERSAAAAEAAAABAIBgAAAB/z/2EAAAFESURBVDjLpZNJSwNBEIXnt4lE4kHxovgT9BDwJHqPy0HEEOJBiAuCRg+KUdC4QS4KrpC4gCBGE3NQ48JsnZ6eZ3UOM6gjaePhQU93v6+qq2q0pqgeJj2S8EdJT1hr0OxBtKCD5iEd8QxDYpvhvOBAuMDKURX9C9aPu4GA1GEVkzvMg10UBfYveWAWgYAP00V01fa+R9M2bA51wJvhIn3qR+ybt3D3JNQBE5sMjCIOLFpoHzOwdsLRO22qA6R6kiZiWwxUvy/PUQZIhYZ1vFM9cvcOOsYNdcBgysISdSJBnZjJMlR0Fw8vAp0xoz5gao/h+NZBy4i/10XGwrPA+hmvDyhVRG2Avu/LwcrkFADZa16L1h330w1RNgc3DiJzCpPYRm1bpveXX11clQR28xwblHpk1vq1iP/5mcoS0CoXDZiL0vsJ+dzfl+3T/VYAAAAASUVORK5CYIKJUE5HDQoaCgAAAA1JSERSAAAAIAAAACAIBgAAAHN6evQAAAK5SURBVFjDxVfrSxRRFJ9/Jta/oyWjF5XQm6D6EkHRgygIIgjUTcueVgqVWSRRkppEUQYWWB8ye1iGWilWlo/Ude489s7M6Zw7D9dlt53dmd29cFiWvXvO77x+51xpaaUsoSxBaUWZQ4ECy5xji2xKZDyCMlMEw6lCNiOSgwZKJK1SkcKeSealfP64t0mBjl4Ow39MkDUL0p2RSROOtqhZdeUEYM1pBl39XCg/fEeFtWcY7G9W4csvUxjlBkCsQ4Nt9QyWVfvT6RsAKXw3aoDGATZeYIt+W1kjw7cJG0RctWDTRebbKd8A6h5pwsDb70ba3w/eUr3wt/cmwgfw6Yft4TNMQaY7o1P2ncm4FT4ANQH/jQBJ2xv7kqIXEADDql8eS3+n8bku7oxNm+EDIM/dU92upb3T/NJGeaNbDx/AsbsLRUY5Xn92caWXY5d8RV6gWllxSg4fAEnTC90DQW13BLlgXR2D3dcUeDVkwOthA1bXspxILWcm3HdThcfvufB26LcJpkOEAz9NKI/lzqpSEC7feol5EWnpSeSlIxCALUkApmULdjUqxQVAQnl3D/X/yQda4QBEq2TYc12By091MQ17Bg3R88nHKlQbVmHvj89awNBLYrwT9zXY2aBAxTkGFdiSxP/Jp6FLDw+AS7GfsdJTJ2EqSO5khD43nGfBARy/ZxOQgZHe7GPM1jzUvChUtmnBAXQPcKGMJp3fdFGq6NByEhiAO4b/YptFfQJwNyQ/bZkVQGcf90Ja25ndIyrKBOa/f8wIpwi3X1G8UcxNu7ozUS7tiH0jBswwS3RIaF1w6LYKU/ML2+8sGnjygQswtKrVIy/Qd9qQP6LnO64q4fPAKpxyZIymHo1jWk6p1ag2BsdNwQMHcC+M5kHFJX+YlPxpVlbCx2mZ5DzPI04k4kUwHHdskU3pH76iftG8yWlkAAAAAElFTkSuQmCC" ], [ "Archive.org", "http://web.archive.org/web/*/", "data:image/x-icon;base64,AAABAAEAICAAAAEAIACoEAAAFgAAACgAAAAgAAAAQAAAAAEAIAAAAAAAABAAABILAAASCwAAAAAAAAAAAAABAQH/AQEB/wEBAf8BAQH/AgIC/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AQEB/wAAAP8BAQH/AQEB/wAAAP8CAgL/AgIC/wEBAf8CAgL/AQEB/wQEBP8EBAT/BAQE/wQEBP8EBAT/BAQE/wQEBP8EBAT/BQUF/wUFBf8EBAT/BAQE/wQEBP8EBAT/BAQE/wQEBP8EBAT/BAQE/wUFBf8EBAT/BAQE/wQEBP8FBQX/BQUF/wEBAf8AAAD/AQEB/wICAv8BAQH/AAAA/wAAAP8CAgL/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wEBAf8AAAD/AgIC/wEBAf8BAQH/BgYG/wAAAP+ysrL/4uLi/9/f3//g4OD/4ODg/9/f3//g4OD/4eHh/+Hh4f/h4eH/4eHh/+Hh4f/h4eH/4eHh/+Hh4f/h4eH/4ODg/+Hh4f/h4eH/4eHh/+Hh4f/h4eH/3d3d/97e3v8qKir/AQEB/wMDA/8BAQH/AgIC/wAAAP8EBAT/AAAA/7CwsP/Hx8f/w8PD/8fHx//FxcX/xcXF/8XFxf/Gxsb/xsbG/8bGxv/Gxsb/xsbG/8bGxv/Gxsb/xsbG/8bGxv/FxcX/xcXF/8bGxv/FxcX/xcXF/8XFxf/Dw8P/1NTU/ywsLP8AAAD/BAQE/wEBAf8AAAD/AAAA/wEBAf8BAQH/AAAA/0pKSv9NTU3/TExM/0xMTP9LS0v/TExM/01NTf9NTU3/TU1N/01NTf9NTU3/TU1N/01NTf9NTU3/TU1N/0xMTP9NTU3/TU1N/0xMTP9MTEz/SkpK/01NTf8SEhL/AAAA/wICAv8CAgL/BAQE/wEBAf8BAQH/AQEB/wAAAP8NDQ3//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////3l5ef8BAQH/BgYG/wAAAP8CAgL/AQEB/wEBAf8DAwP/AAAA/wMDA/8oKCj/LS0t/zExMf8tLS3/Kioq/ysrK/8sLCz/Ly8v/zAwMP8qKir/LCws/yoqKv8oKCj/LCws/zAwMP8rKyv/KSkp/ykpKf8qKir/MDAw/y8vL/8rKyv/ERER/wAAAP8BAQH/AgIC/wICAv8BAQH/AAAA/wEBAf8CAgL/AAAA/wUFBf+rq6v/7Ozs/3V1df8AAAD/AAAA/zs7O//j4+P/4uLi/zo6Ov8AAAD/AAAA/wQEBP+rq6v/7Ozs/4WFhf8AAAD/AAAA/zw8PP/k5OT/4+Pj/zk5Of8AAAD/BQUF/wAAAP8BAQH/AQEB/wAAAP8BAQH/AAAA/wMDA/8AAAD/ISEh/+Hh4f//////uLi4/wkJCf8CAgL/bW1t////////////bW1t/wICAv8CAgL/ISEh/+Hh4f//////wMDA/woKCv8CAgL/bW1t////////////bW1t/wEBAf8HBwf/AgIC/wEBAf8AAAD/AQEB/wEBAf8AAAD/AwMD/wAAAP8cHBz/2NjY//////+4uLj/BwcH/wAAAP9lZWX//f39//////9nZ2f/AAAA/wAAAP8ZGRn/2dnZ//////+3t7f/CAgI/wAAAP9oaGj//Pz8//7+/v9mZmb/AAAA/wYGBv8AAAD/AgIC/wEBAf8BAQH/AwMD/wICAv8BAQH/AAAA/xsbG//Y2Nj//////7i4uP8GBgb/AAAA/2pqav///////v7+/2VlZf8AAAD/AAAA/xsbG//Y2Nj//////7m5uf8HBwf/AAAA/2VlZf///////////2VlZf8AAAD/BQUF/wEBAf8DAwP/AQEB/wAAAP8AAAD/AAAA/wQEBP8AAAD/HR0d/9ra2v//////urq6/wgICP8AAAD/Z2dn////////////aGho/wAAAP8AAAD/HR0d/9vb2///////urq6/wcHB/8AAAD/aGho////////////aWlp/wAAAP8FBQX/AAAA/wEBAf8BAQH/AAAA/wAAAP8AAAD/AgIC/wAAAP8cHBz/29vb//////+4uLj/BgYG/wAAAP9mZmb///////////9nZ2f/AAAA/wAAAP8aGhr/2tra//////+4uLj/BwcH/wAAAP9lZWX///////////9mZmb/AAAA/wUFBf8AAAD/AAAA/wAAAP8AAAD/AAAA/wEBAf8DAwP/AAAA/xwcHP/a2tr//////7i4uP8GBgb/AAAA/2ZmZv///////////2dnZ/8AAAD/AAAA/xsbG//b29v//////7m5uf8JCQn/AAAA/2hoaP///////////2dnZ/8AAAD/BQUF/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wMDA/8AAAD/Ghoa/9nZ2f//////ubm5/wYGBv8AAAD/ZmZm////////////ZmZm/wAAAP8AAAD/Gxsb/9ra2v//////uLi4/wcHB/8AAAD/ZmZm//7+/v/+/v7/ZmZm/wAAAP8EBAT/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AwMD/wAAAP8aGhr/2NjY//////+6urr/BgYG/wAAAP9mZmb///////////9mZmb/AAAA/wAAAP8aGhr/2NjY//////+5ubn/BwcH/wAAAP9nZ2f//v7+//////9nZ2f/AAAA/wQEBP8AAAD/AAAA/wAAAP8AAAD/AAAA/wEBAf8DAwP/AAAA/xwcHP/a2tr//////7q6uv8HBwf/AAAA/2ZmZv///////////2ZmZv8AAAD/AAAA/xoaGv/Y2Nj//////7i4uP8GBgb/AAAA/2ZmZv/9/f3//v7+/2ZmZv8AAAD/BAQE/wAAAP8AAAD/AAAA/wAAAP8AAAD/AQEB/wMDA/8AAAD/HBwc/9vb2///////urq6/wgICP8AAAD/ZmZm////////////Z2dn/wAAAP8AAAD/Gxsb/9nZ2f//////urq6/wcHB/8AAAD/Z2dn////////////Z2dn/wAAAP8EBAT/AAAA/wAAAP8AAAD/AAAA/wAAAP8CAgL/BAQE/wAAAP8dHR3/29vb//////+8vLz/BwcH/wAAAP9nZ2f///////////9mZmb/AAAA/wAAAP8bGxv/29vb//////+6urr/BgYG/wAAAP9nZ2f///////////9mZmb/AAAA/wYGBv8AAAD/AQEB/wEBAf8AAAD/AQEB/wMDA/8DAwP/AAAA/x0dHf/a2tr/+fn5/7CwsP8GBgb/AAAA/2pqav/5+fn/+fn5/2tra/8AAAD/AAAA/xwcHP/Z2dn/+fn5/7m5uf8JCQn/AAAA/2xsbP/5+fn/+fn5/2tra/8AAAD/BwcH/wEBAf8CAgL/AQEB/wEBAf8CAgL/AwMD/wMDA/8AAAD/FxcX/9zc3P//////l5eX/wcHB/8DAwP/YGBg////////////XFxc/wQEBP8FBQX/GBgY/97e3v//////s7Oz/wkJCf8EBAT/XV1d////////////W1tb/wEBAf8EBAT/AQEB/wMDA/8DAwP/AAAA/wEBAf8DAwP/AQEB/wEBAf8AAAD/LS0t/1RUVP8hISH/AAAA/wAAAP8BAQH/TExM/0tLS/8AAAD/AAAA/wAAAP8AAAD/LS0t/1NTU/8bGxv/AAAA/wAAAP8BAQH/TExM/0tLS/8BAQH/AAAA/wEBAf8AAAD/AQEB/wAAAP8CAgL/AQEB/wEBAf8AAAD/BwcH/8XFxf++vr7/tbW1/729vf/Kysr/y8vL/8fHx/+2trb/tra2/8bGxv/Ly8v/yMjI/8rKyv+7u7v/tbW1/8DAwP/Ly8v/y8vL/8XFxf+1tbX/srKy/8nJyf9PT0//AAAA/wYGBv8CAgL/AAAA/wEBAf8AAAD/AQEB/wEBAf8KCgr//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////3Jycv8AAAD/BwcH/wEBAf8DAwP/AQEB/wAAAP8BAQH/AAAA/wgICP95eXn/fX19/319ff9/f3//gICA/4CAgP+BgYH/gICA/39/f/+BgYH/gYGB/4CAgP+AgID/gICA/4GBgf+AgID/gICA/4GBgf9/f3//fX19/3l5ef9+fn7/MjIy/wAAAP8DAwP/AQEB/wEBAf8AAAD/AQEB/wICAv8AAAD/BgYG/4+Pj/+Tk5P/j4+P/4uLi/+Hh4f/hISE/4ODg/+CgoL/gYGB/4KCgv+CgoL/goKC/4KCgv+BgYH/f39//39/f/+EhIT/hoaG/4eHh/+MjIz/kpKS/5WVlf8uLi7/AAAA/wMDA/8AAAD/AAAA/wEBAf8AAAD/AQEB/wQEBP8EBAT/SUlJ/1RUVP+BgYH/wsLC/////////////////////////////////////////////////////////////////////////////f39/6+vr/9iYmL/S0tL/xkZGf8AAAD/AwMD/wEBAf8DAwP/AQEB/wEBAf8BAQH/AAAA/wYGBv8AAAD/AAAA/wAAAP8AAAD/AQEB/wgICP9RUVH/paWl/8rKyv/a2tr/+fn5///////5+fn/2tra/8vLy/+ampr/T09P/xQUFP8DAwP/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AQEB/wEBAf8CAgL/AQEB/wICAv8BAQH/AAAA/wQEBP8EBAT/AwMD/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/xsbG/9nZ2f/i4uL/2dnZ/8ZGRn/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AgIC/wQEBP8CAgL/AgIC/wAAAP8DAwP/AgIC/wEBAf8AAAD/AQEB/wEBAf8AAAD/AgIC/wICAv8BAQH/AgIC/wMDA/8DAwP/AgIC/wQEBP8HBwf/AAAA/wAAAP8AAAD/AAAA/wAAAP8HBwf/BQUF/wMDA/8BAQH/AQEB/wMDA/8CAgL/AQEB/wEBAf8CAgL/AQEB/wAAAP8CAgL/AgIC/wICAv8AAAD/AAAA/wMDA/8CAgL/AwMD/wMDA/8BAQH/AQEB/wUFBf8DAwP/AgIC/wAAAP8EBAT/BwcH/wcHB/8HBwf/BAQE/wICAv8BAQH/AgIC/wEBAf8BAQH/AgIC/wICAv8BAQH/AAAA/wEBAf8AAAD/AgIC/wICAv8AAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=" ] ]; namesList = namesList.concat(defaultNamesList); } if (options.searchInCache.addCustomNames && Array.isArray(options.searchInCache.customNamesList)) { namesList = namesList.concat(options.searchInCache.customNamesList); } namesList.forEach(function(elem) { let engine = {}; engine.name = elem[0]; engine.cacheLink = elem[1]; engine.iconURI_spec = elem[2]; itemCreate(engine, "searchInCache"); }); } if (options.searchInCache.enable) { searchInCache(); } popup.gObj = this; //popup.setAttribute("oncommand", "if (!event.target.engine) return; var csObj = this.gObj || document.getElementById('contextSearchMiniByBunda1-context-popup').gObj; csObj.searchCommandHandler(event);"); popup.setAttribute("oncommand", "if (!event.target.engine || event.target.nodeName == 'menu') return; this.gObj.searchCommandHandler(event);"); popup.setAttribute("onclick", "checkForMiddleClick(this, event);"); }, searchByImageCommandHandler: function(event) { var inBg = options.loadInBackground || false; if (event.type == "click" && event.button && event.button == 1) { inBg = !inBg; } var searchByImageMenu = this.searchByImageMenu; var link = event.target.link; var imageLink = searchByImageMenu.imageSrc; if (imageLink.indexOf("data:") == 0) { this.searchByImageByData(imageLink, inBg); return; } else if (imageLink.indexOf("file:") == 0) { this.searchByImageByFile(imageLink, inBg); return; } else { imageLink = encodeURIComponent(imageLink) } var gBrowser = gBrowser || getBrowser(); gBrowser.loadOneTab(link + imageLink, { relatedToCurrent: true, inBackground: inBg }); }, // searchByImageByData() and searchByImageByFile() based on // Google Image Search 0.5 by Nishan Naseer // https://addons.mozilla.org/ru/firefox/addon/google-similar-images searchByImageByData: function(src, inBg) { var gBrowser = gBrowser || getBrowser(); //var tab = gBrowser.addTab(this.searchByImageMenu.popup.googleURL); var tab = gBrowser.loadOneTab(this.searchByImageMenu.popup.googleURL, { relatedToCurrent: true }); var newTabBrowser = gBrowser.getBrowserForTab(tab); newTabBrowser.addEventListener("load", function byData(e) { newTabBrowser.removeEventListener(e.type, byData, true); if (src) { try { var image_url; var sub; var form = newTabBrowser.contentDocument.getElementById("qbf"); var inputs = form.getElementsByTagName("input"); for (var k = 0; k < inputs.length; k++) { var i = inputs[k]; if (i.name && i.name == "image_url") { image_url = i; } if (i.type && i.type == "submit") { sub = i; } } image_url.value = src; sub.click(); src = null; } catch (ex) { } } }, true); if (!inBg) { getBrowser().selectedTab = tab; } }, searchByImageByFile: function(src, inBg) { //Canvas to get contents in base-64 var canvas = gContextMenu.target.ownerDocument.createElementNS(XHTMLNS, "canvas"); var image = new Image(); image.src = src; canvas.width = image.width; canvas.height = image.height; var ctx = canvas.getContext("2d"); ctx.drawImage(image, 0, 0); var dataURL = canvas.toDataURL("image/png"); var gBrowser = gBrowser || getBrowser(); //var tab = gBrowser.addTab(this.searchByImageMenu.popup.googleURL); var tab = gBrowser.loadOneTab(this.searchByImageMenu.popup.googleURL, { relatedToCurrent: true }); var newTabBrowser = gBrowser.getBrowserForTab(tab); newTabBrowser.addEventListener("load", function byFile(e) { newTabBrowser.removeEventListener(e.type, byFile, true); if (src) { try { var image_url; var sub; var form = newTabBrowser.contentDocument.getElementById("qbf"); var inputs = form.getElementsByTagName("input"); for (var k = 0; k < inputs.length; k++) { var i = inputs[k]; if (i.name && i.name == "image_url") { image_url = i; } if (i.type && i.type == "submit") { sub = i; } } image_url.value = dataURL; sub.click(); src = null; } catch (ex) { } } }, true); if (!inBg) { getBrowser().selectedTab = tab; } }, searchByImageMenuPopup: function(e) { var searchByImageMenu = this.searchByImageMenu; searchByImageMenu.hidden = !gContextMenu.onImage; var src = gContextMenu.mediaURL || gContextMenu.imageURL || gContextMenu.bgImageURL; if (!src || !(/^((ht|f)tps?:\/\/|data:image|file:)/.test(src))) { searchByImageMenu.hidden = true; return; } //var popup = document.getElementById("contextSearchMiniByBunda1-context-image-search-popup"); var popup = searchByImageMenu.popup; var items; if (!popup.items) { var itemsObj = popup.getElementsByTagName("menuitem"); popup.items = []; Array.slice(itemsObj).forEach(function(elem) { if (typeof elem == "object" && elem.nodeName == "menuitem" && elem.getAttribute("label") != "Google") popup.items.push(elem); }); items = popup.items; } else { items = popup.items; } if (/^(data:image|file:)/.test(src)) { items.forEach(function(elem) { elem.setAttribute("disabled", "true"); }); } else { items.forEach(function(elem) { elem.removeAttribute("disabled"); }); } searchByImageMenu.imageSrc = src; }, createSearchByImageMenu: function() { var menu = document.createElement("menu"); var insertMenu = document.getElementById("context-sep-copyimage"); insertMenu.parentNode.insertBefore(menu, insertMenu); this.searchByImageMenu = menu; menu.setAttribute("id", this.nodeIds.searchByImageMenu); menu.setAttribute("class", "menu-iconic"); menu.setAttribute("label", _localize("searchByImage")); menu.setAttribute("image", "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAK6wAACusBgosNWgAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNXG14zYAAAElSURBVDiNY/z//z8DJYCRkIKsthv/kRX9Z2BgmFalARdiIcaGKZXqcH5O+01U+ay2G3MYGBiSiXUmmofnsBDSjEUTMkiBe2Eq1JnZ7TcZBHhZGNythBl0lLkZODmYGX7++sdw/sZnhl3H3zF8+voHwwsYFkR5ijNICLMzTF31hOHnr38MHGxMDJlhMgwv3vxkWL7jJYpaJmzu0lTigWtmYGBg+PHrH8P0VU8YtJV5MNRiNYCfmxmuGQZ+/PrHwMmOqRyrAX///WfgYEOV4mBjwjAUpwHHL31iyA6XgRvCwcbEkBUmw3DuxmcMtVgDkYONicHLVoTBSJOXgYONieHHz38Ml+98Ydh88DXDtx//CBtACmBiYGCYS4H+OYyU5kasgUgKAADN8WLFzlj9rgAAAABJRU5ErkJggg=="); this.searchByImageMenu.popup = menu.appendChild(document.createElementNS(XULNS, "menupopup")); var popup = this.searchByImageMenu.popup; popup.setAttribute("id", this.nodeIds.searchByImageMenuPopup); popup.googleURL = "https://www.google.com/searchbyimage"; var namesList = []; if (options.searchByImage.useDefaultNamesList) { let defaultNamesList = [ [ "Google", "https://www.google.com/searchbyimage?image_url=", "data:image/x-icon;base64,AAABAAIAEBAAAAEAIABoBAAAJgAAACAgAAABACAAqBAAAI4EAAAoAAAAEAAAACAAAAABACAAAAAAAAAEAAASCwAAEgsAAAAAAAAAAAAA9IVCSvSFQuf0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hULk9IVCSvSFQub0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQuf0hUL/9IVC//SFQv/0hUL/9Y1O//rIq//+7+f//eXX//vUvf/7z7X/96Fu//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//vYwv/97OH/9ZRZ//SFQv/0hUL/9IhG//zbx//3om7/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/97uX/+buW//SFQv/0hUL/9IVC//SFQv/5upT/+9O6//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/+b6b//zezP/0iEf/9IVC//SFQv/1klf//ezh//vPtP/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/3qXr/+siq//m8lv/5wqD//vTu//3t4//1klb/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0h0b//vbx//zi0//1j1H/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/2nmn/+bmS/////v/4sIX/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/5uJH///v5//eoef/1jU//+82y//afav/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL//vXw//vOs//0hUL/9IVC//ekcf/96+D/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//728v/4sIX/9IVC//SFQv/4s4n///v4//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/6yKn/+byX//SFQv/0hkT//eTV//vWv//0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IZE//m6lP/5u5b//OHQ///+/f/6y6//96d3//SFQv/0hUL/9IVC//SFQv/0hULm9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hULm9IVCSfSFQub0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hULm9IVCSQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAEAAAAABACAAAAAAAAAQAAASCwAAEgsAAAAAAAAAAAAA9IVCAPSFQif0hUKt9IVC8vSFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQvL0hUKt9IVCJ/SFQgD0hUIo9IVC7/SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hULv9IVCKPSFQq30hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUKt9IVC8fSFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQvP0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9YtL//i2jv/828f//vLr///7+P///Pv//vTu//3n2v/6zbH/96Nw//SFQ//0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//ekcv/+8+z////////////+9fD/+9K5//m9mf/4to7/+buV//vSuf/++PT//OPT//aYYP/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/2l13///r3/////////fv/+b2Z//SIRv/0hUL/9IVC//SFQv/0hUL/9IVC//WNT//84M///vXv//aZYf/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//vPtP////////////i0i//0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//WQUv///Pr//OPU//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL//eTV///////+9O7/9IVD//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//3m2P//////9ppi//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/718H///////3s4f/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL//vDn///////4soj/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//erff////////38//WTWP/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//iziv////////////iwhf/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//rMsP///////eXW//WSVv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/4sYb///z7/////////Pv/9ZFV//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//ixhv/+8Of//vn1//rMsP/4rH//9plh//WQUv/1j1L/+s2x//////////////////m9mf/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SGQ//2nmn/+buW//vNsv/82sb//e3j/////////////////////v/5wZ//9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/83Mj////////////++fb/+K+C//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9ZRZ/////////////vTt//aaYv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/1lFr////////////6xqf/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//ehbf/70bj//end//3o2////v3///////3l1//0iEb/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/5wqD////////////96t7/96Z2//WOUP/2nWf//NvH//zcyP/1i0z/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/96l6/////////////vLr//WPUf/0hUL/9IVC//SFQv/0h0b//end//3k1f/0iUn/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/8387////////////4sYf/9IVC//SFQv/0hUL/9IVC//SFQv/6w6L///////nBn//0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC///69////////vj1//SIR//0hUL/9IVC//SFQv/0hUL/9IVC//m+mv///////e3j//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL///r3///////8387/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/+syw///////++fb/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/95NX///////vUvP/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/97OH///////7y6//0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//i2jv///////N/O//SFQv/0hUL/9IVC//SFQv/0hUL/96Nx////////////+s2x//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IdF//zh0P//+/j/9ZJW//SFQv/0hUL/9IVC//SKSv/96t7///////738v/1k1f/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9YxN//vUvf/96+D/96Z0//WNT//3om///ebY/////////Pv/+LKI//WVW//0h0X/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//agbP/7zbL//enc//749P////////////////////////////3r4P/3p3f/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hULx9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC8/SFQq30hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUKt9IVCJ/SFQu/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC7/SFQif0hUIA9IVCJfSFQq30hULx9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC8fSFQq30hUIl9IVCAIAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAB" ], [ "Yandex", "http://images.yandex.ru/yandsearch?rpt=imagedups&text=&img_url=", "data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAQAABILAAASCwAAAAAAAAAAAAAAkdx+AJHc5wCR3P8Akdz/AJHc/wCR3P8Akdz/AJHc/wCR3P8Akdz/AJHc/wCR3JYArvIAAK7yAACu8gAArvIAA5Pd5wCr8P8ArvL/AK7y/wCu8v8ArvL/AK7y/wCu8v8ArvL/AK7y/wCu8v8CnOT/A5PdewCu8gAArvIAAK7yAAeV3/8AsPP/ALDz/wCw8/8AsPP/ALDz/wCw8/8AsPP/ALDz/wCw8/8AsPP/Aa3x/weW4P8Hld8PALDzAACw8wAMmOH///////////////////////////////////////////////////////////8GpOr/DJjhigCy9AAAsvQAEZzk//////8VpOn/Fbr1/xW69f+c4fv/ddb5/xW69f8VuvX/Fbr1/x2o6v//////AbT0/w+f5v8RnOQ8ALX1ABeg5v//////F6bp/xe48/8XuPP/hdf3/4XX9/80wPT/F7jz/xe48/8dqOr//////wC49v8IsPD/F6DmpQC49gAepOn//////wOe6P8DrvD/A67w/1/G8/9fxvP/TsLy/wSu8P8DrvD/CaHo//////8Au/j/ALv4/xep7f8epOlmJKjs//////9GvfD/ft78/37e/P///////////+f5/v+A3/z/ft78/03A8P//////AL75/wC++f8Huvf/JKjszyut7///////OLvw/2Pa/P9j2vz///////////+R5f3/Y9r8/2Pa/P8/vvD//////wDC+v8Awvr/CL74/yut788xsfL//////ya48P9F1fz/RdX8///////N8/7/RdX8/0XV/P9F1fz/Lrnw//////8Axfv/AMX7/yW29P8xsfJmOLX1//////8XtfD/KNH8/yjR/P/8/v//UNr9/yjR/P8o0fz/KNH8/x+48P//////AMn8/xTC+v84tfWlAMn8AD659///////ALHw/wCx8P8AsfD/Gbjw/wCx8P8AsfD/ALHw/wCx8P8JtPD//////wPM/v83u/j/Prn3PADN/gBDvfr///////////////////////////////////////////////////////////8lxvz/Q736igTR/gAE0f4ASMD8/xLV//8S1f//EtX//xLV//8S1f//EtX//xLV//8S1f//EtX//xLV//8Y0///R8D8/0jA/A8S1f8AEtX/AEzD/uRa2f//XNz//1zc//9c3P//XNz//1zc//9c3P//XNz//1zc//9c3P//Ucv+/0zD/nhc3P8AXNz/AFzc/wBPxf97T8X/5E/F//9Pxf//T8X//0/F//9Pxf//T8X//0/F//9Pxf//T8X//0/F/5Zc3P8AXNz/AFzc/wBc3P8AAA8AAAAHAAAAAwAAAAMAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAMAAAADAAAABwAAAA8AAA==" ], [ "TinEye", "http://www.tineye.com/search/?pluginver=firefox-1.0&url=", "data:image/x-icon;base64,AAABAAEAEBAAAAAAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAACxeDVItHk157iAO//WtW7/482G/+XOhv/lzYL/1L98/5mTcf8UKUP/CwsM/xwcG/8AAAD/AAAA/wAAAOcAAA5ItHo25LV7Nv+1ezb/tXs2/8GPSf/EoGj/s5hw/6KPdf93bWT/ZFdK/2daTP9hVEj/XU9C/zIpH/8EAgH/AAAA5LV7Nv+1ezb/tXs2/7V7Nv+1ezb/uIA+/8eea//Wtof/48eU/+PKkv/iyJP/4MeV/9u/kf/HqHz/rI1p/3tmT/+1ezb/tXs2/7V7Nv+1ezb/zKV0/+PKlP/hxXr/zbFk/8esYf/VuW7/3sFz/+LFdf/gw3P/48Z3/+nPjv/dwJD/tXs2/7V7Nv+1ezb/y6Nx/9/Gg/+NekT/V0wv/5uSfP95cmH/JiES/zAqGv86Mh3/W08v/3lpQP+Wg03/zLFn/7V7Nv+1ezb/uoVH/8myg/+VgUr/AAAA/2xpZf/i4+X/+fn5/0JAO/8AAAD/LCkl/768uf+/vr3/Mi8q/x0ZEP+2fDf/tXs2/6WGX/+pklP/JyES/0dFQP96eHX/W1tc//////9ua2X/DAoH/6Wim/+EhIX//////6ejnP8AAAD/wo1F/8GLQ//Conf/tZ1e/wYDAP9pZmH/6+vs/9/f3/////3/Pjoz/zo2Lf/Jycb/UlJT//////+xraX/AAAA/8OORv/Djkb/1bF+/821cf83MSD/MC4s//n49P//////l5OJ/wMCAP9IRDr/////////////////ZGBW/wAAAP/Djkb/w45G/8qkcP+sllr/wKtw/zw5Mf9MSUb/VlNM/wIBAP8AAAD/FxUP/9PQyv/8+/j/rKig/wkHA/8AAAD/w45G/8OORv+1jlj/l4hm/8etZv/QuHf/m4xk/21hSP9PRjX/Mi0j/xsYFf87NzD/VFBK/xUVFf8FBwz/CQsQ/8OORv/Djkb/g2I1/8Oea//Mt4z/uJxU/56hhv92nLj/l6ut/56poP+gpJL/mJeC/5aMbP+bjmv/m49t/52Qbv/Djkb/uItP/05PUP+zjlv/yptc/9C3jP9gYFP/ABVH/wAzc/8IP4T/FUuM/xhSmP99lZ3/5sRv/9S6cf/Lsmr/w45G/1B7rv8bbdT/LWy5/8OORv/Djkf/yqRw/zswIP8AAAD/AAAA/wAAAP8AAAD/Fyk8/5CKZ/+ahU3/modW/8GNReeEj5r/L37g/0Jxqf/Cjkf/w45G/8OORv/Fllb/clYw/zoqFf8hGQ3/IhwU/x4ZFf9HRUD/vaJ5/86pdee+ikU/woxEyZ6HZ/+8jEz/w45G/8OORv/Djkb/w45G/8OORv/Djkb/v4tF/8ORTf/GlFD/xJBJ/8KMRMm+ikU/gAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAE=" ] ]; namesList = namesList.concat(defaultNamesList); } if (options.searchByImage.addCustomNames && Array.isArray(options.searchByImage.customNamesList)) { namesList = namesList.concat(options.searchByImage.customNamesList); } function itemCreate(name, link, image) { var item = document.createElementNS(XULNS, "menuitem"); item.setAttribute("class", "menuitem-iconic"); item.setAttribute("src", image); item.setAttribute("label", name); item.link = link; popup.appendChild(item); } namesList.forEach(function(elem) { itemCreate(elem[0], elem[1], elem[2]); }); var contextMenu = this.contextMenu; popup.gObj = this; popup.setAttribute("oncommand", "this.gObj.searchByImageCommandHandler(event);"); popup.setAttribute("onclick", "checkForMiddleClick(this, event);"); } } contextSearcherObj.init(); })(); |
bunda1 > 13-11-2015 23:01:20 |
villa7 |
villa7 > 14-11-2015 12:52:37 |
bunda1 |
Dumby > 14-11-2015 13:38:19 |
villa7 пишет
Пока ждёшь ответа, может положи в начало кода Context Search |
villa7 > 14-11-2015 14:51:27 |
Dumby И почему то не работает "Быстрый поиск по мере набора текста", тишина полная. Блин, задолбал я уже всех. Но без нормально работающего поиска хреново. |
bunda1 > 14-11-2015 18:46:08 |
villa7 пишет
В инициализацию тогда можно будет кнопку отключать - включать. 14-11-2015 18:48:11 villa7 пишет
Мда, придётся делать но не вижу компактное решение. |
Dumby > 15-11-2015 14:03:25 |
villa7 пишет
Ну, если прям совсем хреново, то попробуй пока добавить в конец скрытый текст Выделить код Код:gFindBar._quickFindTimeoutLength = 4500; function onBrowserKeypress(msg) {msg.target == gBrowser.selectedBrowser && gFindBar._onBrowserKeypress(msg.data);} messageManager.addMessageListener("Findbar:Keypress", onBrowserKeypress); addDestructor(() => messageManager.removeMessageListener("Findbar:Keypress", onBrowserKeypress)); |
villa7 > 15-11-2015 14:49:51 |
Dumby |
bunda1 > 15-11-2015 16:36:21 |
Спасибо Dumby |
villa7 > 27-01-2016 19:13:36 |
В 44 не вставляются слова в поиск. |
bunda1 > 27-01-2016 20:39:34 |
villa7 пишет
Неплохо бы пример. |
villa7 > 27-01-2016 22:28:25 |
bunda1 |
villa7 > 27-01-2016 23:10:28 |
bunda1 скрытый текст Выделить код Код:/*======= Auto context menu on selection =======*/ this.setAttribute("type","checkox"); var prefs=Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch); try{ var cb_autoContextmenu = prefs.getBoolPref("cb_autoContextmenu" ); }catch(e){ prefs.setBoolPref("cb_autoContextmenu",true ); } this.checked = prefs.getBoolPref("cb_autoContextmenu" ); var autoContextmenu = { exec: function(event) { var prefs=Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch); if (event.button != 0) return; if( !prefs.getBoolPref("cb_autoContextmenu" ) ) return; selection = document.commandDispatcher.focusedWindow.getSelection(); if (!selection.isCollapsed && (selection.toString() != autoContextmenuPrevSelection)) { autoContextmenuPrevSelection = document.commandDispatcher.focusedWindow.getSelection().toString(); var mouseEvent = document.createEvent('MouseEvents'); if (mouseEvent) { mouseEvent.initMouseEvent('contextmenu', true, true, window, 1, event.screenX, event.screenY, event.clientX, event.clientY, false, false, false, false, 2, null); event.target.dispatchEvent(mouseEvent); } } } }; var autoContextmenuPrevSelection = null; document.addEventListener('mouseup', function(event) { autoContextmenu.exec(event); }, false); Да, и ещё у меня стоит эта кнопка https://forum.mozilla-russia.org/viewto … 50#p703450 Вот они как то и конфликтуют между собой. |
bunda1 > 28-01-2016 22:09:59 |
villa7 |
villa7 > 28-01-2016 22:56:07 |
bunda1 |
voqabuhe > 29-01-2016 21:17:09 |
bunda1 |
bunda1 > 01-02-2016 12:14:26 |
voqabuhe пишет
|
zbf > 29-03-2016 19:59:34 |
bunda1 |
bunda1 > 30-03-2016 20:43:58 |
zbf пишет
Ctrl+ snift+ f, открыть панель поиска с чистой поисковой формой. |
zbf > 31-03-2016 08:49:29 |
bunda1 bunda1 пишет
С гор.клавишами все понятно, но хотелось бы обойтись „как бы без них” - кнопкой в панели дополнений... |
bunda1 > 31-03-2016 21:30:31 |
zbf пишет
Ну тогда так: Выделить код Код:// Настройка функций кликов мыши для кнопки ................................ 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 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(function(pref) cbu.setPrefs(pref, false) ); ["FindBar.version,15", "FindBar.CloseTimer,7", "ui.textHighlightBackground,#ef0fff", "FindBar.Highlight.value,"] .forEach(function(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(function( 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", function(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", function(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(function(){ 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(function(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(function() { 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(function() 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, function(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(function() fff.removeAttribute("flash"), 600); } lastCurHit = curHit; }; updateHits(); // FindBar, поиск колесиком мыши ................................ addEventListener('DOMMouseScroll', function(e) { gFindBar.onFindAgainCommand( e.detail < 0 ); updateHits("flash"); }, false, gFindBar ); // Отслеживать клики на панели поиска ................................ addEventListener("mousedown", function(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 == 'Найти:') { // кнопка 'Найти:' < FF24 e.button ? clearFindField() : gFindBar.onFindAgainCommand(false); updateHits("flash"); } if ( targ.getAttribute('oncommand').startsWith("onFind") ) { // кнопки next, previous setTimeout(updateHits, 0, "flash"); } }, false, gFindBar ); // Двойной клик на панели поиска включает и выключает автовыделение или стандартную подсветку текста ................................ addEventListener("dblclick", function(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(function() 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(function() { 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(function(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(function() { 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(function() { 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 = function() { removeEventListener('mouseover', closeFind, false, window ) }; } }; // Переключать панель поиска двойным средним кликом на странице ................................ addEventListener("mouseup", function(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(function() { self.flag = false }, 600); // сбросить флаг по таймеру }, false, gBrowser ); // Сочетания клавиш для управление поиском на странице ................................ addEventListener('keydown', function(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+ 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(function() { 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: ""; } // удалить и запустить подсветку совпадений .... var finder = gBrowser.finder || gFindBar; var lighted = (finder._highlightDoc || finder._highlight).bind(finder); 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, function(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(function() gBrowser.removeProgressListener( listener ) ); // Обработчики следят за панелью поиска, запускают автовыделение и другие функции ................................ addEventListener("drop", function(e) { Highlight("hits", "greenLight") }, false, gFindBar._findField ); addEventListener("input", function() { Highlight("hits", "greenLight") }, false, gFindBar._findField ); gFindBar.watch("hidden", function( prop, oldV, hidden ) { setTimeout(function() { Highlight("hits", "greenLight"); autoClose() }, 10); if ( !hidden && cbu.getPrefs("FindBar.autoclear") ) { // открывать без выделенного текста document.activeElement.blur(); gFindBar._findField.value = ''; gFindBar._findField.focus(); } return hidden; }); // Добавляем подменю в контекстного меню на странице для выделенного текста ................................ (function() { var contextMenu = document.getElementById("contentAreaContextMenu"); var menu = document.createElement("menu"); menu.setAttribute("label", "Find"); contextMenu.insertBefore( menu, document.getElementById("context-sep-properties") ); addEventListener("popupshowing", function() { menu.hidden = !cbu.getPrefs("FindBar.contextFindWords") || !gContextMenu.isTextSelected; }, false, contextMenu ); addDestructor(function() contextMenu.removeChild(menu) ); var array = [ { label:"Найти на странице", func: findToContex }, { label:"Выделить текст на странице", func: highlightSel }, { label:"Автовыделение, добавить текст", func: addSel } ]; var menuPopup = menu.appendChild( document.createElement("menupopup") ); array.forEach(function( m ) { var mItem = document.createElement("menuitem"); mItem.setAttribute("label", m.label); mItem.func = m.func; menuPopup.appendChild( mItem ); }); addEventListener("command", function(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'); })(); // Очистить поле текстового ввода на Findbar ................................ function clearFindField() { setTimeout(function() { 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, false, "", null, ""); Highlight(); }; // Получить выделенный текст из страницы или из буфера обмена, если нет текста получить false .......... function getSelect() { var sel = document.commandDispatcher.focusedWindow.getSelection().toString(); // из страницы if (sel == '') { var el = document.commandDispatcher.focusedElement; // из текстового поля if ( el && el.textLength ) sel = el.value.substring(el.selectionStart, el.selectionEnd); } if (sel == '') sel = gClipboard.read(); // из буфера обмена if (sel == '') alertsService.showAlertNotification(self.image, self.label, "Выделите или скопируйте текст!", false, "", null, ""); return (sel == '') ? false : sel.toString().replace(/^\s+|\s+$/g,""); // убираем пробелы с концов текста }; // Запустить поиск через Toggle Find+3 если нажать в главном меню на пункт меню 'Найти' ................................ addEventListener("command", function() { 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(function() check.parentNode.removeChild( check ) ); check.addEventListener("command", function() { 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(function() search.parentNode.removeChild( search ) ); search.addEventListener("click", function(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(function() paste.parentNode.removeChild(paste) ); paste.addEventListener("click", function(e) { if ( e.button == 0 ) { if ( !getSelect() ) return; gFindBar._findField.value = getSelect(); // вставить текст Highlight("hits", "greenLight"); }; if ( e.button == 2 ) setTimeout(function() 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; }\ ')); const sss = Cc["@mozilla.org/content/style-sheet-service;1"].getService(Ci.nsIStyleSheetService); sss.loadAndRegisterSheet(uri, 0); addDestructor(function() { sss.unregisterSheet(uri, 0) }); Включи в меню кнопки: Открывать панель поиска с чистой поисковой формой |
zbf > 01-04-2016 09:19:27 |
bunda1 bunda1 пишет
Большое Вам спасибо- это то, что нужно! |
Kamui > 06-06-2016 15:53:11 |
bunda1 скрытый текст Выделить код Код:const forceFind = false, forceFindCS = true; // Приклеить элемент findbar к странице( #appcontent ) ................................ const fbID = "FindToolbar-m"; delete window.gFindBar; window.gFindBar = document.getElementById(fbID); if (!gFindBar) { gFindBar = gBrowser.parentNode.insertBefore(document.createElement("findbar"), gBrowser); gFindBar.id = fbID; gFindBar.setAttribute("browserid", "content"); gFindBar.clientTop; delete window.gFindBarInitialized; window.gFindBarInitialized = true; gFindBar._selectionMaxLen = 1000; // лимит символов для поиска } // Ctrl+F, показать - скрыть панель поиска .................................... function toggleFindbar() gFindBar.hidden ? gFindBar.onFindCommand() : gFindBar.close(); addEventListener("keydown", function(e) e.keyCode == e.DOM_VK_F && e.ctrlKey && !e.altKey && !e.shiftKey && !e.preventDefault() && toggleFindbar() , false); this.onclick = function(e) { if (!e.button) toggleFindbar() }; // Показать количество совпадений на панели поиска ................................ const textbox = gFindBar.getElement("findbar-textbox"), nrm = Ci.nsISelectionController.SELECTION_NORMAL, labID = "hits-m"; var lab = document.getElementById(labID); if (!lab) { lab = textbox.parentNode.insertBefore(document.createElement("label"), textbox); lab.id = labID; } var curHit, allHits; function updateHits(arg) { if (gFindBar.hidden) return; var word = textbox.value; if (!word) { lab.value = "0/0"; textbox.removeAttribute("status"); return; } var win = arg instanceof Window && arg || content; if (win == content) curHit = allHits = 0; var findbarFinder = gFindBar._browser.finder; var controller = findbarFinder._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 finder = Cc["@mozilla.org/embedcomp/rangefind;1"].createInstance().QueryInterface(Ci.nsIFind); finder.caseSensitive = gFindBar._shouldBeCaseSensitive(word); while ((retRange = finder.Find(word, searchRange, startPt, endPt))) { allHits++; if (!curHit) { var sel = controller.getSelection(nrm), range; if (sel.toString()) range = sel.getRangeAt(0); else { var editableNode = findbarFinder._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, function(frame) updateHits(frame)); } if (win != content) return; allHits ? textbox.removeAttribute("status") : textbox.setAttribute("status", "notfound"); forceFind && !curHit && allHits && gFindBar._find(); lab.value = curHit + "/" + allHits; } updateHits(); gFindBar.updateHits = updateHits; function insUpd(methodName, code) { const method = gFindBar[methodName]; gFindBar[methodName] = Function("arguments.callee.method.apply(this, arguments);" + (code || "") + " this.updateHits();"); gFindBar[methodName].method = method; addDestructor(function() gFindBar[methodName] = method); } insUpd("_find"); insUpd("_findAgain"); insUpd("_setCaseSensitivity", forceFindCS && " this._find();"); const progressListener = { onStateChange: function(wpr, req, state) state & Ci.nsIWebProgressListener.STATE_STOP && setTimeout(updateHits, 320), onLocationChange: function(wpr, req) !req && updateHits() }; addDestructor(function() gBrowser.removeProgressListener(progressListener)); function onFindbar() { gBrowser[(gFindBar.hidden ? "remove" : "add") + "ProgressListener"](progressListener); !gFindBar.hidden && updateHits(); } onFindbar(); const observer = MutationObserver(onFindbar); observer.observe(gFindBar, { attributes: true, attributesFilter: ["hidden"] }); addDestructor(function() observer.disconnect()); Так вот пара недостатков есть: если я выделяю текст и нажимаю ctrl+f то выделенный текст не ищется, хотя в стандартной поисковой строке ищется. Еще если я например искал какой-то текст, а потом закрыл панель поиска, а затем открыл ее по ctrl+f, то панель открывается с невыделеным текстом, хотя в стандартной панели текст выделен. Можешь помочь с этими мелочами? |
Garider > 11-06-2016 13:04:03 |
bunda1 |
bunda1 > 11-06-2016 13:38:04 |
Garider пишет
|
Garider > 11-06-2016 15:10:20 |
bunda1 |
bunda1 > 13-06-2016 11:35:18 |
Kamui пишет
Выделить код Код:const forceFind = false, forceFindCS = true; // Приклеить элемент findbar к странице( #appcontent ) ................................ const fbID = "FindToolbar-m"; delete window.gFindBar; window.gFindBar = document.getElementById(fbID); if (!gFindBar) { gFindBar = gBrowser.parentNode.insertBefore(document.createElement("findbar"), gBrowser); gFindBar.id = fbID; gFindBar.setAttribute("browserid", "content"); gFindBar.clientTop; delete window.gFindBarInitialized; window.gFindBarInitialized = true; gFindBar._selectionMaxLen = 1000; // лимит символов для поиска setTimeout(function() { 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 ); } // Ctrl+F, показать - скрыть панель поиска .................................... function toggleFindbar() { if (gFindBar.hidden) { gFindBar.onFindCommand(); setTimeout(function() { gFindBar._find() }, 50) } else gFindBar.close(); }; addEventListener("keydown", function(e) e.keyCode == e.DOM_VK_F && e.ctrlKey && !e.altKey && !e.shiftKey && !e.preventDefault() && toggleFindbar() , false); this.onclick = function(e) { if (!e.button) toggleFindbar() }; // Показать количество совпадений на панели поиска ................................ const textbox = gFindBar.getElement("findbar-textbox"), nrm = Ci.nsISelectionController.SELECTION_NORMAL, labID = "hits-m"; var lab = document.getElementById(labID); if (!lab) { lab = textbox.parentNode.insertBefore(document.createElement("label"), textbox); lab.id = labID; } var curHit, allHits; function updateHits(arg) { if (gFindBar.hidden) return; var word = textbox.value; if (!word) { lab.value = "0/0"; textbox.removeAttribute("status"); return; } var win = arg instanceof Window && arg || content; if (win == content) curHit = allHits = 0; var findbarFinder = gFindBar._browser.finder; var controller = findbarFinder._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 finder = Cc["@mozilla.org/embedcomp/rangefind;1"].createInstance().QueryInterface(Ci.nsIFind); finder.caseSensitive = gFindBar._shouldBeCaseSensitive(word); while ((retRange = finder.Find(word, searchRange, startPt, endPt))) { allHits++; if (!curHit) { var sel = controller.getSelection(nrm), range; if (sel.toString()) range = sel.getRangeAt(0); else { var editableNode = findbarFinder._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, function(frame) updateHits(frame)); } if (win != content) return; allHits ? textbox.removeAttribute("status") : textbox.setAttribute("status", "notfound"); forceFind && !curHit && allHits && gFindBar._find(); lab.value = curHit + "/" + allHits; } updateHits(); gFindBar.updateHits = updateHits; function insUpd(methodName, code) { const method = gFindBar[methodName]; gFindBar[methodName] = Function("arguments.callee.method.apply(this, arguments);" + (code || "") + " this.updateHits();"); gFindBar[methodName].method = method; addDestructor(function() gFindBar[methodName] = method); } insUpd("_find"); insUpd("_findAgain"); insUpd("_setCaseSensitivity", forceFindCS && " this._find();"); const progressListener = { onStateChange: function(wpr, req, state) state & Ci.nsIWebProgressListener.STATE_STOP && setTimeout(updateHits, 320), onLocationChange: function(wpr, req) !req && updateHits() }; addDestructor(function() gBrowser.removeProgressListener(progressListener)); function onFindbar() { gBrowser[(gFindBar.hidden ? "remove" : "add") + "ProgressListener"](progressListener); !gFindBar.hidden && updateHits(); } onFindbar(); const observer = new MutationObserver(onFindbar); observer.observe(gFindBar, { attributes: true, attributesFilter: ["hidden"] }); addDestructor(function() observer.disconnect()); |
voqabuhe > 13-06-2016 15:38:36 |
bunda1 скрытый текст http://forum.ru-board.com/topic.cgi?forum=5&topic=31396&start=873#2 http://forum.ru-board.com/topic.cgi?forum=5&topic=31510&start=580#10 Посмотри, плиз. ПС А куда кнопка удалить сообщение делась? |
Kamui > 13-06-2016 16:43:41 |
bunda1 |
_zt > 20-06-2016 04:01:25 |
Можно ли в текстовом поле цвет текста настроить или цвет фона для текста? А то с моим оформлением текст темный и его плохо видно. bunda1 пишет
Теперь отлично. Спасибо. |
bunda1 > 20-06-2016 09:01:21 |
_zt пишет
Внизу кода инициализации, под // Стиль для панели поиска ................................ Выделить код Код:#FindToolbar .findbar-textbox:not([style]):not([status="notfound"]) { color: black !important; }\ измени black на нужный тебе цвет. |
voqabuhe > 20-06-2016 23:37:12 |
bunda1 |
bunda1 > 24-06-2016 20:06:47 |
voqabuhe пишет
Проверил, вроде кнопка цитирования и QTranslate работет на вместе с Toggle Find+. А как у тебя проявляется конфликт? |
voqabuhe > 24-06-2016 20:40:44 |
bunda1 |
bunda1 > 24-06-2016 21:19:56 |
voqabuhe Выделить код Код:// Настройка функций кликов мыши для кнопки ............. 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 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; } 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: ""; } // удалить и запустить подсветку совпадений .... gBrowser.finder.highlight(false); if ( !!value ) gBrowser.finder.highlight(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() { gBrowser.finder.highlight(true, value); 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] .findbar-entire-word,\ #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] {\ -moz-appearance: none; 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(function() { sss.unregisterSheet(uri, 0) }); |
voqabuhe > 24-06-2016 21:40:39 |
bunda1 24-06-2016 21:42:22 |
voqabuhe > 24-06-2016 23:32:27 |
bunda1 |
bunda1 > 24-06-2016 23:48:43 |
voqabuhe пишет
Спасибо за спасибо Выделить код Код:(()=> { var code = ` function handleEvent(e) { if (e.button != 1) return; sendSyncMessage("response",{},{}); } addEventListener('mousedown', handleEvent, false); function receiveMessage() { Services.console.logStringMessage("receiveMessage"); removeMessageListener("destroy", receiveMessage); removeEventListener("mousedown", handleEvent, false); } addMessageListener("destroy", receiveMessage); `; var url = "data:," + encodeURIComponent(code); var mm = window.getGroupMessageManager("browsers"); mm.loadFrameScript(url, true); function run(e) { Services.console.logStringMessage(e); } mm.addMessageListener("response", run); addDestructor(() => { mm.removeDelayedFrameScript(url); mm.broadcastAsyncMessage("destroy"); mm.removeMessageListener("response", run); }); })(); |
voqabuhe > 05-07-2016 01:55:47 |
bunda1 |
voqabuhe > 13-07-2016 15:56:13 |
bunda1 |
Caddy > 03-08-2016 00:09:15 |
bunda1 |
roadrunner > 01-11-2016 19:35:24 |
не пойму в чем проблема, перестала вызываться кнопка Toggle Find+ по Ctrl+f , вылазит стандартный поиск, раньше работало, подскажите в чем проблема? Firefox 49.0.2 |
lokiju > 25-12-2016 21:57:16 |
Firefox50.1.0 нет поиска выделенного на странице по нажатию пункта"Найти на странице" подменю"Find". Открывается пустая панель. |
Мимопроходил > 07-02-2017 11:15:27 |
Обновил фаерфокс до 51.0.1 - кнопка вообще перестала работать |
_backup > 23-02-2020 17:18:55 |
На FF 56 кнопка не работает. |