您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Adds a button to copy name of VOD. Useful when creating series of VODs with episode names.
// ==UserScript== // @name Twitch VOD Copy Name Button // @namespace http://tampermonkey.net/ // @version 1 // @description Adds a button to copy name of VOD. Useful when creating series of VODs with episode names. // @author Leonardo Vendrame // @match https://dashboard.twitch.tv/u/*/content/video-producer // @icon https://www.google.com/s2/favicons?sz=64&domain=twitch.tv // @grant none // @license MIT // ==/UserScript== function createCopyButtons() { document.querySelectorAll('[data-target="video-card"]').forEach(nod => { //console.log(nod); let divButton = document.createElement("div"); divButton.classList.add("copy-button-class"); divButton.style.display = "flex"; divButton.style.alignItems = "center"; divButton.style.justifyContent = "center"; let copyButton = document.createElement("button"); copyButton.innerHTML = `<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-copy" viewBox="0 0 16 16"> <path fill-rule="evenodd" d="M4 2a2 2 0 0 1 2-2h8a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2zm2-1a1 1 0 0 0-1 1v8a1 1 0 0 0 1 1h8a1 1 0 0 0 1-1V2a1 1 0 0 0-1-1zM2 5a1 1 0 0 0-1 1v8a1 1 0 0 0 1 1h8a1 1 0 0 0 1-1v-1h1v1a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h1v1z"/> </svg>`; copyButton.style.backgroundColor = "#2f2f35"; copyButton.style.width = "35px"; copyButton.style.height = "35px"; copyButton.style.padding = "5px"; copyButton.style.display = "flex"; copyButton.style.alignItems = "center"; copyButton.style.justifyContent = "center"; copyButton.style.borderRadius = "4px"; copyButton.style.marginRight = "10px"; // Attach the click event to the copyButton before cloning copyButton.onclick = function() { let self = this; let textToCopy = nod.querySelector('[data-a-target="video-card-container"]').firstChild.firstChild.textContent; navigator.clipboard.writeText(textToCopy) .then(() => { //console.log(self.style); self.style.backgroundColor = 'black'; setTimeout(function() {self.style.backgroundColor = '#2f2f35';}, 600); }) .catch(err => { console.error('Failed to copy text: ', err); }); }; // Append the button to the div and then add to the target node divButton.appendChild(copyButton); nod.style.display = "flex"; nod.appendChild(divButton); }); } (async function() { 'use strict'; await new Promise(r => setTimeout(r, 2000)); document.querySelector('[aria-label="Next Page"]').addEventListener("click", async function() { await new Promise(r => setTimeout(r, 1000)); createCopyButtons(); }); document.querySelector('[aria-label="Previous Page"]').addEventListener("click", async function() { await new Promise(r => setTimeout(r, 1000)); createCopyButtons(); }); createCopyButtons(); })();