Greasy Fork is available in English.

Plex custom shortcuts

Add the possibility to use custom shortcuts in plex

Tính đến 19-07-2017. Xem phiên bản mới nhất.

// ==UserScript==
// @name         Plex custom shortcuts
// @namespace    https://www.lastrik.ch/
// @version      2.1.0
// @description  Add the possibility to use custom shortcuts in plex
// @author       Lastrik
// @match        http*://*:32400/*
// @match        http*://app.plex.tv/web/*
// @require      https://code.jquery.com/jquery-3.2.1.min.js
// @grant        none
// @license  MIT
// ==/UserScript==

(function () {
    'use strict';

	/*
	This script adds a few tweaks to the pley web player. You can enable/disable them below
	*/

	var removePlayIcon = true;

    /*
   	You can add your own shortcuts here. Syntax : addShortcut(<keyCode>,<action>);
    List of possible actions :
    ------------------------------------
    toggleFullscreen    : toggle fullscreen
    togglePlayPause     : toggle play/pause
    volup               : volume up
    voldown             : volume down
    -------------------------------------
    There is a special keyCode which is doubleClick in order to do action on double clicks. You can find which key equals which keyCode here : http://keycode.info/
    */

    var shortcuts = [];

    /* Example shortcuts */
    addShortcut("75", "togglePlayPause");
    addShortcut("70", "toggleFullscreen");
    addShortcut("doubleClick", "toggleFullscreen");

    /* Add your own here */


    /* My code, touch only if you know js or you might break this script */
    function addShortcut(keyCode, action){
        shortcuts.push(new Shortcut(keyCode, action));
    }

    function init() {
        if (location.hostname != 'app.plex.tv' && location.port != '32400'){
            return;
        }
        $("body").dblclick(function(e){
			for (var i = 0; i < shortcuts.length; i++) {
				if (shortcuts[i].keyCode == "doubleClick") {
					e.stopImmediatePropagation();
					eval(shortcuts[i].action + "()");
				}
			}
        });
		checkPrefs();
        document.body.addEventListener('keydown',checkShortcuts);
        console.log("initialized Better plex keybindings");
    }
    init();

	function checkPrefs() {
		if (removePlayIcon) {
			$(".alert-player.alert-paused").remove();
		}
	}

    function checkShortcuts(e){
        for (var i = 0 ; i < shortcuts.length ; i++) {
            if (shortcuts[i].keyCode == e.keyCode){
				eval(shortcuts[i].action + "()");
            }
        }
    }

    function volup(){
        if (isVideo()) {
            var vid = document.getElementById("html-video");
            vid.volume += 0.1;
        }
    }

    function voldown(){
        if (isVideo()) {
            var vid = document.getElementById("html-video");
            vid.volume -= 0.1;
        }
    }

    function togglePlayPause(){
        var vid = document.getElementById("html-video");
        if(isVideo()){
            if(vid.paused){
                vid.play();
            }else{
                vid.pause();
            }
        }
    }

    function toggleFullscreen(){
        if(isVideo()){
            if (runPrefixMethod(document, "FullScreen") || runPrefixMethod(document, "IsFullScreen")){
                runPrefixMethod(document, "CancelFullScreen");
            }else{
                runPrefixMethod(document.getElementsByClassName("video-container")[0], "RequestFullScreen");
            }
        }
    }

    function isVideo(){
        if (document.getElementsByClassName("video-container").length === 1){
            return true;
        }else{
            return false;
        }
    }

    var pfx = ["webkit", "moz", "ms", "o", ""];
    function runPrefixMethod(obj, method) {
        var p = 0, m, t;
        while (p < pfx.length && !obj[m]) {
            m = method;
            if (pfx[p] == "") {
                m = m.substr(0,1).toLowerCase() + m.substr(1);
            }
            m = pfx[p] + m;
            t = typeof obj[m];
            if (t != "undefined") {
                pfx = [pfx[p]];
                return (t == "function" ? obj[m]() : obj[m]);
            }
            p++;
        }
    }

})();

function Shortcut(keyCode,action){
    return {"keyCode":keyCode,"action":action};
}