Полезная информация

В мире Mozilla происходит много интересных событий. Но вам не нужно постоянно посещать новостные сайты, чтобы быть в курсе всех изменений. Зайдите на ленту новостей Mozilla Россия.

№50106-04-2014 00:08:52

PEAKTOP
Участник
 
Группа: Members
Зарегистрирован: 07-10-2009
Сообщений: 116
UA: Firefox 28.0

Re: [CB]Toggle Find+

Вот и я о том же.  А её расположение сверху крайне неудобно.  Добиться хотя бы, чтобы она располагалась над вкладками — как стандартная панель поиска.
Предполагаю, что и тормоза с открытием/закрытием панели связаны с тем, что она всё время сверху. :(

Отредактировано PEAKTOP (06-04-2014 00:12:23)


1. Приму из добрых рук щедрый дар - инвайт на Хабр и Лепру
2. Бессмысленно осмысливать смысл неосмысленными мыслями!
3. Прежде чем подумать - подумай!

Отсутствует

 

№50206-04-2014 00:52:05

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4811
UA: Firefox 3.6

Re: [CB]Toggle Find+

PEAKTOP пишет

Предполагаю, что и тормоза с открытием/закрытием панели связаны с тем, что она всё время сверху. :(

Нет, у меня нет.

Отсутствует

 

№50306-04-2014 00:57:49

PEAKTOP
Участник
 
Группа: Members
Зарегистрирован: 07-10-2009
Сообщений: 116
UA: Firefox 28.0

Re: [CB]Toggle Find+

bunda1, у тебя и панель располагается где положено :)
А в последней версии кнопки закрытие панели поиска по одиночному ПКМ на панели убрали?

Отредактировано PEAKTOP (06-04-2014 00:59:48)


1. Приму из добрых рук щедрый дар - инвайт на Хабр и Лепру
2. Бессмысленно осмысливать смысл неосмысленными мыслями!
3. Прежде чем подумать - подумай!

Отсутствует

 

№50406-04-2014 01:57:39

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4811
UA: Firefox 3.6

Re: [CB]Toggle Find+

PEAKTOP пишет

А в последней версии кнопки закрытие панели поиска по одиночному ПКМ на панели убрали?

Что то не помню кнопку закрытия по одиночному ПКМ. Может то была спец версия кнопки сделанная по просьбе трудящихся.

Отсутствует

 

№50507-04-2014 15:13:18

PEAKTOP
Участник
 
Группа: Members
Зарегистрирован: 07-10-2009
Сообщений: 116
UA: Firefox 28.0

Re: [CB]Toggle Find+

bunda1, ты прав, это было пожелание одного из форумчан. Добавил у себя этот обработчик в последнюю версию кнопки.


1. Приму из добрых рук щедрый дар - инвайт на Хабр и Лепру
2. Бессмысленно осмысливать смысл неосмысленными мыслями!
3. Прежде чем подумать - подумай!

Отсутствует

 

№50608-04-2014 15:52:44

iDev.Pi
баг-репортёр
 
Группа: Extensions
Зарегистрирован: 31-01-2010
Сообщений: 2718
UA: Firefox 28.0

Re: [CB]Toggle Find+

bunda1 пишет

Попробую разобраться на этой неделе.

пинг. Проблема всё ещё актуальна.


mzfx

Отсутствует

 

№50708-04-2014 16:01:54

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4811
UA: Firefox 3.6

Re: [CB]Toggle Find+

iDev.Pi пишет

пинг. Проблема всё ещё актуальна.

Ok, сейчас у меня отпуск можно будет заняться.

Отсутствует

 

№50810-04-2014 17:00:40

iDev.Pi
баг-репортёр
 
Группа: Extensions
Зарегистрирован: 31-01-2010
Сообщений: 2718
UA: Firefox 28.0

Re: [CB]Toggle Find+

bunda1
и да, ещё если фокус в поле ввода, потом нажать ctrl+f - открывается панель поиска и фокус уходит туда, нажать ctrl+f ещё раз и фокус не возвращается к полю вводу. Это печалит, т.к. приходится руку с клавиатуры убирать на мышь, кликать в поле ввода и вести руку обратно к клавиатуре, если я захотел что-то напечатать в поле ввода.
Если после второго нажатия ctrl+f начать просто печатать - то сработает поиск набираемого текста по странице и страница легко может проскроллиться куда-то далеко.


mzfx

Отсутствует

 

№50923-04-2014 17:28:34

Kamui
Участник
 
Группа: Members
Зарегистрирован: 31-03-2011
Сообщений: 1796
UA: Firefox 28.0

Re: [CB]Toggle Find+

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 );

Ни одна версия кода, которые я смог найти, не работает.

Отсутствует

 

№51023-04-2014 21:15:42

etoins srldu
Участник
 
Группа: Members
Зарегистрирован: 23-04-2014
Сообщений: 13
UA: Firefox 28.0

