Usable for copying a video ID to a clipboard for downloading via youtube-dl. By default it also prefixes the ID with "--" if it starts with a dash (this can be disabled).
当前为
// ==UserScript==
// @name YouTube - add video ID text field
// @namespace monnef.tk
// @description Usable for copying a video ID to a clipboard for downloading via youtube-dl. By default it also prefixes the ID with "--" if it starts with a dash (this can be disabled).
// @include http://www.youtube.com/watch*
// @include https://www.youtube.com/watch*
// @version 2
// @grant none
// @require http://code.jquery.com/jquery-2.1.3.min.js
// ==/UserScript==
// if you don't want prefixing, replace the word "true" with "false" on the next line
var prefixEnabled = true;
var textId = "textId";
function textFieldClicked() {
var e = $(this);
e.select();
}
function updateLinkValue(value) {
$("#" + textId).attr("value", value);
}
function getLinkMatchFromLocation() {
return window.location.href.match(/^.*watch(\?v=([^&]+)|\?(.*)).*$/);
}
function getLinkFromLocation() {
var urlMatch = getLinkMatchFromLocation();
if (urlMatch.length >= 2) {
var link = urlMatch[2];
if (prefixEnabled && link[0] === '-') link = "-- " + link;
return link;
}
return "";
}
function getVideoElement() {
return $("video.video-stream");
}
function insertInput() {
$("#movie_player").each(function() {
var e = $(this);
var link = getLinkFromLocation();
if (link) {
e.parent().after($("<input />").attr("type", "text").css("margin-top", "10px").css("border", "0").css("box-shadow", "0px 1px 2px rgba(0, 0, 0, 0.1)").css("font-size", "200%").attr("id", textId).click(textFieldClicked));
updateLinkValue(link);
}
});
}
function refreshTextLink(){
var link = getLinkFromLocation();
console.log("refreshing text link: " + link);
if (link) updateLinkValue(link);
}
// beacuse mutation observers are broken in GreaseMonkey :(
function installDomEventListener() {
getVideoElement().each(function() {
this.parentNode.addEventListener("DOMNodeInserted", function(e) {
console.log("modified (insertion): src=" + getVideoElement().attr("src"));
refreshTextLink();
}, false);
});
}
insertInput();
installDomEventListener();
refreshTextLink();