![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
В каких-то темах оформления ЖЖ есть пометка непрочитанных комментариев жёлтой плашкой. В моей — нет. А я предпочитаю чужие журналы читать в своей теме (потому что у всех слишком мелко и/или слишком ярко).
Поэтому написал себе скриптик для Greasemonkey, добавляющий аналогичную функциональность.
Тестировалось на Firefox 35.0.1; LJ схема Lynx (light), тема Cuteness Attack; DW схема Lynx (light mode), тема Tabula Rasa. Для использования с другими схемами и темами может понадобиться настроить селекторы, определяющие видимость текста комментария (помечено [1]) и стили самого индикатора ([2]).
// ==UserScript==
// @name LJ: Highlight unread comments
// @namespace http://yurikhan.dreamwidth.org/
// @include http://*.livejournal.com/*.html
// @include http://*.livejournal.com/*.html?*
// @include http://*.dreamwidth.org/*.html
// @include http://*.dreamwidth.org/*.html?*
// @version 1
// @require https://gist.githubusercontent.com/arantius/3123124/raw/grant-none-shim.js
// @grant GM_registerMenuCommand
// ==/UserScript==
const observerOptions = {childList: true, subtree: true};
function highlightUnread(mutations, observer)
{
observer.disconnect();
var allComments = Array.prototype.slice.call(document.querySelectorAll('[id^=ljcmt], [id^=cmt]'));
(allComments
.filter(function(comment) { return !GM_getValue(comment.id, false); })
.forEach(function(comment) { comment.classList.add('yk-unread'); }));
(allComments
.filter(function(comment) { return comment.querySelector('.entry-item, .full') !== null; }) // [1]
.forEach(function(comment) { GM_setValue(comment.id, true); }));
observer.observe(document.body, observerOptions);
}
GM_addStyle(
[['.yk-unread .comment-info .ljuser:after', // [2]
'.yk-unread [id=comment-info] .ljuser:after',
'.yk-unread[id^=cmt] .full .poster:after',
'.yk-unread[id^=cmt] .partial .comment > .inner:after',
'.yk-unread [id^=expand]:after'
].join(',\n'),
'{',
' margin-left: 0.25em; border-radius: 0.25em; padding: 0em 0.25em;',
' background-color: #edd400; color: white;',
' font-size: smaller; font-weight: bold; content: "new";',
'}'].join('\n'));
var observer = new MutationObserver(highlightUnread);
highlightUnread([], observer);
GM_registerMenuCommand('Mark all unread', function() {
if (confirm('Mark all comments in ' + location.hostname + ' as read?')) {
GM_listValues().forEach(GM_deleteValue);
}
}, 'u')