// ==UserScript== // @name Хабраторт // @id habratort // @description Возврат старого дизайна Хабрахабра // @author Vladimir Atamanenko // @version 3.0 // @include http*://habr.com/* // @match *://habr.com/* // @namespace https://greasyfork.org/users/216669 // @downloadURL https://update.greasyfork.icu/scripts/372721/%D0%A5%D0%B0%D0%B1%D1%80%D0%B0%D1%82%D0%BE%D1%80%D1%82.user.js // @updateURL https://update.greasyfork.icu/scripts/372721/%D0%A5%D0%B0%D0%B1%D1%80%D0%B0%D1%82%D0%BE%D1%80%D1%82.meta.js // ==/UserScript== /* Определяем данные пользователя */ function defineUser() { let user = { status: "guest", // guest, readonly, user csrf: "", tracker_notifies: "", dialogs_notifies: "", name: "", votes: "", avatar: "", ppa: "" }; if (document.querySelector('.user-info__nickname') !== null && document.querySelector('.btn_navbar_user-dropdown img') !== null) { user.name = document.querySelector('.user-info__nickname').innerHTML; user.avatar = document.querySelector('.btn_navbar_user-dropdown img').src; if (document.querySelector('.btn_navbar_tracker .badge_count_navbar') !== null) { user.tracker_notifies = document.querySelector('.btn_navbar_tracker .badge_count_navbar').innerHTML; if (user.tracker_notifies != "") { user.tracker_notifies = '+' + user.tracker_notifies; } } if (document.querySelector('.btn_navbar_user-dropdown .badge_count_navbar') !== null) { user.dialogs_notifies = document.querySelector('.btn_navbar_user-dropdown .badge_count_navbar').innerHTML; if (user.dialogs_notifies != "") { user.dialogs_notifies = '+' + user.dialogs_notifies; } } let logout_raw = document.querySelector("a[href^='https://habr.com/logout/']").href.split("/"); logout_raw.splice(-1); user.csrf = logout_raw.slice(-1)[0]; if (document.querySelector('.btn_navbar_write-topic').href.indexOf('sandbox') >= 0) { user.status = 'readonly'; } else { user.status = 'user'; user.votes = document.querySelector('.dropdown__user-stats').innerHTML; user.votes = user.votes.replace(/карму и публикации/g, 'карму/топики'); user.votes = user.votes.replace(/, и еще/g, ' и'); user.votes = '' + user.votes + ''; if (document.querySelector('.ppa-balance') !== null) { user.ppa = document.querySelector('.ppa-balance').innerHTML; } } } return user; } function buildHeader(user) { document.querySelector('.layout__row_services').style.display = 'none'; document.querySelector('.main-navbar').innerHTML = document.querySelector('.main-navbar__section_left').innerHTML; document.querySelector('.main-navbar').parentNode.innerHTML += ` `; document.querySelector('.btn_search-close').remove(); document.querySelector('.search-form').className = ''; document.querySelector('.search-form__field-wrapper').className = ''; document.querySelector('#search-form-field').parentNode.innerHTML += ''; document.querySelector('#search-form').innerHTML = document.querySelector('#search-form label').innerHTML; document.querySelector('.nav-links').remove(); document.querySelector('.logo-wrapper').className = 'userpanel'; document.querySelector('.userpanel').outerHTML += ''; if (user.status === 'guest') { document.querySelector('.userpanel').innerHTML = 'войти зарегистрироваться'; } else { let ppa_link = ""; if (user.ppa !== '') { ppa_link = 'ппа'+user.ppa+''; } document.querySelector('.userpanel').innerHTML = ''+user.name+'' + 'настройки' + ppa_link + 'выход
' + 'трекер'+user.tracker_notifies+'' + 'диалоги'+user.dialogs_notifies+'' + 'избранное
' + user.votes; } let flows_dropdown = document.querySelector('.page-header'); if (typeof flows_dropdown !== "undefined" && flows_dropdown !== null) { if (flows_dropdown.innerHTML.indexOf('btn_flow-toggle') >= 0) { flows_dropdown.remove(); } } } function addStyles() { //https://stackoverflow.com/questions/5113105/manipulating-innerhtml-removes-the-event-handler-of-a-child-element document.body.insertAdjacentHTML('beforeend', ``); } function updateTabsMenu() { let tabs_menu = document.querySelector('.tabs-menu'); if (tabs_menu !== null) { tabs_menu.innerHTML = tabs_menu.innerHTML.replace(/Все подряд/g,'Тематические'); } let active_item = document.querySelector('.tabs-menu__item-text_active'); if (active_item !== null) { active_item.parentNode.classList.add('active'); } let toggle_menu = document.querySelector('.toggle-menu'); if (toggle_menu !== null) { let toggle_menu_items = toggle_menu.getElementsByClassName('toggle-menu__item'); let html = toggle_menu.innerHTML; html = html.replace(/Сутки/g, 'За сутки'); html = html.replace(/Неделя/g, 'За неделю'); html = html.replace(/Месяц/g, 'За месяц'); html = html.replace(/Год/g, 'За год'); toggle_menu.innerHTML = html; if (html.indexOf('За сутки') >= 0) { toggle_menu_items[toggle_menu_items.length-1].outerHTML += `
  • За всё время
  • `; } if (html.indexOf('Без порога') >= 0) { toggle_menu_items[toggle_menu_items.length-1].outerHTML += `
  • Песочница
  • `; } } let tabsMenuItems = document.querySelectorAll('.tabs-menu__item'); if (tabsMenuItems !== null && tabsMenuItems.length > 0) { if (tabsMenuItems[0].innerHTML.indexOf('Лучшие') >= 0) { tabsMenuItems[0].classList.add('narrow'); } if (tabsMenuItems[tabsMenuItems.length - 1].classList.contains('active')) { let tabs_level_bottom = document.querySelector('.tabs__level_bottom'); if (tabs_level_bottom !== null) { tabs_level_bottom.classList.add('right'); } } } } function moveSimilarPosts() { let defaultBlocksHeaders = document.querySelectorAll('.default-block__header'); if (defaultBlocksHeaders !== null) { for (let defaultBlockHeader of defaultBlocksHeaders) { if (defaultBlockHeader.innerHTML.indexOf('Похожие') >= 0) { defaultBlockHeader.parentNode.classList.add('similar-posts'); let newBlock = defaultBlockHeader.parentNode.outerHTML; defaultBlockHeader.parentNode.remove(); let sidebarSticky = document.querySelector('.sidebar_content-area .js-ad_sticky'); sidebarSticky.innerHTML += newBlock; sidebarSticky.outerHTML = sidebarSticky.innerHTML; } } } } function detectActiveMenuItem() { let active_item = 'посты'; // посты, пользователи, хабы, компании if (window.location.href.indexOf('users') >= 0 || window.location.href.indexOf('auth') >= 0 || window.location.href.indexOf('tracker') >= 0 || window.location.href.indexOf('conversations') >= 0) { active_item = 'пользователи'; } else if (window.location.href.indexOf('hubs') >= 0) { active_item = 'хабы'; } else if (window.location.href.indexOf('companies') >= 0) { active_item = 'компании'; } return active_item; } function updateActiveMenuItem(active_item) { let menu_items = document.querySelectorAll('.main_menu a'); for (let item of menu_items) { if (item.innerHTML == active_item) { item.className = "active"; } else { item.className = ""; } } } function updatePageHeader(user) { let page_header = document.querySelector('.page-header'); if (page_header !== null) { if (page_header.innerHTML.indexOf('Диалоги') >= 0) { document.querySelector("a[href^='/conversations/']").classList.add('active'); } if (page_header.innerHTML.indexOf('Трекер') >= 0) { document.querySelector("a[href^='/tracker/']").classList.add('active'); } if (!page_header.classList.contains('page-header_full') && document.querySelector('.media-obj_conversation-header') === null) { page_header.remove(); } } if (document.location.href.indexOf('users/'+user.name) >= 0) { document.querySelector("a[href^='/users/"+user.name+"']").classList.add('active'); } if (document.location.href.indexOf('users/'+user.name+'/favorites') >= 0) { document.querySelector("a[href^='/users/"+user.name+"/favorites']").classList.add('active'); } if (document.location.href.indexOf('ppa') >= 0) { document.querySelector("a[href^='/ppa']").classList.add('active'); } if (document.location.href.indexOf('auth/settings/profile') >= 0) { document.querySelector("a[href^='/auth/settings/profile/']").classList.add('active'); } } function orthodoxatePublications() { let blocks = document.querySelectorAll('.toggle-menu, .similar-posts .default-block__header-title'); if (blocks !== null && blocks.length > 0) { for (let block of blocks) { block.innerHTML = block.innerHTML.replace(/публикации/g, 'посты'); } } document.querySelector('title').innerHTML = document.querySelector('title').innerHTML.replace(/публикации/g, 'посты'); document.querySelector('title').innerHTML = document.querySelector('title').innerHTML.replace(/Публикации/g, 'Посты'); } function getMegaPosts() { if (document.querySelector('.bmenu_inner') !== null) { let megaPostsLoaded = (document.querySelectorAll('.bmenu_inner .slink a') !== null && document.querySelectorAll('.bmenu_inner .slink a').length > 0); if (megaPostsLoaded) { document.querySelector('#search-form').outerHTML = '
    '+document.querySelector('#search-form').outerHTML+''+document.querySelector('.bmenu_inner').innerHTML+'
    '; } else { setTimeout(getMegaPosts, 500); } } } function marksToFlags() { let allPostMarks = document.querySelectorAll('.post__marks'); if (allPostMarks !== null && allPostMarks.length > 0) { for (let postMarks of allPostMarks) { let spans = postMarks.querySelectorAll('span'); let anchors = postMarks.querySelectorAll('a'); if (anchors.length > 0) { if (spans.length > 0) { spans.concat(anchors); } else { spans = anchors; } } let correctHTML = ''; for (let span of spans) { let type = ''; switch (span.innerHTML) { case 'Новость': type = 'flag_solution'; break; case 'Перевод': type = 'flag_translation'; break; case 'Из песочницы': type = 'flag_sandbox'; break; case 'Tutorial': type = 'flag_tutorial'; break; default: type = 'flag_solution'; break; } span.className = ''; span.classList.add('flag'); span.classList.add(type); correctHTML += span.outerHTML; } let title = postMarks.parentNode.querySelector('.post__title'); if (title !== null) { title.innerHTML += correctHTML; postMarks.remove(); } else { console.log('Не получилось состарить флаги :('); } } } } function replaceDefaultAvatars() { let avatars = document.querySelectorAll('.user-info .default-image_mini, .default-image_medium, .user-popover__image .default-image'); if (avatars !== null && avatars.length > 0) { for (let avatar of avatars) { if (avatar.querySelector('svg') !== null) { avatar = avatar.querySelector('svg'); } avatar.innerHTML = ''; } } } function replaceBadges() { let badges = document.querySelectorAll('.profile-section__user-badge, .h-info-badge'); if (badges !== null && badges.length > 0) { for (let badge of badges) { let type = ''; switch (badge.innerHTML) { case 'Старожил': type = 'oldresident'; break; case 'Захабренный': type = 'habred'; break; case 'Отхабренный': type = 'unhabred'; break; case 'Автор': type = 'author'; break; case 'Звезда': type = 'star'; break; case 'Легенда': type = 'legend'; break; case 'Комментатор': type = 'commentator'; break; case 'Переводчик': type = 'translator'; break; case 'Тролль': type = 'troll'; break; case 'Бета-тестер': type = 'betatester'; break; default: console.log('Неизвестный значок: ' + badge.innerHTML) type = 'unknown'; break; } if (type !== "unknown") { badge.className = ''; badge.classList.add('old-tag'); badge.classList.add(type); badge.innerHTML = ''; } } } } function insertNewPostButton(user) { let tabs = document.querySelector('.content_left .tabs'); if (tabs !== null && user.status !== 'guest') { tabs.insertAdjacentHTML('beforeend', '' + '' + '' ); } } let user = defineUser(); buildHeader(user); updateTabsMenu(); moveSimilarPosts(); let active_item = detectActiveMenuItem(); updateActiveMenuItem(active_item); if (active_item == 'посты') { insertNewPostButton(user); } updatePageHeader(user); addStyles(); orthodoxatePublications(); marksToFlags(); replaceDefaultAvatars(); replaceBadges(); getMegaPosts();