ВКонтакте: исправление новомодных названий меню

VK обозвал группы сообществами, сообщения – мессенджером, а новости – лентой. Не беда, ведь есть этот скрипт! Работает настолько быстро, насколько это возможно

Zainstaluj skrypt?
Skrypt zaproponowany przez autora

Może Ci się również spodobać. ВКонтакте: синие лайки без реакций

Zainstaluj skrypt
// ==UserScript==
// @name          ВКонтакте: исправление новомодных названий меню
// @description   VK обозвал группы сообществами, сообщения – мессенджером, а новости – лентой. Не беда, ведь есть этот скрипт! Работает настолько быстро, насколько это возможно
// @namespace     https://greasyfork.org/users/424058
// @version       3.4.0
// @compatible    Chrome
// @compatible    Opera
// @compatible    Firefox
// @author        https://vk.me/id222792011
// @icon          https://t1.gstatic.com/faviconV2?client=SOCIAL&url=http://vk.com&size=32
// @match         https://vk.com/*
// @match         https://m.vk.com/*
// @require       https://cdnjs.cloudflare.com/ajax/libs/arrive/2.5.1/arrive.min.js#sha512-S6/M9HI1VpYN4XEK7JQjSyroulxrXPBX82ckxB/vWa9jR1XVaiFgSNRSDrgQ0U/FmFwkkhhIPq33ZKE5ZoDBHQ==
// @run-at        document-start
// @grant         none
// @noframes
// ==/UserScript==

// Есть вопросы или предложения? Можно написать мне тут: vk.me/id222792011 или через систему обсуждений Greasy Fork

/*
 История изменений:

 3.4.0 (06.12.2024) Для ПК версии в левом меню "Новости" переименовали на "Лента". Исправлено
                    Другие незначительные исправления и улучшения связанные с работой скрипта
 3.3.6 (15.11.2024) Для ПК и мобильной версии скрипт не работал в левом меню. Исправлено
 3.3.5 (18.08.2024) Для мобильной версии скрипт не работал в левом меню. Исправлено
 3.3.4 (31.10.2023) Для мобильной версии скрипт работал некорректно в левом меню. Исправлено
 3.3.3 (07.05.2023) Для ПК версии скрипт снова перестал работать в левом меню. Исправлено
 3.3.2 (17.02.2023) Для ПК версии скрипт перестал работать в левом меню. Исправлено
 3.3.1 (22.01.2022) Исправление нерабочей иконки скрипта в меню Tampermonkey
 3.3.0 (15.01.2022) Исправлено замедление которое случилось из-за 3.1.2
 3.2.0 (15.01.2022) Теперь работает и для мобильной версии (m.vk.com)
 3.1.2 (12.04.2021) Исправлен редкий случай когда скрипт не работал если вкладка была открыта в фоне
 3.0.1 (19.11.2020) Исправление заголовка вкладки не работало если перейти по ссылке типа vk.me/id1. Исправлено
 3.0.0 (13.11.2020) Обновлена основа скрипта. Теперь скрипт работает настолько быстро, насколько это возможно
 2.0.0 (07.11.2020) Обновлена основа скрипта. Удаление рекламы AliExpress из слов "Скидка", "Распродажа" и т.д.
                    Подробнее о рекламе AliExpress: https://habr.com/ru/news/t/526524/
 1.1.0 (03.10.2020) "Мессенджер" исправляется на "Сообщения"
 1.0.0 (19.12.2019) Релиз. Исправление "Сообщества" на "Группы" в левом меню и в заголовке вкладки
*/

/* jshint esversion: 6 */

(function() {
  'use strict';

  const NODES_TO_CHECK = {
    pc: [
      '#l_nwsf > a > span > span > div',
      '#l_msg > a > span > span > div',
      '#l_gr  > a > span > span > div',
    ].join(', '),

    mobile: [
      'nav > ol > li > a[href="/mail"] div.vkuiHeadline--level-1',
      'nav > ol > li > a[href="/groups"] div.vkuiHeadline--level-1',
    ].join(', '),
  };

  const REPLACE_LIST = {
    'Лента': 'Новости',
    'Сообщества': 'Группы',
    'Мессенджер': 'Сообщения',
  };

  (function main() {
    if (!document.title || !document.documentElement) {
      return setTimeout(main);
    }

    handleTitle();

    if (location.hostname.startsWith('m.')) {
      document.arrive(NODES_TO_CHECK.mobile, { existing: true }, fixNodeWord);
    } else {
      document.arrive(NODES_TO_CHECK.pc, { existing: true }, fixNodeWord);
    }
  }());


  // utils -------------------------------------------------------------------

  function currentPathIsGroupsOrMail() {
    return !!(
      location.pathname === '/im' ||
      location.pathname === '/mail' ||
      location.pathname === '/groups' ||
      location.pathname === '/al_im.php' ||
      location.pathname.match(/^\/write\d?/)
    );
  }

  function fixNodeWord(node) {
    const textNode = node.childNodes[0];

    if (textNode.nodeType !== Node.TEXT_NODE) return;

    for (const sought in REPLACE_LIST) {
      const replaceTo = REPLACE_LIST[sought];

      if (textNode.textContent === sought) {
        textNode.textContent = replaceTo;
        return;
      }
    }
  }

  function fixStringWords(str) {
    for (const sought in REPLACE_LIST) {
      const replaceTo = REPLACE_LIST[sought];

      str = str.replace(sought, replaceTo);
    }

    return str;
  }

  function handleTitle() {
    const titleNode = document.querySelector('title');

    // чтобы не переименовывать вкладку, например,
    // с каким-нибудь видео под названием "Сообщества..."
    if (currentPathIsGroupsOrMail()) {
      document.title = fixStringWords(document.title);
    }

    const titleObs = new MutationObserver((mutations, observer) => {
      if (currentPathIsGroupsOrMail()) {
        document.title = fixStringWords(document.title);
        observer.takeRecords();
      }
    });

    titleObs.observe(titleNode, { childList: true });
  }

  // ------------------------------------------------------------------- utils
}());