Клуб Народной карты

Скрипт-букмарклет для перехода в профиль пользователя из Клуба Народной карты (пост обновлён 03.08.18)

Никита Юшков
31 июля, 11:07

Скрипт добавляет кнопки «Перейти в профиль» возле имени пользователя и даты написания поста/комментария.

Работает только внутри открытого поста. На главной странице Клуба не реализован по причине отсутствия данных пользователя в коде (либо я плохо искал).

javascript:
var a = [];
a = document.getElementsByClassName('b-comment-group_yablogs _init');
for(var i = 0; i < a.length; i++){
b = JSON.parse(a[i].dataset.options).options.authorId;
if(!((b === undefined) || (b === null) || (isNaN(b)))){m = a[i].getElementsByClassName('b-comment-group_yablogs__date');
if (!((m[0] === null) || (m[0] === undefined))){
m[0].insertAdjacentHTML('afterEnd', '<div class="y-button_islet _init" data-block="y-button" style="margin-left: 15px"><a class="y-button_islet__text" href="https://n.maps.yandex.ru/#!/users/'+b+'" target="_blank">Перейти в профиль</a></div>');}}}
a = document.getElementsByClassName('b-article_yablogs-not-draft _init');
if ((a[0] === null) || (a[0] === undefined))a = document.getElementsByClassName('b-article_yablogs-draft _init');
var b = JSON.parse(a[0].dataset.options).options.post.author.id;
if(!((b === undefined) || (b === null) || (isNaN(b)))){var m = a[0].getElementsByClassName('b-article_yablogs-not-draft__date');
if ((m[0] === null) || (m[0] === undefined))m = a[0].getElementsByClassName('b-user_yablogs__user-data');
m[0].insertAdjacentHTML('afterEnd', '<div class="y-button_islet _init" data-block="y-button" style="margin-left: 20px"><a class="y-button_islet__text" href="https://n.maps.yandex.ru/#!/users/'+b+'" target="_blank">Перейти в профиль</a></div>');}

Установка стандартно через диспетчер закладок браузера (в Яндекс.Браузере и Google Chrome можно открыть комбинацией клавиш Ctrl + Shift + O).

19 комментариев
Наше старе село
31 июля, 11:13
Лучше пусть администрация для всех внедрит такую кнопку
Очень хорошая вещь! Надеюсь сейчас администрации НЯК ничего не помешает встроить этот функционал в клуб. Очень жалко, что полезный функционал приходится делать пользователям, а не программистам Яндекса
Lex,
С ними нередко так. Пишешь в ТС запрос на простейший функционал. Обещают передать разработчикам на рассмотрение. Ждать быстро надоедает, делаешь сам через greasemonkey или подобное за полчасика - профит!
skssxf,
Может в этот раз что-то изменится? 
Lex,
слабо верится. Особенно в случае с данной кнопкой.
Lex,
Гаарная штучка. Два года назад поднимал этот вопрос, ответ "Это не реально". Спасибо!
Также поднимался вопрос прилипание АТД  Растительности, Гидрографии, Рельефа, тоже ответ "Подумаем"
Обновлено 31 июля, 21:16
Очень хорошая вещь, но правильно ли я понимаю, что каждый раз отображение кнопок надо включать вручную? Я просто в этом не бум-бум.
Никита Юшков
31 июля, 13:34
lukdmi,
да, скрипт надо каждый раз запускать вручную.
Никита Юшков,
Может я что сделал не так: Открыл папку в избранных закладках - поместил в нее Скрипт-букмарклет- открываешь пост- активируешь (когда есть необходимость) Скрипт-букмарклет и всё прекрасно. 
Никита Юшков
31 июля, 21:44
МВА,
всё верно. Обновление, правда, пока до Клуба не докатилось. Некоторые фиксы багов, обнаруженных ☭Okclick,  были учтены здесь: https://pastebin.com/aWCHK3Zi
Теперь всё должно работать ровно во всех ситуациях.
Спасибо. Полезная приспособа
Просто великолепный скрипт! Но... хочется сделать его ещё великолепнее!

Можно ведь запускать скрипт автоматически при загрузке страницы. Чтобы он при этом работал корректно, нужно использовать триггер на событие "DOMContentLoaded" (окончание загрузки HTML-страницы). Выглядит это примерно так:

function PageLoadReady() { код скрипта }
document.addEventListener("DOMContentLoaded", PageLoadReady);

Для автозапуска можно использовать GreaseMonkey или любое другое расширение, позволяющее запускать пользовательские скрипты на определённых доменах. Например, я использую "AdGuard Антибаннер".
Обновлено 31 июля, 19:51
И ещё, я бы открывал НЯК в отдельном окне (target="_blank"). 
И ещё, скрипт спотыкается на удалённых комментариях. Причину данной неприятности пока не искал.
Обновлено 31 июля, 20:23
Никита Юшков
31 июля, 20:38
☭Okclick,
спасибо большое за советы! Я javascript начал изучать только 2 дня назад, пока далеко не обо всех возможностях знаю) Удалённые комментарии, кстати, вообще не проверял (как-то забыл про них), на днях посмотрю, допилю этот момент. Про отдельное окно услышал, тоже потом добавлю.
Никита Юшков
31 июля, 21:30
☭Okclick,
с удалёнными комментами исправил, сделал переход в новую вкладку. Как обновление поста отмодерируется, код обновится. А пока так:
https://pastebin.com/aWCHK3Zi
Связался с чистым javascript - получил много проблем :)
В Firefox не работает вложенность тегов button > a. Если обрамляющий ссылку button заменить на div, то работает.
Никита Юшков
31 июля, 22:24
a-zakh,
какая привередливая лиса) Ну тогда да, через div :)
Неплохо, неплохо. Только будет лучше, если он будет запускаться после загрузки страницы. Можно расширение сделать, одно для разных скриптов на НЯК. Или, как уже говорили, в готовое расширение впихнуть.