您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Tampermonkey script to add a copy button to pearltrees 'notes'.
// ==UserScript== // @name Pearltrees Copy text button // @namespace http://tampermonkey.net/ // @version 2024-11-14 // @description Tampermonkey script to add a copy button to pearltrees 'notes'. // @author You // @match https://www.pearltrees.com/* // @license GNU GPLv3 // @icon data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw== // @grant none // ==/UserScript== (function() { 'use strict'; let styleSheet = ` .copyBtn { padding:0; margin:0; font-size: 15px; background:rgb(0,0,0,.65); color:rgb(255,255,255); border-radius:50%; border-color:rgb(0,0,0,.65); width:20px; height:20px; } `; let s = document.createElement('style'); s.type = "text/css"; s.innerHTML = styleSheet; (document.head || document.documentElement).appendChild(s); var flag = false ; var output = " "; var previousOutput = null; var previousButtonContainer = null; var previousContainer = null; var pElements = null; var previousPElements = null; var previousPElementsId = null; var vraiContainer=""; let JSP = 1; var previousVraiContainerId = ""; function checkParagraphCount() { const container = document.getElementsByClassName('scrap-selection-container'); // console.log("container.length : " + container.length + " || flag : "+flag + "|| JSP : " + JSP) if(container.length!==0 && flag === true ){ for(let i=0; i<container.length;i++) { vraiContainer = container[i]; // console.log("vraiContainer.id = " + vraiContainer.id + "// previousVraiContainerId = "+ previousVraiContainerId ) if (vraiContainer.id != previousVraiContainerId ){ // console.log("ALORSPEUTETRE") break } } pElements = vraiContainer.querySelectorAll('p'); if (pElements.length == 0) return // console.log("ABORT THE MISSION" + vraiContainer.id) vraiContainer.style.borderRadius = "15px"; vraiContainer.style.transition = ".7s" vraiContainer.title = "click to copy" vraiContainer.onclick = function() { navigator.clipboard.writeText(output); alert('Text Copied Successfully!') } vraiContainer.onmouseover = function() {vraiContainer.style.background = "rgb(240, 240, 240)"} vraiContainer.onmouseout = function() {vraiContainer.style.background = "rgb(255,255,255)"} // console.log("1er if passe") vraiContainer.id = JSP; previousVraiContainerId = JSP; if (output != " ") previousOutput = output output = ""; for(let i=0; i<pElements.length;i++) { let outputToAdd = pElements[i].textContent output+= outputToAdd + '\n\n' ; } pElements = null; flag = false; previousContainer=container; JSP += 1; // console.log("OUTPUT\\\\\\\\\\\\ " +output + " \\\\\\\\\\\\OUTPUT") // output = ""; // previousButtonContainer = buttonContainer; // console.log(pElements); // console.log(pElementsId) // previousPElementsId = pElementsId; // console.log('FLAG = FALSE') // console.log ( " JPS + = 1" ) } } const observer2 = new MutationObserver(checkParagraphCount); observer2.observe(document.body, { childList: true, subtree: true }); checkParagraphCount(); function checkUrl() { var path = window.location.pathname; var page = path.split("/").pop(); var precedentPath = ""; if(page.startsWith('item') && precedentPath!=path) { flag = true; // console.log('FLAG = TRUE') precedentPath=path; } } checkUrl(); window.addEventListener('popstate', checkUrl); const pushState = history.pushState; const replaceState = history.replaceState; history.pushState = function() { pushState.apply(history, arguments); checkUrl(); }; history.replaceState = function() { replaceState.apply(history, arguments); checkUrl(); }; })();