您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Новый новый дизайн пикабу. Не забудь установить юзерстиль.
当前为
// ==UserScript== // @name Pikabu Enhancement Suite // @version 1.1.2 // @license CC-BY-4.0 // @description Новый новый дизайн пикабу. Не забудь установить юзерстиль. // @author NeverLoved // @match https://pikabu.ru/* // @grant none // @namespace https://greasyfork.org/users/175168 // ==/UserScript== (function() { 'use strict'; let _c; try { _c = JSON.parse(window.localStorage.getItem('enhancements')); } catch(e) { _c = {}; } var config = { values:_c || {}, set:function(param, value) { this.values[param] = value; window.localStorage.setItem('enhancements', JSON.stringify(this.values)); }, get:function(param) { if(this.is_empty()) { return this.defconfig[param]; } else { return this.values[param]; } }, is_empty:function() { try { return !JSON.parse(window.localStorage.getItem('enhancements')); } catch(e) { return true; } }, defconfig: { "top_big_searchbar":true, "top_no_avatar":true, "porn_stealth":true, "restore_f":true, "great_comment_links":true, "post_header_collapse":true, "sidebar_icons":true } }; if(window.location.pathname == '/settings') { var onchange = function(e) { let checkbox = e.target; config.set(checkbox.id, checkbox.checked); }; var create_config_item = function(caption, id, value) { let checkbox = document.createElement('input'); checkbox.setAttribute('id', id); checkbox.setAttribute('type', 'checkbox'); if(value) { checkbox.checked = true; } checkbox.onchange = onchange; let label = document.createElement('label'); label.innerText = caption; label.setAttribute('for', id); let tr = document.createElement('tr'); tr.append(document.createElement('td')); tr.append(document.createElement('td')); tr.children[0].append(label); tr.children[1].append(checkbox); return tr; }; var sett_table = document.querySelector('form[name="general"] .page-settings__table tbody'); [ create_config_item("Иконки в меню сайдбара", 'sidebar_icons', config.get('sidebar_icons')), create_config_item("Скрывать пост нажатием на пустое место в заголовке", 'post_header_collapse', config.get('post_header_collapse')), create_config_item("Скрытие просмотренных постов по F", 'restore_f', config.get('restore_f')), create_config_item("Добавить нормальные ссылки на комментарии [#]", 'great_comment_links', config.get('great_comment_links')), create_config_item("Строка поиска всегда развёрнута", 'top_big_searchbar', config.get('top_big_searchbar')), create_config_item("Убрать быстрое меню в шапке", 'top_no_avatar', config.get('top_no_avatar')), create_config_item("Скрытная иконка клубнички", 'porn_stealth', config.get('porn_stealth')), ].forEach(function(tr) { sett_table.append(tr); }); document.querySelector('form[name="general"] .page-settings__table tbody').append(); } var sidebar = document.querySelector('div.sidebar aside'); var profile_info = sidebar.querySelector('.profile-info'); var answers_link = sidebar.querySelector('div.menu a.menu__item[href="/answers"]'); var main_menu = answers_link.parentNode; var rating_container = profile_info.children[0]; var subscribers_container = profile_info.children[1]; var rating_val = 0; if((rating_val = rating_container.getAttribute('aria-label')) == null) { rating_val = rating_container.children[0].innerText; } var subscribers_val = 0; if((subscribers_val = subscribers_container.getAttribute('aria-label')) == null) { subscribers_val = subscribers_container.children[0].innerText; } subscribers_val = parseInt(subscribers_val.replace(/[^0-9]/g, '')); rating_val = parseInt(rating_val.replace(/[^0-9]/g, '')); var rating = document.createElement('span'); rating.innerText = "Рейтинг: "+rating_val; rating.style['padding-left'] = getComputedStyle(answers_link)['padding-left']; rating.className = "rating"; var subscribers = document.createElement('span'); subscribers.innerText = "Подписчиков: "+subscribers_val; subscribers.style['padding-left'] = getComputedStyle(answers_link)['padding-left']; subscribers.className = "subscribers"; main_menu.prepend(subscribers); main_menu.prepend(rating); var edits = sidebar.querySelector('div.menu a.menu__item[href="/edits"]'); if(edits) { var unneeded_menu = edits.parentNode; main_menu.append(edits); unneeded_menu.remove(); } profile_info.remove(); if(config.get('sidebar_icons')) { var menu_items = [].slice.call(main_menu.children); //Конвертируем HTMLCollection в массив menu_items.forEach(function(item) { let icon_container = document.createElement('span'); icon_container.className = "icon_container"; let i = document.createElement('i'); let space = document.createTextNode(' '); let icon = 'circle-o'; switch(item.getAttribute('href')) { case '/answers': if(item.children.length) { icon = "envelope-o"; } else { icon = "envelope-open-o"; } break; case '/comments': icon = "comments-o"; break; case '/liked': icon = "thumbs-o-up"; break; case '/saved-stories': icon = 'floppy-o'; break; case '/subs-list': icon = 'list'; break; case '/ignore-list': icon = 'times'; break; case '/notes': icon = 'sticky-note-o'; break; case '/edits': icon = 'pencil'; break; default: if(item.className == "rating") { icon = "bar-chart"; } else if(item.className == "subscribers") { icon = "users"; } break; } i.className = 'fa fa-'+icon; icon_container.prepend(i); item.prepend(space); item.prepend(icon_container); }); } var top_menu = document.querySelector('header.header'); var right_menu = top_menu.querySelector('.header-right-menu'); var search_bar = right_menu.querySelector('.header-right-menu__search'); if(config.get('top_big_searchbar')) { search_bar.style.width = "250px"; search_bar.style['background-color'] = "#fff"; search_bar.style['border-radius'] = "2px"; search_bar.querySelector('button').style.color = "#8ac858"; } if(config.get('top_no_avatar')) { right_menu.querySelector('.avatar').remove(); } var notify_btn = right_menu.querySelector('.header-right-menu__notification'); notify_btn.innerHTML = '<i class="fa fa-bell fa-bigger" style="font-size:1.3em"></i>'; notify_btn.style['line-height'] = '1px'; notify_btn.style['margin-right'] = '0px'; var user_info = sidebar.querySelector('.user'); var settings = user_info.querySelector('a[href="/settings"]'); var exit = user_info.querySelector('.user__exit'); var nick_container = user_info.querySelector('.user__nick_big').parentNode; try { var straw = sidebar.querySelector('div[data-role="switch-adult"]'); if(config.get('porn_stealth')) { straw.children[0].innerHTML = '<i class="fa fa-bigger fa-user-secret"></i>'; } else { straw.children[0].innerHTML = '<svg xmlns="http://www.w3.org/2000/svg" class="icon icon--ui__strawberry"><use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#icon--ui__strawberry"></use></svg>'; } var qs = straw.parentNode.remove(); } catch(err) { console.log('Настройка клубнички выключена.'); var straw = document.createTextNode(''); } try { var displaymode = sidebar.querySelector('div[data-role="display-mode"]'); displaymode.previousElementSibling.remove(); var quickset = displaymode.parentNode.parentNode.parentNode; displaymode.style.float = "none"; displaymode.style.display = "inline-block"; var dtxt = displaymode.children[0]; if(dtxt.innerText.indexOf('скрыто')+1) { dtxt.innerText += ' просмотренных постов'; } else { dtxt.innerText += ' просмотренные посты'; } var panel = document.querySelector('main section:first-child'); //panel.insertBefore(displaymode, panel.lastChild); panel.insertBefore(displaymode, panel.lastElementChild); quickset.remove(); } catch(err) { //var straw = document.createTextNode(''); } settings.innerHTML = '<i class="fa fa-cog fa-bigger"></i>'; settings.style.color = '#757575'; exit.style.display = "inline-block"; exit.innerHTML = '<i class="fa fa-sign-out fa-2x"></i>'; var btn_container = exit.parentNode; btn_container.className += " btn_container"; btn_container.append(settings); btn_container.append(document.createTextNode(' ')); btn_container.append(notify_btn); btn_container.append(document.createTextNode(' ')); btn_container.append(straw); user_info.append(exit); if(config.get('post_header_collapse')) { document.querySelector('main').addEventListener('click', function(e) { if(e.target.nodeName == "HEADER") { e.target.parentNode.parentNode.querySelector('.collapse-button').click(); } }, false); } if(config.get('restore_f')) { if(document.querySelectorAll('article.story').length > 1) { var first_story,prev_story,current_story, next_story; /** * Для первого поста не срабатывает mutation observer * т.к его ещё нет когда пост попадает в поле зрения, * потому мы заранее записываем первый пост и удаляем его */ first_story = document.querySelector('main > .stories-feed > .stories-feed__container article:first-child'); first_story.setAttribute('data-visited', "true"); current_story = first_story; var known_ids = []; var o = new MutationObserver(function(records) { records.some(function(item) { let post_id = item.target.getAttribute('data-story-id'); if(!post_id) return false; if(known_ids.indexOf(post_id)+1 == 0 && item.target.nodeName == "ARTICLE" && item.attributeName != "data-visited") { item.target.setAttribute('data-visited', "true"); current_story = item.target; console.log('Пост '+post_id+' прочитан.'); known_ids.push(post_id); return true; } }); }); o.observe(document.querySelector('main > .stories-feed > .stories-feed__container'), {'attributes':true, subtree:true}); window.addEventListener('keyup', function(e) { if(e.key == "f" || e.key == "F" || e.key == "а" || e.key == "А") { /* Нанокостыль */ if(prev_story == current_story) { current_story = current_story.nextElementSibling; } next_story = current_story.nextElementSibling; document.querySelectorAll('article.story[data-visited="true"]').forEach(function(item) { item.style.display = "none"; }); try { next_story.scrollIntoView({behavior:'smooth', 'block':'start'}); } catch(e) { console.log('Не удалось проскроллить к следующему посту.'); } prev_story = current_story; current_story = next_story; } }); } } if(config.get('great_comment_links')) { var makeCommentGreatAgain = function(element) { let comment_tools = element.querySelector('.comment__tools'); let branch_link = comment_tools.querySelector('[data-role="link"]'); let branch_link_href = branch_link.getAttribute('href'); branch_link.setAttribute('aria-label', 'Ссылка на ветку комментариев'); let comment_link = document.createElement('a'); comment_link.className = 'comment__tool hint'; comment_link.setAttribute('data-role', 'comment_link'); comment_link.setAttribute('aria-label', 'Ссылка на комментарий'); comment_link.setAttribute('href', branch_link_href.replace('?cid=', '#comment_')); comment_link.innerText = '#'; comment_tools.insertBefore(comment_link, branch_link); element.setAttribute('data-great', "true"); }; var makeCommentsGreatAgain = function() { document.querySelectorAll('.comment:not([data-great])').forEach(function(item) { makeCommentGreatAgain(item); }); }; makeCommentsGreatAgain(); var jumpto = function() { if(window.location.hash.indexOf('comment_')+1) { var comment = document.querySelector(window.location.hash); if(comment) { comment.scrollIntoView({behavior:'smooth', 'block':'start'}); } else { //В списке комментариев нет загруженного комментария var more_comments = document.querySelector('button.comments__more-button'); if(more_comments) { more_comments.scrollIntoView({behavior:'smooth', 'block':'start'}); more_comments.className = more_comments.className += " button_yellow"; (function() { setTimeout(function() { console.log('release');more_comments.className = more_comments.className.replace(' button_yellow', ''); }, 2500); })(); } } } }; if(window.location.href.indexOf('/story/')+1) { jumpto(); document.querySelector('button.comments__more-button').addEventListener('click', function() { var emitted = false; var e = document.createEvent('Event'); e.initEvent('comments.loaded', true, true); var comment_observer = new MutationObserver(function(records) { records.some(function(record) { if(record.target.className.indexOf('comment')+1) { document.dispatchEvent(e); comment_observer.disconnect(); return true; } else { return false; } }); }); comment_observer.observe(document.querySelector('section.comments'), {'childList':true, 'subtree':true}); }); document.addEventListener('comments.loaded', function() { console.log('comments loaded emitted'); makeCommentsGreatAgain(); jumpto(); }); } } })();