Re: [CB]Toggle Find+

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);

Отредактировано etoins srldu (23-04-2014 21:18:50)

Отсутствует

 

№51124-04-2014 17:44:25

Kamui
Участник
 
Группа: Members
Зарегистрирован: 31-03-2011
Сообщений: 1796
UA: Firefox 28.0

Re: [CB]Toggle Find+

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 );

Отсутствует

 

№51224-04-2014 22:32:41

etoins srldu
Участник
 
Группа: Members
Зарегистрирован: 23-04-2014
Сообщений: 13
UA: Firefox 28.0

Re: [CB]Toggle Find+

Не знаю нужен ли до сих пор этот код:

Нет.

Первое найденное слово нумеруется как последнее, а последнее как первое, т.е. сдвинуто все назад. И еще не удалось прикрутить остатки старого кода:

Но тогда вот так:

Выделить код

Код:

// Удалить оргинальный панель поиска и создать с дополнительными возможностями, автор кода '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 );

Отсутствует

 

№51324-04-2014 23:06:40

iDev.Pi
баг-репортёр
 
Группа: Extensions
Зарегистрирован: 31-01-2010
Сообщений: 2718
UA: Firefox 28.0

Re: [CB]Toggle Find+

bunda1 == etoins srldu ?


mzfx

Отсутствует

 

№51425-04-2014 11:08:41

etoins srldu
Участник
 
Группа: Members
Зарегистрирован: 23-04-2014
Сообщений: 13
UA: Firefox 28.0

Re: [CB]Toggle Find+

iDev.Pi пишет

bunda1 == etoins srldu ?

Да, дело в том что у меня отпуск и я не помню пароль.

Отсутствует

 

№51525-04-2014 17:44:39

Kamui
Участник
 
Группа: Members
Зарегистрирован: 31-03-2011
Сообщений: 1796
UA: Firefox 28.0

Re: [CB]Toggle Find+

etoins srldu пишет

Но тогда вот так:

Все равно какая-то неразбериха с нумерацией результатов. Например на этой странице искал слово "но", было найдено 46 совпадений, первое нумеруется 46/46 нажимаю поиск далее, второе совпадение нумеруется 1/46, нажимаю поиск назад, первое совпадение нумеруется как 2/46, нажимаю еще раз поиск назад, последнее совпадение нумеруется как 1/46 и далее по кругу.

Отсутствует

 

№51625-04-2014 20:33:00

PEAKTOP
Участник
 
Группа: Members
Зарегистрирован: 07-10-2009
Сообщений: 116
UA: Firefox 24.0

Re: [CB]Toggle Find+

В FF 24.0.5 ESR наблюдаю задвоенность элемента  "Учесть регистр" и неправильное расположение кнопки "Подсветить всё", раньше она располагалась в конце панели.
pjgd3Im.png 
Использую этот код кнопки - Toggle Find+3 для FF24 - FF26

Отредактировано PEAKTOP (25-04-2014 20:35:22)


1. Приму из добрых рук щедрый дар - инвайт на Хабр и Лепру
2. Бессмысленно осмысливать смысл неосмысленными мыслями!
3. Прежде чем подумать - подумай!

Отсутствует

 

№51708-05-2014 03:26:54

PEAKTOP
Участник
 
Группа: Members
Зарегистрирован: 07-10-2009
Сообщений: 116
UA: Firefox 24.0

Re: [CB]Toggle Find+

А можно как-нибудь запретить панели поиска перехватывать нажатие Ctrl +F на вкладках "Библиотека", "Журнал" и т.д.? Использую CB - Открывать библиотеку в вкладке и последнюю активную папку библиотеки. Возникает существенное неудобство — находясь в библиотеке, журнале и т.д. по нажатию Ctrl + F курсор должен переместится в поле поиска по содержимому этого раздела, а вместо этого открывается панель поиска по странице, которая естественно ничего найти не сможет.

Отредактировано PEAKTOP (08-05-2014 03:28:00)


1. Приму из добрых рук щедрый дар - инвайт на Хабр и Лепру
2. Бессмысленно осмысливать смысл неосмысленными мыслями!
3. Прежде чем подумать - подумай!

Отсутствует

 

№51808-05-2014 11:19:41

etoins srldu
Участник
 
Группа: Members
Зарегистрирован: 23-04-2014
Сообщений: 13
UA: Firefox 28.0

Re: [CB]Toggle Find+

PEAKTOP пишет

А можно как-нибудь запретить панели поиска перехватывать нажатие Ctrl +F на вкладках "Библиотека", "Журнал" и т.д.? Использую CB - Открывать библиотеку в вкладке и последнюю активную папку библиотеки. Возникает существенное неудобство — находясь в библиотеке, журнале и т.д. по нажатию Ctrl + F курсор должен переместится в поле поиска по содержимому этого раздела, а вместо этого открывается панель поиска по странице, которая естественно ничего найти не сможет.

