diff --git a/receiver/index.html b/receiver/index.html index dc57a5b2..e3cc54d6 100644 --- a/receiver/index.html +++ b/receiver/index.html @@ -1,9 +1,17 @@ - + +
diff --git a/receiver/receiver.js b/receiver/receiver.js index d9e410fe..48bede1d 100644 --- a/receiver/receiver.js +++ b/receiver/receiver.js @@ -1,3 +1,48 @@ +cast.receiver.logger.setLevelValue(cast.receiver.LoggerLevel.DEBUG); +window.castReceiverManager = cast.receiver.CastReceiverManager.getInstance(); +/** + * Application config + **/ +var appConfig = new cast.receiver.CastReceiverManager.Config(); + +/** + * Text that represents the application status. It should meet + * internationalization rules as may be displayed by the sender application. + * @type {string|undefined} + **/ +appConfig.statusText = 'Ready to play'; + +/** + * Maximum time in seconds before closing an idle + * sender connection. Setting this value enables a heartbeat message to keep + * the connection alive. Used to detect unresponsive senders faster than + * typical TCP timeouts. The minimum value is 5 seconds, there is no upper + * bound enforced but practically it's minutes before platform TCP timeouts + * come into play. Default value is 10 seconds. + * @type {number|undefined} + **/ +// 100 minutes for testing, use default 10sec in prod by not setting this value +appConfig.maxInactivity = 6000; +/** + * Initializes the system manager. The application should call this method when + * it is ready to start receiving messages, typically after registering + * to listen for the events it is interested on. + */ +window.castReceiverManager.start(appConfig); + +window.castReceiverManager.onSenderDisconnected = function(event) { + if(window.castReceiverManager.getSenders().length == 0 && + event.reason == cast.receiver.system.DisconnectReason.REQUESTED_BY_SENDER) { + window.close(); + } +} + +var customMessageBus = castReceiverManager.getCastMessageBus('urn:x-cast:super.awesome.example'); +customMessageBus.onMessage = function(event) { + console.log(event); +} + +/* var receiver = new cast.receiver.Receiver("E6856E24", ["no.zoff.customcast"],"",5); var ytChannelHandler = new cast.receiver.ChannelHandler("no.zoff.customcast"); var nextVideo; @@ -63,7 +108,7 @@ function onPlayerStateChange(event) { channel.send({'event':'stateChange','message':event.data}); /*if (event.data==YT.PlayerState.ENDED) { endcast(); - }*/ + } } function onMessage(event) { @@ -72,4 +117,4 @@ function onPlayerStateChange(event) { function endcast() { setTimeout(window.close, 2000); - } + }*/ diff --git a/static/dist/main.min.js b/static/dist/main.min.js index 3613d044..9e993d05 100755 --- a/static/dist/main.min.js +++ b/static/dist/main.min.js @@ -1,3 +1,3 @@ -!function(){function e(){var e=!0;A=$("#chan").html(),be=B.mobilecheck();var t=B.mobilecheck()?"left":"right";if(window.onpopstate=function(e){k()},_(),"zoff.no"==window.location.hostname?add="https://zoff.no":add=window.location.hostname,void 0!==Ue&&(Ue.stopInterval=!1),$("ul.playlist-tabs").tabs(),$("ul.playlist-tabs-loggedIn").tabs(),$(".chatTabs").tabs(),$("#settings").sideNav({menuWidth:300,edge:t,closeOnClick:!1}),$(".collapsible").collapsible({accordion:!0}),v(de),$e=$("#temp-results-container"),we=$("#empty-results-container").html(),pe=$(".not-imported-container").html(),$(".not-imported-container").empty(),$(".video-container").resizable({start:function(e,t){$("iframe").css("pointer-events","none")},stop:function(e,t){$("iframe").css("pointer-events","auto"),E.set_width($(this).width())},handles:"e",minWidth:350,maxWidth:$(window).width()-221}),(void 0===Me||B.mobilecheck())&&(e=!1,Me=io.connect(""+add+":8880",Ne)),0===$("#alreadychannel").length||B.mobilecheck())a(),n(),o(),i();else{$("#channel-load").css("display","none"),$("#player").css("opacity","1"),$("#controls").css("opacity","1"),$(".playlist").css("opacity","1"),Ue.readyLooks(),He.initYoutubeControls(Ue.player),He.initSlider(),Ue.player.setVolume(E.get_volume()),$(".video-container").removeClass("no-opacity");var r="https://remote."+window.location.hostname+"/"+ke;$("#code-text").text(ke),$("#code-qr").attr("src","https://chart.googleapis.com/chart?chs=221x221&cht=qr&choe=UTF-8&chld=L|1&chl="+r),$("#code-link").attr("href",r)}e&&Me.emit("list",A.toLowerCase()),/iPad|iPhone|iPod/.test(navigator.userAgent)&&!window.MSStream?(document.getElementById("search").blur(),$("#channel-load").css("display","none")):(window.onYouTubeIframeAPIReady=Ue.onYouTubeIframeAPIReady,(""===Ue.player||void 0===Ue.player||B.mobilecheck())&&Ue.loadPlayer()),B.mobilecheck()&&Re.initiate_volume(),s(),c(),l(),B.mobilecheck()||0!==$("#alreadychannel").length||p(),B.msieversion()||Notification.requestPermission(),$(".search_input").focus(),B.sample(),$("#results").hover(function(){$("div.result").removeClass("hoverResults"),te=0},function(){}),$("#search").focus(),$("#embed-button").css("display","inline-block"),$("#embed-area").val(f(me,ge,ue)),$("#search").attr("placeholder","Find song on YouTube..."),window.__onGCastApiAvailable=function(e){e&&initializeCastApi()}}function t(){Me.on("connect_failed",function(){B.log("Connection Failed"),he||(he=!0,Materialize.toast("Error connecting to server, please wait..",1e8,"red lighten connect_error"))}),Me.on("connect_error",function(){B.log("Connection Failed."),he||(he=!0,Materialize.toast("Error connecting to server, please wait..",1e8,"red lighten connect_error"))})}function a(){Me.on("np",Ue.youtube_listener)}function n(){Me.on("get_list",function(){Me.emit("list",A.toLowerCase())})}function o(){Me.on("suggested",function(e){var t=!0;void 0===e.id&&(t=!1),Fe.catchUserSuggests(e,t)})}function i(){Me.on("viewers",function(e){W=e,void 0!==Pe&&Ue.getTitle(Pe,W)})}function s(){Me.on("toast",I.toast),Me.on("pw",I.pw),Me.on("conf",I.conf)}function l(){Me.on("chat.all",T.allchat),Me.on("chat",T.channelchat)}function c(){Me.on("channel",P.channel_function)}function d(){Me.on("playlists",Ye.frontpage_function)}function p(){Me.on("id",L.host_listener)}function u(e){Me.on(e,L.host_on_action)}function m(){localStorage.debug=!0}function h(){localStorage.debug=!1}function f(e,t,a){return''}function y(e){for(var t="",a="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.-_",n=0;nX"),$("#playbar").remove(),$("#playlist").remove(),$(".ui-resizable-handle").remove(),$("#main_components").remove(),$("#player").addClass("player_bottom"),$("#main-row").addClass("frontpage_modified_heights"),$("#player").css("opacity","1"),$("#video-container").removeClass("no-opacity"),$("#main-row").prepend("
");$(".drag-target").remove(),$("#sidenav-overlay").remove(),$("main").attr("class","center-align container"),$("body").attr("id",""),$("body").attr("style",""),$("header").html($($(e)[59]).html()),$($(e)[61]).insertAfter("header"),$($(e)[63]).insertAfter(".mega"),B.mobilecheck()?$("main").html($($(e)[67]).html()):$("main").append($($($(e)[67]).html())[0]),$(".page-footer").removeClass("padding-bottom-extra"),$(".page-footer").removeClass("padding-bottom-novideo"),$("#favicon").attr("href","static/images/favicon.png"),1==$("#alreadyfp").length?S():(De=!0,q=!0,S()),0===$("#alreadychannel").length&&$("head").append("
ok",1e4);var a=0;document.getElementById("zicon").addEventListener("click",function(){a+=10,document.getElementById("zicon").style.paddingLeft=a+"%",a>=100&&(window.location.href="http://etys.no")}),!B.mobilecheck()&&Ye.winter&&Ye.start_snowfall()}var I={beginning:!0,toast:function(e){switch(e){case"addedsong":e=B.rnd(["I added your song","Your song has been added","Yay, more songs!","Thats a cool song!","I added that song for you","I see you like adding songs..."]);break;case"addedplaylist":e=B.rnd(["I added the playlist","Your playlist has been added","Yay, many more songs!","Thats a cool playlist!","I added all the songs for you","I see you like adding songs.."]),document.getElementById("import").disabled=!1,$("#playlist_loader").addClass("hide"),$("#import").removeClass("hide");break;case"savedsettings":e=B.rnd(["I've saved your settings","I stored all your settings","Your settings have been stored in a safe place"]);break;case"wrongpass":e=B.rnd(["That's not the right password!","Wrong! Better luck next time...","You seem to have mistyped the password","Incorrect. Have you tried meditating?","Nope, wrong password!","Wrong password. The authorities have been notified."]),E.remove_pass(A.toLowerCase()),I.display_logged_out(),M=!0;break;case"shuffled":e=B.rnd(["♫ You stir me right round, baby. ♫","♫ Stir, stir, stir my boat ♫","I vigorously stirred your playlist!","I hope you like your list stirred, not shaken.","I shuffled your playlist with the cosmic background radiation as a seed. Enjoy.","100% randomized, for your listening pleasure!","I hope you enjoy your fresh playlist!"]);break;case"deletesong":e=B.rnd(["Your song is now in a better place...","You won't be seeing any more of that video...","EXTERMINATE! EXTERMINATE! EXTERMINATE!","I killed it with fire","Thanks for deleting that song. I didn't like it anyways...","Removed song securely."]);break;case"voted":e=B.rnd(["You voted!","You vote like a boss","Voting is the key to democracy","May you get your song to the very top!","I love that song! I vouch for you.","Only you vote that good","I like the way you vote...","Up the video goes!","Voted Zöff for president","Only 999 more to go!"]);break;case"alreadyvoted":e=B.rnd(["You can't vote twice on that song!","I see you have voted on that song before","One vote per person!","I know you want to hear your song, but have patience!","I'm sorry, but I can't let you vote twice, Dave."]);break;case"skip":e=B.rnd(["The song was skipped","I have skipped a song","Skipped to the beat","Skipmaster3000","They see me skippin', they hatin'"]);break;case"listhaspass":e=B.rnd(["I'm sorry, but you have to be an admin to do that!","Only admins can do that","You're not allowed to do that, try logging in!","I can't let you do that","Please log in to do that"]),E.remove_pass(A.toLowerCase()),I.display_logged_out(),M=!0;break;case"noskip":e=B.rnd(["Only Admins can skip songs, peasant!","You have to log in to skip songs on this channel","Try clicking the settings icon and logging in before you skip"]);break;case"alreadyskip":e=B.rnd(["Skipping is democratic, only one vote per person!","More people have to vote to skip, not just you!","Get someone else to skip too! You can't do it on yourself."]);break;case"notyetskip":e="Skipping is disabled the first 10 seconds.";break;case"correctpass":e="Correct password. You now have access to the sacred realm of The Admin.";break;case"changedpass":e="Your password has been changed!";break;case"suggested":e="Your song was suggested!";break;case"alreadyplay":e="Seems the song you want is already playing. No fooling the system!"}Materialize.toast(e,4e3)},pw:function(e){M=!1,F=e,names=["vote","addsongs","longsongs","frontpage","allvideos","removeplay","skip","shuffle"],E.set_pass(A.toLowerCase(),E.decrypt_pass(e));for(var t=0;t150||(e.value.startsWith("/name ")?T.namechange(e.value.substring(6)):e.value.startsWith("/removename")?T.removename():"#all_chat"==$(".chat-tab-li a.active").attr("href")?Me.emit("all,chat",e.value):Me.emit("chat",e.value),e.value="")},allchat:function(e){j||":"!=e.msg.substring(0,1)||se||($("#favicon").attr("href","static/images/highlogo.png"),j=!0,O=!0,le=!0,re||T.chat_blink()),document.hidden&&$("#favicon").attr("href","static/images/highlogo.png");var t=B.intToARGB(B.hashCode(e.from));if(t.length<6)for(x=t.length;x<6;x++)t="0"+t;t=B.hexToRgb(t.substring(0,6));var a=B.rgbToHsl([t.r,t.g,t.b],!1);$("#chatall").append("
  • "+e.from+"
  • ");var n=document.createTextNode(e.msg);$("#chatall li:last")[0].appendChild(n),document.getElementById("chatall").scrollTop=document.getElementById("chatall").scrollHeight},channelchat:function(e){j||":"!=e.msg.substring(0,1)||se||($("#favicon").attr("href","static/images/highlogo.png"),O=!0,le=!0,re||T.chat_blink());var t=B.intToARGB(B.hashCode(e.from));if(t.length<6)for(x=t.length;x<6;x++)t="0"+t;t=B.hexToRgb(t.substring(0,6));var a=B.rgbToHsl([t.r,t.g,t.b],!1);$("#chatchannel").append("
  • "+e.from+"
  • ");var n=document.createTextNode(e.msg);$("#chatchannel li:last")[0].appendChild(n),document.getElementById("chatchannel").scrollTop=document.getElementById("chatchannel").scrollHeight},chat_blink:function(){re=!0,$(".chat-link").attr("style","color: grey !important;"),setTimeout(function(){$(".chat-link").attr("style","color: white !important;"),setTimeout(function(){re&&T.chat_blink()},1e3)},1e3)}},E={conf_pass:void 0,init:function(){document.cookie=A.toLowerCase()+"=; path=/"+A.toLowerCase()+"; expires="+new Date(0).toUTCString();try{conf_arr=E.decrypt(E.getCookie("_opt"),"_opt")}catch(e){conf_arr=E.decrypt(E.create_cookie("_opt"),"_opt")}try{E.conf_pass=E.decrypt(E.getCookie(A.toLowerCase()),A.toLowerCase())}catch(e){E.conf_pass=E.decrypt(E.create_cookie(A.toLowerCase()),A.toLowerCase())}L.change_enabled(conf_arr.remote),100!=conf_arr.width&&Ue.set_width(conf_arr.width),void 0!==conf_arr.name&&""!==conf_arr.name&&T.namechange(conf_arr.name)},decrypt:function(e,t){void 0===E.getCookie(t)&&(e=E.create_cookie(t));var a=CryptoJS.AES.decrypt(e,"0103060703080703080701",{mode:CryptoJS.mode.CBC,padding:CryptoJS.pad.Pkcs7});return $.parseJSON(a.toString(CryptoJS.enc.Utf8))},decrypt_pass:function(e){var t=CryptoJS.AES.decrypt(e,Me.id,{mode:CryptoJS.mode.CBC,padding:CryptoJS.pad.Pkcs7});return t.toString(CryptoJS.enc.Utf8)},encrypt:function(e,t){var a=JSON.stringify(e),n=CryptoJS.AES.encrypt(a,"0103060703080703080701",{mode:CryptoJS.mode.CBC,padding:CryptoJS.pad.Pkcs7}),o=new Date;o.setFullYear(o.getFullYear()+1),document.cookie=t+"="+n.toString()+";expires="+o.toGMTString()+";path=/;"},encrypt_string:function(e){var t=CryptoJS.AES.encrypt(e,Me.id,{mode:CryptoJS.mode.CBC,padding:CryptoJS.pad.Pkcs7});return t.toString()},get_volume:function(){return E.decrypt(E.getCookie("_opt"),"_opt").volume},set_volume:function(e){conf_arr.volume=e,E.encrypt(conf_arr,"_opt")},create_cookie:function(e){"_opt"==e?cookie_object={volume:100,width:100,remote:!0,name:""}:cookie_object={passwords:{}};var t=JSON.stringify(cookie_object),a=CryptoJS.AES.encrypt(t,"0103060703080703080701",{mode:CryptoJS.mode.CBC,padding:CryptoJS.pad.Pkcs7}),n=new Date;return n.setFullYear(n.getFullYear()+1),document.cookie=e+"="+a.toString()+";expires="+n.toGMTString()+";path=/;",E.getCookie(e)},set_pass:function(e,t){E.conf_pass.passwords[e]=t,E.encrypt(E.conf_pass,e)},remove_pass:function(e){delete E.conf_pass.passwords[e],E.encrypt(E.conf_pass,e.toLowerCase())},set_name:function(e){conf_arr.name=encodeURIComponent(e).replace(/\W/g,""),E.encrypt(conf_arr,"_opt")},remove_name:function(){conf_arr.name="",E.encrypt(conf_arr,"_opt")},get_pass:function(e){if(void 0!==E.conf_pass)return E.conf_pass.passwords[e]},set_remote:function(e){conf_arr.remote=e,E.encrypt(conf_arr,"_opt")},get_remote:function(e){return conf_arr.remote},crypt_pass:function(e){var t=CryptoJS.AES.encrypt(e,Me.id,{mode:CryptoJS.mode.CBC,padding:CryptoJS.pad.Pkcs7});return t.toString()},get_width:function(){return conf_arr.width},set_width:function(e){conf_arr.width=e,E.encrypt(conf_arr,"_opt")},getCookie:function(e){var t="; "+document.cookie,a=t.split("; "+e+"=");if(2==a.length)return a.pop().split(";").shift()}},B={log:function(e){"true"===localStorage.debug&&console.log(e)},rnd:function(e){return e[Math.floor(Math.random()*e.length)]},mobilecheck:function(){var e=!1;return function(t){(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(t)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(t.substr(0,4)))&&(e=!0)}(navigator.userAgent||navigator.vendor||window.opera),e},predicate:function(){for(var e,t,a,n=[],o=arguments.length,i=function(e,t){return e===t?0:e>24&255).toString(16)+(e>>16&255).toString(16)+(e>>8&255).toString(16)+(255&e).toString(16)},hexToRgb:function(e){var t=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(e);return t?{r:parseInt(t[1],16),g:parseInt(t[2],16),b:parseInt(t[3],16)}:null},pad:function(e){return e<10?"0"+Math.floor(e):Math.floor(e)},contains:function(e,t){for(var a=e.length;a--;)if(e[a]===t)return!0;return!1},sample:function(){Date.now()-K>=2*X&&(Me.removeAllListeners(),Me.disconnect(),Me.connect(),Ue.setup_all_listeners()),K=Date.now(),setTimeout(B.sample,X)},loadjsfile:function(e){if(J.indexOf("["+e+"]")==-1){var t=document.createElement("script");t.setAttribute("type","text/javascript"),t.setAttribute("src",e),document.getElementsByTagName("head")[0].appendChild(t),J+="["+e+"]"}},msieversion:function(){var e=window.navigator.userAgent,t=e.indexOf("MSIE ");return!!(t>0||navigator.userAgent.match(/Trident.*rv\:11\./))},getRandomInt:function(e,t){return Math.floor(Math.random()*(t-e))+e},rgbToHsl:function(e,t){r=e[0],g=e[1],b=e[2],r/=255,g/=255,b/=255;var a,n,o=Math.max(r,g,b),i=Math.min(r,g,b),s=(o+i)/2;if(o==i)a=n=0;else{var l=o-i;switch(n=s>.5?l/(2-o-i):l/(o+i),o){case r:a=(g-b)/l+(g.5&&t?s=.5:s<.65&&!t&&(s=.65),"hsl("+Math.floor(360*a)+", "+Math.floor(100*n)+"%, "+Math.floor(100*s)+"%)"},componentToHex:function(e){var t=e.toString(16);return 1==t.length?"0"+t:t},rgbToHex:function(e,t,a){return"#"+B.componentToHex(e)+B.componentToHex(t)+B.componentToHex(a)},upperFirst:function(e){return e.substring(0,1).toUpperCase()+e.substring(1).toLowerCase()},addClass:function(e,t){B.contains($(e).attr("class").split(" "),t)||$(e).addClass(t)},send_mail:function(e,t){""!==e&&""!==t&&($("#submit-contact-form").addClass("hide"),$("#send-loader").removeClass("hide"),$("#contact-form-from").attr("disabled","true"),$("#contact-form-message").attr("disabled","true"),e=$("#contact-form-from").val(),t=$("#contact-form-message").val(),$("#contact-container").empty(),newWindow=window.open("mailto:contact@zoff.no?Subject=Contact%20Zoff&Body="+t,"_blank"),$("#contact-container").html("Something went wrong, sorry about that. You could instead try with your own mail-client: contact@zoff.no"),setTimeout(function(){newWindow.close()},500))}};$(document).on("submit","#contact-form",function(e){e.preventDefault();var t=$("#contact-form-message").val(),a=$("#contact-form-from").val();B.send_mail(a,t)}),Element.prototype.remove=function(){this.parentElement.removeChild(this)},NodeList.prototype.remove=HTMLCollection.prototype.remove=function(){for(var e=0,t=this.length;e=P.page&&a div:nth-child("+a+")").after(o);var i=$("#wrapper").children()[a];$(i).css("display",n),"block"==n&&$("#wrapper").children().length>=P.page+21?$($("#wrapper").children()[P.page+20]).css("display","none"):a=0?$($("#wrapper").children()[P.page-1]).css("display","block"):$("#wrapper").children().length>P.page+20&&$($("#wrapper").children()[P.page+20]).css("display","block"),t&&setTimeout(function(){$(i).css("height",66)},5)}},populate_list:function(e){void 0===D&&(D=$("#list-song-html").html()),Ce=e,P.can_fit=$("main").height()/66,P.sortList(),$("#wrapper").empty(),B.log("---------------------------"),B.log("---------FULL PLAYLIST-----"),B.log(Ce),B.log("---------------------------"),Ce.length>1?($.each(Ce,function(e,t){t.now_playing||$("#wrapper").append(P.generateSong(t,!1,ae,!0,!1,"",!0))}),$("#wrapper").children().length>20&&!$("#pageButtons").length?($('
    < prev< prev 1 next >next >
    ').insertAfter("#wrapper"),$(".prev_page").toggleClass("hide"),$(".next_page_hide").css("display","none")):$("#pageButtons").length||($('
    < prev< prev 1 next >next >
    ').insertAfter("#wrapper"),$(".prev_page").toggleClass("hide"),$(".next_page").toggleClass("hide"),$(".next_page_hide").css("display","inline-block"),$(".prev_page_hide").css("display","inline-block"))):(P.empty=!0,$("#wrapper").append("The playlist is empty."),$("#pageButtons").length||($('
    < prev< prev 1 next >next >
    ').insertAfter("#wrapper"),$(".prev_page").toggleClass("hide"),$(".next_page").toggleClass("hide"),$(".next_page_hide").css("display","inline-block"),$(".prev_page_hide").css("display","inline-block"))),$("#settings").css("visibility","visible"),$("#settings").css("opacity","1"),$("#wrapper").css("opacity","1"); -},dynamicContentPage:function(e){1==e?($("#wrapper").children().slice(P.page,P.page+20).hide(),P.page=P.page+20,$("#wrapper").children().slice(P.page,P.page+20).show(),P.page>0&&$(".prev_page").hasClass("hide")&&($(".prev_page").toggleClass("hide"),$(".prev_page_hide").css("display","none")),P.page+20>=$("#wrapper").children().length&&($(".next_page_hide").css("display","inline-block"),$(".next_page").css("display","none"))):($("#wrapper").children().slice(P.page-20,P.page).show(),$("#wrapper").children().slice(P.page,P.page+20).hide(),P.page=P.page-20,0!=P.page||$(".prev_page").hasClass("hide")?$(".prev_page").hasClass("hide")?$(".prev_page_hide").css("display","inline-block"):$(".prev_page_hide").css("display","none"):($(".prev_page").toggleClass("hide"),$(".prev_page_hide").css("display","inline-block")),P.page+20<$("#wrapper").children().length&&($(".next_page_hide").css("display","none"),$(".next_page").css("display","inline-block"))),$("#pageNumber").html(P.page/20+1)},added_song:function(e){var t;0!==Ce.length&&(t=Ce.pop()),Ce.push(e),P.sortList(),t&&Ce.push(t),$("#suggested-"+e.id).remove(),P.empty&&(P.empty=!1),$("#empty-channel-message").remove(),P.insertAtIndex(e,!0),$("#wrapper").children().length>P.page+20?($(".next_page_hide").css("display","none"),$(".next_page").removeClass("hide"),$(".next_page").css("display","inline-block")):($(".next_page_hide").css("display","inline-block"),$(".next_page").css("display","none"))},deleted_song:function(e){var t=P.getIndexOfSong(e),a=$("#wrapper").children()[t];try{a.style.height=0,setTimeout(function(){$("#"+e).remove(),Ce.splice(P.getIndexOfSong(e),1),t=0?$($("#wrapper").children()[P.page-1]).css("display","block"):$("#wrapper").children().length>P.page+19&&$($("#wrapper").children()[P.page+19]).css("display","block"),P.page>=$("#wrapper").children().length?P.dynamicContentPage(-1):P.page+20>=$("#wrapper").children().length&&($(".next_page_hide").css("display","inline-block"),$(".next_page").css("display","none"))},305)}catch(a){Ce.splice(P.getIndexOfSong(e),1),P.empty||($("#wrapper").children()[$("#wrapper").children().length-1].remove(),t=0?$($("#wrapper").children()[P.page-1]).css("display","block"):$("#wrapper").children().length>P.page+20&&$($("#wrapper").children()[P.page+19]).css("display","block"))}Ce.length<=2&&(P.empty=!0,$("#wrapper").append("The playlist is empty.")),$("#suggested-"+e).remove(),P.page+20<$("#wrapper").children().length&&($(".next_page_hide").css("display","none"),$(".next_page").css("display","inline-block")),P.page>=$("#wrapper").children().length&&P.dynamicContentPage(-1),Fe.checkUserEmpty()},voted_song:function(e,t){var a=P.getIndexOfSong(e),n=Ce[a];Ce[a].votes+=1,Ce[a].added=t,P.sortList(),$("#"+e).remove(),P.insertAtIndex(n,!1)},song_change:function(e){var t=Ce.length-1;Ce[0].now_playing=!0,Ce[0].votes=0,Ce[0].guids=[],Ce[0].added=e,Ce[t].now_playing=!1,B.log("---------------------------"),B.log("---SONG ON FIRST INDEX-----"),B.log(Ce[0]),B.log("---------------------------");try{Ce.push(Ce.shift()),P.empty||$("#wrapper").children()[0].remove(),0===$("#wrapper").children().length&&(P.empty=!0,$("#wrapper").append("The playlist is empty.")),P.insertAtIndex(Ce[t-1],!1),$("#wrapper").children().length>=P.page+20&&$($("#wrapper").children()[P.page+20]).css("display","block"),document.getElementById("wrapper").scrollTop+=1,document.getElementById("wrapper").scrollTop+=-1}catch(e){}},vote:function(e,t){return Me.emit("vote",{channel:A,id:e,type:t,adminpass:F}),!0},skip:function(){return Me.emit("skip",{pass:F,id:Ee,channel:A.toLowerCase()}),!0},exportToYoutube:function(){var e="https://www.googleapis.com/youtube/v3/playlists?part=snippet";$.ajax({type:"POST",url:e,headers:{Authorization:"Bearer "+fe.access_token,"Content-Type":"application/json"},data:JSON.stringify({snippet:{title:A.toLowerCase(),description:"Playlist exported from zoff"}}),success:function(e){var t=0,a=e.id;$.each(Ce,function(e,n){var o="https://www.googleapis.com/youtube/v3/playlistItems?part=snippet";$.ajax({type:"POST",url:o,headers:{Authorization:"Bearer "+fe.access_token,"Content-Type":"application/json"},data:JSON.stringify({snippet:{playlistId:a,resourceId:{kind:"youtube#video",videoId:n.id}}}),success:function(e){B.log("Added video: "+n.id+" to playlist id "+a),t==Ce.length-1&&(B.log("All videoes added!"),B.log("url: https://www.youtube.com/playlist?list="+a),$(".exported-list").append("
    Exported URL:
    "),$(".exported-list").append(""+A+""),$("#playlist_loader_export").addClass("hide"),$(".exported-list-container").removeClass("hide")),t+=1}})})},error:function(e){B.log(e)}})},importOldList:function(e){var t="",a=0;playlist_url="lists/"+e+".json",Be=$.parseJSON($.ajax({type:"GET",url:playlist_url,async:!1}).responseText),$.each(Be.songs,function(e,n){t+=n.id+",",a>45&&(qe.addVideos(t),t="",a=0),a++}),qe.addVideos(t),document.getElementById("search").value=""},sortList:function(){Ce.sort(B.predicate({name:"votes",reverse:!0},{name:"added",reverse:!1},{name:"title",reverse:!1}))},show:function(){B.mobilecheck()||(z?(z=!1,$("#toptitle").empty(),$("#chan").addClass("bigChan"),$("#chan").html("zoff.no/"+A.toLowerCase())):(z=!0,$("#toptitle").html("Zöff"),$("#chan").removeClass("bigChan"),$("#chan").html(A)))},generateSong:function(e,t,a,n,o,i,s){void 0===D&&(D=$("#list-song-html").html());var l,r,c=e.id,d=e.title,p=e.votes,u="background-image:url('//img.youtube.com/vi/"+c+"/mqdefault.jpg');",g=$("
    "+D+"
    "),m="style";return t&&g.find("#list-song").css("height",0),M||g.find(".card-action").removeClass("hide"),1==p&&g.find(".vote-text").text("vote"),a&&(u="//img.youtube.com/vi/"+c+"/mqdefault.jpg",m="data-original"),n?(g.find(".list-votes").text(p),g.find("#list-song").attr("id",c),g.find(".vote-container").attr("title",d),($("#wrapper").children().length>=20&&s||"none"==i)&&g.find(".card").css("display","none"),l=".vote-container",r="del"):n||(g.find(".vote-text").text(e.duration),l=".add-suggested",r=o?"del_user_suggested":"del_suggested",g.find(".vote-container").attr("class","clickable add-suggested"),g.find(".add-suggested").attr("title",d),g.find("#del").attr("id",r),g.find(l).attr("data-video-title",d),g.find(l).attr("data-video-length",e.length),g.find("#list-song").attr("id","suggested-"+c),g.find(".list-image").attr("class",g.find(".list-image").attr("class").replace("list-image","list-suggested-image"))),g.find(".list-title").text(d),g.find(".list-title").attr("title",d),g.find(l).attr("data-video-id",c),g.find(".list-image").attr(m,u),g.find(".list-suggested-image").attr(m,u),g.find("#"+r).attr("data-video-id",c),g.html()},getIndexOfSong:function(e){return indexes=$.map(Ce,function(t,a){if(t.id==e)return a}),indexes[0]},scrollTop:function(){$("#wrapper").scrollTop(0)},scrollBottom:function(){$("#wrapper").scrollTop($("#wrapper")[0].scrollHeight)}},A=void 0===window.chan?$("#chan").html():window.chan,M=!0,N=0,z=!0,D=$("#list-song-html").html(),j=!1,O=!1,V="***REMOVED***",R=!1,Y=/P((([0-9]*\.?[0-9]*)Y)?(([0-9]*\.?[0-9]*)M)?(([0-9]*\.?[0-9]*)W)?(([0-9]*\.?[0-9]*)D)?)?(T(([0-9]*\.?[0-9]*)H)?(([0-9]*\.?[0-9]*)M)?(([0-9]*\.?[0-9]*)S)?)?/,U=[],H=0,q=1,F="",J="",G=!1,W=1,Z=!1,Q=!1,X=6e3,K=Date.now(),ee=!1,te=-1,ae=!1,ne=!1,oe=!0,ie=!1,se=!1,le=!1,re=!1,ce={},de=!1,pe="",ue=300,ge=600,me="&autoplay",he=!1,fe={},ye=!1;if(void 0===localStorage.debug){var ve=!1;localStorage.debug=ve}var $e,we,be,_e,ke,Ce,U,xe,Se,Ie,Te,W,Ee,Be,Le,Pe,Ae,Me,Ne={"sync disconnect on unload":!0,secure:!0,"force new connection":!0},ze=!1,De=!1;navigator.serviceWorker?navigator.serviceWorker.register("/service-worker.js",{scope:"/"}).then(function(e){B.log(e)}).catch(function(e){console.error(e)}):B.log("Service Worker is not supported in this browser."),$().ready(function(){ze||"/"==window.location.pathname?De||"/"!=window.location.pathname||S():e(),Me.on("connect",function(){he&&(he=!1,$(".connect_error").fadeOut(function(){$(".connect_error").remove(),Materialize.toast("Connected!",2e3,"green lighten")}))}),t();try{Oe=$.ajax({type:"GET",url:"https://api.github.com/repos/zoff-music/zoff/commits",async:!1}).responseText,Oe=$.parseJSON(Oe),$("#latest-commit").html("Latest Commit:
    "+Oe[0].commit.author.date.substring(0,10)+": "+Oe[0].committer.login+"
    "+Oe[0].sha.substring(0,10)+": "+Oe[0].commit.message+"=48&&$("#wrapper").scrollTop()>0?($("#top-button").removeClass("hide"),B.addClass("#bottom-button","hide")):t>=$("#playlist").height()-59&&t<=$("#playlist").height()-32&&$("#wrapper").scrollTop()<$("#wrapper")[0].scrollHeight-$("#wrapper").height()-1?($("#bottom-button").removeClass("hide"),B.addClass("#top-button","hide")):(B.addClass("#bottom-button","hide"),B.addClass("#top-button","hide"))}),$(document).on("mouseleave","#playlist",function(){B.addClass("#bottom-button","hide"),B.addClass("#top-button","hide")}),$(document).on("click","#top-button",function(){P.scrollTop()}),$(document).on("click","#bottom-button",function(){P.scrollBottom()});var je,Oe,Me,Ve,Re={id:"",get_input:function(e){""===Re.id?Re.set_id(e.toLowerCase()):Re.set_channel(e.toLowerCase())},set_id:function(e){Re.id=e,$("#pausebutton_remote").attr("disabled",!1),$("#skipbutton_remote").attr("disabled",!1),$("#playbutton_remote").attr("disabled",!1),$("#skipbutton_remote").attr("disabled",!1),$("#remote_channel").val(""),$("#remote_channel").attr("placeholder","Change channel"),$("#remote_header").html("Controlling "+e),$("#volume-control-remote").css("display","block")},set_channel:function(e){Me.emit("id",{id:Re.id,type:"channel",value:e})},play_remote:function(){Me.emit("id",{id:Re.id,type:"play",value:"mock"})},pause_remote:function(){Me.emit("id",{id:Re.id,type:"pause",value:"mock"})},skip_remote:function(){Me.emit("id",{id:Re.id,type:"skip",value:"mock"})},initiate_volume:function(){$("#volume-control-remote").slider({min:0,max:100,value:100,range:"min",animate:!0,stop:function(e,t){Me.emit("id",{id:Re.id,type:"volume",value:t.value}),B.log("volume")}})}},q=!0,Ye={blob_list:[],winter:!1,times_rotated:0,frontpage_function:function(e){$("#channels").empty(),q=!0,Ye.populate_channels(e.channels),Ye.set_viewers(e.viewers)},populate_channels:function(e){var t,a="",n=0;1==e[0].pinned&&(t=e.shift()),e.sort(Ye.sortFunction),void 0!==t&&e.unshift(t),pre_card=$(je),B.mobilecheck()||Ye.add_backdrop(e,0);for(var o in e){var i=e[o].channel;if(n<12){var s=e[o].id,l=e[o].viewers,r="background-image:url('https://img.youtube.com/vi/"+s+"/hqdefault.jpg');",c=e[o].count,d=pre_card;1==e[o].pinned?(d.find(".pin").attr("style","display:block;"),d.find(".card").attr("title","Pinned!")):(d.find(".pin").attr("style","display:none;"),d.find(".card").attr("title","")),d.find(".chan-name").text(i),d.find(".chan-name").attr("title",i),d.find(".chan-views").text(l),d.find(".chan-songs").text(c),d.find(".chan-bg").attr("style",r),d.find(".chan-link").attr("href",i),$("#channels").append(d.html())}a+="