pikabu-better

17.03.2023, 03:10:05

Dovrai installare un'estensione come Tampermonkey, Greasemonkey o Violentmonkey per installare questo script.

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

Dovrai installare un'estensione come Tampermonkey o Violentmonkey per installare questo script.

Dovrai installare un'estensione come Tampermonkey o Userscripts per installare questo script.

Dovrai installare un'estensione come ad esempio Tampermonkey per installare questo script.

Dovrai installare un gestore di script utente per installare questo script.

(Ho già un gestore di script utente, lasciamelo installare!)

Dovrai installare un'estensione come ad esempio Stylus per installare questo stile.

Dovrai installare un'estensione come ad esempio Stylus per installare questo stile.

Dovrai installare un'estensione come ad esempio Stylus per installare questo stile.

Dovrai installare un'estensione per la gestione degli stili utente per installare questo stile.

Dovrai installare un'estensione per la gestione degli stili utente per installare questo stile.

Dovrai installare un'estensione per la gestione degli stili utente per installare questo stile.

(Ho già un gestore di stile utente, lasciamelo installare!)

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