pikabu-better

17.03.2023, 03:10:05

Чтобы установить этот скрипт, вы сначала должны установить расширение браузера, например Tampermonkey, Greasemonkey или Violentmonkey.

Для установки этого скрипта вам необходимо установить расширение, такое как Tampermonkey.

Чтобы установить этот скрипт, вы сначала должны установить расширение браузера, например Tampermonkey или Violentmonkey.

Чтобы установить этот скрипт, вы сначала должны установить расширение браузера, например Tampermonkey или Userscripts.

Чтобы установить этот скрипт, сначала вы должны установить расширение браузера, например Tampermonkey.

Чтобы установить этот скрипт, вы должны установить расширение — менеджер скриптов.

(у меня уже есть менеджер скриптов, дайте мне установить скрипт!)

Чтобы установить этот стиль, сначала вы должны установить расширение браузера, например Stylus.

Чтобы установить этот стиль, сначала вы должны установить расширение браузера, например Stylus.

Чтобы установить этот стиль, сначала вы должны установить расширение браузера, например Stylus.

Чтобы установить этот стиль, сначала вы должны установить расширение — менеджер стилей.

Чтобы установить этот стиль, сначала вы должны установить расширение — менеджер стилей.

Чтобы установить этот стиль, сначала вы должны установить расширение — менеджер стилей.

(у меня уже есть менеджер стилей, дайте мне установить скрипт!)

// ==UserScript==
// @name        pikabu-better
// @namespace   Violentmonkey Scripts
// @match       https://pikabu.ru/*
// @grant       none
// @version     1.0.1
// @author      Panter
// @description 17.03.2023, 03:10:05
// @license MIT
// ==/UserScript==


function _placeCSS (css) {
  document.body.appendChild(Object.assign(document.createElement('style'), { innerHTML: css }))
}

function _docReady(fn) {
    // see if DOM is already available
    if (document.readyState === "complete" || document.readyState === "interactive") {
        // call on next available tick
        setTimeout(fn, 1)
    } else {
        document.addEventListener("DOMContentLoaded", fn)
    }
}

function _getHotLink () {
  const s = 1199131200000;
  const currentDay = (new Date().setHours(0,0,0,0) - s)/24/60/60/1000
  const prevDay = currentDay - 1

  return `https://pikabu.ru/search?r=3&d=${prevDay}&D=${currentDay}`
}


function removeUnnecessary () { // not works normally, better to use ublock origin to remove elements
    const selectors = [
'div.menu_vertical.menu.sidebar-block__content_hr.sidebar-block__content:nth-of-type(6)',
'div.menu_vertical.menu.sidebar-block__content_hr.sidebar-block__content:nth-of-type(5)',
'div.sidebar-block_border.sidebar-block:nth-of-type(1) > .sidebar-block__header',
'.sidebar-footer.sidebar-block-links.sidebar-block_border.sidebar-block',
'.sidebar-achievements.sidebar-block__content',
'.profile-ban.sidebar-block__content',
'.profile-info.sidebar-block__content',
'.messengers-widget.sidebar-block_border.sidebar-block',
'.keyboard-controls.sidebar-block_border.sidebar-block',
'.community-info-block.sidebar-block_border.sidebar-block',
'.communities-list.sidebar-block_border.sidebar-block',
'.sidebar-public-ratings.sidebar-block_border.sidebar-block',
'.button_width_100.button_add.button_success.button',
'.button_width_100.button_create-community.button',
'#menu-courses',
'#menu-companies',
'#menu-communities',
'.header-right-menu__item.header-right-menu__notification',
'.hint_bottom.hint.logo',
'.hint.story__share',
'.carousel_short-stories.carousel_small.carousel',
'.footer__inner',
'.story__community-subscribe',
'.story__community',
'.story__series',
'.recommended-communities.carousel_small.carousel',
'.story__to-comments.story__comments-link',
'.header-menu__extra-wrapper'
]

  for (const selector of selectors) {
    Array.from(document.querySelectorAll(selector) || []).forEach(n => { n.style = 'display:none !important;' });
  }
}

function replaceHot() {
  const hotLink = _getHotLink()
  const hotA = document.querySelector('.header-menu__item[data-feed-key="hot"] a')
  hotA.href = hotLink

  if (window.location.href.includes(hotLink)) {
    _placeCSS`.section_gray.stories-search__filters { display: none; }`

    _docReady(rollUpFilters)
  }
}

function rollUpFilters () {
  const toggleFn = () => {
    const elem = document.querySelector('.section_gray.stories-search__filters')

      if (elem.style.display === 'none') elem.style.display = 'block'
      else elem.style.display = 'none'
  }

  const row = document.querySelector('.stories-search .input_section')

  btn = document.createElement('button')
  btn.className = "button button_success"
  btn.innerHTML = "Фильтры"
  btn.style.marginLeft = "10px"
  btn.type = 'button'
  btn.onclick = toggleFn

  toggleFn()

  row.appendChild(btn)
}

function placeRecommended () { // old hot button
  const rec = document.createElement('div')

  rec.innerHTML = '<a href="/#recommended">Рекомендации</a>'
  rec.className = 'header-menu__item'
  rec.setAttribute('data-feed-key', 'recommended')

  document.querySelector('.header-menu').appendChild(rec)
}

function redirectToHot () {
  const l = window.location.href.length
  if (l === 17 || l === 18) window.location.href = _getHotLink()
}

function addCSS () {
  _placeCSS`
  .header__inner {
    max-width: 1000px !important;
    margin: 0 auto;
  }

  .header__menu {
    justify-content: left !important;
  }

  .header-menu {
    padding-left: 0 !important;
  }

  .header_search-expanded .header__right-menu {
      flex-grow:1
  }

  .header_search-expanded .header__right-menu .header-right-menu__search {
      flex-grow: 1;
      max-width: 250px;
      min-width: 120px;
      border-radius: 2px;
      border: 1px solid var(--color-black-440);
      background-color: var(--color-bright-800)
  }

  .header_search-expanded .header__right-menu .header-right-menu__search .input__box {
      opacity: 1
  }

  .header_search-expanded .header__right-menu .header-right-menu__search button>.icon.icon--ui__search {
      fill: var(--color-black-600);
      color: var(--color-black-600)
  }

  .stories-search .input.input_section {
    height: 50px;
    overflow: hidden;
  }
  `
}

redirectToHot()
addCSS()
// removeUnnecessary()
_docReady(replaceHot)
_docReady(placeRecommended)