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

Общайтесь со знакомыми и друзьями в нашей группе в Контакте.

№120-11-2015 22:41:56

Inko7
Участник
 
Группа: Members
Зарегистрирован: 09-11-2009
Сообщений: 1008
UA: Firefox 42.0

[CB] Расширение возможностей дополнения 'Phrase Highlighter'

Расширение возможностей дополнения 'Phrase Highlighter' - Extender for 'Phrase Highlighter' (Firefox)

Автор: Я
Описание: Небольшое расширение возможностей дополнения Phrase Highlighter. Хороший аналог/заменитель кнопки Автовыделение ++
Использование: создать новую CB кнопку или положить код в инициализацию другой кнопки

ЛКМ по кнопке дополнения - если на странице есть выделенный текст (слово или фраза), добавляет его в ячейку и активирует автовыделение. Всего в дополнении 5 ячеек, соответственно, при добавлении шестого объекта, появится предупреждение. Если выделенного текста нет, то - действие по умолчанию.
СКМ по кнопке дополнения - Очищает все ячейки и отключает дальнейшее автовыделение. Также снимает разноцветную подсветку ранее выделенных объектов.

Shift + ЛКМ по кнопке дополнения - активация варианта с заранее заданными словами. При этом, состояние активности помечается подсветкой кнопки дополнения. По аналогии, можно добавить и другие варианты предустановок, повесив их на иные сочетания клавиш.

Выделить код

Код:

// ДОПОЛНИТЕЛЬНЫЕ ВОЗМОЖНОСТИ ДЛЯ ДОПОЛНЕНИЯ 'PHRASE HIGHLIGHTER'

var buttonext = document.getElementById("phrase-highlighter-toolbar-button");
//var prefs = Application.prefs;
var alertsService = Components.classes["@mozilla.org/alerts-service;1"].getService(Components.interfaces.nsIAlertsService);

var red = ""; var orange = ""; var yellow = ""; var green = ""; var blue = "";

addEventListener("click", clickphr, false, buttonext);

buttonext.onmouseover = function() {
     getcolor();
     if ( !cbu.getPrefs("extensions.phrasehighlighter.enable") ) { buttonext.tooltipText = "Phrase Highlighter\nСостояние: ВЫКЛЮЧЕН"; return };
     //button.tooltipText = "Phrase Highlighter\n" + sost;
     buttonext.tooltipText = "Phrase Highlighter\nСостояние: ВКЛЮЧЕН\nRed: "+ red + "\nOrange: " + orange + "\nYellow: " + yellow + "\nGreen: " + green + "\nBlue: " + blue; 
};

var css = "/*AGENT_SHEET*/\n"
css = "#phrase-highlighter-toolbar-button .toolbarbutton-icon { background-color: pink !important; }\n";
css = css + "#phrase-highlighter-toolbar-button > .toolbarbutton-menubutton-dropmarker > .dropmarker-icon { background-color: pink !important; }\n";

var uri = makeURI("data:text/css," + encodeURIComponent(css));
var sss = Cc["@mozilla.org/content/style-sheet-service;1"]. getService(Ci.nsIStyleSheetService);

addDestructor(function() { sss.unregisterSheet( uri, sss.AGENT_SHEET ) });  


// Настройка функций кликов мыши для кнопки
function clickphr(e) {

     // действие при клике ЛКМ
     if ( e.button == 0 && !e.ctrlKey && !e.shiftKey && !e.altKey && !e.metaKey ) {
        var text = plzSelect();
          if ( text == false ) return;
          getcolor();
          if ( red == "" ) cbu.setPrefs("extensions.phrasehighlighter.red-phrases", convertFromUnicode("UTF-8", text));
              else
                   if ( orange == "" ) cbu.setPrefs("extensions.phrasehighlighter.orange-phrases", convertFromUnicode("UTF-8", text));
              else
                   if ( yellow == "" ) cbu.setPrefs("extensions.phrasehighlighter.yellow-phrases", convertFromUnicode("UTF-8", text));
              else
                   if ( green == "" ) cbu.setPrefs("extensions.phrasehighlighter.green-phrases", convertFromUnicode("UTF-8", text));
              else
                   if ( blue == "" ) cbu.setPrefs("extensions.phrasehighlighter.blue-phrases", convertFromUnicode("UTF-8", text));
              else
                   alertsService.showAlertNotification( "data:image/png;base64,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", " Phrase Highlighter", "Все ячейки заполнены!", "");

          setTimeout(function() { cbu.setPrefs("extensions.phrasehighlighter.enable", true); phraseHighlighter.run(); }, 300);
     };

     // действие при клике СКМ
     if (e.button == 1 && !e.ctrlKey && !e.shiftKey && !e.altKey && !e.metaKey ) {
          cbu.setPrefs("CB.phrasehighlighter", false);
          cleanphrase();
          toggleStyle();

     // снять разноцветную подсветку на странице
         for ( var br of gBrowser.browsers ) {
         [...br.contentDocument.querySelectorAll('SPAN[style^="color:"]')]
         .forEach((m)=>{ if (m.style.backgroundColor) m.style = "" });
         }

     };

     // действие при клике SHIFT + ЛКМ
     if ( e.button == 0 && !e.ctrlKey && e.shiftKey && !e.altKey && !e.metaKey ) {
          cbu.setPrefs("CB.phrasehighlighter", !cbu.getPrefs("CB.phrasehighlighter") );
          if ( cbu.getPrefs("CB.phrasehighlighter") ) { setphrase(); toggleStyle(); }
             else { cleanphrase(); toggleStyle(); }
     };
};

// Проверить наличие строк в about:config и создать если не существует
if ( !cbu.isPref("CB.phrasehighlighter") ) { cbu.setPrefs("CB.phrasehighlighter", false); };
cbu.setPrefs("CB.phrasehighlighter", false);

// Установить стиль для кнопки дополнения при включенном режиме предустановок
function toggleStyle() {
 if ( cbu.getPrefs("CB.phrasehighlighter") ) { setTimeout(function() { sss.loadAndRegisterSheet(uri, sss.AGENT_SHEET) }, 300); }
 if ( !cbu.getPrefs("CB.phrasehighlighter") ) { setTimeout(function() { sss.unregisterSheet( uri, sss.AGENT_SHEET ) }, 300); }
};

// Очистка ячеек и отключение Autoload
function cleanphrase() {
  cbu.setPrefs("extensions.phrasehighlighter.enable", false);
     cbu.setPrefs("extensions.phrasehighlighter.red-phrases", "");
     cbu.setPrefs("extensions.phrasehighlighter.orange-phrases", "");
     cbu.setPrefs("extensions.phrasehighlighter.yellow-phrases", "");
     cbu.setPrefs("extensions.phrasehighlighter.green-phrases", "");
     cbu.setPrefs("extensions.phrasehighlighter.blue-phrases", "");
};

// Предустановка своих значений и включение Autoload
function setphrase() {
     cbu.setPrefs("extensions.phrasehighlighter.red-phrases", convertFromUnicode("UTF-8", "custom1"));
     cbu.setPrefs("extensions.phrasehighlighter.orange-phrases", convertFromUnicode("UTF-8", "custom2"));
     cbu.setPrefs("extensions.phrasehighlighter.yellow-phrases", convertFromUnicode("UTF-8", "custom3"));
     cbu.setPrefs("extensions.phrasehighlighter.green-phrases", convertFromUnicode("UTF-8", "custom4"));
     cbu.setPrefs("extensions.phrasehighlighter.blue-phrases", convertFromUnicode("UTF-8", "custom5"));
  setTimeout(function() { cbu.setPrefs("extensions.phrasehighlighter.enable", true); phraseHighlighter.run(); }, 300);
};

// Функция отдаст выделенный текст из страницы или текстового поля, если текст не выделен отдаст 'false'
function plzSelect() {
  // выделенный текст из страницы
  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 = selection.toString().replace(/^\s+|\s+$/g,"");
  return ( selection == '')? false: selection;
};

function getcolor() {
      red = gPrefService.getComplexValue("extensions.phrasehighlighter.red-phrases", Ci.nsISupportsString).data;
      orange = gPrefService.getComplexValue("extensions.phrasehighlighter.orange-phrases", Ci.nsISupportsString).data;
      yellow = gPrefService.getComplexValue("extensions.phrasehighlighter.yellow-phrases", Ci.nsISupportsString).data;
      green = gPrefService.getComplexValue("extensions.phrasehighlighter.green-phrases", Ci.nsISupportsString).data;
      blue = gPrefService.getComplexValue("extensions.phrasehighlighter.blue-phrases", Ci.nsISupportsString).data;
};

toggleStyle();

