Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 28.01.2017, 22:33
Интересующийся
Отправить личное сообщение для OmTatSat Посмотреть профиль Найти все сообщения от OmTatSat
 
Регистрация: 28.01.2017
Сообщений: 14

greasemonkey Enhanced word highlight добавить функционал
Здравствуйте.

Начну с предыстории.
Пользовал раньше search term highlighter на Firefox 42 и не знал горя, пока не попробовал Chrome и увидел что он грузит страницы одного сайта раза в 3-4 быстрее. Решил перейти на хром, за суток трое почти нашёл альтернативные дополнения, чтобы всё было как в Firefox. Но заметил такое дело, что когда открою в хроме около 20 вкладок - всё, комп становится тормозным - оперативка заканчивается((
Начал искать браузеры на движке геко чтобы расширения firefox остались, но чтобы страницы шустрее грузились, и наткнулся на CyberFox - то, что надо, скорость загрузки примерно как у хрома, иногда чуть быстрее иногда чуть медленнее, в принципе норм разницы в разы нет. Но дело в том, что самая большая скорость загрузки страниц на последней версии 51ой, и в ней если включить search term highlighter, то страницы при его отработке подвисают на несколько секунд. По этому решил найти альтернативу, единственное что стоящее нашёл это скрипт Enhanced word highlight, правда он изначально не поддерживал кириллицу и выделял слова слишком наляписто - полностью выделяя их цветом, search term highlighter умел просто подчёркивать.

В общем ввиду отсутствия знаний JS на добавление поддержки кириллицы и подчёркивания заместо выделения ушло 2 дня в гугле(( по этому решил создать тему, может JS профи смогут помочь затратив на это минимум времени, так как на следующие улучшения у меня думаю могут уйти месяца а то и вовсе никогда не произойти(( Выручите пожалуйста, буду очень Благодарен за любую помощь, только учитывайте пожалуйста нулевой уровень познания JS но и большое желание достичь результата)

search term highlighter умел при открытии ссылок с гугла в новой вкладке дальше продолжать подчёркивать то, что искалось в гугле. Enhanced word highlight вроде тоже должен это делать судя по описанию https://greasyfork.org/en/scripts/72...word-highlight
"Disable auto-highlight (auto-capture keywords for highlight) ?

⚪ Enable
⚪ Completely disable
⚪ Disable on pages opened from supported search results
⚪ Disable on supported search result pages"

Но почему-то этого не делает, пытаюсь поиском находить слова которые связаны с восстановлением, сохранением... и с фелс менять на тру, но безуспешно - при открытии, ссылки с гугла, в новой вкладке, скрипт не подсвечивает искомые слова(( Но если открыть ссылку в той же вкладке, то подсвечивает. По этому думаю, что всё же какая-то память в скрипте срабатывает, но почему не в новых вкладках?? И ещё в скрипте есть горячие клавиши, но они работают только на английской раскладке, возможно ли сделать чтобы срабатывало и при рус раскладке? Пробовал прописывать коды с http://www.character-code.com/ но это ничего не дало, может их как-то в скобки взять, или ещё каким либо образом оформить нужно??



Вот код оригинала скрипта https://greasyfork.org/en/scripts/72...highlight/code

И отредактированный http://pastebin.com/WtZHW1bw

Как было
Как стало

Последний раз редактировалось OmTatSat, 28.01.2017 в 22:42.
Ответить с цитированием
  #2 (permalink)  
Старый 29.01.2017, 11:49
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,662

Сообщение от OmTatSat Посмотреть сообщение
если открыть ссылку в той же вкладке, то подсвечивает
"Inherit-highlight: highlighted keywords will also be automatically highlighted in subsequent pages in the same tab/window;"

Сообщение от OmTatSat Посмотреть сообщение
при открытии, ссылки с гугла, в новой вкладке, скрипт не подсвечивает искомые слова
"A "Lock" button to store one set of keywords and highlight them on whatever pages;"

Это включается кнопкой "L" на панели, читай "To lock keywords for highlight:...", "To unlock keywords for highlight:...".

Сообщение от OmTatSat Посмотреть сообщение
вроде тоже должен это делать судя по описанию "Disable auto-highlight...
"This config does not affect inherit-highlight and highlight for locked keywords."

Эта настройка о чем-то другом - 1 и 2 опции еще понятно, а 3 и 4 я так и не понял.

Сообщение от OmTatSat Посмотреть сообщение
горячие клавиши, но они работают только на английской раскладке
Обязательно в такой последовательности (Ctrl и/или Alt могут отсутствовать): 'C-' - это Ctrl, 'M-' - Alt, 'key' - некая клавиша, для алфавитно-цифровых клавиш будет присутствовать зависимость от раскладки, поэтому лучше использовать остальные:
var keyCodeStr = {
	8: 'BAC',
	9: 'TAB',
	10: 'RET',
	13: 'RET',
	27: 'ESC',
	33: 'PageUp',
	34: 'PageDown',
	35: 'End',
	36: 'Home',
	37: 'Left',
	38: 'Up',
	39: 'Right',
	40: 'Down',
	45: 'Insert',
	46: 'Delete',
	112: 'F1',
	113: 'F2',
	114: 'F3',
	115: 'F4',
	116: 'F5',
	117: 'F6',
	118: 'F7',
	119: 'F8',
	120: 'F9',
	121: 'F10',
	122: 'F11',
	123: 'F12'
};

Например, с клавишами стрелок:
// keybinds
var KEY_NEXT    = 'M-Down';		// "Alt-Down"			Next occurrence
var KEY_PREV    = 'M-Up';		// "Alt-Up"				Previous occurrence
var KEY_SEARCH  = 'M-Left';		// "Alt-Left"			Add keywords
var KEY_OFF     = 'C-M-Left';	// "Ctrl-Alt-Left"		Suspend highlight
var KEY_CLOSE   = 'C-M-Right';	// "Ctrl-Alt-Right"		Disable highlight
var KEY_EDIT    = 'M-Right';	// "Alt-Right"			Edit highlight
var KEY_REFRESH = 'C-M-Down';	// "Ctrl-Alt-Down"		Refresh highlight

Сообщение от OmTatSat Посмотреть сообщение
ушло 2 дня в гугле((
Может кому пригодятся твои страдания))

Сообщение от OmTatSat Посмотреть сообщение
добавление поддержки кириллицы
// Было
"abcdefghijklmnopqrstuvwxyz"
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
// Стало
"abcdefghijklmnopqrstuvwxyzабвгдеёжзийклмнопрстуфхцчшщъыьэюя"
"ABCDEFGHIJKLMNOPQRSTUVWXYZАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ"

Сообщение от OmTatSat Посмотреть сообщение
и подчёркивания заместо выделения
// Было
'{background:'+rgb+'!important;}'
// Стало
'{border-bottom:2px solid '+rgb+'!important;}'
Ответить с цитированием
  #3 (permalink)  
Старый 29.01.2017, 12:09
Интересующийся
Отправить личное сообщение для OmTatSat Посмотреть профиль Найти все сообщения от OmTatSat
 
Регистрация: 28.01.2017
Сообщений: 14

Про остальные клавиши - хорошая идея, и со стрелками более интуитивно понятно по крайней мере следующее предыдущее слово)

Может возможно добавить горячую клавишу на включение лока?
Или ещё лучше чтобы он автоматом срабатывал при открытии новой вкладки/нажатии СКМ?
Ответить с цитированием
  #4 (permalink)  
Старый 29.01.2017, 12:15
Интересующийся
Отправить личное сообщение для OmTatSat Посмотреть профиль Найти все сообщения от OmTatSat
 
Регистрация: 28.01.2017
Сообщений: 14

Цитата:
и подчёркивания заместо выделения
// Было
'{background:'+rgb+'!important;}'
// Стало
'{border-bottom:2px solid '+rgb+'!important;}'
Не совсем так, если сделать так, то иногда крупный шрифт не будет подчёркиваться(
походу дело в высоте строки для текста, и бардюр просто в неё не влазился, с line-height: 1.3!important; бордер влазится, но выглядит кривовато, когда весь сайт чуть сдвигается....

пришёл к такому
border-bottom:1px solid '+rgb+';text-decoration: underline;font-weight: bold!important;


но border-bottom иногда очень далеко уходит от слова - не красиво(

И на данный момент остановился на

text-decoration-style: solid;text-decoration-color: '+rgb+'!important;text-decoration-line: underline;font-weight: 800!important;


Конечно было бы здорово чуть увеличить толщину подчёркивания, но пока ничего не нашлось.
Ответить с цитированием
  #5 (permalink)  
Старый 29.01.2017, 16:16
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,662

Сообщение от OmTatSat Посмотреть сообщение
Может возможно добавить горячую клавишу на включение лока?
// ...
	// keybinds
	// ...
	var KEY_LOCK    = 'C-M-Up';		// "Ctrl-Alt-Up"		Lock keywords
	
	function command_lock() {
		if (aside.className == 'ewh_edit') return;
		if (keyword_store) {
			lock.className = '';
			lock.title = _ti.lock[_L];
			GM_setValue(ST_PRE, '');
			keyword_store = '';
//			lock.value = 'Lock: Off';
		} else {
			lock.className = '_active';
			lock.title = _ti.lock_a[_L] + ' ' + keyword;
			GM_setValue(ST_PRE, keyword);
			keyword_store = keyword;
//			lock.value = 'Lock: On';
		}
	}
	// ...
	function setup(init) {
		// ...
			lock.addEventListener('click',command_lock,false);
		// ...
	}
	// ...
	function keyhandler(evt) {
		// ...
			switch (fullkey) {
			// ...
			case KEY_REFRESH:
				resetup();
				break;
			case KEY_LOCK: 
				command_lock();
				break;
			}
		// ...
	}
// ...

Сообщение от OmTatSat Посмотреть сообщение
Или ещё лучше чтобы он автоматом срабатывал при открытии новой вкладки/нажатии СКМ?
// ...
	function setup(init) {
		//...
		// middle-click lock
		document.addEventListener('mousedown',function(e){
			if (e.which == 2) {
				e.preventDefault();
				command_lock();
			}
		},false);
		// auto-start lock
		if (keyword_store) return;
		command_lock();
	}
// ...

Сообщение от OmTatSat Посмотреть сообщение
крупный шрифт не будет подчёркиваться( походу дело в высоте строки для текста
'{box-shadow:inset 0 -2px '+rgb+'!important;}'
Ответить с цитированием
  #6 (permalink)  
Старый 30.01.2017, 02:41
Интересующийся
Отправить личное сообщение для OmTatSat Посмотреть профиль Найти все сообщения от OmTatSat
 
Регистрация: 28.01.2017
Сообщений: 14

Здорово!!!)) Вот что значит знать язык... Огромное спасибо, на конец то нормальное подчёркивание)!... Хоткеи работают, правда кнопка лока на гуи перестала работать, но это мелочь, хоткеи удобней будут.


Возникла идея как улучшить, но часа 2 перебирая варианты так ничего и не нашёл. Идея в том, чтобы если есть ввод новых слов, то лок снимается, прописываются новые слова и лок снова ставится.

Так вот, искал где взять слова которые только что ввёл, перепробовал много переменных, но которые давали слова было 2 или 3 но они давали эти слова в независимости вводил я их или просто стоит лок. Может вы снова покажите магию?)

мысль типа такого
if (keyword_store != введённые слова) {
command_lock();

Если это провернуть, получится полный автопилот!)
Ответить с цитированием
  #7 (permalink)  
Старый 30.01.2017, 06:23
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,662

Сообщение от OmTatSat Посмотреть сообщение
правда кнопка лока на гуи перестала работать
Значит что-то не так делаешь
// Было
function setup(init) {
	// ...
		lock.addEventListener('click',function(){
			// ...
		},false);
	// ...
}
// Стало
function setup(init) {
	// ...
		lock.addEventListener('click',command_lock,false);
	// ...
}

Сообщение от OmTatSat Посмотреть сообщение
Может вы снова покажите магию?)
Неа
Ответить с цитированием
  #8 (permalink)  
Старый 30.01.2017, 09:52
Интересующийся
Отправить личное сообщение для OmTatSat Посмотреть профиль Найти все сообщения от OmTatSat
 
Регистрация: 28.01.2017
Сообщений: 14

Сообщение от Rise
Значит что-то не так делаешь
да, так и есть, во первых просто добавил заместо заменить lock.addEventListener('click',command_lock,false)
и во вторых не убрал ниже идущее false.
Сейчас заработала кнопка гуи, Спасибо.

По поводу поиска введённых слов, подскажите пожалуйста, как можно выводить содержимое функций?

Вот так содержимое переменных выводится
alert('Первая строка\nВторая строка' + word_s)

Но если это функция, то пишет просто код функции, а если прописать return с функции - вообще не выводит ничего, как в данном примере.
Ответить с цитированием
  #9 (permalink)  
Старый 30.01.2017, 10:24
Интересующийся
Отправить личное сообщение для OmTatSat Посмотреть профиль Найти все сообщения от OmTatSat
 
Регистрация: 28.01.2017
Сообщений: 14

Вот так вроде в гугле говорят должно отобразить, но чего-то ничего не появляется

init_words(word)
alert (init_words(word))
Ответить с цитированием
  #10 (permalink)  
Старый 30.01.2017, 12:28
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,662

OmTatSat, надо смотреть на точках останова в отладчике панели инструментов браузера - Browser Toolbox.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск