←  Предложения по улучшению

AniDub Forum

»

[Предложение] Кликабельные Комментарии Из...

 фотография MaxLevs 05 May 2017

Приветствую. Предлагаю сделать так, чтобы при нажатии на комментарий топа или на соответствующую кнопку страница комментариев перелистывалась на ту страницу, на которой этот коммент расположен. Это удобно, если хочется почитать комментарии топа в контексте. Например, если автор отвечает кому-то, и не совсем ясно, о чем идет речь. Искать комментарии "вручную" неудобно и, зачастую, долго.



UPD:
После осознания того, что ради этого никто "лапатить" сайт не будет, решил сделать все сам и написал userscript (кусок кода на js, который сам запускается и добавляет какой-либо функционал).

Скрипт может производить поиск комментариев не только из топа, но и с листа последних комментариев в профиле любого пользователя. Интерфейс простой - два клика и готово. Также есть api для написания своих скриптов на его базе без копирования кода.

Для того, чтобы эта шарманка работала, нужно установить расширение - платформу, которая, собственно, и будет запускать скрипт на странице online.anidub.com:
  • Для Google Chrome - Tempermonkey
  • Для Firefox - Greasemonkey
  • Для Opera - Violentmonkey
  • Скрытый текст
Процесс установки скрипта:
  • Скачать одно из вышеперечисленных расширений для вашего браузера
  • Перейти по этой ссылке (там скрипт)
  • Нажать на "Установить"; откроется окно tampermonkey(или greasemonkey)
  • Жмем там на "Install"
  • ??????????
  • PROFIT!!!


Скриншоты
ИзображениеИзображение
Офтоп: как уменьшить картинки?
Сообщение отредактировал MaxLevs: 12 May 2017 - 04:51
Ответить

 фотография srg_sniper 05 May 2017

Идея интересная, но сложно реализуется. Придётся скрипт менять.
Ответить

 фотография MaxLevs 05 May 2017

Просмотр сообщенияsrg_sniper (05 May 2017 - 14:47) писал:

Идея интересная, но сложно реализуется. Придётся скрипт менять.
Хмм? Ты знаешь, как заполняется блок div.comm_best? Я не нашел... Или о каком скрипте идет речь?
Ответить

 фотография srg_sniper 05 May 2017

Просмотр сообщенияMaxLevs (05 May 2017 - 15:01) писал:

Хмм? Ты знаешь, как заполняется блок div.comm_best? Я не нашел... Или о каком скрипте идет речь?
Ну там со стилем сайта надо играться.
Ответить

 фотография MaxLevs 05 May 2017

Просмотр сообщенияsrg_sniper (05 May 2017 - 15:11) писал:

Ну там со стилем сайта надо играться.
Что?
Изображение
Ответить

 фотография MaxLevs 07 May 2017

Короче, написал я скрипт, который все это делает.
Вот ссылка. Код там в открытом доступе.
Сообщение отредактировал MaxLevs: 08 May 2017 - 16:18
Ответить

 фотография Li Si Cin 08 May 2017

Просмотр сообщенияMaxLevs (07 May 2017 - 05:46) писал:

Короче, написал я скрипт, который все это делает.

Прикольно. Главное, чтоб API не менялся. А то будет, как с плагином к xbmc - вк перестал быть основным хостером - и привет. Но, думаю, в данном случае все на века. :)
Ставить, правда, не буду. Хотя, теоретически, можно было бы использовать твой скрипт для другой задачи: искать каменты, но не топчики с той же страницы, а свои (или чужие) каменты, список которых в профиле юзера. Но это уже другая страница, и надо как-то передавать id (через злоумышленников куки или localStorage). Вообще, хорошо бы это все делалось на бэкенде, но это нереально, ради таких мелочей никто пальцем не пошевелит. Отсюда и уверенность в устойчивом API. :)
Ответить

 фотография MaxLevs 08 May 2017

Просмотр сообщенияLi Si Cin (08 May 2017 - 02:06) писал:

Но это уже другая страница, и надо как-то передавать id
На каждом комменте со списка есть адрес страницы, на которой он расположен. Её можно открыть через window.open в новой вкладке, при этом в вызывающий скрипт вернется её window. А через него в какую-нибудь переменную (например, foundIds) можно записать нужный id. Останется переписать скрипт так, чтобы он чекал её (переменную) и подхватывал поиск, перелистывая сразу по возможности.

А, вообще, для таких целей, я думаю, целесообразнее будет писать расширение - лучше интеграция с браузером. И не нужно будет париться с передачей данных между вкладками.
Ответить

 фотография MaxLevs 08 May 2017

Боже.. Говнокод из меня так и прет...
Ответить

 фотография Li Si Cin 08 May 2017

Просмотр сообщенияMaxLevs (08 May 2017 - 07:18) писал:

можно открыть через window.open в новой вкладке...
Хорошая мысль, правда, с открытием в той же вкладке не прокатит.

Цитата

А, вообще, для таких целей, я думаю, целесообразнее будет писать расширение - лучше интеграция с браузером.
Не, для меня не вариант. Если на js я мог бы что-нить страшненькое накарябать, то в расширениях не разбирался, и желания/потребности пока нет.
Ответить

 фотография MaxLevs 08 May 2017

Немного поправил скрипт. Теперь он:
  • Более красивый
  • Более стабильный
  • Имеет "API"
Я бы мог, чисто теоретически, написать фишку с поиском комментов из списков в профилях пользователей, но, чую, гемором это попахивает...

Просмотр сообщенияLi Si Cin (08 May 2017 - 16:21) писал:

Не, для меня не вариант. Если на js я мог бы что-нить страшненькое накарябать, то в расширениях не разбирался, и желания/потребности пока нет.

Если речь идет о расширениях под хром, то это js.
Ответить

 фотография Li Si Cin 09 May 2017

Просмотр сообщенияMaxLevs (08 May 2017 - 16:23) писал:

Я бы мог, чисто теоретически, написать фишку с поиском комментов из списков в профилях пользователей, но, чую, гемором это попахивает...
Чисто теоретически, даже я мог бы написать, но не настолько это нужно, сколько будет гемора (и это несмотря на то, что основную часть можно взять из твоего скрипта). Точнее даже, не столько много гемора, сколько мало потребности в этом. Мне просто лениво. Даже если ты сделаешь, ну поставлю я и, может, еще несколько человек, а остальные даже не поймут о чем речь. Вот если бы централизованно со стороны ресурса это запилили, непосредственно в кодовую базу сайта - это было бы здорово. А так ты будешь потеть ради небольшого выхлопа, единственный профит - потренироваться на кошках. Впрочем, ради последнего я и сам бы сделал, если бы делать было совсем нечего. Но пока предпочту потратить свободные несколько часов на аниме и книжку. И, в данном случае, мне было бы стыдно, если бы кто-то сделал за меня работу, которую могу сделать сам. :)

Цитата

Если речь идет о расширениях под хром, то это js.
Я на лисе. Даже если js, то нужно изучать api этого дела и прочие нюансы, не нужно оно пока мне.
Ответить

 фотография MaxLevs 09 May 2017

Просмотр сообщенияLi Si Cin (09 May 2017 - 01:05) писал:

сколько будет гемора
Отбой. Гемора оказалось меньше, чем планировалось. За полчасика набросал. Но получилось не особо красиво в плане реализации. (сказалось скудное знание языка) Зато работает. Правда, лучше переустановить, ибо я изменил @namespace :D


Просмотр сообщенияLi Si Cin (09 May 2017 - 01:05) писал:

И, в данном случае, мне было бы стыдно, если бы кто-то сделал за меня работу, которую могу сделать сам

Я это чисто по фанчику делаю. Расхочется - не буду :D Это быстро решатеся)
Ответить

 фотография Li Si Cin 09 May 2017

Таки через w.open решил? Я долго думал, почему у меня обработчик не срабатывает (точнее, open не работает). :)
Оказалось у меня в двух местах было заблочено: в своем скрипте было window.open = null и в uBlock запрет на всплывающие окна.

Кстати, лиса ругается единовременно при установке скрипта и после правки скрипта при нахождении на странице (см. аттач). Потом пропадает. На работоспособность скрипта не влияет. Мне кажется нет смысла париться, у меня вообще стоит
// @include	http://online.anidub.com/*


Не знаю, как легко отловить событие рендеринга каментов, поэтому тупо добавил для прокрутки к каменту время на рендер:

default:
	indicator.style.backgroundColor = "#6fae18";
	indicator.textContent = "НАЙДЕНО";
	setTimeout( function() {
		  targetPage.document.getElementById(point.id).scrollIntoView();
	}, 100);

Прикрепленные файлы

  • Прикрепленный файл  error.png (13.39К)
    Количество загрузок:: 8
Ответить

 фотография MaxLevs 10 May 2017

Просмотр сообщенияLi Si Cin (09 May 2017 - 20:28) писал:

Кстати, лиса ругается единовременно при установке скрипта и после правки скрипта при нахождении на странице (см. аттач). Потом пропадает. На работоспособность скрипта не влияет. Мне кажется нет смысла париться, у меня вообще стоит
// @include	http://online.anidub.com/*