// Обработчик следит за загрузкой и переключением вкладки и запускают phraseHighlighter
var listener = { 
   onStateChange: function(wpr, req) {
      if ( gBrowser.currentURI.spec == 'chrome://global/content/console.xul') return; 
      if ( Ci.nsIWebProgressListener.STATE_STOP ) { setTimeout(function() { if ( cbu.getPrefs("CB.phrasehighlighter")) phraseHighlighter.run(); }, 500); };
   },

   onLocationChange: function(wpr, req) {
      if ( wpr.currentURI.spec != "about:blank" && !req && wpr.document.readyState == "complete")
          { setTimeout(function() { if ( cbu.getPrefs("CB.phrasehighlighter")) phraseHighlighter.run(); }, 500); };
          }
};
gBrowser.addProgressListener( listener );
addDestructor(function() gBrowser.removeProgressListener( listener ) );

Создавал для себя / под свои нужды.
Т.к. я не специалист, то наверняка можно было что-то сделать проще и оптимальней :)

Отредактировано Inko7 (06-12-2016 22:39:46)

Отсутствует

 

№222-11-2015 13:49:45

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

Re: [CB] Расширение возможностей дополнения 'Phrase Highlighter'

Inko7 пишет

Остался вопрос, который хотелось бы разрешить: после нажатия СКМ, очищаются ячейки, отключается дальнейшее автовыделение, но уже помеченные слова остаются на странице. Как снять эту разноцветную подсветку без обновления страницы???

Так вроде снимает подсветку:

Выделить код

Код:

for ( var br of gBrowser.browsers ) {
 [...br.contentDocument.querySelectorAll('SPAN[style^="color:white;"]')]
 .forEach((m)=> m.style = "" );
 }

но при команде назад или перёд на прошлой или следующей странице выделение остаётся. :/

Кстати:

Выделить код

Код:

buttonext.addEventListener("click", clickphr, false);
addDestructor(function() { buttonext.removeEventListener("click", clickphr, false) });

можно просто заменить на:

Выделить код

Код:

addEventListener("click", clickphr, false, buttonext);

Отредактировано bunda1 (22-11-2015 14:53:27)

Отсутствует

 

№322-11-2015 18:36:47

Inko7
Участник
 
Группа: Members
Зарегистрирован: 09-11-2009
Сообщений: 1008
UA: Firefox 42.0

Re: [CB] Расширение возможностей дополнения 'Phrase Highlighter'

bunda1 пишет

Так вроде снимает подсветку:

Уже прогресс! Но странно как-то снимает подсветку - только у красного цвета и синего. Зеленый, оранжевый, желтый - остаются...

За оптимизацию кода спасибо, сейчас поправлю :)

Отсутствует

 

№422-11-2015 19:12:49

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

Re: [CB] Расширение возможностей дополнения 'Phrase Highlighter'

Тут проблемка, дополнение Phrase Highlighter ставит цветной SPAN над текстом который выделяет, а мой код находит эти SPAN по Css селектору color:white;, но оказывается что для зеленного, оранжевого, жёлтого цвета этот Css селектор color:black;. Можно найти SPAN по селектору color: но тогда возможно мой код отключит какие то другие SPAN на страницах:

Выделить код

Код:

for ( var br of gBrowser.browsers ) {
      [...br.contentDocument.querySelectorAll('SPAN[style^="color:"]')]
      .forEach((m)=> m.style = "" );    
      }

Отсутствует

 

№522-11-2015 19:22:13

Inko7
Участник
 
Группа: Members
Зарегистрирован: 09-11-2009
Сообщений: 1008
UA: Firefox 42.0

Re: [CB] Расширение возможностей дополнения 'Phrase Highlighter'

bunda1
спасибо, так срабатывает полностью

bunda1 пишет

мой код отключит какие то другие SPAN на страницах

может тогда сделать двойной код - отдельно цикл для color:white и отдельно для color:black ?
так вероятность отключения лишнего ниже?

Отсутствует

 

№622-11-2015 19:28:26

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

Re: [CB] Расширение возможностей дополнения 'Phrase Highlighter'

Inko7 пишет

может тогда сделать двойной код - отдельно цикл для color:white и отдельно для color:black ?
так вероятность отключения лишнего ниже?

Можно и так, но всё равно что то заденет, я сейчас попробую придумать что то.

Отсутствует

 

№722-11-2015 20:00:18

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

Re: [CB] Расширение возможностей дополнения 'Phrase Highlighter'

Может так:

Выделить код

Код:

for ( var br of gBrowser.browsers ) {
      [...br.contentDocument.querySelectorAll('SPAN[style^="color:"]')]
      .forEach((m)=>{ if (m.style.backgroundColor) m.style = "" });
      }

Отсутствует

 

№822-11-2015 20:14:43

Inko7
Участник
 
Группа: Members
Зарегистрирован: 09-11-2009
Сообщений: 1008
UA: Firefox 42.0

Re: [CB] Расширение возможностей дополнения 'Phrase Highlighter'

добавил какую-то контрольную проверку?
этот код тоже работает прекрасно

Отсутствует

 

№922-11-2015 20:39:24

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

Re: [CB] Расширение возможностей дополнения 'Phrase Highlighter'

Inko7 пишет

добавил какую-то контрольную проверку?

Добавил if (m.style.backgroundColor), вроде у других SPAN не наблюдается backgroundColor

Отсутствует

 

№1022-11-2015 21:25:08

Inko7
Участник
 
Группа: Members
Зарегистрирован: 09-11-2009
Сообщений: 1008
UA: Firefox 42.0

Re: [CB] Расширение возможностей дополнения 'Phrase Highlighter'

bunda1
ок, понял
тогда вношу обновления в исходный код
спасибо :beer:

Отсутствует

 

№1105-12-2016 16:26:45

user44
Участник
 
Группа: Members
Зарегистрирован: 22-10-2014
Сообщений: 128
UA: Firefox 50.0

Re: [CB] Расширение возможностей дополнения 'Phrase Highlighter'

