function escapeHTML(a){return a.replace(/[&<>"'`=\/]/g,function(a){return{"&":"&","<":"<",">":">",'"':""","'":"'","/":"/","`":"`","=":"="}[a]})}class API{static request(a,b,c,d,e){$.ajax({url:"/api/"+b+"/"+c,method:a?"POST":"GET",data:d,success:a=>{"null"===a.error?e(!0,null,a.warnings,a):e(!1,this.responsify(a.error),a.warnings,a)},error:a=>e(!1,null,null,a)})}static responsify(a){var b=(a,b)=>({type:a,text:b});return{not_logged_in:b("error","Not logged in (\u2716\u256D\u256E\u2716)"),invalid_request:b("error","Invalid request \u3010\u30C4\u3011"),video_not_found:b("error","Video not found. Perhaps it has already been deleted"),insufficient_permissions:b("error","Insufficient permissions \u250C\u2229\u2510(\u25E3_\u25E2)\u250C\u2229\u2510"),no_tags_specified:b("error","No tags specified")}[a]}}$(function(){$.ajaxSetup({headers:{"X-CSRF-TOKEN":$("meta[name=\"_token\"]").attr("content")}})});class Video{constructor(){let a=location.href.match(/(\d+)(?!.*\/.)/);a&&(this.id=a[1],this.user=$(".fa-info-circle").next().children().text().trim(),this.tags=$.makeArray($("#tag-display").children().children()).map(a=>a.innerText).filter(a=>!!a),this.api="video",this.apiBase=this.api+"/"+this.id)}tag(a,b){var c=this;a.length?API.request(!0,this.apiBase,"tag",{tags:a},function(a,d,e,f){a&&(c.tags=[],c.tags=f.tags.map(a=>a.name)),b(a,d,e,f)}):b(!1,API.responsify("no_tags_specified"),null,null)}untag(a,b){var c=this;a=a.trim(),!a?b(!1,API.responsify("invalid_request"),null,null):API.request(!0,this.apiBase,"untag",{tag:a},function(a,d,e,f){a&&(c.tags=[],c.tags=f.tags.map(a=>a.name)),b(a,d,e,f)})}delete(a,b){a=a.trim(),!a?b(!1,API.responsify("invalid_request"),null,null):API.request(!0,this.apiBase,"delete",{reason:a},b)}}function flash(a,b){var c=$(".flashcontainer > .flash-inner");"error"===a&&(a="danger"),c.append("
:REPLACE:
".replace(/:TYPE:/,a).replace(/:REPLACE:/,b)),alertrm(jQuery)}if(window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||function(a){window.setTimeout(a,1e3/60)}}(),"undefined"!=typeof video){video=new Video,video.id||(video=null);var videoElem=document.getElementById("video");if(videoElem.play(),videoElem.addEventListener("mouseover",function(){this.controls=!0}),videoElem.volume=.3,videoElem.volume=localStorage.getItem("volume")||1,videoElem.addEventListener("volumechange",a=>{localStorage.setItem("volume",a.target.volume)}),null!==videoElem){function a(){videoElem.paused||videoElem.ended||!background||(context.drawImage(videoElem,0,0,cw,ch),window.requestAnimFrame(a))}null==localStorage.getItem("background")&&localStorage.setItem("background","true");var background="true"===localStorage.getItem("background"),canvas=document.getElementById("bg"),context=canvas.getContext("2d"),cw=canvas.width=0|canvas.clientWidth,ch=canvas.height=0|canvas.clientHeight;videoElem.addEventListener("play",a)}}$("#togglebg").on("click",function(a){a.preventDefault(),background=!background,localStorage.setItem("background",background.toString()),background?$(canvas).css("display","block"):$(canvas).css("display","none"),animationLoop()}),$("[data-toggle=popover]").popover({html:!0,content:function(){return $("#popover-content").html()}}),function(a){function b(b,c){if(a("video").length){var d=[];c.interpret&&d.push(" Artist: "+c.interpret),c.songtitle&&d.push(" Songtitle: "+c.songtitle),c.imgsource&&d.push(" Video Source: "+c.imgsource),c.category.name&&d.push(" Category: "+c.category.name),a("span.fa-info-circle").attr("data-content",d.join("
"))}else{var e=b.parents("tr");e.find("span").show(),e.find("input, select").hide(),e.find(".vinterpret").html(c.interpret||""),e.find(".vsongtitle").html(c.songtitle||""),e.find(".vimgsource").html(c.imgsource||""),e.find(".vcategory").html(""+c.category.name+"")}}var c=a(".indexform, #webmedit");if(a(".indexedit").find("input, select").hide(),c.length){var d=a("tr");d.on("dblclick touchdown",function(){var b=a(this);b.find("input, select").show(),b.find("span").hide()})}c.on("submit",function(c){var d=a(this);c.preventDefault(),a.ajax({type:"POST",url:d.attr("action"),data:d.serialize()}).done(function(a){flash("success","Video successfully updated"),b(d,a),d.find("#webmeditmodal")}).fail(function(){flash("error","Error updating video"),d.find("#webmeditmodal")})})}(jQuery),function(a){a(":not(form)[data-confirm]").on("click touchdown",function(){return confirm(a(this).data("confirm"))})}(jQuery);var alertrm=function(a){a(".alert").each(function(b){a(this).delay(3e3+1e3*b).slideUp(300,function(){a(this).remove()})})};alertrm(jQuery),$(function(){function a(){$("#dragndrop").css({color:l,"border-color":m,"background-color":n})}function b(a){var b=Math.floor(Math.log(a)/Math.log(1024));return(a/Math.pow(1024,b)).toFixed(2)+" "+["B","kB","MB","GB","TB","PB","EB","ZB","YB"][b]}function c(a){a.preventDefault(),$("input[type=\"file\"]").trigger("click")}function d(){$("#dragndrop-link").on("click",c),$("#dragndrop-link").attr("href","#"),$("#dragndrop-text").html(k)}function f(c){$("#dragndrop-link").removeAttr("href").off("click"),$("#dragndrop-text").html(""+c.name+" — "+b(c.size)+" — "),$("#video_preview").prop("volume",0),$("#dragndrop-clear").on("click",function(b){b.preventDefault(),b.stopPropagation(),i=null,$(this).off("click"),a(),d(),j&&"abort"!=j.statusText&&(j.abort(),j=null)})}function g(c){var d=c.size>100000000,e="video/webm"!==c.type;return!(d&&$("#dragndrop").data("uploadlimit")||e)||(flash("error",e?"Invalid file":`File too big. Max ${b(100000000)}`),a(),!1)}function h(a,c,d,e,f,g,h){function k(){var a,c=0,d=n.length;for(a=o;a/"+a.video_id+". Redirect in 3 seconds..."),setTimeout(function(){location.href="/"+a.video_id},3e3)):flash("error","Upload failed");break;case"invalid_request":flash("error","Invalid request");break;case"not_logged_in":flash("error","Not logged in");break;case"uploadlimit_reached":flash("error","Uploadlimit reached");break;case"invalid_file":flash("error","Invalid file");break;case"file_too_big":flash("error","File too big. Check the max upload size.");break;case"already_exists":a.video_id?flash("error","Video already exists: /"+a.video_id+""):flash("error","Video already existed but has been deleted");break;case"erroneous_file_encoding":flash("error","Erroneous file encoding. Try reencoding it");break;default:flash("error","Upload failed");}"null"!=a.error&&($(".progress-bar-custom").css("background-color","red"),$(".progress-bar-custom").text("Upload failed")),$("#upload-stats").text("Speed: "+b(Math.floor(n.average()))+"/s Uploaded: "+b(i.size))},error:function(a,b,c){return a=null,"abort"==c?void flash("info","Upload aborted"):void(flash("error","Upload failed"),$(".progress-bar-custom").css("background-color","red"),$(".progress-bar-custom").text("Upload failed"))},complete:function(){clearInterval(l)},xhr:function(){var a=$.ajaxSettings.xhr(),b=new Date;return $(".progress-bar-custom").css("background-color","rgba(47, 196, 47, 1)"),a.upload.onprogress=function(a){var c=Math.floor(100*(a.loaded/a.total)),d=(new Date().getTime()-b.getTime())/1e3,e=(a.loaded-m.loaded)/(d-m.secondsElapsed);$(".progress-bar-custom").css("width",c+"%"),$(".progress-bar-custom").text(c+"%"),m.secondsElapsed=d,m.loaded=a.loaded,n.push(e),l||(k(),l=setInterval(k,500))},a}})}if(/\/upload/.test(location.href)){var i,j,k=$("#dragndrop-text").html(),l=$("#dragndrop").css("color"),m=$("#dragndrop").css("border-left-color"),n=$("#dragndrop").css("background-color"),o=0,p=$("#tags_upload"),q=$("#nsfw");$("input[type=\"file\"]").on("change",function(){if(this.files.length){var a=this.files[0];g(a)&&(i=a,f(a)),$(this).wrap("