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

Многие проблемы быстрее решаются поиском по форуму и чтением FAQ, чем созданием новой темы и томительным ожиданием ответа.

№22613-12-2012 02:06:30

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

Re: [CB]Toggle Find+

voqabuhe пишет

На [nightly] сегодня отвалилась

У меня вроде работает, что пишет консоль.

Отсутствует

 

№22713-12-2012 03:12:07

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

Re: [CB]Toggle Find+

А нет, у меня на Nightly сейчас куча кнопок обвалилась.

Отсутствует

 

№22813-12-2012 11:15:34

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4339
UA: Firefox 17.0

Re: [CB]Toggle Find+

Ну все, отключили javascript.options.xml.chrome.


Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

№22913-12-2012 18:51:55

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

Re: [CB]Toggle Find+

voqabuhe пишет

На [nightly] сегодня отвалилась

Попробуй: http://forum.mozilla-russia.org/uploaded/Toggle Find+3 e.txt

Отсутствует

 

№23013-12-2012 20:50:39

voqabuhe
Участник
 
Группа: Members
Зарегистрирован: 06-12-2011
Сообщений: 3231
UA: Firefox 20.0

Re: [CB]Toggle Find+

bunda1 пишет

Попробуй: http://forum.mozilla-russia.org/uploaded/Toggle Find+3 e.txt

Сначала вроде заработала, но не появился пункт в контекстном меню. Перезагрузился, так она вообще отвалилась и даже удалить не получалось, убрал её с панели, теперь не могу её вернуть, не хочет.

Отсутствует

 

№23113-12-2012 21:06:22

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

Re: [CB]Toggle Find+

voqabuhe
Отключи инициализацию кнопок в настройках CB + рестарт и тогда удалишь.
Вот же проблема, у меня на Nightly с CB непонятно что творится не могу проверить что там с кнопкой.

Отсутствует

 

№23213-12-2012 22:33:11

voqabuhe
Участник
 
Группа: Members
Зарегистрирован: 06-12-2011
Сообщений: 3231
UA: Firefox 20.0

Re: [CB]Toggle Find+

bunda1 пишет

Отключи инициализацию кнопок в настройках CB + рестарт и тогда удалишь.

Да пробовал, всё равно не удалялась, пришлось  востанавливать из резервной копии.
В консоли ошибок появляется

Ошибка: TypeError: oButton.id is undefined
Источник: chrome://custombuttons/content/cbbutton.js
Строка: 325

var nCurrentNum = oButton. id. replace (/custombuttons-button/, "");

Добавлено 13-12-2012 22:50:13

bunda1 пишет

Вот же проблема, у меня на Nightly с CB непонятно что творится не могу проверить что там с кнопкой.

Да похоже CB отваливается.  У меня тоже код в одну строчку становится. Восстанавливаю кнопки из резервной копии, открываю редактор кнопки. Всё нормально, но как только жму ОК/сохранить, то после следующего открытия редактора код становится в одной строчке. Если просто закрывать редактор без сохранения, то такого не происходит.

Отредактировано voqabuhe (13-12-2012 22:50:46)

Отсутствует

 

№23314-12-2012 00:13:39

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

Re: [CB]Toggle Find+

voqabuhe
С патчем от Infocatcherа Сегодня 22:35:42 все вроде работает.

Отредактировано bunda1 (14-12-2012 00:14:00)

Отсутствует

 

№23414-12-2012 01:53:44

voqabuhe
Участник
 
Группа: Members
Зарегистрирован: 06-12-2011
Сообщений: 3231
UA: Firefox 20.0

Re: [CB]Toggle Find+

bunda1 пишет

С патчем от Infocatcherа Сегодня 22:35:42 все вроде работает.

Ага, спасибо, работает. Только после каждого редактирования кнопки, начинают дублироваться пункты в контекстном меню страницы.

Отредактировано voqabuhe (14-12-2012 01:55:39)

Отсутствует

 

№23514-12-2012 02:31:09

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

Re: [CB]Toggle Find+

voqabuhe пишет

Ага, спасибо, работает. Только после каждого редактирования кнопки, начинают дублироваться пункты в контекстном меню страницы.

После редактирования нужен рестарт, в кнопке так много обработчиков(18) и наблюдателей(2) и т.д., и т.п., что у меня руки не подимаютса писать код который бы блокировал их дублирование после редактирования.
Но куски кода(не все) можно положить в другую кнопку и там редактировать и проверять. Я сам так делаю. И после отладки положить обратно + рестарт.

