// ==UserScript==
// @name HTML5-Video für Golem.de
// @namespace tfr
// @description Wandelt den Golem.de-eigenen Flash-Player in einen HTML5-Player um.
// @author tfr (https://github.com/t-fr/)
// @license CC0; https://creativecommons.org/publicdomain/zero/1.0/
// @license MIT license; https://pastebin.com/raw.php?i=4TMeeUXC
// @compatible firefox Funktioniert mit Firefox und Greasemonkey
// @incompatible chrome Funktioniert nicht mit Chrome und Tampermonkey
// @incompatible opera Funktioniert nicht mit Opera und Tampermonkey Beta oder Violent monkey
// @oujs:author tfr
// @include http://www.golem.de/*
// @include https://www.golem.de/*
// @include http://video.golem.de/*
// @include https://video.golem.de/*
// @version 7
// @grant GM_xmlhttpRequest
// ==/UserScript==
/* This script is dual-licensed under CC0 and the MIT license.
* You can choose which one you want to use.
* CC0 license: http://creativecommons.org/publicdomain/zero/1.0/deed.en
* MIT license: https://pastebin.com/raw.php?i=4TMeeUXC
*
* Dieses Skript steht sowohl unter CC0 als auch unter der MIT-Lizenz.
* Sie können sich aussuchen, welche Lizenz Sie nutzen.
* CC0-Lizenz: http://creativecommons.org/publicdomain/zero/1.0/deed.de
* MIT-Lizenz: https://pastebin.com/raw.php?i=4TMeeUXC
*/
/* Version 7: Update license information
* Version 6: Probleme mit doppelten Playern und Verzögerungen lösen
*/
function HTML5VideoDisabled() {
var retval = false;
try {
retval = window.sessionStorage.getItem("tfrNoHTML5Video") == "true";
window.sessionStorage.removeItem("tfrNoHTML5Video");
} catch(e) {
retval = window.name.indexOf(";tfrNoHTML5Video") > -1;
window.name = window.name.replace(/;tfrNoHTML5Video/g, "");
}
return retval;
}
function ReplacePlayers() {
if(!HTML5VideoDisabled()) {
var found = false;
for(var i = 0; i < window.document.getElementsByTagName("div").length; i++) {
if(typeof window.document.getElementsByTagName("div")[i].id !== "undefined" && window.document.getElementsByTagName("div")[i].id.search(/^NVBPlayer[0-9]*$/) >= 0) {
found = true;
ReplacePlayer(window.document.getElementsByTagName("div")[i].id);
}
}
if(!found)
{
window.setTimeout(ReplacePlayers, 500)
}
}
}
function ReplacePlayer(divId) {
divId.match(/^NVBPlayer([0-9]*)$/);
var videoId = RegExp.$1;
GM_xmlhttpRequest({
method: "GET",
url: "//video.golem.de/xml/" + videoId + ".xml",
onload: function(response) {
var responseXml = new DOMParser().parseFromString(response.responseText, "text/xml");
var videoId = responseXml.getElementsByTagName("id")[0].innerHTML;
var sdVideoUrl = "//video.golem.de" + responseXml.getElementsByTagName("medium")[0].getElementsByTagName("url")[0].innerHTML;
var sdVideoThumb = "//video.golem.de" + responseXml.getElementsByTagName("medium")[0].getElementsByTagName("teaser")[0].getElementsByTagName("url")[0].innerHTML;
var hdVideoAvailable = false;
var hdVideoUrl = "";
var hdVideoThumb = "";
if(responseXml.getElementsByTagName("high")[0]) {
hdVideoAvailable = true;
hdVideoUrl = "//video.golem.de" + responseXml.getElementsByTagName("high")[0].getElementsByTagName("url")[0].innerHTML;
hdVideoThumb = "//video.golem.de" + responseXml.getElementsByTagName("high")[0].getElementsByTagName("teaser")[0].getElementsByTagName("url")[0].innerHTML;
}
var videoElem = window.document.createElement("video");
videoElem.setAttribute("id", "tfrHtml5Video" + videoId);
videoElem.setAttribute("controls", "controls");
videoElem.setAttribute("width", "620");
videoElem.setAttribute("height", "349");
videoElem.setAttribute("poster", sdVideoThumb);
videoElem.setAttribute("src", sdVideoUrl);
videoElem.setAttribute("style", "background-color:black;");
videoElem.setAttribute("onmousemove", "javascript:if(typeof tfrHtml5Timeout" + videoId + " !== \"undefined\") { window.clearTimeout(tfrHtml5Timeout" + videoId + "); }window.document.getElementById(\"tfrHtml5Options" + videoId + "\").style.display = \"block\"; tfrHtml5Timeout" + videoId + " = window.setTimeout(\"window.document.getElementById(\\\"tfrHtml5Options" + videoId + "\\\").style.display = \\\"none\\\";\", 2000);");
videoElem.setAttribute("onmouseout", "javascript:window.document.getElementById(\"tfrHtml5Options" + videoId + "\").style.display = \"none\";");
videoElem.setAttribute("onplay", "javascript:window.document.getElementById(\"tfrHtml5Related" + videoId + "\").style.display = \"none\";");
videoElem.setAttribute("onseeked", "javascript:window.document.getElementById(\"tfrHtml5Related" + videoId + "\").style.display = \"none\";");
videoElem.setAttribute("onended", "javascript:window.document.getElementById(\"tfrHtml5Related" + videoId + "\").style.display = \"block\";");
var videoOptionBox = window.document.createElement("div");
videoOptionBox.setAttribute("id", "tfrHtml5Options" + videoId);
videoOptionBox.setAttribute("style", "position:absolute; top:0px; right:0px; z-index:1; background-color:black; color:white; opacity:0.4; cursor:default; font-family:\"Segoe UI\", Tahoma, sans-serif; display:none;");
videoOptionBox.setAttribute("onmouseover", "javascript:if(typeof tfrHtml5Timeout" + videoId + " !== \"undefined\") { window.clearTimeout(tfrHtml5Timeout" + videoId + "); }window.document.getElementById(\"tfrHtml5Options" + videoId + "\").style.display = \"block\";");
videoOptionBox.setAttribute("onmouseout", "javascript:window.document.getElementById(\"tfrHtml5Options" + videoId + "\").style.display = \"none\";");
var relatedVideoBox = window.document.createElement("div");
relatedVideoBox.setAttribute("id", "tfrHtml5Related" + videoId);
relatedVideoBox.setAttribute("style", "position:absolute; top:0px; left:0px; width:620px; height:315px; z-index:2; background-color:black; color:white; opacity:0.8; cursor:default; font-family:\"Segoe UI\", Tahoma, sans-serif; display:none; font-size:8pt;");
var relatedVideoTable = window.document.createElement("table");
relatedVideoTable.setAttribute("id", "tfrHtml5Related" + videoId + "Table");
var relatedVideoRow0 = window.document.createElement("tr");
var relatedVideoRow1 = window.document.createElement("tr");
var relatedVideoCell0 = window.document.createElement("td");
var relatedVideoCell1 = window.document.createElement("td");
var relatedVideoCell2 = window.document.createElement("td");
var relatedVideoCell3 = window.document.createElement("td");
var relatedVideoCell4 = window.document.createElement("td");
var relatedVideoCell5 = window.document.createElement("td");
var relatedVideoCell6 = window.document.createElement("td");
var relatedVideoCell7 = window.document.createElement("td");
var relatedVideoCell8 = window.document.createElement("td");
var relatedVideoCell9 = window.document.createElement("td");
relatedVideoCell0.setAttribute("class", "tfrRelatedVideo");
relatedVideoCell1.setAttribute("class", "tfrRelatedVideo");
relatedVideoCell2.setAttribute("class", "tfrRelatedVideo");
relatedVideoCell3.setAttribute("class", "tfrRelatedVideo");
relatedVideoCell4.setAttribute("class", "tfrRelatedVideo");
relatedVideoCell5.setAttribute("class", "tfrRelatedVideo");
relatedVideoCell6.setAttribute("class", "tfrRelatedVideo");
relatedVideoCell7.setAttribute("class", "tfrRelatedVideo");
relatedVideoCell8.setAttribute("class", "tfrRelatedVideo");
relatedVideoCell9.setAttribute("class", "tfrRelatedVideo");
relatedVideoCell0.setAttribute("style", "border:none; text-align:center; margin:0px; padding:2px;");
relatedVideoCell1.setAttribute("style", "border:none; text-align:center; margin:0px; padding:2px;");
relatedVideoCell2.setAttribute("style", "border:none; text-align:center; margin:0px; padding:2px;");
relatedVideoCell3.setAttribute("style", "border:none; text-align:center; margin:0px; padding:2px;");
relatedVideoCell4.setAttribute("style", "border:none; text-align:center; margin:0px; padding:2px;");
relatedVideoCell5.setAttribute("style", "border:none; text-align:center; margin:0px; padding:2px;");
relatedVideoCell6.setAttribute("style", "border:none; text-align:center; margin:0px; padding:2px;");
relatedVideoCell7.setAttribute("style", "border:none; text-align:center; margin:0px; padding:2px;");
relatedVideoCell8.setAttribute("style", "border:none; text-align:center; margin:0px; padding:2px;");
relatedVideoCell9.setAttribute("style", "border:none; text-align:center; margin:0px; padding:2px;");
if(responseXml.getElementsByTagName("relatedvideo")[0]) {
relatedVideoCell0.setAttribute("id", "tfrRelatedVideo" + videoId + "_" + responseXml.getElementsByTagName("relatedvideo")[0].getElementsByTagName("id")[0].innerHTML);
}
if(responseXml.getElementsByTagName("relatedvideo")[1]) {
relatedVideoCell1.setAttribute("id", "tfrRelatedVideo" + videoId + "_" + responseXml.getElementsByTagName("relatedvideo")[1].getElementsByTagName("id")[0].innerHTML);
}
if(responseXml.getElementsByTagName("relatedvideo")[2]) {
relatedVideoCell2.setAttribute("id", "tfrRelatedVideo" + videoId + "_" + responseXml.getElementsByTagName("relatedvideo")[2].getElementsByTagName("id")[0].innerHTML);
}
if(responseXml.getElementsByTagName("relatedvideo")[3]) {
relatedVideoCell3.setAttribute("id", "tfrRelatedVideo" + videoId + "_" + responseXml.getElementsByTagName("relatedvideo")[3].getElementsByTagName("id")[0].innerHTML);
}
if(responseXml.getElementsByTagName("relatedvideo")[4]) {
relatedVideoCell4.setAttribute("id", "tfrRelatedVideo" + videoId + "_" + responseXml.getElementsByTagName("relatedvideo")[4].getElementsByTagName("id")[0].innerHTML);
}
if(responseXml.getElementsByTagName("relatedvideo")[5]) {
relatedVideoCell5.setAttribute("id", "tfrRelatedVideo" + videoId + "_" + responseXml.getElementsByTagName("relatedvideo")[5].getElementsByTagName("id")[0].innerHTML);
}
if(responseXml.getElementsByTagName("relatedvideo")[6]) {
relatedVideoCell6.setAttribute("id", "tfrRelatedVideo" + videoId + "_" + responseXml.getElementsByTagName("relatedvideo")[6].getElementsByTagName("id")[0].innerHTML);
}
if(responseXml.getElementsByTagName("relatedvideo")[7]) {
relatedVideoCell7.setAttribute("id", "tfrRelatedVideo" + videoId + "_" + responseXml.getElementsByTagName("relatedvideo")[7].getElementsByTagName("id")[0].innerHTML);
}
if(responseXml.getElementsByTagName("relatedvideo")[8]) {
relatedVideoCell8.setAttribute("id", "tfrRelatedVideo" + videoId + "_" + responseXml.getElementsByTagName("relatedvideo")[8].getElementsByTagName("id")[0].innerHTML);
}
if(responseXml.getElementsByTagName("relatedvideo")[9]) {
relatedVideoCell9.setAttribute("id", "tfrRelatedVideo" + videoId + "_" + responseXml.getElementsByTagName("relatedvideo")[9].getElementsByTagName("id")[0].innerHTML);
}
relatedVideoRow0.appendChild(relatedVideoCell0);
relatedVideoRow0.appendChild(relatedVideoCell1);
relatedVideoRow0.appendChild(relatedVideoCell2);
relatedVideoRow0.appendChild(relatedVideoCell3);
relatedVideoRow0.appendChild(relatedVideoCell4);
relatedVideoRow1.appendChild(relatedVideoCell5);
relatedVideoRow1.appendChild(relatedVideoCell6);
relatedVideoRow1.appendChild(relatedVideoCell7);
relatedVideoRow1.appendChild(relatedVideoCell8);
relatedVideoRow1.appendChild(relatedVideoCell9);
relatedVideoTable.appendChild(relatedVideoRow0);
relatedVideoTable.appendChild(relatedVideoRow1);
relatedVideoBox.appendChild(relatedVideoTable);
if(hdVideoAvailable) {
var hdOnLink = window.document.createElement("a");
hdOnLink.setAttribute("id", "tfrHtml5Option" + videoId + "HdOn");
hdOnLink.setAttribute("onclick", "javascript:window.document.getElementById(\"tfrHtml5Option" + videoId + "HdOn\").style.display = \"none\"; window.document.getElementById(\"tfrHtml5Option" + videoId + "HdOff\").style.display = \"inline\"; var pos = window.document.getElementById(\"tfrHtml5Video" + videoId + "\").currentTime; var vidpau = window.document.getElementById(\"tfrHtml5Video" + videoId + "\").paused; window.document.getElementById(\"tfrHtml5Video" + videoId + "\").setAttribute(\"src\", \"" + hdVideoUrl + "\"); window.document.getElementById(\"tfrHtml5Video" + videoId + "\").load(); window.document.getElementById(\"tfrHtml5Video" + videoId + "\").setAttribute(\"onloadedmetadata\", \"if(!\" + vidpau + \") { window.document.getElementById(\\\"tfrHtml5Video" + videoId + "\\\").play(); } window.document.getElementById(\\\"tfrHtml5Video" + videoId + "\\\").currentTime = \" + pos + \";\"); return false;");
hdOnLink.setAttribute("style", "color:white;");
hdOnLink.appendChild(window.document.createTextNode("HD ein"));
videoOptionBox.appendChild(hdOnLink);
var hdOffLink = window.document.createElement("a");
hdOffLink.setAttribute("id", "tfrHtml5Option" + videoId + "HdOff");
hdOffLink.setAttribute("onclick", "javascript:window.document.getElementById(\"tfrHtml5Option" + videoId + "HdOff\").style.display = \"none\"; window.document.getElementById(\"tfrHtml5Option" + videoId + "HdOn\").style.display = \"inline\"; var pos = window.document.getElementById(\"tfrHtml5Video" + videoId + "\").currentTime; var vidpau = window.document.getElementById(\"tfrHtml5Video" + videoId + "\").paused; window.document.getElementById(\"tfrHtml5Video" + videoId + "\").setAttribute(\"src\", \"" + sdVideoUrl + "\"); window.document.getElementById(\"tfrHtml5Video" + videoId + "\").load(); window.document.getElementById(\"tfrHtml5Video" + videoId + "\").setAttribute(\"onloadedmetadata\", \"if(!\" + vidpau + \") { window.document.getElementById(\\\"tfrHtml5Video" + videoId + "\\\").play(); } window.document.getElementById(\\\"tfrHtml5Video" + videoId + "\\\").currentTime = \" + pos + \";\"); return false;");
hdOffLink.setAttribute("style", "color:white; display:none;");
hdOffLink.appendChild(window.document.createTextNode("HD aus"));
videoOptionBox.appendChild(hdOffLink);
videoOptionBox.appendChild(window.document.createTextNode(" \u00B7 "));
}
var noHtml5Link = window.document.createElement("a");
noHtml5Link.setAttribute("id", "tfrHtml5Option" + videoId + "NoHTML5");
noHtml5Link.setAttribute("onclick", "javascript:try {window.sessionStorage.setItem(\"tfrNoHTML5Video\", \"true\");} catch(e) {window.name += \";tfrNoHTML5Video\";} window.location.reload(); return false;");
noHtml5Link.setAttribute("style", "color:white;");
noHtml5Link.appendChild(window.document.createTextNode("Kein HTML5"));
videoOptionBox.appendChild(noHtml5Link);
if(window.document.getElementById("NVBPlayer" + videoId + "video")) {
window.document.getElementById("NVBPlayer" + videoId + "video").parentNode.removeChild(window.document.getElementById("NVBPlayer" + videoId + "video"));
}
if(window.document.getElementById("NVBPlayer" + videoId).getElementsByClassName("ppdisplay")[0])
{
window.document.getElementById("NVBPlayer" + videoId).removeChild(window.document.getElementById("NVBPlayer" + videoId).getElementsByClassName("ppdisplay")[0]);
}
if(window.document.getElementById("NVBPlayer" + videoId).getElementsByClassName("ppbuffering")[0])
{
window.document.getElementById("NVBPlayer" + videoId).removeChild(window.document.getElementById("NVBPlayer" + videoId).getElementsByClassName("ppbuffering")[0]);
}
if(window.document.getElementById("NVBPlayer" + videoId).getElementsByClassName("ppstart")[0])
{
window.document.getElementById("NVBPlayer" + videoId).removeChild(window.document.getElementById("NVBPlayer" + videoId).getElementsByClassName("ppstart")[0]);
}
if(window.document.getElementById("NVBPlayer" + videoId).getElementsByClassName("pplogo")[0])
{
window.document.getElementById("NVBPlayer" + videoId).removeChild(window.document.getElementById("NVBPlayer" + videoId).getElementsByClassName("pplogo")[0]);
}
if(window.document.getElementById("NVBPlayer" + videoId).getElementsByClassName("ppcontrols")[0])
{
window.document.getElementById("NVBPlayer" + videoId).removeChild(window.document.getElementById("NVBPlayer" + videoId).getElementsByClassName("ppcontrols")[0]);
}
if(window.document.getElementById("NVBPlayer" + videoId).getElementsByClassName("pprelated")[0])
{
window.document.getElementById("NVBPlayer" + videoId).removeChild(window.document.getElementById("NVBPlayer" + videoId).getElementsByClassName("pprelated")[0]);
}
if(window.document.getElementById("NVBPlayer" + videoId).getElementsByClassName("pppostertitle")[0])
{
window.document.getElementById("NVBPlayer" + videoId).removeChild(window.document.getElementById("NVBPlayer" + videoId).getElementsByClassName("pppostertitle")[0]);
}
window.document.getElementById("NVBPlayer" + videoId).appendChild(videoElem);
window.document.getElementById("NVBPlayer" + videoId).appendChild(videoOptionBox);
window.document.getElementById("NVBPlayer" + videoId).appendChild(relatedVideoBox);
FillRelatedVideos();
}
});
}
function FillRelatedVideos() {
for(var i = 0; i < window.document.getElementsByClassName("tfrRelatedVideo").length; i++) {
if(typeof window.document.getElementsByClassName("tfrRelatedVideo")[i].id !== "undefined" && window.document.getElementsByClassName("tfrRelatedVideo")[i].id.search(/^tfrRelatedVideo[0-9]*_[0-9]*$/) >= 0) {
var elemId = window.document.getElementsByClassName("tfrRelatedVideo")[i].id
elemId.match(/^tfrRelatedVideo([0-9]*)_([0-9]*)$/);
parentId = RegExp.$1;
var videoId = RegExp.$2;
GM_xmlhttpRequest({
method: "GET",
url: "//video.golem.de/xml/" + videoId + ".xml",
onload: function(response) {
var responseXml = new DOMParser().parseFromString(response.responseText, "text/xml");
var videoId = responseXml.getElementsByTagName("id")[0].innerHTML;
var videoTitle = responseXml.getElementsByTagName("title")[0].innerHTML;
var videoPage = responseXml.getElementsByTagName("detailsurl")[0].innerHTML;
var sdVideoThumb = "//video.golem.de" + responseXml.getElementsByTagName("medium")[0].getElementsByTagName("teaser")[0].getElementsByTagName("url")[0].innerHTML;
var videoLink = window.document.createElement("a");
videoLink.setAttribute("href", "//video.golem.de" + videoPage);
videoLink.setAttribute("title", videoTitle);
var videoImage = window.document.createElement("img");
videoImage.setAttribute("src", sdVideoThumb);
videoImage.setAttribute("width", "120");
videoImage.setAttribute("alt", videoTitle);
videoLink.appendChild(videoImage);
videoLink.appendChild(window.document.createTextNode(videoTitle));
window.document.getElementById("tfrRelatedVideo" + parentId + "_" + videoId).appendChild(videoLink);
}
});
}
}
}
ReplacePlayers();