SurferSEO Trigger Share & copy links

Adds a button to trigger the "Share" action on SurferSEO drafts and automatically copies the link text, with a popup notification when copied.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// ==UserScript==
// @name         SurferSEO Trigger Share & copy links
// @namespace    http://tampermonkey.net/
// @version      1.0
// @description  Adds a button to trigger the "Share" action on SurferSEO drafts and automatically copies the link text, with a popup notification when copied.
// @match        https://app.surferseo.com/drafts/*
// @grant        none
// @author       mhshan
// @license      MIT
// ==/UserScript==

(function () {
    'use strict';

    // Function to create the custom button
    function createCustomButton() {
        const button = document.createElement('button');
        button.textContent = 'Trigger Share & copy link';
        button.style.position = 'fixed';
        button.style.top = '10px';
        button.style.right = '800px';
        button.style.padding = '10px';
        button.style.backgroundColor = '#FA4032';
        button.style.color = 'white';
        button.style.border = 'none';
        button.style.borderRadius = '5px';
        button.style.cursor = 'pointer';
        button.style.zIndex = '1000';

        // Append button to body
        document.body.appendChild(button);

        // Add click event to the button
        button.addEventListener('click', function () {
            // Find and click the "Share" button
            const shareButton = document.querySelector('button[data-tour="share-content-editor"]');
            if (shareButton) {
                shareButton.click();
                console.log("Share button clicked.");
                setTimeout(copyLinkText, 100); // Wait for 1 seconds before attempting to copy the link
            } else {
                alert('Share button not found.');
            }
        });
    }

    // Function to copy the text content of the link element
    function copyLinkText() {
        // Wait for the link element to be present
        const linkElement = document.querySelector("span.block.truncate");

        if (linkElement) {
            // Get the text content of the link element
            let textContent = linkElement.textContent;

            // Create a temporary textarea to copy the text content to the clipboard
            const textArea = document.createElement('textarea');
            textArea.value = textContent;
            document.body.appendChild(textArea);

            // Select the text in the textarea
            textArea.select();
            textArea.setSelectionRange(0, 99999); // For mobile devices

            // Copy the selected text to the clipboard
            document.execCommand('copy');

            // Clean up by removing the temporary textarea
            document.body.removeChild(textArea);

            console.log("Link text copied:", textContent);

            // Show the popup notification
            showCopiedNotification();
        } else {
            console.log("Link element not found.");
        }
    }

    // Function to show a popup notification with animation
    function showCopiedNotification() {
        const notification = document.createElement('div');
        notification.textContent = 'Link copied!';
        notification.style.position = 'fixed';
        notification.style.top = '10px';
        notification.style.right = '400px';
        notification.style.padding = '10px 20px';
        notification.style.backgroundColor = '#99FF74';
        notification.style.color = '#00681C';
        notification.style.borderRadius = '5px';
        notification.style.fontSize = '14px';
        notification.style.zIndex = '1000';
        notification.style.opacity = '0';
        notification.style.transition = 'opacity 0.5s ease-out';
        document.body.appendChild(notification);

        // Trigger the fade-in animation
        setTimeout(() => {
            notification.style.opacity = '1';
        }, 10);

        // After 2 seconds, fade out and remove the notification
        setTimeout(() => {
            notification.style.opacity = '0';
            setTimeout(() => {
                document.body.removeChild(notification);
            }, 500); // After the fade-out animation finishes
        }, 2000);
    }

    // Wait until the page has fully loaded
    window.addEventListener('load', function () {
        // Create the custom button
        createCustomButton();
    });
})();