Легко, до субботы сделаю.

Отсутствует

 

№51908-05-2014 12:04:14

PEAKTOP
Участник
 
Группа: Members
Зарегистрирован: 07-10-2009
Сообщений: 116
UA: Firefox 24.0

Re: [CB]Toggle Find+

Ждём, надеемся и верим. Забыл упомянуть — что использую этот код кнопки — Toggle Find+3 для FF24 - FF26. В будущих версиях — FF 29 эта возможность тоже пригодится :)

Отредактировано PEAKTOP (08-05-2014 12:05:11)


1. Приму из добрых рук щедрый дар - инвайт на Хабр и Лепру
2. Бессмысленно осмысливать смысл неосмысленными мыслями!
3. Прежде чем подумать - подумай!

Отсутствует

 

№52008-05-2014 16:12:32

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4811
UA: Firefox 3.6

Re: [CB]Toggle Find+

PEAKTOP пишет

Ждём, надеемся и верим. Забыл упомянуть — что использую этот код кнопки — Toggle Find+3 для FF24 - FF26. В будущих версиях — FF 29 эта возможность тоже пригодится :)

Хорошо :)

Отсутствует

 

№52109-05-2014 19:47:36

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4811
UA: Firefox 3.6

Re: [CB]Toggle Find+

PEAKTOP пишет

А можно как-нибудь запретить панели поиска перехватывать нажатие Ctrl +F на вкладках "Библиотека", "Журнал" и т.д.? Использую CB - Открывать библиотеку в вкладке и последнюю активную папку библиотеки. Возникает существенное неудобство — находясь в библиотеке, журнале и т.д. по нажатию Ctrl + F курсор должен переместится в поле поиска по содержимому этого раздела, а вместо этого открывается панель поиска по странице, которая естественно ничего найти не сможет.

Вот универсальная Toggle Find+3 для FF17+
Как бы для всех актуальных версий Firefox :)

Отредактировано bunda1 (13-05-2014 21:33:38)

Отсутствует

 

№52222-05-2014 14:23:23

PEAKTOP
Участник
 
Группа: Members
Зарегистрирован: 07-10-2009
Сообщений: 116
UA: Firefox 24.0

Re: [CB]Toggle Find+

bunda1, благодарю за исправленную версию. А можно ещё чуток подправить для FF 24.0.5 — чтобы пункты "Учесть регистр" и "Подсветить всё" располагались псоле кнопок "Далее" и "Назад"?
Чтобы было вот так - yCrXcRo.png


1. Приму из добрых рук щедрый дар - инвайт на Хабр и Лепру
2. Бессмысленно осмысливать смысл неосмысленными мыслями!
3. Прежде чем подумать - подумай!

Отсутствует

 

№52322-05-2014 20:19:59

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4811
UA: Firefox 3.6

Re: [CB]Toggle Find+

PEAKTOP пишет

bunda1, благодарю за исправленную версию. А можно ещё чуток подправить для FF 24.0.5 — чтобы пункты "Учесть регистр" и "Подсветить всё" располагались псоле кнопок "Далее" и "Назад"?
Чтобы было вот так - http://i.imgur.com/yCrXcRo.png

У меня на FF24 так и есть, возможно у тебя посторонний стиль или расширение конфликтует.

Отсутствует

 

№52423-05-2014 11:21:22

PEAKTOP
Участник
 
Группа: Members
Зарегистрирован: 07-10-2009
Сообщений: 116
UA: Firefox 24.0

Re: [CB]Toggle Find+

bunda1, глобальных стилей у меня нет, стоит только тема оформления - Classic Compact 24.0.2, т.к. последняя не работает с FF 24-й линейки . Да и расширений связанных с "поиском" не наблюдается. Сейчас попробую на чистом профиле + с этой темой оформления.
Добавлено:
На чистом профиле  и чистый профиль + тема оформления тоже самое. 
Я правда немного подправил оригинальный код  — 1. Опустил панель поиска вниз — располагается над панелью дополнений 2. Добавил закрытие панели по клику на ней  ПКМ. Подозреваю, что первое изменение может повлиять на расположение элементов на панели,  а второе вряд ли.

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) });

Отредактировано PEAKTOP (23-05-2014 11:44:12)


1. Приму из добрых рук щедрый дар - инвайт на Хабр и Лепру
2. Бессмысленно осмысливать смысл неосмысленными мыслями!
3. Прежде чем подумать - подумай!

Отсутствует

 

№52523-05-2014 21:42:45

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4811
UA: Firefox 3.6

Re: [CB]Toggle Find+

Отсутствует

 

Board footer

Powered by PunBB
Modified by Mozilla Russia
Copyright © 2004–2020 Mozilla Russia GitHub mark
Язык отображения форума: [Русский] [English]