Steam Video Overlay

让 Steam 游戏详情页面的视频悬浮起来~~~

As of 2015-06-24. See the latest version.

// ==UserScript==
// @name         Steam Video Overlay
// @version      0.3
// @description  让 Steam 游戏详情页面的视频悬浮起来~~~
// @author       NotaStudio
// @match        http://store.steampowered.com/app/*
// @match        https://store.steampowered.com/app/*
// @grant        none
// @license      GPLv3
// @namespace    https://greasyfork.org/users/8882
// ==/UserScript==

/*
 * ChangeLog
 * 20150210 0.3
 * 更改隐藏视频浮窗方式,精简代码,把视频浮窗调大了一点(毕竟眼瞎),修复无法强制播放 HTML5 视频的 bug
 * 20150206 0.2
 * 重构代码,强制播放 HTML5 视频,更改播放地址获取方式,通过 HTML5 Media API 同步播放进度和音量,大幅优化性能
 * 20150205 0.1-alpha
 * 首次发布
 */

var fileUrl,currentNode,svoWindow;

console.log("土豪买买买!!!\n Steam Video Overlay 0.3\n Created by Nota\n 2015.02.10");

var dateExpires = new Date();
dateExpires.setTime( dateExpires.getTime() + 1000 * 60 * 60 * 24 * 365 * 10 );
document.cookie = 'bShouldUseHTML5=1; expires=' + dateExpires.toGMTString() + ';path=/';
// 强制播放 HTML5 视频,代码来自于 Enhanced Steam

var videoNode = document.body.getElementsByTagName("video");
if (videoNode[0] === undefined)
{
    location.reload(true);
}

window.collectionToArray = function(collection) {
    var ary = []; 
    for(var i = 0, len = collection.length; i < len; i++) { 
        ary.push(collection[i]); 
    } 
    return ary; 
};
// 此函数原作者为三水清(http://js8.in/)

window.getFileUrl = function() {
    if (event.srcElement.getAttribute("id") == "svoWindow")
    {
        ;
    }
    else
    {
        currentNode = event.srcElement;
        fileUrl = currentNode.currentSrc;
    }
};

window.scrollEvent = function() {
    if (window.pageYOffset > screen.availHeight)
    {
        if (svoWindow.style.opacity == "1")
        {
            ;
        }
        else
        {
            currentNode.pause();
            svoWindow.src = fileUrl;      
            svoWindow.currentTime = currentNode.currentTime;
            svoWindow.style.opacity = "1";
            svoWindow.volume = currentNode.volume;
            svoWindow.play();
        }
    }
    else
    {
        if (svoWindow.style.opacity == "0")
        {
            ;
        }
        else
        {
            svoWindow.pause();
            currentNode.currentTime = svoWindow.currentTime;
            currentNode.volume = svoWindow.volume;
            svoWindow.style.opacity = "0";
            currentNode.play();
        }
    }
    
};

window.createWindow = function() {   
    var videoNode = document.createElement("VIDEO");
    videoNode.setAttribute("src", "");
    videoNode.setAttribute("id", "svoWindow");
    videoNode.setAttribute("width", "33%");
    videoNode.setAttribute("height", "33%");
    videoNode.setAttribute("style", "position: fixed;bottom: 25px;right: 25px;top: auto;left: auto;");
    document.body.appendChild(videoNode);
    svoWindow = document.getElementById("svoWindow");
    svoWindow.style.opacity = "0";
    svoWindow.pause();
};

window.closeWindow = function() {
    document.body.setAttribute("onscroll","");
    document.body.removeChild(svoWindow);
    for(var i = 0;i < videoNode.length;i++){
        videoNode[i].setAttribute("onplay","");
    }
};

document.body.setAttribute("onscroll","scrollEvent()");
document.body.setAttribute("onload","createWindow()");
for(var i = 0;i < videoNode.length;i++){
    videoNode[i].setAttribute("onplay","getFileUrl()");
}

var svoOptions = document.createElement("DIV");
var optionText = document.createTextNode("Steam Video Overlay 选项:");
svoOptions.setAttribute("class", "glance_tags_label");
svoOptions.appendChild(optionText);
document.body.getElementsByClassName("rightcol")[0].appendChild(svoOptions);

var closeButton = document.createElement("A");
var closeButtonSpan = document.createElement("SPAN");
var closeSpanText = document.createTextNode("不再显示视频浮窗");
closeButton.setAttribute("onclick", "closeWindow()");
closeButton.setAttribute("class", "btnv6_blue_hoverfade btn_medium app_tag");
closeButtonSpan.appendChild(closeSpanText);
closeButton.appendChild(closeButtonSpan);
document.body.getElementsByClassName("rightcol")[0].appendChild(closeButton);