pikabu-better

17.03.2023, 03:10:05

You will need to install an extension such as Tampermonkey, Greasemonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey to install this script.

You will need to install an extension such as Tampermonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey or Userscripts to install this script.

You will need to install an extension such as Tampermonkey to install this script.

You will need to install a user script manager extension to install this script.

(I already have a user script manager, let me install it!)

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

(I already have a user style manager, let me install it!)

// ==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)