уважаемый автор!
не знаю, как у других камрадов, но у меня эта кнопка перестала работать, начиная с FF версии 47 ((((((
пожалуйста, посмотрите, может можно подправить

а может это сам аддон Custom Buttons плохо совместим с последними  версиями FF?

Отсутствует

 

№1205-12-2016 21:18:36

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

Re: [CB] Расширение возможностей дополнения 'Phrase Highlighter'

user44 пишет

а может это сам аддон Custom Buttons плохо совместим с последними  версиями FF?

23-11-2016 06:34:48

Отсутствует

 

№1306-12-2016 15:25:34

user44
Участник
 
Группа: Members
Зарегистрирован: 22-10-2014
Сообщений: 128
UA: Firefox 45.0

Re: [CB] Расширение возможностей дополнения 'Phrase Highlighter'

bunda1 пишет

23-11-2016 06:34:48

спасибо, но не помогло

Отсутствует

 

№1406-12-2016 19:58:31

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

Re: [CB] Расширение возможностей дополнения 'Phrase Highlighter'

user44 пишет

спасибо, но не помогло

А если так: Многоцветное автовыделение

Отсутствует

 

№1506-12-2016 20:37:57

Inko7
Участник
 
Группа: Members
Зарегистрирован: 09-11-2009
Сообщений: 1008
UA: Firefox 50.0

Re: [CB] Расширение возможностей дополнения 'Phrase Highlighter'

user44
сейчас проверил у себя, вроде все работает

Отсутствует

 

№1606-12-2016 21:08:52

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

Re: [CB] Расширение возможностей дополнения 'Phrase Highlighter'

Inko7 пишет

user44
сейчас проверил у себя, вроде все работает

Не может быть! В коде кнопки есть Application который не работает на FF50.

Отсутствует

 

№1706-12-2016 21:28:22

Inko7
Участник
 
Группа: Members
Зарегистрирован: 09-11-2009
Сообщений: 1008
UA: Firefox 50.0

Re: [CB] Расширение возможностей дополнения 'Phrase Highlighter'

bunda1

скрытый текст
8833b954c092.jpg

использовал выделение + ЛКМ по кнопке
СКМ также нормально очищает

Добавлено 06-12-2016 21:36:59
упс, у меня чуть подправленный вариант:

скрытый текст

Выделить код

Код:

// ДОПОЛНИТЕЛЬНЫЕ ВОЗМОЖНОСТИ ДЛЯ ДОПОЛНЕНИЯ 'PHRASE HIGHLIGHTER'

var buttonext = document.getElementById("phrase-highlighter-toolbar-button");
//var prefs = Application.prefs;
var alertsService = Components.classes["@mozilla.org/alerts-service;1"].getService(Components.interfaces.nsIAlertsService);

var red = ""; var orange = ""; var yellow = ""; var green = ""; var blue = "";

addEventListener("click", clickphr, false, buttonext);

buttonext.onmouseover = function() {
     getcolor();
     if ( !cbu.getPrefs("extensions.phrasehighlighter.enable") ) { buttonext.tooltipText = "Phrase Highlighter\nСостояние: ВЫКЛЮЧЕН"; return };
     //button.tooltipText = "Phrase Highlighter\n" + sost;
     buttonext.tooltipText = "Phrase Highlighter\nСостояние: ВКЛЮЧЕН\nRed: "+ red + "\nOrange: " + orange + "\nYellow: " + yellow + "\nGreen: " + green + "\nBlue: " + blue; 
};

var css = "/*AGENT_SHEET*/\n"
css = "#phrase-highlighter-toolbar-button .toolbarbutton-icon { background-color: pink !important; }\n";
css = css + "#phrase-highlighter-toolbar-button > .toolbarbutton-menubutton-dropmarker > .dropmarker-icon { background-color: pink !important; }\n";

var uri = makeURI("data:text/css," + encodeURIComponent(css));
var sss = Cc["@mozilla.org/content/style-sheet-service;1"]. getService(Ci.nsIStyleSheetService);

addDestructor(function() { sss.unregisterSheet( uri, sss.AGENT_SHEET ) });  


// Настройка функций кликов мыши для кнопки
function clickphr(e) {

     // действие при клике ЛКМ
     if ( e.button == 0 && !e.ctrlKey && !e.shiftKey && !e.altKey && !e.metaKey ) {
        var text = plzSelect();
          if ( text == false ) return;
          getcolor();
          if ( red == "" ) cbu.setPrefs("extensions.phrasehighlighter.red-phrases", convertFromUnicode("UTF-8", text));
              else
                   if ( orange == "" ) cbu.setPrefs("extensions.phrasehighlighter.orange-phrases", convertFromUnicode("UTF-8", text));
              else
                   if ( yellow == "" ) cbu.setPrefs("extensions.phrasehighlighter.yellow-phrases", convertFromUnicode("UTF-8", text));
              else
                   if ( green == "" ) cbu.setPrefs("extensions.phrasehighlighter.green-phrases", convertFromUnicode("UTF-8", text));
              else
                   if ( blue == "" ) cbu.setPrefs("extensions.phrasehighlighter.blue-phrases", convertFromUnicode("UTF-8", text));
              else
                   alertsService.showAlertNotification( "data:image/png;base64,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", " Phrase Highlighter", "Все ячейки заполнены!", "");

          setTimeout(function() { cbu.setPrefs("extensions.phrasehighlighter.enable", true); phraseHighlighter.run(); }, 300);
     };

     // действие при клике СКМ
     if (e.button == 1 && !e.ctrlKey && !e.shiftKey && !e.altKey && !e.metaKey ) {
          cbu.setPrefs("CB.phrasehighlighter", false);
          cleanphrase();
          toggleStyle();

     // снять разноцветную подсветку на странице
         for ( var br of gBrowser.browsers ) {
         [...br.contentDocument.querySelectorAll('SPAN[style^="color:"]')]
         .forEach((m)=>{ if (m.style.backgroundColor) m.style = "" });
         }

     };

     // действие при клике SHIFT + ЛКМ
     if ( e.button == 0 && !e.ctrlKey && e.shiftKey && !e.altKey && !e.metaKey ) {
          cbu.setPrefs("CB.phrasehighlighter", !cbu.getPrefs("CB.phrasehighlighter") );
          if ( cbu.getPrefs("CB.phrasehighlighter") ) { setphrase(); toggleStyle(); }
             else { cleanphrase(); toggleStyle(); }
     };
};

// Проверить наличие строк в about:config и создать если не существует
if ( !cbu.isPref("CB.phrasehighlighter") ) { cbu.setPrefs("CB.phrasehighlighter", false); };
cbu.setPrefs("CB.phrasehighlighter", false);

// Установить стиль для кнопки дополнения при включенном режиме предустановок
function toggleStyle() {
 if ( cbu.getPrefs("CB.phrasehighlighter") ) { setTimeout(function() { sss.loadAndRegisterSheet(uri, sss.AGENT_SHEET) }, 300); }
 if ( !cbu.getPrefs("CB.phrasehighlighter") ) { setTimeout(function() { sss.unregisterSheet( uri, sss.AGENT_SHEET ) }, 300); }
};

// Очистка ячеек и отключение Autoload
function cleanphrase() {
  cbu.setPrefs("extensions.phrasehighlighter.enable", false);
     cbu.setPrefs("extensions.phrasehighlighter.red-phrases", "");
     cbu.setPrefs("extensions.phrasehighlighter.orange-phrases", "");
     cbu.setPrefs("extensions.phrasehighlighter.yellow-phrases", "");
     cbu.setPrefs("extensions.phrasehighlighter.green-phrases", "");
     cbu.setPrefs("extensions.phrasehighlighter.blue-phrases", "");
};

// Предустановка своих значений и включение Autoload
function setphrase() {
     cbu.setPrefs("extensions.phrasehighlighter.red-phrases", convertFromUnicode("UTF-8", "custom1"));
     cbu.setPrefs("extensions.phrasehighlighter.orange-phrases", convertFromUnicode("UTF-8", "custom2"));
     cbu.setPrefs("extensions.phrasehighlighter.yellow-phrases", convertFromUnicode("UTF-8", "custom3"));
     cbu.setPrefs("extensions.phrasehighlighter.green-phrases", convertFromUnicode("UTF-8", "custom4"));
     cbu.setPrefs("extensions.phrasehighlighter.blue-phrases", convertFromUnicode("UTF-8", "custom5"));
  setTimeout(function() { cbu.setPrefs("extensions.phrasehighlighter.enable", true); phraseHighlighter.run(); }, 300);
};

// Функция отдаст выделенный текст из страницы или текстового поля, если текст не выделен отдаст 'false'
function plzSelect() {
  // выделенный текст из страницы
  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 = selection.toString().replace(/^\s+|\s+$/g,"");
  return ( selection == '')? false: selection;
};

function getcolor() {
      red = gPrefService.getComplexValue("extensions.phrasehighlighter.red-phrases", Ci.nsISupportsString).data;
      orange = gPrefService.getComplexValue("extensions.phrasehighlighter.orange-phrases", Ci.nsISupportsString).data;
      yellow = gPrefService.getComplexValue("extensions.phrasehighlighter.yellow-phrases", Ci.nsISupportsString).data;
      green = gPrefService.getComplexValue("extensions.phrasehighlighter.green-phrases", Ci.nsISupportsString).data;
      blue = gPrefService.getComplexValue("extensions.phrasehighlighter.blue-phrases", Ci.nsISupportsString).data;
};

toggleStyle();

// Обработчик следит за загрузкой и переключением вкладки и запускают phraseHighlighter
var listener = { 
   onStateChange: function(wpr, req) {
      if ( gBrowser.currentURI.spec == 'chrome://global/content/console.xul') return; 
      if ( Ci.nsIWebProgressListener.STATE_STOP ) { setTimeout(function() { if ( cbu.getPrefs("CB.phrasehighlighter")) phraseHighlighter.run(); }, 500); };
   },

   onLocationChange: function(wpr, req) {
      if ( wpr.currentURI.spec != "about:blank" && !req && wpr.document.readyState == "complete")
          { setTimeout(function() { if ( cbu.getPrefs("CB.phrasehighlighter")) phraseHighlighter.run(); }, 500); };
          }
};
gBrowser.addProgressListener( listener );
addDestructor(function() gBrowser.removeProgressListener( listener ) );

Отредактировано Inko7 (06-12-2016 22:38:22)

Отсутствует

 

№1806-12-2016 22:20:42

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

Re: [CB] Расширение возможностей дополнения 'Phrase Highlighter'

Inko7 пишет

упс, у меня чуть подправленный вариант:

Ну тогда понятно. Не забудь исправить 20-11-2015 22:41:56

Отсутствует

 

№1906-12-2016 22:43:08

Inko7
Участник
 
Группа: Members
Зарегистрирован: 09-11-2009
Сообщений: 1008
UA: Firefox 50.0

Re: [CB] Расширение возможностей дополнения 'Phrase Highlighter'

Исправлен код кнопки в первом сообщении темы с учетом последних изменений в ff

Отсутствует

 

№2007-12-2016 00:23:51

user44
Участник
 
Группа: Members
Зарегистрирован: 22-10-2014
Сообщений: 128
UA: Firefox 45.0

Re: [CB] Расширение возможностей дополнения 'Phrase Highlighter'

Inko7
теперь заработало
большое спасибо!

bunda1
Многоцветное автовыделение - весьма приятная кнопка, тоже буду юзать
большое спасибо!
жалко только, что можно задавать только фон, а не фон+цвет текста
и кнопки, конечно, непривычные

Отсутствует

 

Board footer

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