Отсутствует

 

№23631-01-2013 22:22:29

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

Re: [CB]Toggle Find+

iDev.Pi
Как сделать что бы FindBar mini автоматически сохранял расстояние до полосы прокрутки( скроллбара ). Дело в том что я уменьшил скроллбар до 8px, а FindBar mini остался на месте.

Отсутствует

 

№23731-01-2013 22:38:31

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

Re: [CB]Toggle Find+

bunda1
средствами CSS такие проверки нельзя выполнять, поэтому только вручную можешь сменить в стиле что-нибудь типа "right: 16px" на 8px


mzfx

Отсутствует

 

№23831-01-2013 22:48:04

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

Re: [CB]Toggle Find+

Спасибо, хотя и жаль. А то бывает что люди вообще скроллбар отключают.

Отсутствует

 

№23901-03-2013 12:50:50

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

Re: [CB]Toggle Find+

Панель поиска прикрепляется к верху страницы, хотя в настройках "FindBar сверху" не включена. Поменял в коде все "Top", на "Bottom"  и включил опцию "FindBar сверху" результата тоже не дало. Как опустить панель вниз.  Самое итересное, что после запуска FireFox панель поиска отображается снизу, а потом чудесным образом переезжает наверх. А можно опустить  панель поиска  в панель дополнений ( самый низ экрана) - как это сделано по умолчанию в стандартной строке поиска?

Отредактировано PEAKTOP (01-03-2013 12:52:15)


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

Отсутствует

 

№24001-03-2013 13:19:24

voqabuhe
Участник
 
Группа: Members
Зарегистрирован: 06-12-2011
Сообщений: 3231
UA: Firefox 22.0

Re: [CB]Toggle Find+

PEAKTOP пишет

Панель поиска прикрепляется к верху страницы, хотя в настройках "FindBar сверху" не включена. Поменял в коде все "Top", на "Bottom"  и включил опцию "FindBar сверху" результата тоже не дало. Как опустить панель вниз.  Самое итересное, что после запуска FireFox панель поиска отображается снизу, а потом чудесным образом переезжает наверх. А можно опустить  панель поиска  в панель дополнений ( самый низ экрана) - как это сделано по умолчанию в стандартной строке поиска?

Не подтверждаю, у меня все заявленные настройки работают.

Отсутствует

 

№24101-03-2013 15:24:48

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

Re: [CB]Toggle Find+

voqabuhe
судя по UA - у тебя браузер другой версии.

Отредактировано iDev.Pi (01-03-2013 15:25:09)


mzfx

Отсутствует

 

№24201-03-2013 16:47:05

voqabuhe
Участник
 
Группа: Members
Зарегистрирован: 06-12-2011
Сообщений: 3231
UA: Firefox 22.0

Re: [CB]Toggle Find+

iDev.Pi пишет

судя по UA - у тебя браузер другой версии.

Ага, но я 19.0 версию в ночнушках  уже проходил и у меня там всё работало:)

Отсутствует

 

№24301-03-2013 17:00:56

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

Re: [CB]Toggle Find+

voqabuhe
похоже, что ты не понимаешь, что они не связаны.


mzfx

Отсутствует

 

№24401-03-2013 20:43:14

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

Re: [CB]Toggle Find+

PEAKTOP пишет

Панель поиска прикрепляется к верху страницы, хотя в настройках "FindBar сверху" не включена. Поменял в коде все "Top", на "Bottom"  и включил опцию "FindBar сверху" результата тоже не дало. Как опустить панель вниз.  Самое итересное, что после запуска FireFox панель поиска отображается снизу, а потом чудесным образом переезжает наверх.

У меня на FF19 и Nightly22 с этим все порядке, может у тебя кнопка конфликтует с каким нибудь стилем для панели поиска или расширением. Расширение надо по очереди отключать и тогда узнаешь которое виновато.
Может попробуй экспериментальную версию кнопки:http://forum.mozilla-russia.org/uploade … riment.txt

Отредактировано bunda1 (01-03-2013 20:44:39)

Отсутствует

 

№24502-03-2013 16:00:38

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

Re: [CB]Toggle Find+

bunda1 пишет

