動畫瘋·Plus

分級標識自動同意、自動切換至下一集、影片空降座標、網頁全螢幕、子母畫面

当前为 2019-11-15 提交的版本,查看 最新版本

您需要先安装一个扩展,例如 篡改猴Greasemonkey暴力猴,之后才能安装此脚本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴Userscripts ,之后才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。

您需要先安装用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         動畫瘋·Plus
// @namespace    https://home.gamer.com.tw/homeindex.php?owner=xu3u04u48
// @version      1.17.3
// @description  分級標識自動同意、自動切換至下一集、影片空降座標、網頁全螢幕、子母畫面
// @author       xu3u04u48
// @match        *://ani.gamer.com.tw/animeVideo.php?sn=*
// @icon         https://i2.bahamut.com.tw/anime/baha_s.png
// @require      https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js
// @grant GM_setValue
// @grant GM_getValue
// @run-at document-end
// ==/UserScript==

(function() {
    'use strict';

var ncc_warning_save = (GM_getValue("ncc_warning") != null )?GM_getValue("ncc_warning"): GM_setValue('ncc_warning','false');
var grading_save = (GM_getValue('grading_save') != null )?GM_getValue('grading_save'):GM_setValue('grading_save','none');
var video_next_skip = (GM_getValue('video_next') != null )?GM_getValue('video_next'):GM_setValue('video_next','false');
var password_save = GM_getValue('password_save');
var grading_bool = false,video_next_bool = false;
var deviceid = animefun.getdeviceid();
var sn = animefun.videoSn;

//使用者介面
var aniplusui_html = '<div class="ani-tabs__item">';
aniplusui_html+='<div onclick="$(this).plus_ui();" class="ani-tabs-link" style="cursor: pointer;">動畫瘋·Plus';
aniplusui_html+='<span class="plus_explain" style="position:absolute;z-index: 2;">';
aniplusui_html+='<span style="left: unset;line-height: 27px;position: fixed;right: 70px;">';
aniplusui_html+='Ver 1.17.3<br>因動畫瘋播放器改版而做緊急更新,刪除動畫瘋·Plus可在全螢幕發送彈幕、刪除動畫瘋·Plus影片速度、其他錯誤修正。';
aniplusui_html+='</span></span></div></div>';
$('.sub_top').append(aniplusui_html);
$('.ani-tab-content').append('<div id="ani-tab-content" class="ani-tab-content__item" style="display: none;"></div>');
$.fn.plus_ui = function(){
    $(".ani-tab-content__item").css("display","none");
    $("#ani-tab-content").css("display","block");
    $('.ani-tabs-link').removeClass('is-active');
    $(this).addClass("is-active");
};


//使用者介面CSS
$('head').append(`
<style>
.plus_bullet-send {
padding:0 5px 0 5px;
width:20%;
z-index:1;
border-radius:5px;
cursor:all-scroll;
}
.plus_bullet-control {
left:unset;
right:0;
z-index:1;
height:100%;
}

.plus_bullet-send_icon {
width: 35px;
height: 38px;
float: right;
padding: 6px 8px;
border-style: none;
background-color: transparent;
color: #fff;
opacity: 0.7;
}

.plus_bullet-send_icon:before {
content: "chat";
}

.plus_bullet-send_icon:before {
font-size: 19px !important;
direction: ltr;
display: inline-block;
font-family: 'Material Icons';
font-style: normal;
font-weight: normal;
letter-spacing: normal;
line-height: 1;
text-transform: none;
white-space: nowrap;
word-wrap: normal;
-webkit-font-smoothing: antialiased;
text-rendering: optimizeLegibility;
-moz-osx-font-smoothing: grayscale;
-webkit-font-feature-settings: 'liga';
font-feature-settings: 'liga';
}

.plus_bullet-send_icon:hover{
opacity: 1;
}


.plus_Web_fullscreen_icon {
width: 35px;
height: 38px;
float: right;
padding: 6px 8px;
border-style: none;
background-color: transparent;
color: #fff;
opacity: 0.7;
}

.plus_Web_fullscreen_icon:before {
content: "aspect_ratio";
}

.plus_Web_fullscreen_icon:before {
font-size: 19px !important;
direction: ltr;
display: inline-block;
font-family: 'Material Icons';
font-style: normal;
font-weight: normal;
letter-spacing: normal;
line-height: 1;
text-transform: none;
white-space: nowrap;
word-wrap: normal;
-webkit-font-smoothing: antialiased;
text-rendering: optimizeLegibility;
-moz-osx-font-smoothing: grayscale;
-webkit-font-feature-settings: 'liga';
font-feature-settings: 'liga';
}

.plus_Web_fullscreen_icon:hover{
opacity: 1;
}

.plus_time_body{
width: 100%;
padding: 8px;
min-height: 170px;
border: 1px solid #ddd;
background: #f5f5f5;
border-radius: 4px;
box-sizing: border-box;
}

.plus_keyword-label {
display: inline-flex;
align-items: center;
max-width: 100%;
margin: 0 4px 4px 0;
background: #02B4D8;
font-size: 13px;
color: #fff;
border-radius: 4px;
}

.plus_keyword-label > span {
display: block;
padding: 3px 6px;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
vertical-align: middle;
}

.plus_k-label {
align-items: center;
max-width: 100%;
margin: 0 4px 4px 0;
padding: 3px 6px;
background: #02B4D8;
font-size: 13px;
color: #fff;
border-radius: 4px;
}

.plus_k-label > span {
display: none
}

.plus_k-label:hover span {
min-height: 20px;
width: 330px;
position: absolute;
z-index: 999;
padding: 10px;
display: block;
background-color:rgba(0, 0, 0, 0.86);
color: #ffffff;
border-radius: 5px;
font-size: 16px;
left: 50px;
}

.plus_explain {
font-size: 21px;
color: #888;;
float: right;
}

.plus_explain:before {
content: "help";
}

.plus_explain:before {
direction: ltr;
display: inline-block;
font-family: 'Material Icons';
font-style: normal;
font-weight: normal;
letter-spacing: normal;
line-height: 1;
text-transform: none;
white-space: nowrap;
word-wrap: normal;
-webkit-font-smoothing: antialiased;
text-rendering: optimizeLegibility;
-moz-osx-font-smoothing: grayscale;
-webkit-font-feature-settings: 'liga';
font-feature-settings: 'liga';
}


.plus_explain > span {
display: none
}

.plus_explain:hover span {
min-height: 20px;
width: 330px;
position: absolute;
z-index: 999;
padding: 10px;
display: block;
background-color:rgba(0, 0, 0, 0.86);
color: #ffffff;
border-radius: 5px;
font-size: 16px;
left: 50px;
}

.plus_no_sub {
text-align: center;
line-height: 1.5em;
color: #888;
margin: 10px auto;
}

button.plus_refresh {
float: none;
margin: 0;
padding: 0;
height: 30px;
width: 30px;
border: 1px solid #ccc;
background: #eee;
font-size: 18px;
border-radius: 5px;
cursor: pointer;
outline: none;
}

.ani-tab-content__item .plus_refresh  {
width: 30px;
height: 30px;
border: 1px solid #00B4D8;
background: #00B4D8;
color: #fff;
}

.ani-tab-content__item .plus_refresh:hover {
background: #FFF049;
border-color: #FFF049;
color: #333;
}

.plus_material-icons {
font-family: 'Material Icons';
font-weight: normal;
font-style: normal;
font-size: 21px;
line-height: 1;
letter-spacing: normal;
text-transform: none;
display: inline-block;
white-space: nowrap;
word-wrap: normal;
direction: ltr;
font-feature-settings: "liga" 1;
}

.ani-tab-content__item .plus_refresh > i {
vertical-align: middle;
}

.video-next-button {
display: block;
position: absolute;
color: #fff;
background: #000;
text-decoration: none;
padding: 10px;
bottom: 40px;
right: 0px;
z-index: 10;
border-top: 1px solid #aaa;
border-left: 1px solid #aaa;
border-bottom: 1px solid #aaa;
font-size: 1.5em;
}

.plus_dialog-border{
border: 1px solid #599bdc;
position: absolute;
z-index: 1000;
background: white;
padding: 10px;
font-size: 1.3rem;
right: 15px;
}

.plus_picture_in_picture_icon {
width: 35px;
height: 38px;
float: right;
padding: 6px 8px;
border-style: none;
background-color: transparent;
color: #fff;
opacity: 0.7;
}
.plus_picture_in_picture_icon:before {
	content: "branding_watermark";
}
.plus_picture_in_picture_icon:before {
	font-size: 19px !important;
	direction: ltr;
	display: inline-block;
	font-family: 'Material Icons';
	font-style: normal;
	font-weight: normal;
	letter-spacing: normal;
	line-height: 1;
	text-transform: none;
	white-space: nowrap;
	word-wrap: normal;
	-webkit-font-smoothing: antialiased;
	text-rendering: optimizeLegibility;
	-moz-osx-font-smoothing: grayscale;
	-webkit-font-feature-settings: 'liga';
	font-feature-settings: 'liga';
}
.plus_picture_in_picture_icon:hover {
opacity: 1;
}

/*分級鎖定介面CSS*/

.ani-select {
display: inline-block;
padding: 0 8px;
height: 30px;
border: 1px solid #ddd;
box-sizing: border-box;
border-radius: 4px;
font-size: 16px;
vertical-align: middle;
}
.plus-keyword-header {
display: flex;

}
.plus-keyword-header .plus-bluebtn {
flex: 0 0 auto;
position: relative;
display: inline-block;
padding: 6px 12px;
font-size: 13px;
border-radius: 4px;
vertical-align: middle;
}
.plus-bluebtn {
border-radius: 10px;
padding: 12px;
text-align: center;
text-decoration: none;
color: #fff;
margin: 0px 7px 0 0;
background: #00B4D8;
display: inline-block;
font-size: 1.3em;
}

.plus-bluebtn:disabled{
background-color:#ebebe4;
color: #757575;
}

.ani-select:disabled{
background-color:#ebebe4;
}

.plus-input {
display: inline-block;
margin: 0 8px 0 0;
padding: 0 8px;
height: 30px;
border: 1px solid #ddd;
box-sizing: border-box;
border-radius: 4px;
font-size: 16px;
vertical-align: middle;
width: 165px;
}
.plus-message {
z-index: 1000;
top: 310px;
width: 100%;
height: 538px;
padding: 10px;
background: #000000cf;
box-shadow: 0 0 5px 0px rgba(0, 0, 0, 0.2);
left: 0px !important;
display: flex;
flex-wrap: wrap;
align-items: center;
justify-content: center;
}
.plus-frame {
position: relative;
z-index: 72;
}
.pluss-bluebtn{
width: 55px;
height: 30px;
padding: 10px 12px;
font-size: 13px;
border-radius: 4px;
vertical-align: middle;
text-align: center;
text-decoration: none;
color: #fff;
background: #00B4D8;
}
.plus-box {
height: 100px;
background: #fff;
width: 415px;
display: flex;
justify-content: center;
align-items: center;
border-radius: 4px;
}

.plus-input.plus-input--keyword {
max-width: 300px;
margin: 0px 8px 0px 8px;
}


.plus-video-fastforward {
display: inline-block;
margin: 0 8px 0 0;
padding: 0 8px;
height: 30px;
border: 1px solid #ddd;
box-sizing: border-box;
border-radius: 4px;
font-size: 16px;
vertical-align: middle;
width: 71px;
}
</style>
`);

//使用者介面HTML
var ui_html = '<div class="ani-setting-section">';
ui_html += '<div id="plussetup" class="plus_dialog-border" style="display:none;">設定已儲存</div>';
ui_html += '<h4 class="ani-setting-title">動畫瘋·Plus <div class="plus_explain"><span>此插件設計是為了給短時間大量補番的人使用的,並加入一些沒用的功能<br>如果您覺得此插件好用,請付費支持動畫瘋讓此插件能持續為本平台服務</span></div></h4>';
ui_html += '<h4 class="ani-setting-title"><a href="https://chrome.google.com/webstore/detail/%E5%8B%95%E7%95%AB%E7%98%8B%C2%B7plus/jkpkmeimgkhodlppajjgikfcodlilmpd" target="_blank">在Chrome線上應用店中已發布相同的插件</a></h4>';
ui_html += '<div class="ani-setting-item ani-flex">';
ui_html += '<div class="ani-setting-label">';
ui_html += '<span id="firefox_w" class="ani-setting-label__mian">自動同意分級標識警告</span>';
ui_html += '</div>';
ui_html += '<div class="ani-setting-value ani-set-flex-right">';
ui_html += '<div class="ani-checkbox">';
ui_html += '<label class="ani-checkbox__label">';
ui_html += '<input id="grading" type="checkbox">';
ui_html += '<div class="ani-checkbox__button"></div>';
ui_html += '</label>';
ui_html += '</div>';
ui_html += '</div>';
ui_html += '</div>';
ui_html += '<div class="ani-setting-item ani-flex">';
ui_html += '<div class="ani-setting-label">';
ui_html += '<span class="ani-setting-label__mian">自動切換至下一集</span>';
ui_html += '</div>';
ui_html += '<div class="ani-setting-value ani-set-flex-right">';
ui_html += '<div class="ani-checkbox">';
ui_html += '<label class="ani-checkbox__label">';
ui_html += '<input id="video_next_skip" type="checkbox">';
ui_html += '<div class="ani-checkbox__button"></div>';
ui_html += '</label>';
ui_html += '</div>';
ui_html += '</div>';
ui_html += '</div>';
ui_html += '<div class="ani-setting-item ani-flex">';
ui_html += '<div class="ani-setting-label">';
ui_html += '<span class="ani-setting-label__mian">空降座標</span>';
ui_html += '</div>';
ui_html += '<div class="ani-setting-value ani-set-flex-right">';
ui_html += '<div class="plus-keyword-header">';
ui_html += '<input type="text" id="plus-video-fastforward-minute" class="plus-video-fastforward ani-input--keyword" disabled placeholder="00" onKeypress="if (event.keyCode < 48 || event.keyCode > 57) event.returnValue = false;">:';
ui_html += '<input type="text" id="plus-video-fastforward-second" class="plus-video-fastforward ani-input--keyword" disabled placeholder="00" onKeypress="if (event.keyCode < 48 || event.keyCode > 57) event.returnValue = false;">';
ui_html += '<input id="plus-video-fastforward-sendout" class="plus-bluebtn" value="降落" disabled type="submit" style="border:2px blue none;">';
ui_html += '</div>';
ui_html += '</div>';
ui_html += '</div>';
/*
ui_html += '<div class="ani-setting-item ani-flex">';
ui_html += '<div class="ani-setting-value ani-set-flex-right">';
ui_html += '<div class="plus-keyword-header">';
ui_html += '<span class="plus_keyword-label" style="cursor:pointer;"><span onclick="$(\'#ani_video_html5_api\')[0].currentTime = $(\'#ani_video_html5_api\')[0].currentTime + parseInt(30)">+0:30</span></span>';
ui_html += '<span class="plus_keyword-label" style="cursor:pointer;"><span onclick="$(\'#ani_video_html5_api\')[0].currentTime = $(\'#ani_video_html5_api\')[0].currentTime + parseInt(60)">+1:00</span></span>';
ui_html += '<span class="plus_keyword-label" style="cursor:pointer;"><span onclick="$(\'#ani_video_html5_api\')[0].currentTime = $(\'#ani_video_html5_api\')[0].currentTime + parseInt(90)">+1:30</span></span>';
ui_html += '</div>';
ui_html += '</div>';
ui_html += '</div>';
*/
ui_html += '<div class="ani-setting-item">';
ui_html += '<div class="ani-setting-label">';
ui_html += '<span class="ani-setting-label__mian">空降足跡<font size="2">(點擊降落)</font></span>';
ui_html += '<span class="plus_explain"><span>說明:<br>運作原理是取所有彈幕文字並利用關鍵字篩選<br>如果有在自訂過濾關鍵字新增"空降"or"座標"和開啟自動過濾<br>結果會不同</span></span>';
ui_html += '<div class="ani-setting-value ani-set-flex-right">';
ui_html += '<span class="plus_k-label">確認座標<span>說明:已回報的座標</span></span>';
ui_html += '<span class="plus_k-label" style="background:#bbbbbb;">其它座標<span>說明:<br>其它座標又稱未確定座標,有可能的原因是紀念觀賞時間<br>或未放入"空降"or"座標"關鍵字</span></span>';
ui_html += '<button class="plus_refresh"><i class="plus_material-icons">refresh</i></button>';
ui_html += '</div>';
ui_html += '</div>';
ui_html += '<div class="plus_time_body">';
ui_html += '<ul class="plus_no_sub"><img src="https://i2.bahamut.com.tw/anime/no_sub.png"style="width: 33%;"><br>正在努力尋找中···</ul>';
ui_html += '</div>';
ui_html += '</div>';
ui_html += '</div>';
$("#ani-tab-content").append(ui_html);

var Firefox_w = '<span class="plus_explain"><span>因Firefox瀏覽器的政策【禁止自動播放聲音】,如果啟動此選項後無法正常播放影片<br>';
Firefox_w +='請在瀏覽器權限【防止網站自動播放聲音】將【ani.gamer.com.tw】加入例外網站</span></span>';
if(BrowserCheck("Firefox")[0] != null )$("#firefox_w").after(Firefox_w);


//網頁全螢幕
window.Webfullscreen = setInterval(function(){
    let webfullscreen_h = '<button onclick="$(this).web_fullscreen();" class="plus_Web_fullscreen_icon vjs-control vjs-show-tip" type="button" aria-disabled="false" title="網頁全螢幕" ></button>';
    if($(".control-bar-rightbtn").length == 1 && $(".plus_Web_fullscreen_icon").length == 0){
        $(".vjs-fullscreen-control").after(webfullscreen_h);
    }else if($(".plus_Web_fullscreen_icon").length == 1){
        clearInterval(window.Webfullscreen);
    }
},500);

var webfullscreen_s = true;
$.fn.web_fullscreen = function(){
    let win_height = $(window).height();
    let win_width = $(window).width();
    if(webfullscreen_s){
        webfullscreen_s = false;
        $("body").after('<div id="Web_fullscreen_style"></div>');
        $("#animeTip").css("bottom","-40px");
        $("html").css({"overflow-y":"hidden","overflow-x":"hidden"});
        $(".vjs-indent-button").css("display","none");
        $(".vjs-danmu").css("perspective","805.536px");
        $(".videoframe").css("height", win_height + "px");
    }else{
        webfullscreen_s = true;
        $("#Web_fullscreen_style").remove();
        $("#animeTip").css("bottom","0px");
        $("html").css({"overflow-y":"unset","overflow-x":"unset"});
        $(".videoframe").css({"height":"","width":"","margin":""});
        $(".vjs-indent-button").css("display","unset");
        $(".vjs-danmu").css("perspective","401.09px");
    }

    $(document).keydown(function(e) {
        if(e.keyCode == 27 && !webfullscreen_s){
            webfullscreen_s = true;
            $("#Web_fullscreen_style").remove();
            $("#animeTip").css("bottom","0px");
            $("html").css({"overflow-y":"unset","overflow-x":"unset"});
            $(".videoframe").css({"height":"","width":"","margin":""});
            $(".vjs-indent-button").css("display","unset");
            $(".vjs-danmu").css("perspective","");
        }
    });

    $(window).resize(function() {
        if(!webfullscreen_s){
            let win_height = $(window).height();
            $(".videoframe").css("height",win_height+"px");
        }
    });

    //網頁全螢幕CSS
    $('#Web_fullscreen_style').append(`
<style>
.container-player {
max-width: unset !important;
}

.player {
padding-top: 0 !important;
margin-top: 0 !important;
z-index: 999 !important;
position: fixed !important;
}

.videoframe {
width: 100% !important;
margin: auto !important;
max-height: unset !important;
}

.video {
width: 100% !important;
height: 100% !important;
position: unset !important;
padding-bottom: unset !important;
}

.BH_background {
margin-top: unset !important;
position: relative position: fixed
}

@media (min-width: 1000px)
.BH_background {
margin-top: unset !important;
}

.top_sky {
display: none !important;
}

.mainmenu {
display: none !important;
}

.subtitle {
display: none !important;
}
</style>
`);
    };


//全螢幕偵測
$(document).on("mozfullscreenchange webkitfullscreenchange fullscreenchange", fullscreenChange);
function fullscreenChange(){
    let isFullScreen = document.fullScreen || document.mozFullScreen || document.webkitIsFullScreen;
    /*let fullScreen_bullet_send = '<button id="plus_fullScreen-bullet-send" class="plus_bullet-send_icon vjs-control vjs-button vjs-show-tip" type="button" aria-disabled="false" title="發送彈幕 左右兩側可以拖移輸入框"';
    fullScreen_bullet_send += 'onclick="$(\'#plus_bullet-send\').slideToggle(0);"><span aria-hidden="true" class="vjs-icon-placeholder"></span><span class="vjs-control-text" aria-live="polite"></span></button>';*/
    setTimeout(function () {
        if (isFullScreen) {
            $(".plus_Web_fullscreen_icon").css("display", "none");
            $(".plus_picture_in_picture_icon").css("display", "none");
        } else {
            $(".plus_Web_fullscreen_icon").css("display", "");
            $(".plus_picture_in_picture_icon").css("display", "");
        }
    },500);
}

//偵測分級標識警告&廣告狀態
setTimeout(function(){
    window.initial = setInterval(function(){
        let src = $("#ani_video_html5_api").attr("src");
        let readyState = $("#ani_video_html5_api")[0].readyState;
        if($(".R18").length == 0 && $(".vast-skip-button").length == 0 && src.indexOf("fbcdn.net") == -1 && readyState != 0){
            if(video_next_skip){
                window.videoend = setInterval(function(){
                    let ended = $("#ani_video_html5_api")[0].ended;
                    let nextplayer = $('.playing').next().html();
                    let match = (nextplayer!=null)?nextplayer.match('<a href="(.*)">')[1]:null;
                    if(match != null){video_next();}else{clearInterval(window.videoend);}
                },1000)
            }
            $("#plus-video-fastforward-minute").attr("disabled",false);
            $("#plus-video-fastforward-second").attr("disabled",false);
            $("#plus-video-fastforward-sendout").attr("disabled",false);
            $("#void_speed").attr("disabled",false);
            danmuGetload();
            clearInterval(window.initial);
        }
    },1000);
},1000);


//自動切換至下一集
$("#video_next_skip").change(function() {
    video_next_bool = !video_next_bool;
    GM_setValue('video_next',video_next_bool);
    $("#plussetup").css("display","block");
    setTimeout(function(){$("#plussetup").css("display","none")},3000);
});

if(video_next_skip){
    video_next_bool = true;
    $("#video_next_skip").prop("checked",true);
    window.next_button = setInterval(function () {
        if($("#ani_video-next").length == 0){
            $("#ani_video").append('<div class="video-next-button" id="ani_video-next" style="display:none"></div>');
        }else{
            clearInterval(window.next_button);
        }
    },1000);
}

var countdown = 5;
function video_next(){
    let ended = $("#ani_video_html5_api")[0].ended;
    let nextplayer = $('.playing').next().html();
    let match = (nextplayer!=null)?nextplayer.match('<a href="(.*)">')[1]:null;
    if(ended && match != null){
        if(countdown == 1)document.location.href="https://ani.gamer.com.tw/animeVideo.php"+match
        $("#ani_video-next").css("display","");
        $("#ani_video-next").html('<p class="vast-skip-button-text">0' + countdown + ' 秒後切換至下一集<span id="stop_video-next" style="cursor:pointer"> X</span></p>');
        countdown -= 1;
    }else{
        $("#ani_video-next").css("display","none");
        countdown = 5;
    }
    $("#stop_video-next").click(function(){$("#ani_video-next").remove();clearInterval(window.videoend);});
}


//自動同意分級標識警告
$("#grading").change(function() {
    grading_bool = !grading_bool;
    GM_setValue('ncc_warning',grading_bool);
    $("#plussetup").css("display","block");
    setTimeout(function(){$("#plussetup").css("display","none")},3000);
});

if(ncc_warning_save){
    grading_bool = true;
    let rating_img = $(".rating > img").attr("src");
    let img_cut = rating_img.substr(30);
    $("#grading").prop("checked",true);
    window.ncc = setInterval(function(){
        if($(".R18").length > 0 && $(".plus-frame").length == 0){
            if(img_cut != 'TW-18UP.gif'|| token()[1] == 1){
                setTimeout(function () {$("#adult").click();},500);
            }
            clearInterval(window.ncc);
        }
    },1000);
}



//空降座標
$('#plus-video-fastforward-sendout').on('click', function() {
    var minute = $("#plus-video-fastforward-minute").val();
    var second = $("#plus-video-fastforward-second").val();
    $("#plus-video-fastforward-minute").val("");
    $("#plus-video-fastforward-second").val("");
    if($("#ani_video_html5_api")[0].paused != true){$(".vjs-play-control").click();}
    fastforward(minute,second);
});

//改變影片時間
function fastforward(minute,second){
    let video_minute = parseInt(minute) || 0;
    let video_second = parseInt(second) || 0;
    if((video_minute*60) + video_second < $("#ani_video_html5_api")[0].duration){
        $("#ani_video_html5_api")[0].currentTime = (video_minute*60) + video_second;
        if($("#ani_video_html5_api")[0].paused == true){$(".vjs-play-control").click();}
    }else{
        if($("#ani_video_html5_api")[0].paused == true){$(".vjs-play-control").click();}
        alert("未知的座標,空降失敗");
    }
}


//空降足跡-解析影片時間
function time_parse(stringasc,array,bool){
    var match = stringasc.match(/[0-9]+:[0-9]+/g);
    for(var id in match){
        var split = match[id].split(":");
        var match1 = split[0].match(/[0-9]{2,3}/g),match2 = split[1].match(/[0-9]{2,3}/g);
        var minute = (!match1)? "0"+split[0]:split[0], second = (!match2)? "0"+split[1]:split[1];
        var addjson = {"airborne":bool,"time":minute+":"+second};
        array.push(addjson);
    }
}


//空降足跡
function danmuGet(){
    var array= [];
    var settings = {
        "async": true,
        "crossDomain": true,
        "url": "ajax/danmuGet.php",
        "method": "POST",
        "data": {
            "sn": animefun.videoSn
        }
    }
    $.ajax(settings).done(function (response) {
        $(".plus_time_body").children().remove();
        for(var key in response){
            let stringasc = tobig5(response[key].text);
            let match = stringasc.match(/[0-9]{1,3}:[0-9]{1,3}/g);
            if( stringasc.indexOf("空降") != "-1" || stringasc.indexOf("座標") != "-1"){
                time_parse(stringasc,array,true);
            }else if(match){
                time_parse(stringasc,array,false);
            }
        }
        var deduped = filter_r(array,'time'); //清除重複
        var json = jsonsort(deduped,'time'); //排序
        if(json.length){
            for(var arrayid in json){
                let airborne = (json[arrayid].airborne)?"":"background:#bbbbbb;"
                $(".plus_time_body").append('<span class="plus_keyword-label" style="cursor:pointer;'+airborne+'"><span onclick="$(this).fastforward_skip(\''+json[arrayid].time+'\')">'+json[arrayid].time+'</span></span>');
            }
        }else{
            $(".plus_time_body").html('<ul class="plus_no_sub"><img src="https://i2.bahamut.com.tw/anime/no_sub.png"style="width: 33%;"><br>目前沒有人嘗試空降<br>發個彈幕報告空降座標吧!</ul>')
        }
    });
}


//空降足跡-改變影片時間
$.fn.fastforward_skip = function (match){
    let src = $("#ani_video_html5_api").attr("src");
    let readyState = $("#ani_video_html5_api")[0].readyState;
    if($(".R18").length == 0 && $(".vast-skip-button").length == 0 && src.indexOf("fbcdn.net") == -1 && readyState != 0){
        if($("#ani_video_html5_api")[0].paused != true){$(".vjs-play-control").click();}
        let split = match.split(":");
        fastforward(split[0],split[1]);
    }
}


function danmuGetload() {
    setTimeout(function () {
        danmuGet();//載入空降足跡
        //空降足跡重整
        $(".plus_refresh,#bahablack,.bluebtn").click(function () {
            setTimeout(function () { danmuGet() }, 1000)
        });
    }, 1000)
}


//子母畫面
window.picture = setInterval(function () {
    let picture = '<button id="plus_picture_in_picture" class="plus_picture_in_picture_icon vjs-control vjs-button vjs-show-tip" type="button" aria-disabled="false" title="子母畫面"';
    picture += '"><span aria-hidden="true" class="vjs-icon-placeholder"></span><span class="vjs-control-text" aria-live="polite"></span></button>';
    if($(".control-bar-rightbtn").length == 1 && $("#plus_picture_in_picture").length == 0){
        $(".plus_Web_fullscreen_icon").after(picture);
    }else if($("#plus_picture_in_picture").length == 1){
        clearInterval(window.picture);
        addpicture_in_picture();
    }
},500);

function addpicture_in_picture(){
    let video = $("#ani_video_html5_api")[0];
    $("#plus_picture_in_picture").click(function(){
        var BrowserSearch = BrowserCheck("Chrome");
        if(BrowserSearch[0] != null && BrowserSearch[1] > 70){
            if (video !== document.pictureInPictureElement){
                video.requestPictureInPicture()
                    .then(() => {})
                    .catch(() => {});
            }else{
                document.exitPictureInPicture();
            }
        }else{
            $(".video-js").append('<div id="nopicture" class="vjs-switchRes-button">子母畫面目前不支援Firefox及少數瀏覽器</div>');
            setTimeout(function () { $("#nopicture").remove() }, 3000);
        }
    });

   video.addEventListener('enterpictureinpicture', () => {
        $("#ani_video_html5_api").attr("poster",picture_screenshot(video,"image/jpeg",0.1));
    });
    video.addEventListener('leavepictureinpicture', () => {
        $("#ani_video_html5_api").attr("poster","");
    });
}


function picture_screenshot(video,imagetype,level = null){
    let canvas = document.createElement("canvas");
    canvas.width = 1920;
    canvas.height = 1080;
    let ctx = canvas.getContext("2d");
    ctx.drawImage(video, 0, 0, canvas.width, canvas.height);
    let dataUrl = canvas.toDataURL(imagetype,level);

    return dataUrl;
}


function BrowserCheck(name){
    let Regex = name+"/(\\d*)";
    let re = new RegExp(Regex,"gm");
    let Browser = window.navigator.userAgent.match(re);
    let Search = (Browser!= null)?Browser[0].indexOf(name):null;
    let BrowserVar = (Browser!= null)?Browser[0].match(/\d*$/gm):[0];

    return [Search,BrowserVar[0]];
}


//用戶狀態
function token(){
    var vip,login;
    $.ajax({
        url: 'ajax/token.php',
        data: { sn: sn, device: deviceid},
        type: "GET",
        async: false,
        success: function(t) {
            var e = jQuery.parseJSON(t);
            vip = e.vip;
            login = e.login;
        }
    });
    return [vip,login];
}


//文字半形全形轉換
function tobig5(obj){
    var text = obj;
    var asciiTable = "!\"#$%&\’()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~";
    var big5Table = "%uFF01%u201D%uFF03%uFF04%uFF05%uFF06%u2019%uFF08%uFF09%uFF0A%uFF0B%uFF0C%uFF0D%uFF0E%uFF0F%uFF10"+
    "%uFF11%uFF12%uFF13%uFF14%uFF15%uFF16%uFF17%uFF18%uFF19%uFF1A%uFF1B%uFF1C%uFF1D%uFF1E%uFF1F%uFF20%uFF21%uFF22%uFF23"+
    "%uFF24%uFF25%uFF26%uFF27%uFF28%uFF29%uFF2A%uFF2B%uFF2C%uFF2D%uFF2E%uFF2F%uFF30%uFF31%uFF32%uFF33%uFF34%uFF35%uFF36"+
    "%uFF37%uFF38%uFF39%uFF3A%uFF3B%uFF3C%uFF3D%uFF3E%uFF3F%u2018%uFF41%uFF42%uFF43%uFF44%uFF45%uFF46%uFF47%uFF48%uFF49"+
    "%uFF4A%uFF4B%uFF4C%uFF4D%uFF4E%uFF4F%uFF50%uFF51%uFF52%uFF53%uFF54%uFF55%uFF56%uFF57%uFF58%uFF59%uFF5A%uFF5B%uFF5C"+
    "%uFF5D%uFF5E";
    var result = "";
    for (var i = 0; i < text.length; i++) {
        var val = escape(text.charAt(i));
        var j = big5Table.indexOf(val);
        result += (((j > -1) && (val.length == 6)) ? asciiTable.charAt(j / 6) : text.charAt(i));
    }
    return result;
}


//json清除重複
function filter_r(arr,attr){
    var tmp = {},re = [],len = arr.length;
    for(var i=0;i<len;i++){
        if(!(arr[i][attr] in tmp)) re.push(arr[i]);
        tmp[arr[i][attr]] = 1;
    }
    return re;
}


//json排序
function jsonsort(json,key){
    for(var j=1; j < json.length; j++){
        var temp = json[j],val = temp[key],i = j-1;
        while(i >=0 && json[i][key]>val){
            json[i+1] = json[i];
            i = i-1;
        }
        json[i+1] = temp;
    }
    return json;
}

})();