您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Appends the each annotation text to a textbox box below the video for easy copying.
// ==UserScript== // @name YouTube Annotation Ripper // @namespace http://www.diamonddownload.weebly.com // @version 1.3.2 // @description Appends the each annotation text to a textbox box below the video for easy copying. // @include *youtube.*/watch?v=* // @copyright 2014+, RGSoftware // @run-at document-body // @author R.F Geraci // @grant GM_notification // @icon64 http://icons.iconarchive.com/icons/simekonelove/modern-web/64/youtube-icon.png // ==/UserScript== var apParent, Anno, cDiv,i, txtbox, Interval, TextboxWidth, TextboxHeight, TextboxMargin, TextboxResize, TextboxBorder, TextboxOutline, InitialMsg, TextboxReadOnly, CompletedAnnotationNewClassName, MissingHTMLErrorMsg, IdleButtonImage, ToggleButtonParent, ToggleButton, ButtonImage, Ton = false, ActiveButtonImage, HoverButtonImage, Shown = false, TextboxPadding, Title; //=========================CUSTOM SETTINGS========================================================== Interval = 1000; TextboxWidth = "99%"; TextboxHeight = "95%"; TextboxResize = "none"; TextboxBorder = "none"; TextboxOutline = "none"; TextboxReadOnly = "true"; InitialMsg = "‒‒‒‒‒‒‒‒‒ Annotations from the video will appear here ‒‒‒‒‒‒‒‒‒"; MissingHTMLErrorMsg = "A YouTube element is missing or has been renamed. 'YouTube Annotation Grabber' code must be updated."; CompletedAnnotationNewClassName = "inner-done-text"; IdleButtonImage = "https://i.imgur.com/e4QIe2b.png"; ActiveButtonImage = "https://i.imgur.com/1xqKemW.png"; HoverButtonImage = "https://i.imgur.com/VWqFE5l.png"; //=================================================================================================== //-------------------------------------- function CreateElements(){ apParent = document.getElementById('watch7-content'); Anno = document.getElementsByClassName('inner-text'); Title = document.createElement("p"); Title.innerText = InitialMsg; Title.setAttribute('style', 'z-index: -1; text-align: center; padding: 0px; position: relative; top: -50px; height: 0px; -webkit-transition: top 1s, padding 1s, height 1s;'); apParent.insertBefore(Title, apParent.firstChild); cDiv = document.createElement('div'); cDiv.id = 'cDiv'; cDiv.setAttribute('style', 'width: 100%; -webkit-transition: height 1s; text-align: center; height: 0px; background: white; display: block; overflow: hidden; box-shadow: 0 1px 2px rgba(0,0,0,.1); text-align: center;'); //border-bottom: 1px solid #E6E6E6; //border-top: 1px solid #E6E6E6; border-bottom: 1px solid #E6E6E6; apParent.insertBefore(cDiv, apParent.childNodes[1]); txtbox = document.createElement('textarea'); txtbox.id = 'cDivTxtBox'; txtbox.setAttribute('readonly', TextboxReadOnly); txtbox.setAttribute('style', 'width: '+ TextboxWidth +';' + 'height: ' + TextboxHeight + ';' + 'resize: ' +TextboxResize + ';' + 'border: ' + TextboxBorder + ';' + 'outline: ' + TextboxOutline + ';'); cDiv.appendChild(txtbox); } //-------------------------------------- function getAnno(){ for (i=0; i<Anno.length; i++){ if (Anno[i].innerHTML != ""){ txtbox.value += Anno[i].innerHTML + "\n\n"; Anno[i].className = CompletedAnnotationNewClassName; } } } //-------------------------------------- function CreateToggle(){ ToggleButtonParent = document.getElementById('watch8-secondary-actions'); //watch-like-dislike-buttons ToggleButton = document.createElement('button'); ToggleButton.id = 'ToggleAnno'; ToggleButton.type = 'button'; ToggleButton.innerHTML = ''; ToggleButton.setAttribute('style', 'outline: none; padding: 0px 10px; vertical-align: middle; display: inline-block; position: relative; top: 3px;'); ToggleButton.title = 'Enable/Disable Annotation Ripping'; ToggleButtonParent.appendChild(ToggleButton); ButtonImage = document.createElement('img'); ButtonImage.setAttribute("style", "width: 25px; opacity: 0.8;"); ButtonImage.alt = 'Toggle Annotation Ripping'; ButtonImage.src = IdleButtonImage; ToggleButton.appendChild(ButtonImage); } //-------------------------------------- function Tmsg(message, title){ GM_notification(message, title); } //-------------------------------------- if (document.getElementById('watch7-content') == undefined){ Tmsg(MissingHTMLErrorMsg, "YouTube Annotation Grabber Error"); }else{ CreateToggle(); } //-------------------------------------- function HideElements(){ cDiv.style.height = "0px"; Title.style.top = "-50px"; Title.style.padding = "0px"; Title.style.height = "0px"; } //-------------------------------------- function ShowElements(){ cDiv.style.height = "150px"; Title.style.top = "0px"; Title.style.padding = "10px"; Title.style.height = "10px"; } //-------------------------------------- if (!Shown){ CreateElements(); window.setInterval(getAnno, Interval); } ToggleButton.onclick= function(){ Ton = !Ton; if (Ton){ ShowElements(); Shown = true; }else{ HideElements(); ButtonImage.src = IdleButtonImage; } }; ToggleButton.onmousedown= function(){ ButtonImage.src = ActiveButtonImage; }; //-------------------------------------- ToggleButton.onmouseover = function(){ ButtonImage.src = HoverButtonImage; }; //-------------------------------------- ToggleButton.onmouseout = function(){ if (Ton){ ButtonImage.src = ActiveButtonImage; }else{ ButtonImage.src = IdleButtonImage; } }; //--------------------------------------