Может попробуй экспериментальную версию кнопки:http://forum.mozilla-russia.org/uploade … riment.txt

C экспериментальной  версией кнопки тоже самое - панель вверху страницы. Но обратил внимание, что если открыть окно редактирования кнопки и затем закрыть его по "ОК", панель возвращается вниз, но перестает вызываться по Ctrl + F.  Повторное  открытие-закрытие меню кнопки возвращает возможность вызовачерез  Ctrl + F. Шайтан однако.
А можно опустить  панель поиска  в панель дополнений (самый низ экрана) - как это сделано по умолчанию в стандартной строке поиска FF?
немного изменил положение и текст в функции "//Показать количество совпадений на панели поиска" в экспериментальной кнопке:

код инициализации экспериментальной кнопки
// Настройка функций кликов мыши для кнопки ................................................................
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.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.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); 
  if ( s !== "FindBar.mini" ) return;     
  if ( custombuttons.getPrefs( s ) ) {       
       if ( gFindBar.getElement('highlight').hasAttribute("checked") ) {
            gFindBar._findField.style.color = prefs.getCharPref("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(pref) { toggleAttribute( pref ) });



// Установить нужную иконку кнопки при старте браузера или при изменениях настроек автовыделения ............
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,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();
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 );
};



// Приклеить элемент #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;
});



// Показать количество совпадений на панели поиска, автор кода '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;
                else if (matchesCount == "-1") {
                    var matchLimit = 100;
                    this._foundMatches.value = "найдено " + " \>"+ matchLimit + " совпадений";
                } else
                    this._foundMatches.value = "найдено совпадений: " + matchesCount;
                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;
        if (body == null) Components.utils.reportError('body = '+ body + ', Errors = '+ getBrowser().currentURI.spec);
        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");
                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, поиск колесиком мыши .............................................................................
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);
            }             
       else 
            {           
            gFindBar.getElement("highlight").click();
            gFindBar._findField.style.color = ( gFindBar._findField.style.color )? "": custombuttons.getPrefs("ui.textHighlightBackground");           
            };           
       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 paste = document.getElementById("pasteButton");
var b = document.createElementNS("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul", "toolbarbutton");
b.setAttribute("id", "findButton");
b.setAttribute("tooltiptext", "Л: Искать следущее \nС: Поиск текста из буфера \nП: Искать предыдущее");                             
paste.parentNode.insertBefore( b, paste.nextSibling );

b.addEventListener("click", function(e) {
   if ( e.button == 0 ) gFindBar.onFindAgainCommand(false); // искать следующее

   if ( e.button == 2 ) gFindBar.onFindAgainCommand(true); // искать предыдущее
}, 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[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 .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; }\
\
/* не показывать панель поиска на страницах ....*/\
#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; }\
\
/* кнопки на панели поиска ....*/\
#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); }\
\
');


// устанавливаем флаг, чтобы функции и обработчики не исполнялась дважды 
this.setAttribute("stop","true");

Отредактировано PEAKTOP (02-03-2013 16:33:29)


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

Отсутствует

 

№24602-03-2013 23:02:34

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

Re: [CB]Toggle Find+

PEAKTOP пишет

А можно опустить панель поиска  в панель дополнений (самый низ экрана) - как это сделано по умолчанию в стандартной строке поиска FF?

Да что там у тебя с браузером что С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");

Отредактировано bunda1 (05-04-2013 18:12:31)

Отсутствует

 

№24702-03-2013 23:57:39

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

Re: [CB]Toggle Find+

Так откуда же мне знать. Действительно некоторые Custom Button не работают или работают не так как задумано.


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

Отсутствует

 

№24803-03-2013 00:12:28

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

Re: [CB]Toggle Find+

PEAKTOP
Попробуй кнопку которую я изменил для тебя: Сегодня 22:02:34

Отредактировано bunda1 (03-03-2013 00:12:51)

Отсутствует

 

№24903-03-2013 23:00:49

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

Re: [CB]Toggle Find+

bunda1, то что надо. Большое спасибо! :cool:


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

Отсутствует

 

№25005-04-2013 17:36:35

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

Re: [CB]Toggle Find+

Как в новом варианте кнопки, панель поиска опустить под вкладки, при расположении вкладок внизу страницы, как это было сделано в этом варианте. И зачем брал из меню кнопки стандартное меню?


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

Отсутствует

 

Board footer

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