CamGirlFinder Fix Redirect

Add a button on CamGirlFinder that fix the redirect on certain camsite.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// ==UserScript==
// @name         CamGirlFinder Fix Redirect
// @namespace    https://greasyfork.org/fr/users/1468290-payamarre
// @version      1.3
// @license      MIT
// @description  Add a button on CamGirlFinder that fix the redirect on certain camsite.
// @author       NoOne
// @match        http://camgirlfinder.net/models/*
// @match        https://camgirlfinder.net/models/*
// @grant        none
// ==/UserScript==

(function () {
    'use strict';

    const svgIcon = `<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" style="width: 25px; height: 25px;">
        <path stroke-linecap="round" stroke-linejoin="round" d="M9 17.25v1.007a3 3 0 0 1-.879 2.122L7.5 21h9l-.621-.621A3 3 0 0 1 15 18.257V17.25m6-12V15a2.25 2.25 0 0 1-2.25 2.25H5.25A2.25 2.25 0 0 1 3 15V5.25m18 0A2.25 2.25 0 0 0 18.75 3H5.25A2.25 2.25 0 0 0 3 5.25m18 0V12a2.25 2.25 0 0 1-2.25 2.25H5.25A2.25 2.25 0 0 1 3 12V5.25" />
    </svg>`;

    function addRedirectButton() {
        if (document.querySelector('button[data-role="redirect-fix"]')) return;

        const currentUrl = window.location.href;
        const modelName = currentUrl.split('/').pop();

        const modelLink = document.querySelector('a.nowrap[rel="nofollow"]');
        if (!modelLink) return;

        const button = document.createElement('button');
        button.dataset.role = "redirect-fix";
        button.innerHTML = svgIcon;
        Object.assign(button.style, {
            cursor: 'pointer',
            background: 'none',
            padding: '0',
            marginLeft: '10px',
            height: '35px',
            width: '35px',
            display: 'inline-flex',
            alignItems: 'center',
            justifyContent: 'center',
            verticalAlign: 'middle',
            color: '#f5f5f5',
            borderRadius: '8px',
            border: '1px solid #f5f5f5',
            transition: 'all 0.9s ease'
        });

        button.addEventListener('mouseover', () => {
            button.style.color = '#272727';
            button.style.background = '#f5f5f5';
        });
        button.addEventListener('mouseout', () => {
            button.style.color = '#f5f5f5';
            button.style.background = 'none';
        });

        button.addEventListener('click', () => {
            let url;
            if (currentUrl.includes('/models/cb/')) url = `https://chaturbate.com/${modelName}`;
            else if (currentUrl.includes('/models/sc/')) url = `https://stripchat.com/${modelName}`;
            else if (currentUrl.includes('/models/c4/')) url = `https://cam4.com/${modelName}`;
            else if (currentUrl.includes('/models/cs/')) url = `https://camsoda.com/${modelName}`;
            else if (currentUrl.includes('/models/f4f/')) url = `https://flirt4free.com/${modelName}`;
            else if (currentUrl.includes('/models/bc/')) url = `https://bongacams.com/${modelName}`;
            else if (currentUrl.includes('/models/ctv/')) url = `https://cherry.tv/${modelName}`;
            else if (currentUrl.includes('/models/im/')) url = `https://imlive.com/live-sex-chat/cam-girls/${modelName}`;
            else if (currentUrl.includes('/models/lj/')) url = `https://livejasmin.com/${modelName}`;
            else if (currentUrl.includes('/models/stv/')) url = `https://showup.tv/${modelName}`;
            else if (currentUrl.includes('/models/sm/')) url = `https://streamate.com/cam/${modelName}`;
            else if (currentUrl.includes('/models/sr/')) url = `https://streamray.com/${modelName}`;
            else if (currentUrl.includes('/models/xl/')) url = `https://xlovecam.com/chat/${modelName}`;
            else if (currentUrl.includes('/models/atv/')) url = `https://amateur.tv/${modelName}`;
            else return alert("No model find");

            window.open(url, '_blank');
        });

        modelLink.parentNode.insertBefore(button, modelLink.nextSibling);
    }

    const observer = new MutationObserver((mutations, obs) => {
        addRedirectButton();
        obs.disconnect();
    });

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

    window.addEventListener('load', addRedirectButton);
})();