[Typing-Tube]デモ再生を追加

try to take over the world!

目前為 2021-03-14 提交的版本,檢視 最新版本

// ==UserScript==
// @name         [Typing-Tube]デモ再生を追加
// @namespace    http://tampermonkey.net/
// @version      0.6
// @description  try to take over the world!
// @author       You
// @match        https://typing-tube.net/*
// @exclude      https://typing-tube.net/movie/edit*
// @grant        https://www.youtube.com/iframe_api

// ==/UserScript==
let videoidaa
let humenID
let last_hover_data
let humenName
let img_dom
let timeline_img_selector
let clone_timeline_img_selector


let demo_player_html = document.createElement('div');
    demo_player_html.setAttribute("id", "player_demo");
    demo_player_html.setAttribute("style", "margin: auto;");

let tag = document.createElement('script');
      tag.src = "https://www.youtube.com/iframe_api";
      var firstScriptTag = document.getElementsByTagName('script')[0];
      firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);

let start_time = 0



function set_preview_video(data){
if(last_hover_data != videoidaa && event.shiftKey && humenID && (!location.href.match("https://typing-tube.net/movie/") || location.href.match("https://typing-tube.net/movie/") && (is_played && finished || !is_played))){
if(document.getElementById("player_demo") != null){
if(clone_timeline_img_selector){
    document.getElementById("player_demo").parentNode.children[1].parentNode.replaceChild(clone_timeline_img_selector,document.getElementById("player_demo").parentNode.children[1]);
}else{
    document.getElementById("player_demo").remove()
}
}
const selector_ = last_hover_data.replace(/^\d+/,"")
img_dom = document.querySelector('[src*='+selector_+']')
if(document.getElementById("player_demo") == null){
if(!/row/.test(img_dom.parentNode.className)){
img_dom.insertAdjacentHTML('beforebegin', `<div id="player_demo" style="position:absolute;"></div>`)
}else{
    clone_timeline_img_selector = timeline_img_selector.cloneNode(true)
    timeline_img_selector.parentNode.replaceChild(demo_player_html,timeline_img_selector);
    demo_player_html = document.getElementById("player_demo").cloneNode(true)
}
if(location.href.match("https://typing-tube.net/movie/") && is_played && finished){
typing_restart_stop()
}
videoidaa = last_hover_data
onYouTubeIframeAPIReady_demo()
}
}
}

function shiftkey_preview_setup(){
set_preview_video(last_hover_data)
}
window.addEventListener("keydown", shiftkey_preview_setup,true);

function video_volume_change(){
if(document.getElementById("player_demo") != null){
player_demo.setVolume(+document.getElementById("demo_volume").value)
}
localStorage.setItem('demo_volume',document.getElementById("demo_volume").value)
}

function keydown_et(event){
if(event.ctrlKey && document.activeElement.type != "text" && document.activeElement.type != "textarea"){
player_demo.stopVideo()
window.removeEventListener('keydown',keydown_et,true);

}
}
      function onPlayerReady_demo(event) {
player_demo.setVolume(+document.getElementById("demo_volume").value)
window.addEventListener('keydown',keydown_et,true);
      }
var player_demo
      function onYouTubeIframeAPIReady_demo() {
        player_demo = new YT.Player('player_demo', {
            height: img_dom.height,
            width: img_dom.width,
            playerVars: {
                autoplay: 1,
                controls: 0,
                disablekb: 1,
                enablejsapi: 1,
                modestbranding:1,
                showinfo:0,
                origin: location.protocol + '//' + location.hostname + "/",
                start: start_time
          },
          videoId: videoidaa,
          events: {
            'onReady': onPlayerReady_demo
          }
        });
      }
var stylesheet = document.styleSheets.item(0)
    stylesheet.insertRule('.pointer:hover{  cursor: help;text-decoration : underline;}',47);

document.getElementById("main_content").insertAdjacentHTML('afterbegin', `<div style="margin-top:1rem;"><label>デモ音量<input value="70" type="range" id="demo_volume"></label> <span>[再生したい動画にカーソルを合わせてShiftキー:再生] [再生中にCtrlキー:停止]</span></div>`)
document.getElementById("demo_volume").addEventListener("input", video_volume_change);
document.getElementById("demo_volume").setAttribute("value",localStorage.getItem('demo_volume'))

var demo_stop
function typing_play_stop(){
if(location.href.match("https://typing-tube.net/movie/")){
demo_stop = setInterval(function(){
if(is_played){
if(document.getElementById("player_demo") != null){
document.getElementById("player_demo").remove()
}
clearInterval(demo_stop)
clearInterval(restart_stop)

}
},50)
}
}

var restart_stop
function typing_restart_stop(){
if(location.href.match("https://typing-tube.net/movie/")){
restart_stop = setInterval(function(){
if(!finished){
if(document.getElementById("player_demo") != null){
document.getElementById("player_demo").remove()
}
clearInterval(restart_stop)
clearInterval(demo_stop)

}
},50)
}
}
typing_play_stop()
function mouse_event(event) {
if(event.type == "mouseover" && event.currentTarget.href.match("https://typing-tube.net/movie/show/")){
              if(location.href.match("https://typing-tube.net/timeline") && /row/.test(event.currentTarget.closest(".row").className)){
                  timeline_img_selector = event.currentTarget.closest(".row").previousElementSibling.children[1]
              }
if(humenID != event.currentTarget.href.match(/[0-9]+\.?[0-9]*/g)){
    humenID = event.currentTarget.href.match(/[0-9]+\.?[0-9]*/g)
    $.ajax({
        type: 'POST',
        url: '/movie/lyrics/'+ humenID,
        success:function(data){
            const data_split = data.split("\n")
            for(let i=0;0<data_split.length;i++){
                if(i>0 && data_split[i].split("\t")[2]){
                    start_time = Math.round(+data_split[i].split("\t")[0])
                    break;
                }
            }
            last_hover_data = data.match(/(v=).*\n/)[0].slice(2)
        }
    });
}
}
}

function eventlistener(){
let typing_link = document.querySelectorAll("[href*='movie/show/']")

for(let n = 0; n < typing_link.length ; n++){
typing_link[n].addEventListener("mouseover",mouse_event,true)
}

}

if (document.readyState !== "loading") {
  eventlistener();
} else {
  document.addEventListener("DOMContentLoaded", eventlistener, false);
}