Kinopoisk - FlicksBar Button for Google

Добавляет кнопку "Flicksbar" с подменой ссылки kinopoisk.ru на sspoisk.ru в раздел "Смотреть фильм"

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

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

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 Tampermonkey,才能安裝此腳本

您需要先安裝使用者腳本管理器擴充功能後才能安裝該腳本。

(我已經安裝了使用者腳本管理器,讓我安裝!)

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

(我已經安裝了使用者樣式管理器,讓我安裝!)

// ==UserScript==
// @name         Kinopoisk - FlicksBar Button for Google
// @namespace    https://t.me/flicksbar
// @version      1.0.2
// @description  Добавляет кнопку "Flicksbar" с подменой ссылки kinopoisk.ru на sspoisk.ru в раздел "Смотреть фильм"
// @author       Devitp001
// @match        https://www.google.com/search*
// @icon         https://www.kinopoisk.ru/favicon.ico
// @icon64       https://www.kinopoisk.ru/favicon.ico
// @grant        none
// @license MIT
// ==/UserScript==


(function () {
    'use strict';

    if (!location.hostname.includes('google')) return;

    function log(message) {
        console.log(`[FlicksBar]: ${message}`);
    }

    // Поиск кнопки "Хочу посмотреть"
    function findWishlistButton() {
        return Array.from(document.querySelectorAll('*'))
            .flatMap(el => {
            if (el.shadowRoot) {
                return Array.from(
                    el.shadowRoot.querySelectorAll('[aria-label=" Хочу посмотреть "]')
                );
            }
            return [];
        })
            .concat(
            Array.from(document.querySelectorAll('[aria-label=" Хочу посмотреть "]'))
        );
    }

    // Создание кнопки "F" с точной структурой
    function createFlicksBarButton(referenceElement, redirectURL) {
        const outerDiv = document.createElement('a');
        outerDiv.href = redirectURL;
        outerDiv.target = '_blank';
        outerDiv.rel = 'noopener';
        outerDiv.role = 'button';
        outerDiv.tabIndex = '0';

        // Копируем классы из оригинальной кнопки
        const originalClassList = referenceElement.classList;
        outerDiv.className = [...originalClassList].join(' ');

        // Внутренний контейнер VDgVie...
        const innerContainer = document.createElement('div');
        innerContainer.className = 'VDgVie btku5b fCrZyc NQYJvc qVhvac zqrO0 sLl7de OJeuxf';

        // Обёртка niO4u
        const niO4u = document.createElement('div');
        niO4u.className = 'niO4u';

        // kHtcsd
        const kHtcsd = document.createElement('div');
        kHtcsd.className = 'kHtcsd';

        // d3o3Ad gJdC8e
        const iconWrapper = document.createElement('span');
        iconWrapper.className = 'd3o3Ad gJdC8e';

        // RUoEBe... (иконка)
        const svgContainer = document.createElement('span');
        svgContainer.className = '1RUoEBe K5Jxee z1asCe DoJQd';
        svgContainer.style.height = '20px';
        svgContainer.style.lineHeight = '20px';
        svgContainer.style.width = '20px';

        // SVG
        const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');
        svg.setAttribute('xmlns', 'http://www.w3.org/2000/svg');
        svg.setAttribute('width', '24');
        svg.setAttribute('height', '24');
        svg.setAttribute('viewBox', '0 0 24 24');
        svg.innerHTML = `<path d="M3 3 h18 v4 H6 v6 h14 v4 H6 v10 H2 zm0"/>`;




        svgContainer.appendChild(svg);
        iconWrapper.appendChild(svgContainer);

        kHtcsd.appendChild(iconWrapper);
        niO4u.appendChild(kHtcsd);

        // Текстовая часть
        const textContainer = document.createElement('div');
        textContainer.className = 'QuU3Wb sjVJQd';
        textContainer.setAttribute('aria-hidden', 'true');
        textContainer.textContent = ' FlicksBar ';

        //const textDiv = document.createElement('div');
        //textDiv.setAttribute('aria-hidden', 'true');
        //textDiv.textContent = ' FlicksBar ';

        //textContainer.appendChild(textDiv);

        // Компоновка
        innerContainer.appendChild(niO4u);
        innerContainer.appendChild(textContainer);
        outerDiv.appendChild(innerContainer);

        return outerDiv;
    }

    // Поиск ссылки на Кинопоиск
    function findKinopoiskLink() {
        return Array.from(document.querySelectorAll('a'))
            .filter(link => {
            const href = link.href || '';
            return (
                href.startsWith('https://www.kinopoisk.ru/film/') ||
                href.startsWith('https://www.kinopoisk.ru/series/')
            );
        })[0];
    }

    // Подмена ссылки kinopoisk.ru на sspoisk.ru
    function getRedirectURL(kinopoiskLink) {
        if (!kinopoiskLink) return null;

        const kinopoiskHref = kinopoiskLink.href;
        const sspoiskHref = kinopoiskHref.replace('kinopoisk.ru', 'sspoisk.ru');

        // Вариант 1: Переход напрямую на sspoisk.ru
        return sspoiskHref;

        // Вариант 2: С редиректом через flicks.bar (если нужно)
    }

    // Вставка кнопки "F"
    function injectFButtonBeforeWishlist(wishlistButton) {
        const container = wishlistButton.closest('div, span')?.parentElement;
        if (!container) return;

        const existing = container.querySelector('a[href*="sspoisk.ru"]');
        if (existing) return;

        // Найдём ссылку на Кинопоиск
        const kinopoiskLink = findKinopoiskLink();
        const redirectURL = getRedirectURL(kinopoiskLink);

        if (!redirectURL) {
            log('Не удалось найти ссылку на Кинопоиск');
            return;
        }

        const fButton = createFlicksBarButton(wishlistButton, redirectURL);
        container.insertBefore(fButton, wishlistButton);
        log('Добавлена кнопка "F" перед "Хочу посмотреть"');
    }

    // Наблюдатель за изменениями DOM
    const observer = new MutationObserver((mutationsList) => {
        for (const mutation of mutationsList) {
            if (mutation.type === 'childList') {
                const wishlistButton = findWishlistButton()[0];
                if (wishlistButton) {
                    injectFButtonBeforeWishlist(wishlistButton);
                }
            }
        }
    });

    observer.observe(document.body, { childList: true, subtree: true });

    // Первоначальный запуск
    const wishlistButton = findWishlistButton()[0];
    if (wishlistButton) {
        injectFButtonBeforeWishlist(wishlistButton);
    }
})();