Что-то с лисой твориться странное..
У тебя tempermonkey?

Просмотр сообщенияLi Si Cin (09 May 2017 - 20:28) писал:

Не знаю, как легко отловить событие рендеринга каментов, поэтому тупо добавил для прокрутки к каменту время на рендер.
Я могу прикрутить к body кастомное событие на загрузку моего скрипта. Тогда можно будет повесить обработчик на него:
addEventListener('ad_scriptOnLoad', doSomething);
Я планировал это делать и для своей реализации, но мне было лень возиться со структурой кода, чтобы все по феншую.
Ответить

 фотография Li Si Cin 10 May 2017

Просмотр сообщенияMaxLevs (10 May 2017 - 00:42) писал:

Что-то с лисой твориться странное..
У тебя tempermonkey?
Greasemonkey.

Просмотр сообщенияMaxLevs (10 May 2017 - 00:42) писал:

Я могу прикрутить к body кастомное событие на загрузку моего скрипта.
Ну, у меня и в таком виде работает, даже с 0мс, видимо надо просто отложить выполнение хоть на сколько-то.
Можно сразу после CommentsPage вставлять, но там нулем не обойдешься, там нужна 100-ка минимум. Событие загрузки твоего скрипта, ничем не будет отличаться от произвольной задержки, т.к. эта самая CommentsPage полностью строит каменты весьма небыстро. Кстати, из какого скрипта она идет, я что-то не нашел.

Ну а по честному надо либо опрашивать с интервалом на предмет долгожданного появления id, либо подписываться на изменения какого-то родительского элемента. Но зачем, если костыль работает. :)
Ответить

 фотография MaxLevs 10 May 2017

Просмотр сообщенияLi Si Cin (10 May 2017 - 01:43) писал:

Событие загрузки твоего скрипта, ничем не будет отличаться от произвольной задержки, т.к. эта самая CommentsPage полностью строит каменты весьма небыстро. Кстати, из какого скрипта она идет, я что-то не нашел.

Мой скрипт загружается как раз тогда, когда можно вызвать window.ad_searchManager(), то есть начать поиск. Большего и не надо. Или ты чего-то другого ждешь? Опиши подробнее тогда.

Долго строит из-за того, что ждет ответ от сервера. Сам код там маленький. 1)отобразить процесс загрузки 2)обратиться к comment.php 3)при получении отрубить отображение процесса загрузки и вставить данные через innerHTML.
Данные - json, состоящий из полей navigation (те саиые кнопочки и срелочки) и comments, содержимое которых - валидный html
Ответить

 фотография MaxLevs 10 May 2017

можно написать свою реализацию commentPage, и все будет по феншую
Ответить

 фотография MaxLevs 10 May 2017

Очередное обновление, И... я думаю, оно будет последним. Основной набор задач решен. Оптимизация проведена. Код структурирован максимально красиво, исходя из возможностей. Дальнейшего развития для него я не вижу.
Ответить

 фотография Li Si Cin 10 May 2017

Просмотр сообщенияMaxLevs (10 May 2017 - 02:10) писал:

Мой скрипт загружается как раз тогда, когда можно вызвать window.ad_searchManager(), то есть начать поиск. Большего и не надо. Или ты чего-то другого ждешь? Опиши подробнее тогда.

Долго строит из-за того, что ждет ответ от сервера. Сам код там маленький. 1)отобразить процесс загрузки 2)обратиться к comment.php 3)при получении отрубить отображение процесса загрузки и вставить данные через innerHTML.
Данные - json, состоящий из полей navigation (те саиые кнопочки и срелочки) и comments, содержимое которых - валидный html

можно написать свою реализацию commentPage, и все будет по феншую
До меня только сегодня дошло, что commentPage асинхронная и вместо извращений с отслеживанием появления камента в DOM надо бы ее переделать, чтоб в промис обернуть. Да и интересно, что там написано, и главное - как ее найти.
Я вижу, что ты решил сам выводить каменты, не пользуясь ей. Раз уж там действительно все готовенькое, то может так и проще.

И кстати, опять ругался на @match. Походу, в отличие от include, ему scheme обязательна, ибо в таком виде не ругается:

// @match		*://online.anidub.com/*

или

// @match		*://online.anidub.com/*/*/*
// @match		*://online.anidub.com/index.php?*do=lastcomments*

И было б здорово, если б ты в корневом посте краткую инструкцию разместил:
- скачайте такое-то дополнение,
- сделайте то-то.

Может у кого-то из непричастных и получится.
Ответить