From 9f3e2fddb90c9298a002691cbfb4f8e46750ed5a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kasper=20Rynning-T=C3=B8nnesen?= Date: Mon, 1 May 2017 23:51:02 +0200 Subject: [PATCH 01/16] NodeJS server instead of PHP --- .gitignore | 3 +- .htaccess | 62 - gulpfile.js | 30 +- index.php | 10 - public/dist/embed.min.js | 2 - public/dist/main.min.js | 4 - public/dist/remote.min.js | 1 - public/php/controller.php | 112 -- public/php/footer.php | 136 -- public/php/header.php | 46 - public/php/imageblob.php | 18 - public/php/mail.php | 22 - server/.gitignore | 4 + server/README.md | 35 + server/change_pinned.js | 20 + server/package.json | 36 + server/router.js | 81 ++ server/server.js | 1206 +++++++++++++++++ {public => server/views/assets}/css/embed.css | 0 .../views/assets}/css/materialize.min.css | 0 {public => server/views/assets}/css/style.css | 4 +- .../views/assets}/dist/callback.min.js | 0 server/views/assets/dist/embed.min.js | 2 + .../views/assets}/dist/lib/aes.js | 0 .../views/assets}/dist/lib/color-thief.js | 0 .../assets}/dist/lib/jquery-2.1.3.min.js | 0 .../assets}/dist/lib/jquery-ui-1.10.3.min.js | 0 .../dist/lib/jquery.ui.touch-punch.min.js | 0 .../views/assets}/dist/lib/materialize.min.js | 0 .../views/assets}/dist/lib/sha256.js | 0 .../views/assets}/dist/lib/socket.io.min.js | 0 server/views/assets/dist/main.min.js | 4 + server/views/assets/dist/remote.min.js | 1 + .../views/assets}/fonts/futura.woff | Bin .../views/assets}/fonts/futura.woff2 | Bin .../fonts/material-design-icons/LICENSE.txt | 0 .../Material-Design-Icons.eot | Bin .../Material-Design-Icons.svg | 0 .../Material-Design-Icons.ttf | Bin .../Material-Design-Icons.woff | Bin .../Material-Design-Icons.woff2 | Bin .../views/assets}/fonts/open_sans.woff | Bin .../assets}/fonts/roboto/Roboto-Bold.ttf | Bin .../assets}/fonts/roboto/Roboto-Bold.woff | Bin .../assets}/fonts/roboto/Roboto-Bold.woff2 | Bin .../assets}/fonts/roboto/Roboto-Light.ttf | Bin .../assets}/fonts/roboto/Roboto-Light.woff | Bin .../assets}/fonts/roboto/Roboto-Light.woff2 | Bin .../assets}/fonts/roboto/Roboto-Medium.ttf | Bin .../assets}/fonts/roboto/Roboto-Medium.woff | Bin .../assets}/fonts/roboto/Roboto-Medium.woff2 | Bin .../assets}/fonts/roboto/Roboto-Regular.ttf | Bin .../assets}/fonts/roboto/Roboto-Regular.woff | Bin .../assets}/fonts/roboto/Roboto-Regular.woff2 | Bin .../assets}/fonts/roboto/Roboto-Thin.ttf | Bin .../assets}/fonts/roboto/Roboto-Thin.woff | Bin .../assets}/fonts/roboto/Roboto-Thin.woff2 | Bin .../views/assets}/html/callback.html | 2 +- .../views/assets}/html/embed.html | 12 +- .../views/assets}/html/offline.html | 4 +- .../views/assets}/images/144x144.png | Bin .../views/assets}/images/GitHub_Logo.png | Bin .../views/assets}/images/Logo.png | Bin .../views/assets}/images/facebook.png | Bin .../views/assets}/images/favicon.png | Bin .../views/assets}/images/glight.png | Bin .../views/assets}/images/gmark.png | Bin .../views/assets}/images/google_play.png | Bin .../views/assets}/images/highlogo.png | Bin .../views/assets}/images/loading.png | Bin .../views/assets}/images/pin.png | Bin {public => server/views/assets}/images/q.png | Bin {public => server/views/assets}/images/s1.png | Bin {public => server/views/assets}/images/s2.png | Bin {public => server/views/assets}/images/s3.png | Bin .../views/assets}/images/spotify.png | Bin .../views/assets}/images/squareicon.png | Bin .../views/assets}/images/squareicon_small.png | Bin .../assets}/images/squareicon_small_old.png | Bin .../views/assets}/images/twitter.png | Bin .../views/assets}/images/youtube.png | Bin {public => server/views/assets}/images/z.svg | 0 {public => server/views/assets}/js/admin.js | 0 .../views/assets}/js/callback.js | 0 {public => server/views/assets}/js/chat.js | 0 {public => server/views/assets}/js/crypt.js | 2 + {public => server/views/assets}/js/embed.js | 0 .../views/assets}/js/frontpage.js | 17 +- {public => server/views/assets}/js/helpers.js | 2 +- .../views/assets}/js/hostcontroller.js | 0 {public => server/views/assets}/js/list.js | 0 .../views/assets}/js/listeners.js | 8 +- .../views/assets}/js/mobileremote.js | 0 {public => server/views/assets}/js/player.js | 0 .../views/assets}/js/playercontrols.js | 0 .../views/assets}/js/remotecontroller.js | 6 +- {public => server/views/assets}/js/search.js | 0 .../views/assets}/js/suggestions.js | 0 .../views/assets/manifest.json | 0 .../views/layouts/channel.handlebars | 33 +- .../views/layouts/frontpage.handlebars | 29 +- server/views/layouts/main.handlebars | 191 +++ server/views/layouts/remote.handlebars | 99 ++ .../views/partials/panel.handlebars | 8 +- 104 files changed, 1745 insertions(+), 507 deletions(-) delete mode 100755 .htaccess delete mode 100644 index.php delete mode 100755 public/dist/embed.min.js delete mode 100755 public/dist/main.min.js delete mode 100755 public/dist/remote.min.js delete mode 100755 public/php/controller.php delete mode 100755 public/php/footer.php delete mode 100755 public/php/header.php delete mode 100755 public/php/imageblob.php delete mode 100755 public/php/mail.php create mode 100644 server/.gitignore create mode 100644 server/README.md create mode 100644 server/change_pinned.js create mode 100644 server/package.json create mode 100644 server/router.js create mode 100755 server/server.js rename {public => server/views/assets}/css/embed.css (100%) rename {public => server/views/assets}/css/materialize.min.css (100%) rename {public => server/views/assets}/css/style.css (99%) rename {public => server/views/assets}/dist/callback.min.js (100%) create mode 100755 server/views/assets/dist/embed.min.js rename {public => server/views/assets}/dist/lib/aes.js (100%) rename {public => server/views/assets}/dist/lib/color-thief.js (100%) rename {public => server/views/assets}/dist/lib/jquery-2.1.3.min.js (100%) rename {public => server/views/assets}/dist/lib/jquery-ui-1.10.3.min.js (100%) rename {public => server/views/assets}/dist/lib/jquery.ui.touch-punch.min.js (100%) rename {public => server/views/assets}/dist/lib/materialize.min.js (100%) rename {public => server/views/assets}/dist/lib/sha256.js (100%) rename {public => server/views/assets}/dist/lib/socket.io.min.js (100%) create mode 100755 server/views/assets/dist/main.min.js create mode 100755 server/views/assets/dist/remote.min.js rename {public => server/views/assets}/fonts/futura.woff (100%) rename {public => server/views/assets}/fonts/futura.woff2 (100%) rename {public => server/views/assets}/fonts/material-design-icons/LICENSE.txt (100%) rename {public => server/views/assets}/fonts/material-design-icons/Material-Design-Icons.eot (100%) rename {public => server/views/assets}/fonts/material-design-icons/Material-Design-Icons.svg (100%) rename {public => server/views/assets}/fonts/material-design-icons/Material-Design-Icons.ttf (100%) rename {public => server/views/assets}/fonts/material-design-icons/Material-Design-Icons.woff (100%) rename {public => server/views/assets}/fonts/material-design-icons/Material-Design-Icons.woff2 (100%) rename {public => server/views/assets}/fonts/open_sans.woff (100%) rename {public => server/views/assets}/fonts/roboto/Roboto-Bold.ttf (100%) rename {public => server/views/assets}/fonts/roboto/Roboto-Bold.woff (100%) rename {public => server/views/assets}/fonts/roboto/Roboto-Bold.woff2 (100%) rename {public => server/views/assets}/fonts/roboto/Roboto-Light.ttf (100%) rename {public => server/views/assets}/fonts/roboto/Roboto-Light.woff (100%) rename {public => server/views/assets}/fonts/roboto/Roboto-Light.woff2 (100%) rename {public => server/views/assets}/fonts/roboto/Roboto-Medium.ttf (100%) rename {public => server/views/assets}/fonts/roboto/Roboto-Medium.woff (100%) rename {public => server/views/assets}/fonts/roboto/Roboto-Medium.woff2 (100%) rename {public => server/views/assets}/fonts/roboto/Roboto-Regular.ttf (100%) rename {public => server/views/assets}/fonts/roboto/Roboto-Regular.woff (100%) rename {public => server/views/assets}/fonts/roboto/Roboto-Regular.woff2 (100%) rename {public => server/views/assets}/fonts/roboto/Roboto-Thin.ttf (100%) rename {public => server/views/assets}/fonts/roboto/Roboto-Thin.woff (100%) rename {public => server/views/assets}/fonts/roboto/Roboto-Thin.woff2 (100%) rename {public => server/views/assets}/html/callback.html (70%) rename {public => server/views/assets}/html/embed.html (85%) rename {public => server/views/assets}/html/offline.html (99%) rename {public => server/views/assets}/images/144x144.png (100%) rename {public => server/views/assets}/images/GitHub_Logo.png (100%) rename {public => server/views/assets}/images/Logo.png (100%) rename {public => server/views/assets}/images/facebook.png (100%) rename {public => server/views/assets}/images/favicon.png (100%) rename {public => server/views/assets}/images/glight.png (100%) rename {public => server/views/assets}/images/gmark.png (100%) rename {public => server/views/assets}/images/google_play.png (100%) rename {public => server/views/assets}/images/highlogo.png (100%) rename {public => server/views/assets}/images/loading.png (100%) rename {public => server/views/assets}/images/pin.png (100%) rename {public => server/views/assets}/images/q.png (100%) rename {public => server/views/assets}/images/s1.png (100%) rename {public => server/views/assets}/images/s2.png (100%) rename {public => server/views/assets}/images/s3.png (100%) rename {public => server/views/assets}/images/spotify.png (100%) rename {public => server/views/assets}/images/squareicon.png (100%) rename {public => server/views/assets}/images/squareicon_small.png (100%) rename {public => server/views/assets}/images/squareicon_small_old.png (100%) rename {public => server/views/assets}/images/twitter.png (100%) rename {public => server/views/assets}/images/youtube.png (100%) rename {public => server/views/assets}/images/z.svg (100%) rename {public => server/views/assets}/js/admin.js (100%) rename {public => server/views/assets}/js/callback.js (100%) rename {public => server/views/assets}/js/chat.js (100%) rename {public => server/views/assets}/js/crypt.js (99%) rename {public => server/views/assets}/js/embed.js (100%) rename {public => server/views/assets}/js/frontpage.js (97%) rename {public => server/views/assets}/js/helpers.js (99%) rename {public => server/views/assets}/js/hostcontroller.js (100%) rename {public => server/views/assets}/js/list.js (100%) rename {public => server/views/assets}/js/listeners.js (99%) rename {public => server/views/assets}/js/mobileremote.js (100%) rename {public => server/views/assets}/js/player.js (100%) rename {public => server/views/assets}/js/playercontrols.js (100%) rename {public => server/views/assets}/js/remotecontroller.js (97%) rename {public => server/views/assets}/js/search.js (100%) rename {public => server/views/assets}/js/suggestions.js (100%) rename manifest.json => server/views/assets/manifest.json (100%) rename public/php/channel.php => server/views/layouts/channel.handlebars (94%) rename public/php/frontpage.php => server/views/layouts/frontpage.handlebars (92%) create mode 100644 server/views/layouts/main.handlebars create mode 100644 server/views/layouts/remote.handlebars rename public/php/panel.php => server/views/partials/panel.handlebars (99%) diff --git a/.gitignore b/.gitignore index 70253697..faaf7f1a 100755 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ -public/images/thumbnails/ +server/views/assets/images/thumbnails/ +server/node_modules/ node_modules/ scripts/ .DS_Store diff --git a/.htaccess b/.htaccess deleted file mode 100755 index 1b489135..00000000 --- a/.htaccess +++ /dev/null @@ -1,62 +0,0 @@ -Options +FollowSymLinks -RewriteEngine on -RewriteBase / - -RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC] -RewriteCond %{HTTP_HOST} ^zoff.me -RewriteCond %{HTTPS} !=on -RewriteRule ^(.*)$ https://zoff.me/$1 [L] - -RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC] -RewriteCond %{HTTP_HOST} ^zoff.me -RewriteRule ^(.*)$ https://zoff.me/$1 [L] - -RewriteCond %{HTTP_HOST} ^(.*zoff.me.*)$ -RewriteCond %{HTTPS} !=on -RewriteRule ^/?(.*) https://zoff.me/$1 [L] - -#RewriteCond %{HTTP_HOST} ^zoff.no -#RewriteRule ^/?(.*) https://zoff.me/$1 [L] - -RewriteCond %{HTTP_HOST} ^remote.zoff.no -RewriteRule ^/?(.*) https://remote.zoff.me/$1 [L] - -RewriteCond %{HTTP_HOST} ^remote.zoff.me -RewriteCond %{REQUEST_URI} !/public/css -RewriteCond %{REQUEST_URI} !/public/js -RewriteCond %{REQUEST_URI} !/public/dist -RewriteCond %{REQUEST_URI} !/public/images -RewriteCond %{REQUEST_URI} !/public/font -RewriteRule ^(.*)$ public/php/controller.php [L,NC,QSA] - -RewriteCond %{HTTP_HOST} ^bot.zoff.me - -RewriteRule ^(.*)$ /public/php/bot.php [L,NC,QSA] - -RewriteCond %{HTTP_HOST} ^zoff.me -RewriteCond %{REQUEST_URI} /o_callback -RewriteRule ^(.*)$ public/html/callback.html [L,NC,QSA] - -RewriteCond %{HTTP_HOST} ^zoff.me -RewriteCond %{REQUEST_URI} /_embed -RewriteRule ^(.*)$ public/html/embed.html [L,NC,QSA] - -RewriteCond %{HTTP_HOST} ^localhost -RewriteCond %{REQUEST_URI} /o_callback -RewriteRule ^(.*)$ /public/html/callback.html [L,NC,QSA] - -RewriteCond %{HTTP_HOST} ^localhost -RewriteCond %{REQUEST_URI} /_embed -RewriteRule ^(.*)$ /public/html/embed.html [L,NC,QSA] - -#RewriteRule (?i)^remote/(.*) /public/php/controller.php?id=$1 [L] -#RewriteRule (?i)^remote /public/php/controller.php [L] - -RewriteCond %{REQUEST_URI} !(/$|\.) -RewriteRule (.*) %{REQUEST_URI}/ [R=301,L] - -RewriteCond %{REQUEST_FILENAME} !-f -RewriteCond %{REQUEST_FILENAME} !-d -RewriteRule /(.*)$ /$1 [L] - -Options -Indexes diff --git a/gulpfile.js b/gulpfile.js index 32f8fecf..0b556cdf 100755 --- a/gulpfile.js +++ b/gulpfile.js @@ -4,65 +4,65 @@ var gulp = require('gulp'), concat = require('gulp-concat'); gulp.task('js', function () { - gulp.src(['public/js/*.js', '!public/js/embed*', '!public/js/remotecontroller.js', '!public/js/callback.js']) + gulp.src(['server/views/assets/js/*.js', '!server/views/assets/js/embed*', '!server/views/assets/js/remotecontroller.js', '!server/views/assets/js/callback.js']) .pipe(uglify({ mangle: true, compress: true, enclose: true })) .pipe(concat('main.min.js')) - .pipe(gulp.dest('public/dist')); + .pipe(gulp.dest('server/views/assets/dist')); }); gulp.task('embed', function () { - gulp.src(['public/js/player.js', 'public/js/helpers.js', 'public/js/playercontrols.js', 'public/js/list.js', 'public/js/embed.js', '!public/js/frontpage*', '!public/js/remotecontroller.js']) + gulp.src(['server/views/assets/js/player.js', 'server/views/assets/js/helpers.js', 'server/views/assets/js/playercontrols.js', 'server/views/assets/js/list.js', 'server/views/assets/js/embed.js', '!server/views/assets/js/frontpage*', '!server/views/assets/js/remotecontroller.js']) .pipe(uglify({ mangle: true, compress: true, enclose: true })) .pipe(concat('embed.min.js')) - .pipe(gulp.dest('public/dist')); + .pipe(gulp.dest('server/views/assets/dist')); }); gulp.task('callback', function () { - gulp.src(['public/js/callback.js']) + gulp.src(['server/views/assets/js/callback.js']) .pipe(uglify({ mangle: true, compress: true, enclose: true })) .pipe(concat('callback.min.js')) - .pipe(gulp.dest('public/dist')); + .pipe(gulp.dest('server/views/assets/dist')); }); /* gulp.task('nochan', function () { - gulp.src(['public/js/nochan.js', 'public/js/helpers.js']) + gulp.src(['server/views/assets/js/nochan.js', 'server/views/assets/js/helpers.js']) .pipe(uglify({ mangle: true, compress: true, enclose: true })) .pipe(concat('frontpage.min.js')) - .pipe(gulp.dest('public/dist')); + .pipe(gulp.dest('server/views/assets/dist')); });*/ gulp.task('remotecontroller', function () { - gulp.src(['public/js/remotecontroller.js']) + gulp.src(['server/views/assets/js/remotecontroller.js']) .pipe(uglify({ mangle: true, compress: true, enclose: true })) .pipe(concat('remote.min.js')) - .pipe(gulp.dest('public/dist')); + .pipe(gulp.dest('server/views/assets/dist')); }); gulp.task('default', function(){ - gulp.watch('public/js/*.js', ['js']); - gulp.watch('public/js/*.js', ['embed']); - gulp.watch(['public/js/callback.js', 'public/js/helpers.js'], ['callback']); - //gulp.watch('public/js/*.js', ['nochan']); - gulp.watch('public/js/remotecontroller.js', ['remotecontroller']); + gulp.watch('server/views/assets/js/*.js', ['js']); + gulp.watch('server/views/assets/js/*.js', ['embed']); + gulp.watch(['server/views/assets/js/callback.js', 'server/views/assets/js/helpers.js'], ['callback']); + //gulp.watch('server/views/assets/js/*.js', ['nochan']); + gulp.watch('server/views/assets/js/remotecontroller.js', ['remotecontroller']); }); diff --git a/index.php b/index.php deleted file mode 100644 index cc36a45d..00000000 --- a/index.php +++ /dev/null @@ -1,10 +0,0 @@ - - 0 || $_SERVER['REQUEST_URI'] == "/?"){header('Location: /'); exit;} - $list = explode("/", htmlspecialchars(strtolower($_SERVER["REQUEST_URI"]))); - if($list[1]==""||!isset($list[1])||count($list)<=1){$list="";include('public/php/frontpage.php');die();} - else{$list=preg_replace("/[^A-Za-z0-9 ]/", '', $list[1]);include('public/php/channel.php');die();} -?> diff --git a/public/dist/embed.min.js b/public/dist/embed.min.js deleted file mode 100755 index 254667b5..00000000 --- a/public/dist/embed.min.js +++ /dev/null @@ -1,2 +0,0 @@ -!function(){function e(){s.on("np",i.youtube_listener)}function t(){s.on("channel",d.channel_function)}function a(e){$("#volume").slider("value",e),c.setVolume(e)}var i={loaded:!0,before_load:"",after_load:"",player:"",stopInterval:!1,fireplace:"",youtube_listener:function(e){var t;try{t=i.player.getPlayerState()}catch(e){t=null}if(!(!S&&(null!=t||I)||S&&(null==t||I)||!S&&(null==t||I)||S&&t==-1)||S&&prev_chan_player==B)k||i.durationSetter(),duration=i.player.getDuration();else{prev_chan_player=B,I=!1,i.loaded=!1,l.log("--------youtube_listener--------"),l.log("Received: "),l.log(e),l.log("paused variable: "+m),l.log("mobile_beginning variable: "+C);try{l.log("getVideoUrl(): "+i.player.getVideoUrl().split("v=")[1])}catch(e){}if(l.log("video_id variable: "+o),l.log("---------------------------------"),e.np){if(m)i.getTitle(e.np[0].title,viewers),l.mobilecheck()||i.notifyUser(e.np[0].id,e.np[0].title),T||i.stopVideo(),o=e.np[0].id,conf=e.conf[0],time=e.time,n=time-conf.startTime,u=e.np[0].title,duration=e.np[0].duration,i.setBGimage(o);else if(!m){void 0===p?p=e.np[0].id:p!=o&&(p=o),o=e.np[0].id,conf=e.conf[0],time=e.time,n=time-conf.startTime,u=e.np[0].title,duration=e.np[0].duration,C&&l.mobilecheck()&&0===n&&!T&&(n=1);try{full_playlist[0].id!=o||C||d.song_change(full_playlist[0].added),Suggestions.fetchYoutubeSuggests(o)}catch(e){}if(i.getTitle(u,viewers),i.setBGimage(o),f&&!window.MSStream)try{(i.player.getVideoUrl().split("v=")[1]!=o||T)&&(i.loadVideoById(o),l.mobilecheck()||i.notifyUser(o,u),i.seekTo(n),m&&!T&&i.pauseVideo()),m||(C&&!T||i.playVideo(),k||i.durationSetter()),(i.player.getDuration()>n||0===i.player.getDuration()||T||i.player.getCurrentTime()!=n)&&i.seekTo(n),i.after_load=o,i.loaded||setTimeout(function(){i.loaded=!0},500)}catch(e){T&&(i.loadVideoById(o),i.seekTo(n)),k||T||i.durationSetter()}else i.getTitle(u,viewers)}}else{document.getElementById("song-title").innerHTML="Empty channel. Add some songs!",window.MSStream||T||$("#player_overlay").toggleClass("hide");try{T||i.stopVideo()}catch(e){}}}},onPlayerStateChange:function(e){l.log("-------onPlayerStateChange------"),l.log("New state\nState: "),l.log(e);try{l.log("Duration: "+i.player.getDuration(),"Current time: "+i.player.getCurrentTime()),l.log("getVideoUrl(): "+i.player.getVideoUrl().split("v=")[1])}catch(e){}switch(l.log("video_id variable: "+o),l.log("---------------------------------"),e.data){case-1:break;case 0:playing=!1,m=!1,S?i.playNext():s.emit("end",{id:o,channel:B.toLowerCase()});break;case 1:playing=!0,beginning&&l.mobilecheck()&&!T&&(i.pauseVideo(),beginning=!1,C=!1,setTimeout(function(){l.mobilecheck()&&($("#playpause").css("visibility","visible"),$("#playpause").css("pointer-events","all"),$("#channel-load").css("display","none"))},100)),v||"/"==window.location.pathname||T||l.addClass("#player_overlay","hide"),"/"!=window.location.pathname&&(1==document.getElementById("play").className.split(" ").length&&$("#play").toggleClass("hide"),2==document.getElementById("pause").className.split(" ").length&&$("#pause").toggleClass("hide")),m&&!S&&(s.emit("pos",{channel:B.toLowerCase()}),m=!1);break;case 2:T||(m=!0,"/"!=window.location.pathname&&c.play_pause_show(),C=!0);break;case 3:}},playVideo:function(){T?(castSession.sendMessage("urn:x-cast:zoff.me",{type:"playVideo"}),chrome.cast.media.GenericMediaMetadata({metadataType:"GENERIC",title:u,image:"https://img.youtube.com/vi/"+o+"/mqdefault.jpg"}),chrome.cast.Image("https://img.youtube.com/vi/"+o+"/mqdefault.jpg"),$("#pause").hasClass("hide")&&($("#play").toggleClass("hide"),$("#pause").toggleClass("hide"))):i.player.playVideo()},pauseVideo:function(){T?(castSession.sendMessage("urn:x-cast:zoff.me",{type:"pauseVideo"}),$("#play").hasClass("hide")&&($("#play").toggleClass("hide"),$("#pause").toggleClass("hide"))):i.player.pauseVideo()},seekTo:function(e){T?castSession.sendMessage("urn:x-cast:zoff.me",{type:"seekTo",seekTo:e}):S?i.player.seekTo(0):i.player.seekTo(e)},loadVideoById:function(e){T?(castSession.sendMessage("urn:x-cast:zoff.me",{type:"loadVideo",videoId:e}),chrome.cast.media.GenericMediaMetadata({metadataType:"GENERIC",title:u,image:"https://img.youtube.com/vi/"+e+"/mqdefault.jpg"}),chrome.cast.Image("https://img.youtube.com/vi/"+e+"/mqdefault.jpg")):i.player.loadVideoById(e,0)},stopVideo:function(){if(T)castSession.sendMessage("urn:x-cast:zoff.me",{type:"stopVideo"});else try{i.player.stopVideo()}catch(e){}},setVolume:function(e){T?castSession.setVolume(e/100):i.player.setVolume(e)},playNext:function(){var e=full_playlist[0];o=e.id,time=(new Date).getTime(),u=e.title,duration=e.duration,i.getTitle(u,viewers),i.setBGimage(o),T?(castSession.sendMessage("urn:x-cast:zoff.me",{type:"loadVideo",videoId:o}),chrome.cast.media.GenericMediaMetadata({metadataType:"GENERIC",title:u,image:"https://img.youtube.com/vi/"+o+"/mqdefault.jpg"}),chrome.cast.Image("https://img.youtube.com/vi/"+o+"/mqdefault.jpg")):i.loadVideoById(o),d.channel_function({type:"song_change",time:time})},sendNext:function(e){T&&castSession.sendMessage("urn:x-cast:zoff.me",{type:"nextVideo",title:e.title,videoId:e.videoId})},getTitle:function(e,t){var a="visibility",i=decodeURIComponent(e);if("/"!=window.location.pathname){var l=document.getElementById("song-title"),n=document.getElementById("viewers");l.innerHTML=i,n.innerHTML=a+" "+t,l.title=i,T&&($("#player_overlay").css("background","url(https://img.youtube.com/vi/"+o+"/hqdefault.jpg)"),$("#player_overlay").css("background-position","center"),$("#player_overlay").css("background-size","100%"),$("#player_overlay").css("background-color","black"),$("#player_overlay").css("background-repeat","no-repeat"))}document.title=i+" • Zoff / "+B},errorHandler:function(e){5==e.data||100==e.data||101==e.data||150==e.data?(curr_playing=i.player.getVideoUrl().replace("https://www.youtube.com/watch?v=",""),s.emit("skip",{error:e.data,id:o,pass:x,channel:B.toLowerCase})):void 0!==o&&i.loadVideoById(o)},onPlayerReady:function(e){try{beginning=!0,f=!0,window.MSStream||(l.mobilecheck()?($("#playpause").css("visibility","hidden"),$("#playpause").css("pointer-events","none")):$("#channel-load").css("display","none"),$("#player").css("opacity","1"),$("#controls").css("opacity","1"),$(".playlist").css("opacity","1"),i.loadVideoById(o),!M||l.mobilecheck()&&!T||i.playVideo(),k||i.durationSetter(),v?setTimeout(function(){i.player.seekTo(n),M||(i.player.pauseVideo(),c.play_pause_show())},1e3):i.seekTo(n)),i.readyLooks(),c.initYoutubeControls(i.player),c.initSlider(),i.player.setVolume(Crypt.get_volume()),$(".video-container").removeClass("no-opacity")}catch(e){}},readyLooks:function(){i.setBGimage(o)},setBGimage:function(e){if(void 0!==e&&!v){var t=new Image;t.onload=function(){var e=new ColorThief,a=e.getColor(t);"/"!=window.location.pathname&&(document.getElementsByTagName("body")[0].style.backgroundColor=l.rgbToHsl(a,!0),$("meta[name=theme-color]").attr("content",l.rgbToHex(a[0],a[1],a[2])))},t.crossOrigin="Anonymous",t.src="https://zoff.me:8081/https://img.youtube.com/vi/"+e+"/mqdefault.jpg"}},set_width:function(e){if($(".video-container").width(e),!l.mobilecheck())if($(window).width()>769){var t=$(window).width()-$(".control-list").width()-$(".zbrand").outerWidth()-$(".brand-logo-navigate").outerWidth()-66;title_width=t,$(".title-container").width(title_width)}else $(".title-container").width("100%")},notifyUser:function(e,t){if(t=t.replace(/\\\'/g,"'").replace(/"/g,"'").replace(/&/g,"&"),"granted"===Notification.permission&&document.hidden){var a=new Notification("Now Playing",{body:t,icon:"https://i.ytimg.com/vi/"+e+"/mqdefault.jpg",iconUrl:"http://i.ytimg.com/vi/"+e+"/mqdefault.jpg"});a.onclick=function(e){window.focus(),this.cancel()},setTimeout(function(){a.close()},5e3)}},setup_all_listeners:function(){get_list_listener(),e(),setup_admin_listener(),setup_chat_listener(),t()},onYouTubeIframeAPIReady:function(){i.player=new YT.Player("player",{videoId:o,playerVars:{rel:"0",wmode:"transparent",controls:"0",fs:"0",iv_load_policy:"3",theme:"light",color:"white",showinfo:0},events:{onReady:i.onPlayerReady,onStateChange:i.onPlayerStateChange,onError:i.errorHandler}})},createFireplacePlayer:function(){i.fireplace=new YT.Player("fireplace_player",{videoId:"L_LUpnjgPso",playerVars:{rel:"0",wmode:"transparent",controls:"0",fs:"0",iv_load_policy:"3",theme:"light",color:"white",showinfo:0},events:{onReady:i.onFireplaceReady,onStateChange:i.onFireplaceChange}})},onFireplaceReady:function(){i.fireplace.playVideo()},onFireplaceChange:function(e){switch(e.data){case 0:i.fireplace.seekTo(0),i.fireplace.playVideo();break;case 2:i.fireplace.playVideo()}},durationSetter:function(){if(void 0!==duration)try{i.stopInterval||(k=!0),dMinutes=Math.floor(duration/60),dSeconds=duration-60*dMinutes,currDurr=void 0!==i.player.getCurrentTime()?Math.floor(i.player.getCurrentTime()):n,currDurr>duration&&(currDurr=duration),minutes=Math.floor(currDurr/60),seconds=currDurr-60*minutes,document.getElementById("duration").innerHTML=l.pad(minutes)+":"+l.pad(seconds)+" / "+l.pad(dMinutes)+":"+l.pad(dSeconds),per=100/duration*currDurr,per>=100?per=100:0===duration&&(per=0),N||$("#bar").width(per+"%")}catch(e){}i.stopInterval||setTimeout(i.durationSetter,1e3)},loadPlayer:function(){if(1==$("script[src='https://www.youtube.com/iframe_api']").length)try{i.onYouTubeIframeAPIReady()}catch(e){console.error("Seems YouTube iFrame script isn't correctly loaded. Please reload the page.")}else tag=document.createElement("script"),tag.src="https://www.youtube.com/iframe_api",firstScriptTag=document.getElementsByTagName("script")[0],firstScriptTag.parentNode.insertBefore(tag,firstScriptTag)}},l={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(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|Android|Silk|lge |maemo|midp|mmp|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|phone)|xda|xiino/i.test(navigator.userAgent)||/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(navigator.userAgent.substr(0,4)))&&(e=!0),e},predicate:function(){for(var e,t,a,i=[],l=arguments.length,n=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()-lastSample>=2*SAMPLE_RATE&&(s.removeAllListeners(),s.disconnect(),s.connect(),i.setup_all_listeners()),lastSample=Date.now(),setTimeout(l.sample,SAMPLE_RATE)},loadjsfile:function(e){if(filesadded.indexOf("["+e+"]")==-1){var t=document.createElement("script");t.setAttribute("type","text/javascript"),t.setAttribute("src",e),document.getElementsByTagName("head")[0].appendChild(t),filesadded+="["+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},secondsToOther:function(e){var t=e,a=Math.floor(t/60);return t-=60*a,[a,t]},rgbToHsl:function(e,t){r=e[0],g=e[1],b=e[2],r/=255,g/=255,b/=255;var a,i,l=Math.max(r,g,b),n=Math.min(r,g,b),s=(l+n)/2;if(l==n)a=i=0;else{var o=l-n;switch(i=s>.5?o/(2-l-n):o/(l+n),l){case r:a=(g-b)/o+(g.5&&t?s=.4:s<.65&&!t&&(s=.65),"hsl("+Math.floor(360*a)+", "+Math.floor(100*i)+"%, "+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"#"+l.componentToHex(e)+l.componentToHex(t)+l.componentToHex(a)},upperFirst:function(e){return e.substring(0,1).toUpperCase()+e.substring(1).toLowerCase()},addClass:function(e,t){l.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"),$.ajax({type:"POST",data:{from:e,message:t},url:"/public/php/mail.php",success:function(e){"success"==e?($("#contact-container").empty(),$("#contact-container").html("Mail has been sent, we'll be back with you shortly.")):($("#contact-container").empty(),$("#contact-container").html("Something went wrong, sorry about that. You could instead try with your own mail-client: contact@zoff.no"))}}))}};$(document).on("submit","#contact-form",function(e){e.preventDefault();var t=$("#contact-form-message").val(),a=$("#contact-form-from").val();l.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=0&&e<=33?(1==document.getElementById("v-full").className.split(" ").length&&($("#v-full").toggleClass("hide"),$("#v-full-overlay").toggleClass("hide")),1==document.getElementById("v-medium").className.split(" ").length&&($("#v-medium").toggleClass("hide"),$("#v-medium-overlay").toggleClass("hide")),2==document.getElementById("v-low").className.split(" ").length&&($("#v-low").toggleClass("hide"),$("#v-low-overlay").toggleClass("hide")),1==document.getElementById("v-mute").className.split(" ").length&&($("#v-mute").toggleClass("hide"),$("#v-mute-overlay").toggleClass("hide"))):e>=34&&e<=66?(1==document.getElementById("v-full").className.split(" ").length&&($("#v-full").toggleClass("hide"),$("#v-full-overlay").toggleClass("hide")),2==document.getElementById("v-medium").className.split(" ").length&&($("#v-medium").toggleClass("hide"),$("#v-medium-overlay").toggleClass("hide")),1==document.getElementById("v-low").className.split(" ").length&&($("#v-low").toggleClass("hide"),$("#v-low-overlay").toggleClass("hide")),1==document.getElementById("v-mute").className.split(" ").length&&($("#v-mute").toggleClass("hide"),$("#v-mute-overlay").toggleClass("hide"))):e>=67&&e<=100&&(2==document.getElementById("v-full").className.split(" ").length&&($("#v-full").toggleClass("hide"),$("#v-full-overlay").toggleClass("hide")),1==document.getElementById("v-medium").className.split(" ").length&&($("#v-medium").toggleClass("hide"),$("#v-medium-overlay").toggleClass("hide")),1==document.getElementById("v-low").className.split(" ").length&&($("#v-low").toggleClass("hide"),$("#v-low-overlay").toggleClass("hide")),1==document.getElementById("v-mute").className.split(" ").length&&($("#v-mute").toggleClass("hide"),$("#v-mute-overlay").toggleClass("hide")))},playPause:function(){state=i.player.getPlayerState(),button=document.getElementById("playpause"),1==state?i.pauseVideo():2==state&&i.playVideo()},volumeOptions:function(){T||(i.player.isMuted()?(i.player.unMute(),w=i.player.getVolume(),$("#volume").slider("value",i.player.getVolume())):(i.player.mute(),$("#volume").slider("value",0)))},hoverMute:function(e){w=i.player.getVolume()}},d={empty:!1,page:0,can_fit:Math.round($("#wrapper").height()/71),element_height:$("#wrapper").height()/Math.round($("#wrapper").height()/71)-25,uris:[],not_found:[],num_songs:0,channel_function:function(e){switch(e.type){case"list":S&&(!S||e.shuffled)||S&&prev_chan_list==B?S&&prev_chan_list==B&&void 0!=full_playlist&&!e.shuffled&&(d.populate_list(full_playlist,!0),T&&i.sendNext({title:full_playlist[0].title,videoId:full_playlist[0].id})):(prev_chan_list=B,d.populate_list(e.playlist),T&&i.sendNext({title:full_playlist[0].title,videoId:full_playlist[0].id}));break;case"added":d.added_song(e.value),T&&i.sendNext({title:full_playlist[0].title,videoId:full_playlist[0].id});break;case"deleted":d.deleted_song(e.value,e.removed);break;case"vote":S||(d.voted_song(e.value,e.time),T&&i.sendNext({title:full_playlist[0].title,videoId:full_playlist[0].id}));break;case"song_change":"/"!=window.location.pathname&&d.song_change(e.time,e.remove),T&&i.sendNext({title:full_playlist[0].title,videoId:full_playlist[0].id})}},insertAtBeginning:function(e,t){var a=0==d.page?"":"none",i=d.generateSong(e,t,!1,!0,!1,a,!1);$("#wrapper").append(i)},insertAtIndex:function(e,t,a){var i=d.getIndexOfSong(e.id),l="none";if(!e.now_playing){i>=d.page&&i div:nth-child("+i+")").after(n);var s=$("#wrapper").children()[i];$(s).css("display",l),"block"==l&&$("#wrapper").children().length>=d.page+d.can_fit+1?$($("#wrapper").children()[d.page+d.can_fit]).css("display","none"):i=0?$($("#wrapper").children()[d.page]).css("display","block"):$("#wrapper").children().length>d.page+d.can_fit&&$($("#wrapper").children()[d.page+d.can_fit-1]).css("display","block"),a&&d.page>0&&$($("#wrapper").children()[d.page-1]).css("display","none"),t&&setTimeout(function(){$(s).css("height",d.element_height)},5)}},populate_list:function(e,t){if(l.mobilecheck()||v?v?(d.can_fit=Math.round($("#wrapper").height()/91)+1,d.element_height=$("#wrapper").height()/d.can_fit-4):(d.can_fit=Math.round(($(window).height()-$(".tabs").height()-$("header").height()-66)/71)+1,d.element_height=($(window).height()-$(".tabs").height()-$("header").height()-66)/d.can_fit-6):(d.can_fit=Math.round($("#wrapper").height()/71)+1,d.element_height=$("#wrapper").height()/d.can_fit-5.3),d.element_height<55.2&&(d.element_height=55.2),void 0===h&&(h=$("#list-song-html").html()),full_playlist=e,S&&!t)for(var a=0;a1?($.each(full_playlist,function(e,t){if(!t.now_playing){var a=d.generateSong(t,!1,_,!0,!1,"",!0);$("#wrapper").append(a)}}),$("#wrapper").children().length>d.can_fit&&!$("#pageButtons").length?($('
first_pagefirst_pagenavigate_before prevnavigate_before prev 1 next navigate_nextnext navigate_nextlast_pagelast_page
').insertAfter("#wrapper"),$(".prev_page").css("display","none"),$(".first_page").css("display","none"),$(".next_page_hide").css("display","none"),$(".last_page_hide").css("display","none")):$("#pageButtons").length||($('
first_pagefirst_pagenavigate_before prevnavigate_before prev 1 next navigate_nextnext navigate_nextlast_pagelast_page
').insertAfter("#wrapper"),$(".prev_page").css("display","none"),$(".next_page").css("display","none"),$(".last_page").css("display","none"),$(".first_page").css("display","none"),$(".next_page_hide").css("display","inline-flex"),$(".prev_page_hide").css("display","inline-flex")),d.dynamicContentPage(-10)):(d.empty=!0,$("#wrapper").html("The playlist is empty."),$("#pageButtons").length||$('
first_pagefirst_pagenavigate_before prevnavigate_before prev 1 next navigate_nextnext navigate_nextlast_pagelast_page
').insertAfter("#wrapper"),$(".prev_page").css("display","none"),$(".next_page").css("display","none"),$(".last_page").css("display","none"),$(".last_page_hide").css("display","inline-flex"),$(".first_page").css("display","none"),$(".next_page_hide").css("display","inline-flex"),$(".prev_page_hide").css("display","inline-flex")),$("#settings").css("visibility","visible"),$("#settings").css("opacity","1"),$("#wrapper").css("opacity","1")},dynamicContentPageJumpTo:function(e){e*=d.can_fit,(e>d.page||e0&&"none"==$(".prev_page").css("display")&&($(".prev_page").css("display","inline-flex"),$(".prev_page_hide").css("display","none"),$(".first_page").css("display","inline-flex"),$(".first_page_hide").css("display","none")),d.page+d.can_fit>=$("#wrapper").children().length&&($(".next_page_hide").css("display","inline-flex"),$(".next_page").css("display","none"),$(".last_page_hide").css("display","inline-flex"),$(".last_page").css("display","none")),$("#pageNumber").html(d.page/d.can_fit+1))},dynamicContentPage:function(e){1==e?($("#wrapper").children().slice(d.page,d.page+d.can_fit).hide(),d.page=d.page+d.can_fit,$("#wrapper").children().slice(d.page,d.page+d.can_fit).show(),d.page>0&&"none"==$(".prev_page").css("display")&&($(".prev_page").css("display","inline-flex"),$(".prev_page_hide").css("display","none"),$(".first_page").css("display","inline-flex"),$(".first_page_hide").css("display","none")),d.page+d.can_fit>=$("#wrapper").children().length&&($(".next_page_hide").css("display","inline-flex"),$(".next_page").css("display","none"),$(".last_page_hide").css("display","inline-flex"),$(".last_page").css("display","none"))):10==e?($("#wrapper").children().slice(d.page,d.page+d.can_fit).hide(),d.page=Math.floor(($("#wrapper").children().length-1)/d.can_fit)*d.can_fit,$("#wrapper").children().slice(d.page,d.page+d.can_fit).show(),d.page>0&&"none"==$(".prev_page").css("display")&&($(".prev_page").css("display","inline-flex"),$(".prev_page_hide").css("display","none"),$(".first_page").css("display","inline-flex"),$(".first_page_hide").css("display","none")),d.page+d.can_fit>=$("#wrapper").children().length&&($(".next_page_hide").css("display","inline-flex"),$(".next_page").css("display","none"),$(".last_page_hide").css("display","inline-flex"),$(".last_page").css("display","none"))):e==-10?($("#wrapper").children().slice(d.page,d.page+d.can_fit).hide(),d.page=0,$("#wrapper").children().slice(d.page,d.page+d.can_fit).show(),0==d.page&&"none"!=$(".prev_page").css("display")?($(".prev_page").css("display","none"),$(".prev_page_hide").css("display","inline-flex"),$(".first_page").css("display","none"),$(".first_page_hide").css("display","inline-flex")):"none"==$(".prev_page").css("display")?($(".prev_page_hide").css("display","inline-flex"),$(".first_page_hide").css("display","inline-flex")):($(".prev_page_hide").css("display","none"),$(".first_page_hide").css("display","none")),d.page+d.can_fit<$("#wrapper").children().length&&($(".next_page_hide").css("display","none"),$(".next_page").css("display","inline-flex"),$(".last_page_hide").css("display","none"),$(".last_page").css("display","inline-flex"))):($("#wrapper").children().slice(d.page-d.can_fit,d.page).show(),$("#wrapper").children().slice(d.page,d.page+d.can_fit).hide(),d.page=d.page-d.can_fit<0?0:d.page-d.can_fit,0==d.page&&"none"!=$(".prev_page").css("display")?($(".prev_page").css("display","none"),$(".prev_page_hide").css("display","inline-flex"),$(".first_page").css("display","none"),$(".first_page_hide").css("display","inline-flex")):"none"==$(".prev_page").css("display")?($(".prev_page_hide").css("display","inline-flex"),$(".first_page_hide").css("display","inline-flex")):($(".prev_page_hide").css("display","none"),$(".first_page_hide").css("display","none")),d.page+d.can_fit<$("#wrapper").children().length&&($(".next_page_hide").css("display","none"),$(".next_page").css("display","inline-flex"),$(".last_page_hide").css("display","none"),$(".last_page").css("display","inline-flex"))),$("#pageNumber").html(d.page/d.can_fit+1)},added_song:function(e){var t;if(void 0!=e){if(0!==full_playlist.length&&(t=full_playlist.pop()),full_playlist.push(e),d.sortList(),t&&full_playlist.push(t),$("#suggested-"+e.id).length>0){number_suggested-=1,number_suggested<0&&(number_suggested=0);var a=number_suggested>9?"9+":number_suggested;$(".suggested-link span.badge.new.white").hasClass("hide")||0!=a||$(".suggested-link span.badge.new.white").addClass("hide"),$(".suggested-link span.badge.new.white").text(a)}$("#suggested-"+e.id).remove(),d.empty&&(d.empty=!1),$("#empty-channel-message").remove(),d.insertAtIndex(e,!0),$($("#wrapper").children()[d.page+d.can_fit]).css("display","none"),$("#wrapper").children().length>d.page+d.can_fit?($(".next_page_hide").css("display","none"),$(".next_page").removeClass("hide"),$(".last_page_hide").css("display","none"),$(".next_page").css("display","inline-flex"),$(".last_page").css("display","inline-flex")):($(".next_page_hide").css("display","inline-flex"), -$(".next_page").css("display","none"))}},deleted_song:function(e,t){try{var a=d.getIndexOfSong(e),l=$("#wrapper").children()[a];t||(l.style.height=0),a=0?($($("#wrapper").children()[d.page]).css("height",0),$($("#wrapper").children()[d.page]).css("display","block"),$($("#wrapper").children()[d.page]).css("height",d.element_height)):$("#wrapper").children().length>d.page+d.can_fit&&($($("#wrapper").children()[d.page+d.can_fit]).css("height",0),$($("#wrapper").children()[d.page+d.can_fit]).css("display","block"),$($("#wrapper").children()[d.page+d.can_fit]).css("height",d.element_height)),d.page>=$("#wrapper").children().length-1?(d.dynamicContentPage(-1),$(".next_page_hide").css("display","inline-flex"),$(".next_page").css("display","none"),$(".last_page_hide").css("display","inline-flex"),$(".last_page").css("display","none")):d.page+d.can_fit+1>=$("#wrapper").children().length-1&&($(".next_page_hide").css("display","inline-flex"),$(".next_page").css("display","none"),$(".last_page_hide").css("display","inline-flex"),$(".last_page").css("display","none")),setTimeout(function(){t||$("#"+e).remove(),full_playlist.splice(d.getIndexOfSong(e),1),T&&i.sendNext({title:full_playlist[0].title,videoId:full_playlist[0].id})},305),t&&$("#"+e).remove()}catch(t){full_playlist.splice(d.getIndexOfSong(e),1),d.empty||($("#"+e).remove(),a=0?$($("#wrapper").children()[d.page-1]).css("display","block"):$("#wrapper").children().length>d.page+d.can_fit&&$($("#wrapper").children()[d.page+(d.can_fit-1)]).css("display","block"),T&&i.sendNext({title:full_playlist[0].title,videoId:full_playlist[0].id}))}full_playlist.length<=2&&(d.empty=!0,$("#wrapper").html("The playlist is empty.")),$("#suggested-"+e).remove(),d.page+d.can_fit<$("#wrapper").children().length+1,d.page>=$("#wrapper").children().length&&d.dynamicContentPage(-1),Suggestions.checkUserEmpty()},voted_song:function(e,t){var a=d.getIndexOfSong(e),i=full_playlist[a];full_playlist[a].votes+=1,full_playlist[a].added=t,d.sortList(),$("#"+e).remove(),d.insertAtIndex(i,!1)},song_change:function(e,t){try{var a=full_playlist.length-1;$("#wrapper").children()[0].remove(),0===$("#wrapper").children().length&&(d.empty=!0,$("#wrapper").html("The playlist is empty.")),full_playlist[0].now_playing=!0,full_playlist[0].votes=0,full_playlist[0].guids=[],full_playlist[0].added=e,t?delete full_playlist[a]:full_playlist[a].now_playing=!1,l.log("---------------------------"),l.log("---SONG ON FIRST INDEX-----"),l.log(full_playlist[0]),l.log("---------------------------"),full_playlist.push(full_playlist.shift()),t||d.insertAtIndex(full_playlist[a-1],!1,!0)}catch(e){}},vote:function(e,t){return!S||"del"==t&&hasadmin&&!y&&""!=x?s.emit("vote",{channel:B,id:e,type:t,adminpass:x}):"pos"==t?d.voted_song(e,(new Date).getTime()/1e3):d.deleted_song(e),!0},skip:function(){return S?i.playNext():s.emit("skip",{pass:x,id:o,channel:B.toLowerCase()}),!0},exportToSpotify:function(){$.ajax({type:"GET",url:"https://api.spotify.com/v1/me",headers:{Authorization:"Bearer "+access_token_data.access_token},success:function(e){var t=e.id;$("#playlist_loader_export").removeClass("hide"),$(".exported-list-container").removeClass("hide"),$.ajax({type:"POST",url:"https://api.spotify.com/v1/users/"+t+"/playlists",headers:{Authorization:"Bearer "+access_token_data.access_token,"Content-Type":"application/json"},data:JSON.stringify({name:B.toLowerCase()+" - Zoff",public:!0}),success:function(e){var a=e.id;$.each(full_playlist,function(e,i){d.searchSpotify(i,a,t)})}})}})},searchSpotify:function(e,t,a){var i=e.title,n=e.title.toLowerCase().replace("-"," ");n=n.replace("official hd video",""),n=n.replace("unofficial video",""),n=n.replace("studio footage",""),n=n.replace("great song",""),n=n.replace("-"," "),n=n.replace("-"," "),n=n.replace(" hq "," "),n=n.replace("lyric video",""),n=n.replace("lyrics video",""),n=n.replace("album version",""),n=n.replace("drive original movie soundtrack",""),n=n.replace("original movie soundtrack",""),n=n.replace("live sessions",""),n=n.replace("audio only",""),n=n.replace("audio",""),n=n.replace("(new)",""),n=n.replace(" by "," "),n=n.replace(" vs "," "),n=n.replace("(full)"," "),n=n.replace("(video)"," "),n=n.replace("&"," "),n=n.replace("with lyrics",""),n=n.replace("lyrics",""),n=n.replace("w/",""),n=n.replace("w/",""),n=n.replace("official video",""),n=n.replace("studio version",""),n=n.replace("official music video",""),n=n.replace("music video",""),n=n.replace("musicvideo",""),n=n.replace("original video",""),n=n.replace("full version",""),n=n.replace("full song",""),n=n.replace("(official)",""),n=n.replace("official",""),n=n.replace("(original)",""),n=n.replace("("," "),n=n.replace(")"," "),n=n.replace("feat."," "),n=n.replace("feat"," "),n=n.replace("ft."," "),n=n.replace("["," "),n=n.replace("]"," "),n=n.replace(" free ",""),n=n.replace(" hd ",""),n=n.replace("original mix"," "),n=n.replace("radio edit"," "),n=n.replace("pop version"," "),n=n.replace(" "," ").replace(" "," ").replace(" "," ").replace(" "," ").replace(" "," ").replace(" "," "),n=encodeURIComponent(n),$.ajax({type:"GET",url:"https://api.spotify.com/v1/search?q="+n+"&type=track",headers:{Authorization:"Bearer "+access_token_data.access_token},async:!0,statusCode:{429:function(t){console.log(t.getAllResponseHeaders());var a=t.getResponseHeader("Retry-After");console.log(a),a||(a=5),a=parseInt(a,10),l.log("Retry-After",a),setTimeout(function(){d.searchSpotify(e)},1e3*a)}},error:function(t){if(429==t.status){console.log(t.getAllResponseHeaders());var a=t.getResponseHeader("Retry-After");console.log(a),a||(a=5),a=parseInt(a,10),l.log("Retry-After",a),setTimeout(function(){d.searchSpotify(e)},1e3*a)}},success:function(e){var s=!1;if($.each(e.tracks.items,function(e,t){if(t.name=t.name.toLowerCase(),t.name=t.name.replace("("," "),t.name=t.name.replace(")"," "),t.name=t.name.replace("["," "),t.name=t.name.replace("]"," "),t.name=t.name.replace("-"," "),t.name=t.name.replace("-"," "),t.name=t.name.replace("-"," "),t.name=t.name.replace("original mix"," "),t.name=t.name.replace("album version"," "),t.name=t.name.replace("abum version"," "),t.name=t.name.replace("feat."," "),t.artists[0].name=t.artists[0].name.replace("feat."," "),t.artists[0].name=t.artists[0].name.replace("feat"," "),t.name=t.name.replace("feat"," "),t.name=t.name.replace("ft."," "),t.name=t.name.replace("radio edit"," "),t.name=t.name.replace("pop version"," "),t.name=t.name.replace(" "," ").replace(" "," ").replace(" "," ").replace(" "," ").replace(" "," ").replace(" "," ").replace(" "," ").replace(" "," "),t.artists[0].name=t.artists[0].name.replace(" "," ").replace(" "," ").replace(" "," ").replace(" "," ").replace(" "," ").replace(" "," ").replace(" "," ").replace(" "," ")," "==t.name.substring(t.name.length-1)&&(t.name=t.name.substring(0,t.name.length-1)),"."==t.name.substring(t.name.length-1)&&"."!=n.substring(n.length-1)&&(t.name=t.name.substring(0,t.name.length-1)),decodeURIComponent(n).indexOf(t.artists[0].name.toLowerCase())>=0&&decodeURIComponent(n).indexOf(t.name.toLowerCase())>=0)return s=!0,d.uris.push(t.uri),l.log("Found",n),!1;for(var a=t.name.split(" "),e=0;e=0||"&"==a[e]&&n.indexOf("and")>=0)&&n.indexOf(a[e])<0)return!0;return s=!0,d.uris.push(t.uri),l.log("Found",n),!1}),s||(d.not_found.push(i),d.num_songs=d.num_songs+1,l.log("Didn't find",i)),d.num_songs+d.uris.length==full_playlist.length){if(d.uris.length>100){for(;d.uris.length>100;)d.addToSpotifyPlaylist(d.uris.slice(0,100),t,a),d.uris=d.uris.slice(100,d.uris.length);d.addToSpotifyPlaylist(d.uris,t,a),$("#playlist_loader_export").addClass("hide")}else d.addToSpotifyPlaylist(d.uris,t,a),$("#playlist_loader_export").addClass("hide");$(".exported-list").append(""+B+""),$.each(d.not_found,function(e,t){var a=$("
"+not_export_html+"
");a.find(".extra-add-text").attr("value",t),a.find(".extra-add-text").attr("title",t),$(".not-exported-container").append(a.html())}),$(".not-exported").removeClass("hide"),$(".spotify_export_button").css("display","block")}}})},addToSpotifyPlaylist:function(e,t,a){$.ajax({type:"POST",url:"https://api.spotify.com/v1/users/"+a+"/playlists/"+t+"/tracks",headers:{Authorization:"Bearer "+access_token_data.access_token,"Content-Type":"application/json"},data:JSON.stringify({uris:e}),error:function(i){setTimeout(function(){d.addToSpotifyPlaylist(e,t,a)},3e3)},success:function(e){l.log("Added songs")}})},exportToYoutube:function(){var e="https://www.googleapis.com/youtube/v3/playlists?part=snippet";$(".exported-list-container").removeClass("hide"),$("#playlist_loader_export").removeClass("hide"),$.ajax({type:"POST",url:e,headers:{Authorization:"Bearer "+access_token_data_youtube.access_token,"Content-Type":"application/json"},data:JSON.stringify({snippet:{title:l.upperFirst(B.toLowerCase()),description:"Playlist exported from zoff"}}),success:function(e){var t=0,a=e.id,i="https://www.googleapis.com/youtube/v3/playlistItems?part=snippet";d.addToYoutubePlaylist(a,full_playlist,t,i)},error:function(e){l.log(e)}})},addToYoutubePlaylist:function(e,t,a,i){var n=JSON.stringify({snippet:{playlistId:e,resourceId:{kind:"youtube#video",videoId:t[a].id}}});$.ajax({type:"POST",url:i,headers:{Authorization:"Bearer "+access_token_data_youtube.access_token,"Content-Type":"application/json"},data:n,success:function(n){l.log("Added video: "+t[a].id+" to playlist id "+e),a==t.length-1?(l.log("All videoes added!"),l.log("url: https://www.youtube.com/playlist?list="+e),$(".exported-list").append(""+B+""),$("#playlist_loader_export").addClass("hide"),$(".current_number").addClass("hide")):($(".current_number").removeClass("hide"),$(".current_number").text(a+1+" of "+t.length),d.addToYoutubePlaylist(e,t,a+1,i))}})},importOldList:function(e){var t="",a=0;playlist_url="lists/"+e+".json",list=$.parseJSON($.ajax({type:"GET",url:playlist_url,async:!1}).responseText),$.each(list.songs,function(e,i){t+=i.id+",",a>45&&(Search.addVideos(t),t="",a=0),a++}),Search.addVideos(t),document.getElementById("search").value=""},sortList:function(){full_playlist.sort(l.predicate({name:"votes",reverse:!0},{name:"added",reverse:!1},{name:"title",reverse:!1}))},show:function(){l.mobilecheck()||(showToggle?(showToggle=!1,$("#toptitle").empty(),$("#chan").addClass("bigChan"),$("#chan").html("zoff.me/"+B.toLowerCase())):(showToggle=!0,$("#toptitle").html("Zoff"),$("#chan").removeClass("bigChan"),$("#chan").html(B)))},generateSong:function(e,t,a,i,n,s,o){void 0===h&&(h=$("#list-song-html").html());var r,p,c=e.id,g=e.title,u=e.votes,m="background-image:url('//img.youtube.com/vi/"+c+"/mqdefault.jpg');",f=$("
"+h+"
"),_="style";if(t?f.find("#list-song").css("height",0):f.find(".list-song").css("height",d.element_height),y||f.find(".card-action").removeClass("hide"),1==u&&f.find(".vote-text").text("vote"),a&&(m="//img.youtube.com/vi/"+c+"/mqdefault.jpg",_="data-original"),i){f.find(".list-votes").text(u),f.find("#list-song").attr("id",c),f.find(".vote-container").attr("title",g),($("#wrapper").children().length>=d.can_fit&&o||"none"==s)&&f.find(".card").css("display","none"),r=".vote-container",p="delete_button";var v=l.secondsToOther(e.duration);f.find(".card-duration").text(l.pad(v[0])+":"+l.pad(v[1]))}else if(!i){f.find(".vote-text").text(""),f.find(".card-duration").text(l.pad(e.duration[0])+":"+l.pad(e.duration[1]));var w="user";r=".add-suggested",n?p="del_user_suggested":(p="del_suggested",w="system"),f.find(".vote-container").attr("class","clickable add-suggested"),f.find(".add-suggested").attr("title",g),f.find(".delete_button").addClass(p),f.find(r).attr("data-video-title",g),f.find(r).attr("data-video-length",e.length),f.find(r).attr("data-added-by",w),f.find("#list-song").attr("id","suggested-"+c),f.find(".list-image").attr("class",f.find(".list-image").attr("class").replace("list-image","list-suggested-image"))}return f.find(".list-title").text(g),f.find(".list-title").attr("title",g),f.find(r).attr("data-video-id",c),f.find(".list-image").attr(_,m),f.find(".list-suggested-image").attr(_,m),f.find("."+p).attr("data-video-id",c),f.html()},getIndexOfSong:function(e){try{return indexes=$.map(full_playlist,function(t,a){if(t.id==e)return a}),indexes[0]}catch(e){}},scrollTop:function(){$("#wrapper").scrollTop(0)},scrollBottom:function(){$("#wrapper").scrollTop($("#wrapper")[0].scrollHeight)}},u="",m=!1,f=!1,h=$("#list-song-html").html(),y=!0,_=!1,v=!0,w=100,x="",C=!1,k=!1,T=!1,S=!1,I=!1,E=window.location.hash.substring(1).split("&"),B=E[0],M=!1,V="#808080",N=!1,P={"sync disconnect on unload":!0,secure:!0,"force new connection":!0};$(document).ready(function(){3==E.length&&"autoplay"==E[2]?M=!0:m=!0,V="#"+E[1],add="https://zoff.me",s=io.connect(""+add+":8080",P),s.on("get_list",function(){setTimeout(function(){s.emit("list",B.toLowerCase())},1e3)}),s.on("viewers",function(e){viewers=e,void 0!==u&&i.getTitle(u,viewers)}),e(),t(),window.onYouTubeIframeAPIReady=i.onYouTubeIframeAPIReady,i.loadPlayer(),c.initSlider(),window.setVolume=a,$("#controls").css("background-color",V),$("#playlist").css("background-color",V)}),$(document).on("click","#zoffbutton",function(e){window.open("https://zoff.me/"+B.toLowerCase()+"/","_blank")}),$(document).on("click",".vote-container",function(e){var t=$(this).attr("data-video-id");d.vote(t,"pos")}),$(document).on("click",".prev_page",function(e){e.preventDefault(),d.dynamicContentPage(-1)}),$(document).on("click",".next_page",function(e){e.preventDefault(),d.dynamicContentPage(1)})}(); \ No newline at end of file diff --git a/public/dist/main.min.js b/public/dist/main.min.js deleted file mode 100755 index a152b206..00000000 --- a/public/dist/main.min.js +++ /dev/null @@ -1,4 +0,0 @@ -!function(){function e(){$("#facebook-code-link").attr("href","https://www.facebook.com/sharer/sharer.php?u=https://zoff.me/"),$("#facebook-code-link").attr("onclick","window.open('https://www.facebook.com/sharer/sharer.php?u=https://zoff.me/', 'Share Zoff','width=600,height=300'); return false;"),$("#twitter-code-link").attr("href","https://twitter.com/intent/tweet?url=https://zoff.me/&text=Check%20out%20Zoff!&via=zoffmusic"),$("#twitter-code-link").attr("onclick","window.open('https://twitter.com/intent/tweet?url=https://zoff.me/&text=Check%20out%20Zoff!&via=zoffmusic','Share Playlist','width=600,height=300'); return false;"),$("#qr-code-image-link").attr("src","//chart.googleapis.com/chart?chs=150x150&cht=qr&chl=https://zoff.me/&choe=UTF-8&chld=L%7C1")}function t(){var t=new Date;q.blob_list=[],3==t.getMonth()&&1==t.getDate()&&($(".mega").css("-webkit-transform","rotate(180deg)"),$(".mega").css("-moz-transform","rotate(180deg)")),window.onpopstate=function(e){var t=window.location.href.split("/");""!==t[3]&&"#"!=t[3].substring(0,1)&&q.to_channel(t[3],!0)},A=$("#channel-list-container").clone().html(),"fb.zoff.me"!=window.location.hostname&&e(),"zoff.me"==window.location.hostname?add="https://zoff.me":add=window.location.hostname,(void 0===V||Y.mobilecheck())&&(V=io.connect(""+add+":8080",dt)),0!==$("#alreadyfp").length&&!Y.mobilecheck()&&V._callbacks.$playlists||h(),$("#about").modal(),$("#help").modal(),$("#contact").modal(),$("select").material_select(),Y.log("----"),Y.log("Sending frontpage_lists"),Y.log("Socket",V),Y.log("-----"),j.init(),j.get_offline()?T(!0,je):$("#offline-mode").tooltip({delay:5,position:"bottom",tooltip:"Enable private mode"}),V.emit("frontpage_lists"),$("#channel-load").css("display","none"),"#donation"==window.location.hash&&(window.location.hash="#",$("#donation").modal("open")),localStorage.ok_cookie||(M(),Materialize.toast("We're using cookies to enhance your experience! 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")}),!Y.mobilecheck()&&q.winter&&$(".mega").prepend('
'),Y.mobilecheck()&&$("input#searchFrontpage").characterCounter(),window.__onGCastApiAvailable=function(e,t){e&&(Fe=!0)}}function a(){qe=0;var e=!0;J=$("#chan").html(),Qe=Y.mobilecheck();var t=Y.mobilecheck()?"left":"right";if(window.onpopstate=function(e){N()},"fb.zoff.me"!=window.location.hostname&&L(),"zoff.me"==window.location.hostname?add="https://zoff.me":add=window.location.hostname,void 0!==mt&&(mt.stopInterval=!1),$("ul.playlist-tabs").tabs(),$("ul.playlist-tabs-loggedIn").tabs(),$("ul.chatTabs").tabs(),$("#settings").sideNav({menuWidth:300,edge:t,closeOnClick:!1}),$(".collapsible").collapsible({accordion:!0}),$("#help").modal(),$("#contact").modal(),$("#embed").modal(),S(Se),Ze=$("#temp-results-container"),Xe=$("#empty-results-container").html(),Ie=$(".not-imported-container").html(),Ee=$(".not-exported-container").html(),$(".not-imported-container").empty(),$(".not-exported-container").empty(),$(".video-container").resizable({start:function(e,t){$("iframe").css("pointer-events","none")},stop:function(e,t){$("iframe").css("pointer-events","auto"),j.set_width($(this).width()),k()},handles:"e",minWidth:350,maxWidth:$(window).width()-241}),(void 0===V||Y.mobilecheck())&&(e=!1,V=io.connect(""+add+":8080",dt)),j.init(),j.get_offline()&&($(".offline_switch_class")[0].checked=!0,T(!0,je)),0===$("#alreadychannel").length||Y.mobilecheck())s(),l(),c(),d();else{$("#channel-load").css("display","none"),$("#player").css("opacity","1"),$("#controls").css("opacity","1"),$(".playlist").css("opacity","1"),mt.readyLooks(),ht.initYoutubeControls(mt.player),ht.initSlider(),mt.player.setVolume(j.get_volume()),$(".video-container").removeClass("no-opacity");var a="https://remote."+window.location.hostname+"/"+et;$("#code-text").text(et),$("#code-qr").attr("src","https://chart.googleapis.com/chart?chs=221x221&cht=qr&choe=UTF-8&chld=L|1&chl="+a),$("#code-link").attr("href",a)}e&&V.emit("list",J.toLowerCase()),$("#viewers").tooltip({delay:5,position:"top",tooltip:"Viewers"}),window.onYouTubeIframeAPIReady=mt.onYouTubeIframeAPIReady,(""===mt.player||void 0===mt.player||Y.mobilecheck())&&mt.loadPlayer(),Y.mobilecheck()?gt.initiate_volume():$("input#chan_description").characterCounter(),p(),m(),u(),Y.mobilecheck()||0!==$("#alreadychannel").length||f(),Y.msieversion()||Y.mobilecheck()||Notification.requestPermission(),$(".search_input").focus(),Y.sample(),$(".castButton-unactive").tooltip({delay:5,position:"top",tooltip:"Cast Zoff to TV"}),$(".castButton-active").tooltip({delay:5,position:"top",tooltip:"Stop casting"}),$("#results").hover(function(){$("div.result").removeClass("hoverResults"),ye=0},function(){}),$("#search").focus(),$("#embed-button").css("display","inline-block"),$("#embed-area").val(w(Me,Le,Be,De)),$("#search").attr("placeholder","Find song on YouTube..."),/chrom(e|ium)/.test(navigator.userAgent.toLowerCase())||Y.mobilecheck()||$(".castButton-unactive").css("display","none"),Y.log("chromecastAvailable"+Ve),Y.log("chromecastAvailable"+Fe),Ve?n(1):Fe?initializeCastApi():window.__onGCastApiAvailable=function(e,t){e?setTimeout(function(){Fe=!0,initializeCastApi()},1e3):Fe=!0},Y.mobilecheck()||null!=navigator.userAgent.match(/iPad/i)||setTimeout(function(){k()},100)}function n(e){if($(".castButton-unactive").toggleClass("hide"),$(".castButton-active").toggleClass("hide"),1==e){$("#duration").toggleClass("hide"),$("#fullscreen").toggleClass("hide");try{mt.player.stopVideo()}catch(e){}mt.stopInterval=!0,$("#player_overlay").removeClass("hide"),$("#player_overlay").css("display","block"),Y.mobilecheck()?$("#pause").hasClass("hide")?($("#play").toggleClass("hide"),$("#pause").toggleClass("hide")):$("#play").hasClass("hide")&&($("#play").toggleClass("hide"),$("#pause").toggleClass("hide")):($("#volume").slider("value",100),$("#player_overlay").width($("#player").width()+1)),$("#player_overlay").css("background","url(https://i.ytimg.com/vi/"+ot+"/maxresdefault.jpg)"),$("#player_overlay").css("background-position","center"),$("#player_overlay").css("background-size","100%"),$("#player_overlay").css("background-color","black"),$("#player_overlay").css("background-repeat","no-repeat"),$("#playing_on").css("display","flex"),$("#chromecast_text").html("Playing on
"+H.La.friendlyName),mt.player.setVolume(100),$("#player_overlay_text").toggleClass("hide")}else 0==e&&($("#duration").toggleClass("hide"),$("#fullscreen").toggleClass("hide"),mt.player.playVideo(),mt.stopInterval=!1,duration=mt.player.getDuration(),mt.durationSetter(),Y.mobilecheck()||(mt.player.setVolume(j.get_volume()),$("#volume").slider("value",j.get_volume())),$("#player_overlay").addClass("hide"),$("#player_overlay_text").toggleClass("hide"),$("#chromecast_text").html(""),$("#playing_on").css("display","none"),je?mt.loadVideoById(ot):V.emit("pos",{channel:J.toLowerCase()}))}function i(e,t){var a=JSON.parse(t);switch(a.type){case-1:je?mt.playNext():V.emit("end",{id:a.videoId,channel:J.toLowerCase()});break;case 0:je?mt.playNext():V.emit("skip",{error:a.data_code,id:a.videoId,pass:oe,channel:J.toLowerCase})}}function o(){V.on("connect_failed",function(){Y.log("Connection Failed"),Ne||(Ne=!0,Materialize.toast("Error connecting to server, please wait..",1e8,"red lighten connect_error"))}),V.on("connect_error",function(){Y.log("Connection Failed."),Ne||(Ne=!0,Materialize.toast("Error connecting to server, please wait..",1e8,"red lighten connect_error"))})}function s(){V.on("np",mt.youtube_listener)}function l(){V.on("get_list",function(){V.emit("list",J.toLowerCase())})}function c(){V.on("suggested",function(e){var t=!0;void 0===e.id&&(t=!1),yt.catchUserSuggests(e,t)})}function d(){V.on("viewers",function(e){re=e,void 0!==rt&&mt.getTitle(rt,re)})}function p(){V.on("toast",z.toast),V.on("pw",z.pw),V.on("conf",z.conf)}function u(){V.on("chat.all",O.allchat),V.on("chat",O.channelchat)}function m(){V.on("channel",U.channel_function)}function h(){Y.log("Setting up playlist_listener"),V.on("playlists",q.frontpage_function)}function f(){V.on("id",G.host_listener)}function y(e){V.on(e,G.host_on_action)}function v(){localStorage.debug=!0}function _(){localStorage.debug=!1}function w(e,t,a,n){return''}function k(e){if($(window).width()>760){var t=$(".brand-logo").outerWidth();e&&(t=.15*$(window).width());var a=$(window).width()-$(".control-list").width()-t-66;title_width=a,$(".title-container").width(title_width)}else $(".title-container").width("100%")}function C(e){for(var t="",a="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.-_",n=0;n"+Q+""),Q.find(".list-remove").removeClass("hide"),Q=Q.html()),$(".list-remove").removeClass("hide"),$("#viewers").addClass("hide"),$("#offline-mode").removeClass("waves-cyan"),$("#offline-mode").addClass("cyan"),$("#offline-mode").tooltip({delay:5,position:"bottom",tooltip:"Disable private mode"}),"/"!=window.location.pathname?($("#controls").on("mouseenter",function(e){$("#seekToDuration").hasClass("hide")&&$("#seekToDuration").removeClass("hide")}),$("#controls").on("mouseleave",function(e){ce=!1,$("#seekToDuration").hasClass("hide")||$("#seekToDuration").addClass("hide")}),$("#controls").on("mousedown",function(e){var t=["bar","controls","duration"];t.indexOf($(e.target).attr("id"))>=0&&(ce=!0)}),$("#controls").on("mouseup",function(e){ce=!1}),$("#controls").on("mousemove",I),$("#controls").on("click",E),$("#main_components").append("
00:00/01:00
"),Y.mobilecheck()?Y.mobilecheck()&&$("#seekToDuration").css("top",$("#controls").position().top-20):$("#seekToDuration").css("top",$("#controls").position().top-55),$("#controls").hasClass("ewresize")||$("#controls").addClass("ewresize")):($("#controls").off("mouseenter"),$("#controls").off("mouseleave"),$("#controls").off("mousemove"),$("#controls").off("click")),void 0!=tt&&!t){for(var a=0;a"+Q+""),Z&&W&&Q.find(".list-remove").addClass("hide"),Q=Q.html()),$("#viewers").removeClass("hide"),Z&&W&&$(".list-remove").addClass("hide"),$("#offline-mode").addClass("waves-cyan"),$("#offline-mode").removeClass("cyan"),$("#offline-mode").tooltip({delay:5,position:"bottom",tooltip:"Enable private mode"}),$("#controls").off("mouseleave"),$("#controls").off("mouseenter"),$("#controls").off("mousedown"),$("#controls").off("mouseup"),$("#controls").off("mousemove",I),$("#controls").off("click",E),$("#seekToDuration").remove(),"/"!=window.location.pathname&&(V.emit("pos"),V.emit("list",J.toLowerCase()),$("#controls").hasClass("ewresize")&&$("#controls").removeClass("ewresize"))}function S(e){e?(Y.log("------------------------"),Y.log("Spotify is authenticated"),Y.log("access_token: "+Te.access_token),Y.log("token_type:"+Te.token_type),Y.log("expires_in: "+Te.expires_in),Y.log("------------------------"),$(".spotify_authenticated").css("display","block"),$(".spotify_unauthenticated").css("display","none")):(Y.log("----------------------------"),Y.log("Spotify is not authenticated"),Y.log("----------------------------"),$(".spotify_authenticated").css("display","none"),$(".spotify_unauthenticated").css("display","block"))}function I(e){console.log("hello");var t=e.clientX-Math.ceil($("#seekToDuration").width()/2)-8;t<0?t=0:t+$("#seekToDuration").width()>$("#controls").width()&&(t=$("#controls").width()-$("#seekToDuration").width()),$("#seekToDuration").css("left",t);try{var a=tt[tt.length-1].duration/$("#controls").width();a*=e.clientX;var n=Y.secondsToOther(a),i=Y.pad(n[0]),o=Y.pad(Math.ceil(n[1]));$("#seekToDuration").text(i+":"+o);var s=["bar","controls","duration"];s.indexOf($(e.target).attr("id"))>=0&&ce&&$("#bar").width(100/mt.player.getDuration()*a+"%")}catch(e){}}function E(e){var t=["bar","controls","duration"];if(t.indexOf($(e.target).attr("id"))>=0){var a=tt[tt.length-1].duration/$("#controls").width();a*=e.clientX,Y.log(a),Ve?H.sendMessage("urn:x-cast:zoff.me",{type:"seekTo",seekTo:a}):(mt.player.seekTo(a),dMinutes=Math.floor(duration/60),dSeconds=duration-60*dMinutes,currDurr=a,currDurr>duration&&(currDurr=duration),minutes=Math.floor(currDurr/60),seconds=currDurr-60*minutes,document.getElementById("duration").innerHTML=Y.pad(minutes)+":"+Y.pad(seconds)+" / "+Y.pad(dMinutes)+":"+Y.pad(dSeconds),per=100/duration*currDurr,per>=100?per=100:0===duration&&(per=0),$("#bar").width(per+"%"))}}function B(e){search_input=$(".search_input").val(),code=e.keyCode||e.which,40!=code&&38!=code&&13!=code&&39!=code&&37!=code&&17!=code&&16!=code&&225!=code&&18!=code&&27!=code&&(clearTimeout(Ke),search_input.length<3&&$("#results").html(""),13==code?ft.search(search_input):Ke=setTimeout(function(){ft.search(search_input)},1e3))}function L(){$("#facebook-code-link").attr("href","https://www.facebook.com/sharer/sharer.php?u=https://zoff.me/"+J.toLowerCase()),$("#facebook-code-link").attr("onclick","window.open('https://www.facebook.com/sharer/sharer.php?u=https://zoff.me/"+J.toLowerCase()+"', 'Share Playlist','width=600,height=300'); return false;"),$("#twitter-code-link").attr("href","https://twitter.com/intent/tweet?url=https://zoff.me/"+J.toLowerCase()+"&text=Check%20out%20this%20playlist%20"+J.toLowerCase()+"%20on%20Zoff!&via=zoffmusic"),$("#twitter-code-link").attr("onclick","window.open('https://twitter.com/intent/tweet?url=https://zoff.me/"+J.toLowerCase()+"/&text=Check%20out%20this%20playlist%20"+J.toLowerCase()+"%20on%20Zoff!&via=zoffmusic','Share Playlist','width=600,height=300'); return false;"),$("#qr-code-image-link").attr("src","//chart.googleapis.com/chart?chs=150x150&cht=qr&chl=https://zoff.me/"+J.toLowerCase()+"&choe=UTF-8&chld=L%7C1")}function M(){$("#toast-container").remove()}function N(){var e=window.location.href.split("/");"#!"==e[3].substr(0,1)||""===e[3]||5==e.length&&"#"==e[4].substr(0,1)?""===e[3]&&(clearTimeout(F),he&&(he=!1,mt.fireplace.destroy(),$("#fireplace_player").css("display","none")),$("#channel-load").css("display","block"),window.scrollTo(0,0),mt.stopInterval=!0,z.display_logged_out(),z.beginning=!0,fe=!1,we=!1,$("#embed-button").css("display","none"),$(".castButton-active").tooltip("remove"),$("#viewers").tooltip("remove"),$(".castButton-unactive").tooltip("remove"),$("#offline-mode").tooltip("remove"),$("#chan_thumbnail").tooltip("remove"),$("#admin-lock").tooltip("remove"),$("#seekToDuration").remove(),$.ajax({url:"public/php/frontpage.php",success:function(e){if(Y.mobilecheck()?(Y.log("Removing all listeners"),V.removeAllListeners(),V.disconnect()):(V.removeEventListener("chat.all"),V.removeEventListener("chat"),V.removeEventListener("conf"),V.removeEventListener("pw"),V.removeEventListener("toast"),V.removeEventListener("channel")),document.getElementById("volume-button").removeEventListener("click",ht.mute_video),document.getElementById("playpause").removeEventListener("click",ht.play_pause),document.getElementById("fullscreen").removeEventListener("click",ht.fullscreen),Y.mobilecheck()&&(ot="",rt=""),$("meta[name=theme-color]").attr("content","#2D2D2D"),Y.mobilecheck()){try{mt.player.destroy()}catch(e){}mt.player="",document.title="Zoff"}else $(".video-container").resizable("destroy"),$("main").append("X"),$("#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("
");var a=$("
"+e+"
");$(".drag-target").remove(),$("#sidenav-overlay").remove(),$("main").attr("class","center-align container"),$("body").attr("id",""),$("body").attr("style",""),$("header").html($(a.find("header")).html()),$($(a.find(".section.mega"))).insertAfter("header"),$($(a.find(".section.mobile-search"))).insertAfter(".mega"),Y.mobilecheck()?$("main").html($(a.find("main")).html()):$("main").append($(a.find("#main_section_frontpage")).wrap("
").parent().html()),$(".page-footer").removeClass("padding-bottom-extra"),$(".page-footer").removeClass("padding-bottom-novideo"),$("#favicon").attr("href","public/images/favicon.png"),Y.log(V),1==$("#alreadyfp").length?t():(ut=!0,R=!0,t()),0===$("#alreadychannel").length&&$("head").append("
"),void 0!=e.description&&""!=e.description&&$("#description_area").html(e.description)},submitAdmin:function(e){voting=e.vote.checked,addsongs=e.addsongs.checked,longsongs=e.longsongs.checked,R=e.frontpage.checked,allvideos=e.allvideos.checked,removeplay=e.removeplay.checked,skipping=e.skip.checked,shuffling=e.shuffle.checked,configs={voting:voting,addsongs:addsongs,longsongs:longsongs,frontpage:R,allvideos:allvideos,removeplay:removeplay,adminpass:oe,skipping:skipping,shuffling:shuffling},V.emit("conf",configs)},hide_settings:function(){$("#settings").sideNav("hide")},shuffle:function(){if(je){for(var e=0;e to change name","/removename to remove name"],namechange:function(e){V.emit("namechange",e),j.set_name(e)},removename:function(){V.emit("removename"),j.remove_name()},chat:function(e){if(!(e.value.length>150)){if(e.value.startsWith("/name "))O.namechange(e.value.substring(6));else if(e.value.startsWith("/help"))if("#all_chat"==$(".chat-tab-li a.active").attr("href")){$("#chatall").children().length>100&&$("#chatall").children()[0].remove();for(var t=0;tSystem: ");var i=document.createTextNode(O.chat_help[t]);$("#chatall li:last")[0].appendChild(i),document.getElementById("chatall").scrollTop=document.getElementById("chatall").scrollHeight}}else{$("#chatchannel").children().length>100&&$("#chatchannel").children()[0].remove();for(var t=0;tSystem: ");var i=document.createTextNode(O.chat_help[t]);$("#chatchannel li:last")[0].appendChild(i),document.getElementById("chatchannel").scrollTop=document.getElementById("chatchannel").scrollHeight}}else e.value.startsWith("/removename")?O.removename():"#all_chat"==$(".chat-tab-li a.active").attr("href")?V.emit("all,chat",e.value):V.emit("chat",e.value);e.value=""}},allchat:function(e){if(":"==e.msg.substring(0,1)&&!be){O.all_received+=1,$("#favicon").attr("href","public/images/highlogo.png"),K=!0,ke=!0,$(".chat-link span.badge.new.white").hasClass("hide")&&$(".chat-link span.badge.new.white").removeClass("hide");var t=O.channel_received+O.all_received>9?"9+":O.channel_received+O.all_received;$(".chat-link span.badge.new.white").html(t)}document.hidden&&$("#favicon").attr("href","public/images/highlogo.png"),$("#chatall").children().length>100&&$("#chatall").children()[0].remove();var a=Y.intToARGB(Y.hashCode(e.from));if(a.length<6)for(x=a.length;x<6;x++)a="0"+a;a=Y.hexToRgb(a.substring(0,6));var n=Y.rgbToHsl([a.r,a.g,a.b],!1);$("#chatall").append("
  • "+e.from+"
  • ");var i=document.createTextNode(e.msg);$("#chatall li:last")[0].appendChild(i),document.getElementById("chatall").scrollTop=document.getElementById("chatall").scrollHeight},channelchat:function(e){if(":"==e.msg.substring(0,1)&&!be){$("#favicon").attr("href","public/images/highlogo.png"),K=!0,ke=!0,O.channel_received+=1,$(".chat-link span.badge.new.white").hasClass("hide")&&$(".chat-link span.badge.new.white").removeClass("hide");var t=O.channel_received+O.all_received>9?"9+":O.channel_received+O.all_received;$(".chat-link span.badge.new.white").html(t)}$("#chatchannel").children().length>100&&$("#chatchannel").children()[0].remove();var a=Y.intToARGB(Y.hashCode(e.from));if(a.length<6)for(x=a.length;x<6;x++)a="0"+a;a=Y.hexToRgb(a.substring(0,6));var n=Y.rgbToHsl([a.r,a.g,a.b],!1);$("#chatchannel").append("
  • "+e.from+"
  • ");var i=document.createTextNode(e.msg);$("#chatchannel li:last")[0].appendChild(i),document.getElementById("chatchannel").scrollTop=document.getElementById("chatchannel").scrollHeight},chat_blink:function(){Ce=!0,$(".chat-link").attr("style","color: grey !important;"),setTimeout(function(){$(".chat-link").attr("style","color: white !important;"),setTimeout(function(){Ce&&O.chat_blink()},1e3)},1e3)}},j={conf_pass:void 0,init:function(){"/"!=window.location.pathname&&("https:"!=location.protocol?document.cookie=J.toLowerCase()+"=;path=/"+J.toLowerCase()+";expires="+new Date(0).toUTCString():document.cookie=J.toLowerCase()+"=;path=/"+J.toLowerCase()+";secure;expires="+new Date(0).toUTCString());try{conf_arr=j.decrypt(j.getCookie("_opt"),"_opt")}catch(e){conf_arr=j.decrypt(j.create_cookie("_opt"),"_opt")}if("/"!=window.location.pathname){try{j.conf_pass=j.decrypt(j.getCookie(J.toLowerCase()),J.toLowerCase())}catch(e){j.conf_pass=j.decrypt(j.create_cookie(J.toLowerCase()),J.toLowerCase())}G.change_enabled(conf_arr.remote),100!=conf_arr.width&&mt.set_width(conf_arr.width),void 0!==conf_arr.name&&""!==conf_arr.name&&O.namechange(conf_arr.name)}},decrypt:function(e,t){void 0===j.getCookie(t)&&(e=j.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,V.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}),i=new Date;i.setFullYear(i.getFullYear()+1),"https:"!=location.protocol?document.cookie=t+"="+n.toString()+";expires="+i.toGMTString()+";path=/;":document.cookie=t+"="+n.toString()+";secure;expires="+i.toGMTString()+";path=/;"},encrypt_string:function(e){var t=CryptoJS.AES.encrypt(e,V.id,{mode:CryptoJS.mode.CBC,padding:CryptoJS.pad.Pkcs7});return t.toString()},get_volume:function(){return j.decrypt(j.getCookie("_opt"),"_opt").volume},get_offline:function(){var e=j.decrypt(j.getCookie("_opt"),"_opt").offline;return void 0!=e?j.decrypt(j.getCookie("_opt"),"_opt").offline:(j.set_offline(!1),!1)},set_volume:function(e){conf_arr.volume=e,j.encrypt(conf_arr,"_opt")},create_cookie:function(e){"_opt"==e?cookie_object={volume:100,width:100,remote:!0,name:"",offline:!1}: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),"https:"!=location.protocol?document.cookie=e+"="+a.toString()+";expires="+n.toGMTString()+";path=/;":document.cookie=e+"="+a.toString()+";secure;expires="+n.toGMTString()+";path=/;",j.getCookie(e)},set_pass:function(e,t){j.conf_pass.passwords[e]=t,j.encrypt(j.conf_pass,e)},remove_pass:function(e){delete j.conf_pass.passwords[e],j.encrypt(j.conf_pass,e.toLowerCase())},set_name:function(e){conf_arr.name=encodeURIComponent(e).replace(/\W/g,""),j.encrypt(conf_arr,"_opt")},set_offline:function(e){conf_arr.offline=e,j.encrypt(conf_arr,"_opt")},remove_name:function(){conf_arr.name="",j.encrypt(conf_arr,"_opt")},get_pass:function(e){if(void 0!==j.conf_pass)return j.conf_pass.passwords[e]},set_remote:function(e){conf_arr.remote=e,j.encrypt(conf_arr,"_opt")},get_remote:function(e){return conf_arr.remote},crypt_pass:function(e){var t=CryptoJS.AES.encrypt(e,V.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,j.encrypt(conf_arr,"_opt")},getCookie:function(e){var t="; "+document.cookie,a=t.split("; "+e+"=");if(2==a.length)return a.pop().split(";").shift()}},R=!0,q={blob_list:[],winter:(new Date).getMonth()>=10,times_rotated:0,all_channels:[],frontpage_function:function(e){R=!0,Y.log("-----------"),Y.log("Frontpage fetch"),Y.log(e),Y.log("------------"),q.all_channels=e.channels,q.populate_channels(e.channels,!0),q.set_viewers(e.viewers)},populate_channels:function(e,t){$("#channels").empty();var a,n=0;1==e[0].pinned&&(a=e.shift()),e=t?e.sort(Y.predicate({name:"viewers",reverse:!0},{name:"accessed",reverse:!0},{name:"count",reverse:!0})):e.sort(Y.predicate({name:"viewers",reverse:!0},{name:"count",reverse:!0})),void 0!==a&&e.unshift(a),Y.mobilecheck()||q.add_backdrop(e,0),pre_card=$(A),Y.log("------------"),Y.log(pre_card),Y.log("-------------");for(var i in e){var o=e[i].channel;if(n<12||!t){var s=e[i].id,l=e[i].viewers,r=e[i].description,c="background-image:url('https://img.youtube.com/vi/"+s+"/hqdefault.jpg');";e[i].thumbnail&&(c="background-image:url('"+e[i].thumbnail+"');");var d=e[i].count,p=pre_card.clone();1==e[i].pinned?(p.find(".pin").attr("style","display:block;"),p.find(".card").attr("title","Pinned!")):(p.find(".pin").attr("style","display:none;"),p.find(".card").attr("title","")),p.find(".chan-name").text(o),p.find(".chan-name").attr("title",o),p.find(".chan-views").text(l),p.find(".chan-songs").text(d),p.find(".chan-bg").attr("style",c),p.find(".chan-link").attr("href",o+"/"),""==r||Y.mobilecheck()?(p.find(".card-reveal").remove(),p.find(".card").removeClass("sticky-action")):(p.find(".card-title").text(o),p.find(".description_text").text(r),r=""),$("#channels").append(p.html())}n++}var u=e.slice();u=u.sort(q.sortFunction_active);var g={};for(var i in u)g[u[i].channel]=null;var m="input.desktop-search";Y.mobilecheck()&&(m="input.mobile-search"),$(m).autocomplete({data:g,limit:5,onAutocomplete:function(e){q.to_channel(e,!1)}}),document.getElementById("preloader").style.display="none",$("#channels").fadeIn(800),$("#searchFrontpage").focus(),n=0},sortFunction:function(e,t){var a=e.viewers,n=t.viewers,i=e.count,o=t.count;return an?-1:io?-1:0},sortFunction_active:function(e,t){var a=e.accessed,n=t.accessed,i=e.count,o=t.count;return an?-1:io?-1:0},getCookie:function(e){for(var t=e+"=",a=document.cookie.split(";"),n=0;n=e.length||t>=20)&&(t=0);var a=e[t].id;if(void 0!==q.blob_list[t])setTimeout(function(){R&&($("#mega-background").css("background","url(data:image/png;base64,"+q.blob_list[t]+")"),$("#mega-background").css("background-size","200%"),$("#mega-background").css("opacity",1),$(".desktop-search").attr("placeholder",e[t].channel))},500);else{var n=new Image;n.src="/public/images/thumbnails/"+a+".jpg",n.onerror=function(){$.ajax({type:"POST",data:{id:a},url:"/public/php/imageblob.php",success:function(a){q.blob_list.push(a),setTimeout(function(){$("#mega-background").css("background","url(data:image/png;base64,"+a+")"),$("#mega-background").css("background-size","200%"),$("#mega-background").css("opacity",1),$(".desktop-search").attr("placeholder",e[t].channel)},500)}})},n.onload=function(){$("#mega-background").css("background","url("+n.src+")"),$("#mega-background").css("background-size","200%"),$("#mega-background").css("opacity",1),$(".desktop-search").attr("placeholder",e[t].channel)}}D=setTimeout(function(){50==q.times_rotated&&R?(q.times_rotated=0,t=0,V.emit("frontpage_lists")):R&&(q.times_rotated+=1,q.add_backdrop(e,t+1))},6e3)},start_snowfall:function(){setTimeout(function(){var e=Math.floor(Math.random()*window.innerWidth+1),t=document.createElement("div"),a=document.getElementsByClassName("mega")[0];t.className="snow",t.style.left=e+"px",t.style.top="0px",a.appendChild(t),q.fall_snow(t),q.start_snowfall()},800)},fall_snow:function(e){e.style.top=parseInt(e.style.top.replace("px",""))+2+"px",parseInt(e.style.top.replace("px",""))visibility"+e)},to_channel:function(e,t){$("#channel-load").css("display","block"),window.scrollTo(0,0),R=!1,clearTimeout(D),Y.mobilecheck()&&(Y.log("removing all listeners"),V.removeAllListeners()),$("body").css("background-color","#2d2d2d"),$("#offline-mode").tooltip("remove"),pe=1,$.ajax({url:e+"/public/php/index.php",success:function(n){""!==mt.player&&V.emit("change_channel",{channel:J.toLowerCase()}),$("#frontpage_player").empty(),Y.mobilecheck()&&(Y.log("disconnecting"),V.disconnect()),t||(window.history.pushState("to the channel!","Title","/"+e),""==Ye&&(Ye=e),""==He&&(He=e),window.chan=e);var i=$("
    "+n+"
    ");$("select").material_select("destroy"),$(".mega").remove(),$(".mobile-search").remove(),$("main").attr("class","container center-align main"),$("body").attr("id","channelpage"),$("header").html($(i.find("header")).html()),0===$("#alreadychannel").length||Y.mobilecheck()||void 0===mt.player?$("main").html($(i.find("main")).html()):($("#main-row").append($(i.find("#playlist").wrap("
    ").parent().html())),$("#video-container").append($(i.find("#main_components").wrap("
    ").parent().html())),$("#main-row").append("
    "),$("#player").removeClass("player_bottom"),$("#main-row").removeClass("frontpage_modified_heights"),$("#main_section_frontpage").remove(),$("#closePlayer").remove(),$("#player_bottom_overlay").remove()),$("#search").attr("placeholder","Find song on YouTube..."),$(".page-footer").addClass("padding-bottom-novideo"),xe=!0,1==$("#alreadychannel").length?a():(pt=!0,a()),0===$("#alreadyfp").length&&$("head").append("
    ")}})}};String.prototype.capitalizeFirstLetter=function(){return this.charAt(0).toUpperCase()+this.slice(1)};var Y={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(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|Android|Silk|lge |maemo|midp|mmp|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|phone)|xda|xiino/i.test(navigator.userAgent)||/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(navigator.userAgent.substr(0,4)))&&(e=!0),e},predicate:function(){for(var e,t,a,n=[],i=arguments.length,o=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()-me>=2*ge&&(V.removeAllListeners(),V.disconnect(),V.connect(),mt.setup_all_listeners()),me=Date.now(),setTimeout(Y.sample,ge)},loadjsfile:function(e){if(se.indexOf("["+e+"]")==-1){var t=document.createElement("script");t.setAttribute("type","text/javascript"),t.setAttribute("src",e),document.getElementsByTagName("head")[0].appendChild(t),se+="["+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},secondsToOther:function(e){var t=e,a=Math.floor(t/60);return t-=60*a,[a,t]},rgbToHsl:function(e,t){r=e[0],g=e[1],b=e[2],r/=255,g/=255,b/=255;var a,n,i=Math.max(r,g,b),o=Math.min(r,g,b),s=(i+o)/2;if(i==o)a=n=0;else{var l=i-o;switch(n=s>.5?l/(2-i-o):l/(i+o),i){case r:a=(g-b)/l+(g.5&&t?s=.4: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"#"+Y.componentToHex(e)+Y.componentToHex(t)+Y.componentToHex(a)},upperFirst:function(e){return e.substring(0,1).toUpperCase()+e.substring(1).toLowerCase()},addClass:function(e,t){Y.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"),$.ajax({type:"POST",data:{from:e,message:t},url:"/public/php/mail.php",success:function(e){"success"==e?($("#contact-container").empty(),$("#contact-container").html("Mail has been sent, we'll be back with you shortly.")):($("#contact-container").empty(),$("#contact-container").html("Something went wrong, sorry about that. You could instead try with your own mail-client: contact@zoff.no"))}}))}};$(document).on("submit","#contact-form",function(e){e.preventDefault();var t=$("#contact-form-message").val(),a=$("#contact-form-from").val();Y.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=U.page&&n div:nth-child("+n+")").after(o);var s=$("#wrapper").children()[n];$(s).css("display",i),"block"==i&&$("#wrapper").children().length>=U.page+U.can_fit+1?$($("#wrapper").children()[U.page+U.can_fit]).css("display","none"):n=0?$($("#wrapper").children()[U.page]).css("display","block"):$("#wrapper").children().length>U.page+U.can_fit&&$($("#wrapper").children()[U.page+U.can_fit-1]).css("display","block"),a&&U.page>0&&$($("#wrapper").children()[U.page-1]).css("display","none"),t&&setTimeout(function(){$(s).css("height",U.element_height)},5)}},populate_list:function(e,t){if(Y.mobilecheck()||$e?$e?(U.can_fit=Math.round($("#wrapper").height()/91)+1,U.element_height=$("#wrapper").height()/U.can_fit-4):(U.can_fit=Math.round(($(window).height()-$(".tabs").height()-$("header").height()-66)/71)+1,U.element_height=($(window).height()-$(".tabs").height()-$("header").height()-66)/U.can_fit-6):(U.can_fit=Math.round($("#wrapper").height()/71)+1,U.element_height=$("#wrapper").height()/U.can_fit-5.3),U.element_height<55.2&&(U.element_height=55.2),void 0===Q&&(Q=$("#list-song-html").html()),tt=e,je&&!t)for(var a=0;a1?($.each(tt,function(e,t){if(!t.now_playing){var a=U.generateSong(t,!1,ve,!0,!1,"",!0);$("#wrapper").append(a)}}),$("#wrapper").children().length>U.can_fit&&!$("#pageButtons").length?($('
    first_pagefirst_pagenavigate_before prevnavigate_before prev 1 next navigate_nextnext navigate_nextlast_pagelast_page
    ').insertAfter("#wrapper"),$(".prev_page").css("display","none"),$(".first_page").css("display","none"),$(".next_page_hide").css("display","none"),$(".last_page_hide").css("display","none")):$("#pageButtons").length||($('
    first_pagefirst_pagenavigate_before prevnavigate_before prev 1 next navigate_nextnext navigate_nextlast_pagelast_page
    ').insertAfter("#wrapper"),$(".prev_page").css("display","none"),$(".next_page").css("display","none"),$(".last_page").css("display","none"),$(".first_page").css("display","none"),$(".next_page_hide").css("display","inline-flex"),$(".prev_page_hide").css("display","inline-flex")),U.dynamicContentPage(-10)):(U.empty=!0,$("#wrapper").html("The playlist is empty."),$("#pageButtons").length||$('
    first_pagefirst_pagenavigate_before prevnavigate_before prev 1 next navigate_nextnext navigate_nextlast_pagelast_page
    ').insertAfter("#wrapper"),$(".prev_page").css("display","none"),$(".next_page").css("display","none"),$(".last_page").css("display","none"),$(".last_page_hide").css("display","inline-flex"),$(".first_page").css("display","none"),$(".next_page_hide").css("display","inline-flex"),$(".prev_page_hide").css("display","inline-flex")),$("#settings").css("visibility","visible"),$("#settings").css("opacity","1"),$("#wrapper").css("opacity","1")},dynamicContentPageJumpTo:function(e){e*=U.can_fit,(e>U.page||e0&&"none"==$(".prev_page").css("display")&&($(".prev_page").css("display","inline-flex"),$(".prev_page_hide").css("display","none"),$(".first_page").css("display","inline-flex"),$(".first_page_hide").css("display","none")),U.page+U.can_fit>=$("#wrapper").children().length&&($(".next_page_hide").css("display","inline-flex"),$(".next_page").css("display","none"),$(".last_page_hide").css("display","inline-flex"),$(".last_page").css("display","none")),$("#pageNumber").html(U.page/U.can_fit+1))},dynamicContentPage:function(e){1==e?($("#wrapper").children().slice(U.page,U.page+U.can_fit).hide(),U.page=U.page+U.can_fit,$("#wrapper").children().slice(U.page,U.page+U.can_fit).show(),U.page>0&&"none"==$(".prev_page").css("display")&&($(".prev_page").css("display","inline-flex"),$(".prev_page_hide").css("display","none"),$(".first_page").css("display","inline-flex"),$(".first_page_hide").css("display","none")),U.page+U.can_fit>=$("#wrapper").children().length&&($(".next_page_hide").css("display","inline-flex"),$(".next_page").css("display","none"),$(".last_page_hide").css("display","inline-flex"),$(".last_page").css("display","none"))):10==e?($("#wrapper").children().slice(U.page,U.page+U.can_fit).hide(),U.page=Math.floor(($("#wrapper").children().length-1)/U.can_fit)*U.can_fit,$("#wrapper").children().slice(U.page,U.page+U.can_fit).show(),U.page>0&&"none"==$(".prev_page").css("display")&&($(".prev_page").css("display","inline-flex"),$(".prev_page_hide").css("display","none"),$(".first_page").css("display","inline-flex"),$(".first_page_hide").css("display","none")),U.page+U.can_fit>=$("#wrapper").children().length&&($(".next_page_hide").css("display","inline-flex"),$(".next_page").css("display","none"),$(".last_page_hide").css("display","inline-flex"),$(".last_page").css("display","none"))):e==-10?($("#wrapper").children().slice(U.page,U.page+U.can_fit).hide(),U.page=0,$("#wrapper").children().slice(U.page,U.page+U.can_fit).show(),0==U.page&&"none"!=$(".prev_page").css("display")?($(".prev_page").css("display","none"),$(".prev_page_hide").css("display","inline-flex"),$(".first_page").css("display","none"),$(".first_page_hide").css("display","inline-flex")):"none"==$(".prev_page").css("display")?($(".prev_page_hide").css("display","inline-flex"),$(".first_page_hide").css("display","inline-flex")):($(".prev_page_hide").css("display","none"),$(".first_page_hide").css("display","none")),U.page+U.can_fit<$("#wrapper").children().length&&($(".next_page_hide").css("display","none"),$(".next_page").css("display","inline-flex"),$(".last_page_hide").css("display","none"),$(".last_page").css("display","inline-flex"))):($("#wrapper").children().slice(U.page-U.can_fit,U.page).show(),$("#wrapper").children().slice(U.page,U.page+U.can_fit).hide(),U.page=U.page-U.can_fit<0?0:U.page-U.can_fit,0==U.page&&"none"!=$(".prev_page").css("display")?($(".prev_page").css("display","none"),$(".prev_page_hide").css("display","inline-flex"),$(".first_page").css("display","none"),$(".first_page_hide").css("display","inline-flex")):"none"==$(".prev_page").css("display")?($(".prev_page_hide").css("display","inline-flex"),$(".first_page_hide").css("display","inline-flex")):($(".prev_page_hide").css("display","none"),$(".first_page_hide").css("display","none")),U.page+U.can_fit<$("#wrapper").children().length&&($(".next_page_hide").css("display","none"),$(".next_page").css("display","inline-flex"),$(".last_page_hide").css("display","none"),$(".last_page").css("display","inline-flex"))),$("#pageNumber").html(U.page/U.can_fit+1)},added_song:function(e){var t;if(void 0!=e){if(0!==tt.length&&(t=tt.pop()),tt.push(e),U.sortList(),t&&tt.push(t),$("#suggested-"+e.id).length>0){qe-=1,qe<0&&(qe=0);var a=qe>9?"9+":qe;$(".suggested-link span.badge.new.white").hasClass("hide")||0!=a||$(".suggested-link span.badge.new.white").addClass("hide"),$(".suggested-link span.badge.new.white").text(a)}$("#suggested-"+e.id).remove(),U.empty&&(U.empty=!1),$("#empty-channel-message").remove(),U.insertAtIndex(e,!0),$($("#wrapper").children()[U.page+U.can_fit]).css("display","none"),$("#wrapper").children().length>U.page+U.can_fit?($(".next_page_hide").css("display","none"),$(".next_page").removeClass("hide"),$(".last_page_hide").css("display","none"),$(".next_page").css("display","inline-flex"),$(".last_page").css("display","inline-flex")):($(".next_page_hide").css("display","inline-flex"),$(".next_page").css("display","none"))}},deleted_song:function(e,t){try{var a=U.getIndexOfSong(e),n=$("#wrapper").children()[a];t||(n.style.height=0),a=0?($($("#wrapper").children()[U.page]).css("height",0),$($("#wrapper").children()[U.page]).css("display","block"),$($("#wrapper").children()[U.page]).css("height",U.element_height)):$("#wrapper").children().length>U.page+U.can_fit&&($($("#wrapper").children()[U.page+U.can_fit]).css("height",0),$($("#wrapper").children()[U.page+U.can_fit]).css("display","block"),$($("#wrapper").children()[U.page+U.can_fit]).css("height",U.element_height)),U.page>=$("#wrapper").children().length-1?(U.dynamicContentPage(-1),$(".next_page_hide").css("display","inline-flex"),$(".next_page").css("display","none"),$(".last_page_hide").css("display","inline-flex"),$(".last_page").css("display","none")):U.page+U.can_fit+1>=$("#wrapper").children().length-1&&($(".next_page_hide").css("display","inline-flex"),$(".next_page").css("display","none"),$(".last_page_hide").css("display","inline-flex"),$(".last_page").css("display","none")),setTimeout(function(){t||$("#"+e).remove(),tt.splice(U.getIndexOfSong(e),1),Ve&&mt.sendNext({title:tt[0].title,videoId:tt[0].id})},305),t&&$("#"+e).remove()}catch(t){tt.splice(U.getIndexOfSong(e),1),U.empty||($("#wrapper").children()[$("#wrapper").children().length-1].remove(),a=0?$($("#wrapper").children()[U.page-1]).css("display","block"):$("#wrapper").children().length>U.page+U.can_fit&&$($("#wrapper").children()[U.page+(U.can_fit-1)]).css("display","block"),Ve&&mt.sendNext({title:tt[0].title,videoId:tt[0].id}))}tt.length<=2&&(U.empty=!0,$("#wrapper").html("The playlist is empty.")),$("#suggested-"+e).remove(),U.page+U.can_fit<$("#wrapper").children().length+1,U.page>=$("#wrapper").children().length&&U.dynamicContentPage(-1),yt.checkUserEmpty()},voted_song:function(e,t){var a=U.getIndexOfSong(e),n=tt[a];tt[a].votes+=1,tt[a].added=t,U.sortList(),$("#"+e).remove(),U.insertAtIndex(n,!1)},song_change:function(e,t){try{var a=tt.length-1;$("#wrapper").children()[0].remove(),0===$("#wrapper").children().length&&(U.empty=!0,$("#wrapper").html("The playlist is empty.")),tt[0].now_playing=!0,tt[0].votes=0,tt[0].guids=[],tt[0].added=e,t?delete tt[a]:tt[a].now_playing=!1,Y.log("---------------------------"),Y.log("---SONG ON FIRST INDEX-----"),Y.log(tt[0]),Y.log("---------------------------"),tt.push(tt.shift()),t||U.insertAtIndex(tt[a-1],!1,!0)}catch(e){}},vote:function(e,t){return!je||"del"==t&&Z&&!W&&""!=oe?V.emit("vote",{channel:J,id:e,type:t,adminpass:oe}):"pos"==t?U.voted_song(e,(new Date).getTime()/1e3):U.deleted_song(e),!0},skip:function(){return je?mt.playNext():V.emit("skip",{pass:oe,id:ot,channel:J.toLowerCase()}),!0},exportToSpotify:function(){$.ajax({type:"GET",url:"https://api.spotify.com/v1/me",headers:{Authorization:"Bearer "+Te.access_token},success:function(e){var t=e.id;$("#playlist_loader_export").removeClass("hide"),$(".exported-list-container").removeClass("hide"),$.ajax({type:"POST",url:"https://api.spotify.com/v1/users/"+t+"/playlists",headers:{Authorization:"Bearer "+Te.access_token,"Content-Type":"application/json"},data:JSON.stringify({name:J.toLowerCase()+" - Zoff",public:!0}),success:function(e){var a=e.id;$.each(tt,function(e,n){U.searchSpotify(n,a,t)})}})}})},searchSpotify:function(e,t,a){var n=e.title,i=e.title.toLowerCase().replace("-"," ");i=i.replace("official hd video",""),i=i.replace("unofficial video",""),i=i.replace("studio footage",""),i=i.replace("great song",""),i=i.replace("-"," "),i=i.replace("-"," "),i=i.replace(" hq "," "),i=i.replace("lyric video",""),i=i.replace("lyrics video",""),i=i.replace("album version",""),i=i.replace("drive original movie soundtrack",""),i=i.replace("original movie soundtrack",""),i=i.replace("live sessions",""),i=i.replace("audio only",""),i=i.replace("audio",""),i=i.replace("(new)",""),i=i.replace(" by "," "),i=i.replace(" vs "," "),i=i.replace("(full)"," "),i=i.replace("(video)"," "),i=i.replace("&"," "),i=i.replace("with lyrics",""),i=i.replace("lyrics",""),i=i.replace("w/",""),i=i.replace("w/",""),i=i.replace("official video",""),i=i.replace("studio version",""),i=i.replace("official music video",""),i=i.replace("music video",""),i=i.replace("musicvideo",""),i=i.replace("original video",""),i=i.replace("full version",""),i=i.replace("full song",""),i=i.replace("(official)",""),i=i.replace("official",""),i=i.replace("(original)",""),i=i.replace("("," "),i=i.replace(")"," "),i=i.replace("feat."," "),i=i.replace("feat"," "),i=i.replace("ft."," "),i=i.replace("["," "),i=i.replace("]"," "),i=i.replace(" free ",""),i=i.replace(" hd ",""),i=i.replace("original mix"," "),i=i.replace("radio edit"," "),i=i.replace("pop version"," "),i=i.replace(" "," ").replace(" "," ").replace(" "," ").replace(" "," ").replace(" "," ").replace(" "," "),i=encodeURIComponent(i),$.ajax({type:"GET",url:"https://api.spotify.com/v1/search?q="+i+"&type=track",headers:{Authorization:"Bearer "+Te.access_token},async:!0,statusCode:{429:function(t){console.log(t.getAllResponseHeaders());var a=t.getResponseHeader("Retry-After");console.log(a),a||(a=5),a=parseInt(a,10),Y.log("Retry-After",a),setTimeout(function(){U.searchSpotify(e)},1e3*a)}},error:function(t){if(429==t.status){console.log(t.getAllResponseHeaders());var a=t.getResponseHeader("Retry-After");console.log(a),a||(a=5),a=parseInt(a,10),Y.log("Retry-After",a),setTimeout(function(){U.searchSpotify(e)},1e3*a)}},success:function(e){var o=!1;if($.each(e.tracks.items,function(e,t){if(t.name=t.name.toLowerCase(),t.name=t.name.replace("("," "),t.name=t.name.replace(")"," "),t.name=t.name.replace("["," "),t.name=t.name.replace("]"," "),t.name=t.name.replace("-"," "),t.name=t.name.replace("-"," "),t.name=t.name.replace("-"," "),t.name=t.name.replace("original mix"," "),t.name=t.name.replace("album version"," "),t.name=t.name.replace("abum version"," "),t.name=t.name.replace("feat."," "),t.artists[0].name=t.artists[0].name.replace("feat."," "),t.artists[0].name=t.artists[0].name.replace("feat"," "),t.name=t.name.replace("feat"," "),t.name=t.name.replace("ft."," "),t.name=t.name.replace("radio edit"," "),t.name=t.name.replace("pop version"," "),t.name=t.name.replace(" "," ").replace(" "," ").replace(" "," ").replace(" "," ").replace(" "," ").replace(" "," ").replace(" "," ").replace(" "," "),t.artists[0].name=t.artists[0].name.replace(" "," ").replace(" "," ").replace(" "," ").replace(" "," ").replace(" "," ").replace(" "," ").replace(" "," ").replace(" "," ")," "==t.name.substring(t.name.length-1)&&(t.name=t.name.substring(0,t.name.length-1)),"."==t.name.substring(t.name.length-1)&&"."!=i.substring(i.length-1)&&(t.name=t.name.substring(0,t.name.length-1)),decodeURIComponent(i).indexOf(t.artists[0].name.toLowerCase())>=0&&decodeURIComponent(i).indexOf(t.name.toLowerCase())>=0)return o=!0,U.uris.push(t.uri),Y.log("Found",i),!1;for(var a=t.name.split(" "),e=0;e=0||"&"==a[e]&&i.indexOf("and")>=0)&&i.indexOf(a[e])<0)return!0; -return o=!0,U.uris.push(t.uri),Y.log("Found",i),!1}),o||(U.not_found.push(n),U.num_songs=U.num_songs+1,Y.log("Didn't find",n)),U.num_songs+U.uris.length==tt.length){if(U.uris.length>100){for(;U.uris.length>100;)U.addToSpotifyPlaylist(U.uris.slice(0,100),t,a),U.uris=U.uris.slice(100,U.uris.length);U.addToSpotifyPlaylist(U.uris,t,a),$("#playlist_loader_export").addClass("hide")}else U.addToSpotifyPlaylist(U.uris,t,a),$("#playlist_loader_export").addClass("hide");$(".exported-list").append(""+J+""),$.each(U.not_found,function(e,t){var a=$("
    "+Ee+"
    ");a.find(".extra-add-text").attr("value",t),a.find(".extra-add-text").attr("title",t),$(".not-exported-container").append(a.html())}),$(".not-exported").removeClass("hide"),$(".spotify_export_button").css("display","block")}}})},addToSpotifyPlaylist:function(e,t,a){$.ajax({type:"POST",url:"https://api.spotify.com/v1/users/"+a+"/playlists/"+t+"/tracks",headers:{Authorization:"Bearer "+Te.access_token,"Content-Type":"application/json"},data:JSON.stringify({uris:e}),error:function(n){setTimeout(function(){U.addToSpotifyPlaylist(e,t,a)},3e3)},success:function(e){Y.log("Added songs")}})},exportToYoutube:function(){var e="https://www.googleapis.com/youtube/v3/playlists?part=snippet";$(".exported-list-container").removeClass("hide"),$("#playlist_loader_export").removeClass("hide"),$.ajax({type:"POST",url:e,headers:{Authorization:"Bearer "+Ae.access_token,"Content-Type":"application/json"},data:JSON.stringify({snippet:{title:Y.upperFirst(J.toLowerCase()),description:"Playlist exported from zoff"}}),success:function(e){var t=0,a=e.id,n="https://www.googleapis.com/youtube/v3/playlistItems?part=snippet";U.addToYoutubePlaylist(a,tt,t,n)},error:function(e){Y.log(e)}})},addToYoutubePlaylist:function(e,t,a,n){var i=JSON.stringify({snippet:{playlistId:e,resourceId:{kind:"youtube#video",videoId:t[a].id}}});$.ajax({type:"POST",url:n,headers:{Authorization:"Bearer "+Ae.access_token,"Content-Type":"application/json"},data:i,success:function(i){Y.log("Added video: "+t[a].id+" to playlist id "+e),a==t.length-1?(Y.log("All videoes added!"),Y.log("url: https://www.youtube.com/playlist?list="+e),$(".exported-list").append(""+J+""),$("#playlist_loader_export").addClass("hide"),$(".current_number").addClass("hide")):($(".current_number").removeClass("hide"),$(".current_number").text(a+1+" of "+t.length),U.addToYoutubePlaylist(e,t,a+1,n))}})},importOldList:function(e){var t="",a=0;playlist_url="lists/"+e+".json",st=$.parseJSON($.ajax({type:"GET",url:playlist_url,async:!1}).responseText),$.each(st.songs,function(e,n){t+=n.id+",",a>45&&(ft.addVideos(t),t="",a=0),a++}),ft.addVideos(t),document.getElementById("search").value=""},sortList:function(){tt.sort(Y.predicate({name:"votes",reverse:!0},{name:"added",reverse:!1},{name:"title",reverse:!1}))},show:function(){Y.mobilecheck()||(X?(X=!1,$("#toptitle").empty(),$("#chan").addClass("bigChan"),$("#chan").html("zoff.me/"+J.toLowerCase())):(X=!0,$("#toptitle").html("Zoff"),$("#chan").removeClass("bigChan"),$("#chan").html(J)))},generateSong:function(e,t,a,n,i,o,s){void 0===Q&&(Q=$("#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=$("
    "+Q+"
    "),m="style";if(t?g.find("#list-song").css("height",0):g.find(".list-song").css("height",U.element_height),W||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>=U.can_fit&&s||"none"==o)&&g.find(".card").css("display","none"),l=".vote-container",r="delete_button";var h=Y.secondsToOther(e.duration);g.find(".card-duration").text(Y.pad(h[0])+":"+Y.pad(h[1]))}else if(!n){g.find(".vote-text").text(""),g.find(".card-duration").text(Y.pad(e.duration[0])+":"+Y.pad(e.duration[1]));var f="user";l=".add-suggested",i?r="del_user_suggested":(r="del_suggested",f="system"),g.find(".vote-container").attr("class","clickable add-suggested"),g.find(".add-suggested").attr("title",d),g.find(".delete_button").addClass(r),g.find(l).attr("data-video-title",d),g.find(l).attr("data-video-length",e.length),g.find(l).attr("data-added-by",f),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"))}return 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){try{return indexes=$.map(tt,function(t,a){if(t.id==e)return a}),indexes[0]}catch(e){}},scrollTop:function(){$("#wrapper").scrollTop(0)},scrollBottom:function(){$("#wrapper").scrollTop($("#wrapper")[0].scrollHeight)}},J=void 0===window.chan?$("#chan").html():window.chan,W=!0,Z=0,X=!0,Q=$("#list-song-html").html(),K=!1,ee="***REMOVED***",te=!1,ae=/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)?)?/,ne=[],ie=0,R=1,oe="",se="",le=!1,re=1,ce=!1,de=!1,pe=1,ue=!1,ge=6e3,me=Date.now(),he=!1,fe=!1,ye=-1,ve=!1,$e=!1,_e=!0,we=!1,be=!1,ke=!1,Ce=!1,xe=!1,Te={},Se=!1,Ie="",Ee="",Be=300,Le=600,Me="&autoplay",Ne=!1,Ae={},Pe=!1,Ve=!1,De="808080",ze=!1,Oe=!1,je=!1,Re=!1,qe=0,Ye="",He="",Fe=!1,Ge=[],Ue=0;if(void 0===localStorage.debug){var Je=!1;localStorage.debug=Je}var We,Ze,Xe,Qe,Ke,et,tt,ne,at,nt,it,re,ot,st,lt,rt,ct,V,dt={"sync disconnect on unload":!0,secure:!0,"force new connection":!0},pt=!1,ut=!1;try{navigator.serviceWorker.getRegistration("/").then(function(e){e.unregister()})}catch(e){}$().ready(function(){pt||"/"==window.location.pathname?ut||"/"!=window.location.pathname||t():a(),V.on("connect",function(){Ne&&(Ne=!1,$(".connect_error").fadeOut(function(){$(".connect_error").remove(),Materialize.toast("Connected!",2e3,"green lighten"),void 0!==j.get_pass(J.toLowerCase())&&""!==j.get_pass(J.toLowerCase())&&V.emit("password",{password:j.crypt_pass(j.get_pass(J.toLowerCase())),channel:J.toLowerCase()})}))}),o();try{P=$.ajax({type:"GET",url:"https://api.github.com/users/zoff-music/received_events",async:!1}).responseText,P=$.parseJSON(P),$("#latest-commit").html("Latest Commit:
    "+P[0].created_at.substring(0,10)+": "+P[0].actor.display_login+"
    "+P[0].payload.commits[0].sha.substring(0,10)+": "+P[0].payload.commits[0].message+"U.can_fit||ee&&$($("#wrapper").children()[U.page+e]).css("display","none"),U.can_fit=e,U.element_height=$("#wrapper").height()/U.can_fit-5.3,$(".list-song").css("height",U.element_height+"px"),$("#player_overlay").width($("#player").width()+1),k(),$("#controls").length>0&&!Y.mobilecheck()?$("#seekToDuration").css("top",$("#controls").position().top-55):$("#controls").length>0&&$("#seekToDuration").css("top",$("#controls").position().top-20)}}),$(document).on("click",".result-object",function(e){var t=$(e.target),a=t.prop("outerHTML").substring(0,4);if("9?"9+":qe;$(".suggested-link span.badge.new.white").hasClass("hide")||0!=o||$(".suggested-link span.badge.new.white").addClass("hide"),$(".suggested-link span.badge.new.white").text(o)}$("#suggested-"+t).remove()}),$(document).on("click",".del_suggested",function(e){var t=$(this).attr("data-video-id");$("#suggested-"+t).remove()}),$(document).on("click",".del_user_suggested",function(e){var t=$(this).attr("data-video-id");$("#suggested-"+t).remove(),qe-=1,qe<0&&(qe=0);var a=qe>9?"9+":qe;$(".suggested-link span.badge.new.white").hasClass("hide")||0!=a||$(".suggested-link span.badge.new.white").addClass("hide"),$(".suggested-link span.badge.new.white").text(a),U.vote(t,"del")}),$(document).on("click","#toast-container",function(){$(this).fadeOut(function(){$(this).remove()})}),$(document).on("click","#embed-area",function(){this.select()}),$(document).on("click",".brand-logo-navigate",function(e){e.preventDefault(),window.history.pushState("to the frontpage!","Title","/"),N()}),$(document).on("click","#player_bottom_overlay",function(){q.to_channel(J.toLowerCase(),!1)}),$(document).keydown(function(e){"/"!=window.location.pathname&&(91==e.keyCode||17==e.keyCode?ze=!0:ze&&70==e.keyCode?(ze=!1,Oe=!Oe,e.preventDefault(),Oe?($("#find_div").toggleClass("hide"),$("#find_input").focus()):($("#find_div").toggleClass("hide"),$("#find_input").val(""),$("#find_input").blur(),$(".highlight").removeClass("highlight"),Ge=[],Ue=0)):ze=!1)}),$(document).keyup(function(e){91!=e.keyCode&&17!=e.keyCode||Oe||(ze=!1)}),$(document).on("submit","#find_form",function(e){if(e.preventDefault(),0==Ge.length){var t=this;Ue=0,Ge=$.map(tt,function(e,a){if(e.title.toLowerCase().indexOf(t.find_value.value.toLowerCase())>=0)return a})}else Ue+=1,Ge.length-10&&Ge[Ue]!=tt.length-1){$(".highlight").removeClass("highlight");var a=Math.floor(Ge[Ue]/U.can_fit);$($("#wrapper").children()[Ge[Ue]]).addClass("highlight"),U.dynamicContentPageJumpTo(a)}else Y.log("none found")});var gt={id:"",get_input:function(e){""===gt.id?gt.set_id(e.toLowerCase()):gt.set_channel(e.toLowerCase())},set_id:function(e){gt.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","inline-block"),$(".slider-vol-mobile").attr("style","display: inline-block !important")},set_channel:function(e){V.emit("id",{id:gt.id,type:"channel",value:e})},play_remote:function(){V.emit("id",{id:gt.id,type:"play",value:"mock"})},pause_remote:function(){V.emit("id",{id:gt.id,type:"pause",value:"mock"})},skip_remote:function(){V.emit("id",{id:gt.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){V.emit("id",{id:gt.id,type:"volume",value:t.value}),Y.log("volume")}})}},mt={loaded:!0,before_load:"",after_load:"",player:"",stopInterval:!1,fireplace:"",youtube_listener:function(e){var t;try{t=mt.player.getPlayerState()}catch(e){t=null}if(!(!je&&(null!=t||xe)||je&&(null==t||xe)||!je&&(null==t||xe)||je&&t==-1)||je&&He==J)we||mt.durationSetter(),duration=mt.player.getDuration();else{He=J,xe=!1,mt.loaded=!1,Y.log("--------youtube_listener--------"),Y.log("Received: "),Y.log(e),Y.log("paused variable: "+de),Y.log("mobile_beginning variable: "+Qe);try{Y.log("getVideoUrl(): "+mt.player.getVideoUrl().split("v=")[1])}catch(e){}if(Y.log("video_id variable: "+ot),Y.log("---------------------------------"),e.np){if(de)mt.getTitle(e.np[0].title,re),Y.mobilecheck()||mt.notifyUser(e.np[0].id,e.np[0].title),Ve||mt.stopVideo(),ot=e.np[0].id,ne=e.conf[0],time=e.time,lt=time-ne.startTime,rt=e.np[0].title,duration=e.np[0].duration,mt.setBGimage(ot);else if(!de){void 0===ct?ct=e.np[0].id:ct!=ot&&(ct=ot),ot=e.np[0].id,ne=e.conf[0],time=e.time,lt=time-ne.startTime,rt=e.np[0].title,duration=e.np[0].duration,Qe&&Y.mobilecheck()&&0===lt&&!Ve&&(lt=1);try{tt[0].id!=ot||Qe||U.song_change(tt[0].added),yt.fetchYoutubeSuggests(ot)}catch(e){}if(mt.getTitle(rt,re),mt.setBGimage(ot),le&&!window.MSStream)try{(mt.player.getVideoUrl().split("v=")[1]!=ot||Ve)&&(mt.loadVideoById(ot),Y.mobilecheck()||mt.notifyUser(ot,rt),mt.seekTo(lt),de&&!Ve&&mt.pauseVideo()),de||(Qe&&!Ve||mt.playVideo(),we||mt.durationSetter()),(mt.player.getDuration()>lt||0===mt.player.getDuration()||Ve||mt.player.getCurrentTime()!=lt)&&mt.seekTo(lt),mt.after_load=ot,mt.loaded||setTimeout(function(){mt.loaded=!0},500)}catch(e){Ve&&(mt.loadVideoById(ot),mt.seekTo(lt)),we||Ve||mt.durationSetter()}else mt.getTitle(rt,re)}}else{document.getElementById("song-title").innerHTML="Empty channel. Add some songs!",window.MSStream||Ve||$("#player_overlay").toggleClass("hide");try{Ve||mt.stopVideo()}catch(e){}}}},onPlayerStateChange:function(e){Y.log("-------onPlayerStateChange------"),Y.log("New state\nState: "),Y.log(e);try{Y.log("Duration: "+mt.player.getDuration(),"Current time: "+mt.player.getCurrentTime()),Y.log("getVideoUrl(): "+mt.player.getVideoUrl().split("v=")[1])}catch(e){}switch(Y.log("video_id variable: "+ot),Y.log("---------------------------------"),e.data){case-1:break;case 0:ue=!1,de=!1,je?mt.playNext():V.emit("end",{id:ot,channel:J.toLowerCase()});break;case 1:ue=!0,beginning&&Y.mobilecheck()&&!Ve&&(mt.pauseVideo(),beginning=!1,Qe=!1,setTimeout(function(){Y.mobilecheck()&&($("#playpause").css("visibility","visible"),$("#playpause").css("pointer-events","all"),$("#channel-load").css("display","none"))},100)),$e||"/"==window.location.pathname||Ve||Y.addClass("#player_overlay","hide"),"/"!=window.location.pathname&&(1==document.getElementById("play").className.split(" ").length&&$("#play").toggleClass("hide"),2==document.getElementById("pause").className.split(" ").length&&$("#pause").toggleClass("hide")),de&&!je&&(V.emit("pos",{channel:J.toLowerCase()}),de=!1);break;case 2:Ve||(de=!0,"/"!=window.location.pathname&&ht.play_pause_show(),Qe=!0);break;case 3:}},playVideo:function(){Ve?(H.sendMessage("urn:x-cast:zoff.me",{type:"playVideo"}),chrome.cast.media.GenericMediaMetadata({metadataType:"GENERIC",title:rt,image:"https://img.youtube.com/vi/"+ot+"/mqdefault.jpg"}),chrome.cast.Image("https://img.youtube.com/vi/"+ot+"/mqdefault.jpg"),$("#pause").hasClass("hide")&&($("#play").toggleClass("hide"),$("#pause").toggleClass("hide"))):mt.player.playVideo()},pauseVideo:function(){Ve?(H.sendMessage("urn:x-cast:zoff.me",{type:"pauseVideo"}),$("#play").hasClass("hide")&&($("#play").toggleClass("hide"),$("#pause").toggleClass("hide"))):mt.player.pauseVideo()},seekTo:function(e){Ve?H.sendMessage("urn:x-cast:zoff.me",{type:"seekTo",seekTo:e}):je?mt.player.seekTo(0):mt.player.seekTo(e)},loadVideoById:function(e){Ve?(H.sendMessage("urn:x-cast:zoff.me",{type:"loadVideo",videoId:e}),chrome.cast.media.GenericMediaMetadata({metadataType:"GENERIC",title:rt,image:"https://img.youtube.com/vi/"+e+"/mqdefault.jpg"}),chrome.cast.Image("https://img.youtube.com/vi/"+e+"/mqdefault.jpg")):mt.player.loadVideoById(e,0)},stopVideo:function(){if(Ve)H.sendMessage("urn:x-cast:zoff.me",{type:"stopVideo"});else try{mt.player.stopVideo()}catch(e){}},setVolume:function(e){Ve?H.setVolume(e/100):mt.player.setVolume(e)},playNext:function(){var e=tt[0];ot=e.id,time=(new Date).getTime(),rt=e.title,duration=e.duration,mt.getTitle(rt,re),mt.setBGimage(ot),Ve?(H.sendMessage("urn:x-cast:zoff.me",{type:"loadVideo",videoId:ot}),chrome.cast.media.GenericMediaMetadata({metadataType:"GENERIC",title:rt,image:"https://img.youtube.com/vi/"+ot+"/mqdefault.jpg"}),chrome.cast.Image("https://img.youtube.com/vi/"+ot+"/mqdefault.jpg")):mt.loadVideoById(ot),U.channel_function({type:"song_change",time:time})},sendNext:function(e){Ve&&H.sendMessage("urn:x-cast:zoff.me",{type:"nextVideo",title:e.title,videoId:e.videoId})},getTitle:function(e,t){var a="visibility",n=decodeURIComponent(e);if("/"!=window.location.pathname){var i=document.getElementById("song-title"),o=document.getElementById("viewers");i.innerHTML=n,o.innerHTML=a+" "+t,i.title=n,Ve&&($("#player_overlay").css("background","url(https://img.youtube.com/vi/"+ot+"/hqdefault.jpg)"),$("#player_overlay").css("background-position","center"),$("#player_overlay").css("background-size","100%"),$("#player_overlay").css("background-color","black"),$("#player_overlay").css("background-repeat","no-repeat"))}document.title=n+" • Zoff / "+J},errorHandler:function(e){5==e.data||100==e.data||101==e.data||150==e.data?(curr_playing=mt.player.getVideoUrl().replace("https://www.youtube.com/watch?v=",""),V.emit("skip",{error:e.data,id:ot,pass:oe,channel:J.toLowerCase})):void 0!==ot&&mt.loadVideoById(ot)},onPlayerReady:function(e){try{beginning=!0,le=!0,window.MSStream||(Y.mobilecheck()?($("#playpause").css("visibility","hidden"),$("#playpause").css("pointer-events","none")):$("#channel-load").css("display","none"),$("#player").css("opacity","1"),$("#controls").css("opacity","1"),$(".playlist").css("opacity","1"),mt.loadVideoById(ot),!_e||Y.mobilecheck()&&!Ve||mt.playVideo(),we||mt.durationSetter(),$e?setTimeout(function(){mt.player.seekTo(lt),_e||(mt.player.pauseVideo(),ht.play_pause_show())},1e3):mt.seekTo(lt)),mt.readyLooks(),ht.initYoutubeControls(mt.player),ht.initSlider(),mt.player.setVolume(j.get_volume()),$(".video-container").removeClass("no-opacity"); -}catch(e){}},readyLooks:function(){mt.setBGimage(ot)},setBGimage:function(e){if(void 0!==e&&!$e){var t=new Image;t.onload=function(){var e=new ColorThief,a=e.getColor(t);"/"!=window.location.pathname&&(document.getElementsByTagName("body")[0].style.backgroundColor=Y.rgbToHsl(a,!0),$("meta[name=theme-color]").attr("content",Y.rgbToHex(a[0],a[1],a[2])))},t.crossOrigin="Anonymous",t.src="https://zoff.me:8081/https://img.youtube.com/vi/"+e+"/mqdefault.jpg"}},set_width:function(e){if($(".video-container").width(e),!Y.mobilecheck())if($(window).width()>769){var t=$(window).width()-$(".control-list").width()-$(".zbrand").outerWidth()-$(".brand-logo-navigate").outerWidth()-66;title_width=t,$(".title-container").width(title_width)}else $(".title-container").width("100%")},notifyUser:function(e,t){if(t=t.replace(/\\\'/g,"'").replace(/"/g,"'").replace(/&/g,"&"),"granted"===Notification.permission&&document.hidden){var a=new Notification("Now Playing",{body:t,icon:"https://i.ytimg.com/vi/"+e+"/mqdefault.jpg",iconUrl:"http://i.ytimg.com/vi/"+e+"/mqdefault.jpg"});a.onclick=function(e){window.focus(),this.cancel()},setTimeout(function(){a.close()},5e3)}},setup_all_listeners:function(){l(),s(),p(),u(),m()},onYouTubeIframeAPIReady:function(){mt.player=new YT.Player("player",{videoId:ot,playerVars:{rel:"0",wmode:"transparent",controls:"0",fs:"0",iv_load_policy:"3",theme:"light",color:"white",showinfo:0},events:{onReady:mt.onPlayerReady,onStateChange:mt.onPlayerStateChange,onError:mt.errorHandler}})},createFireplacePlayer:function(){mt.fireplace=new YT.Player("fireplace_player",{videoId:"L_LUpnjgPso",playerVars:{rel:"0",wmode:"transparent",controls:"0",fs:"0",iv_load_policy:"3",theme:"light",color:"white",showinfo:0},events:{onReady:mt.onFireplaceReady,onStateChange:mt.onFireplaceChange}})},onFireplaceReady:function(){mt.fireplace.playVideo()},onFireplaceChange:function(e){switch(e.data){case 0:mt.fireplace.seekTo(0),mt.fireplace.playVideo();break;case 2:mt.fireplace.playVideo()}},durationSetter:function(){if(void 0!==duration)try{mt.stopInterval||(we=!0),dMinutes=Math.floor(duration/60),dSeconds=duration-60*dMinutes,currDurr=void 0!==mt.player.getCurrentTime()?Math.floor(mt.player.getCurrentTime()):lt,currDurr>duration&&(currDurr=duration),minutes=Math.floor(currDurr/60),seconds=currDurr-60*minutes,document.getElementById("duration").innerHTML=Y.pad(minutes)+":"+Y.pad(seconds)+" / "+Y.pad(dMinutes)+":"+Y.pad(dSeconds),per=100/duration*currDurr,per>=100?per=100:0===duration&&(per=0),ce||$("#bar").width(per+"%")}catch(e){}mt.stopInterval||setTimeout(mt.durationSetter,1e3)},loadPlayer:function(){if(1==$("script[src='https://www.youtube.com/iframe_api']").length)try{mt.onYouTubeIframeAPIReady()}catch(e){console.error("Seems YouTube iFrame script isn't correctly loaded. Please reload the page.")}else at=document.createElement("script"),at.src="https://www.youtube.com/iframe_api",nt=document.getElementsByTagName("script")[0],nt.parentNode.insertBefore(at,nt)}},ht={stopInterval:!1,initYoutubeControls:function(){Y.mobilecheck()&&!window.MSStream&&$("#controls").appendTo("#playbar"),ht.initControls()},initControls:function(){document.getElementById("volume-button").addEventListener("click",ht.mute_video),document.getElementById("playpause").addEventListener("click",ht.play_pause),document.getElementById("volume-button-overlay").addEventListener("click",ht.mute_video),document.getElementById("playpause-overlay").addEventListener("click",ht.play_pause),document.getElementById("fullscreen").addEventListener("click",ht.fullscreen)},initSlider:function(){try{vol=j.get_volume()}catch(e){}$("#volume").slider({min:0,max:100,value:vol,range:"min",animate:!0,slide:function(e,t){ht.setVolume(t.value);try{j.set_volume(t.value)}catch(e){}}}),ht.choose_button(vol,!1)},fullscreen:function(){var e=document.getElementById("player"),t=e.requestFullScreen||e.mozRequestFullScreen||e.webkitRequestFullScreen;t&&t.bind(e)()},play_pause:function(){Ve?ht.play_pause_show():1==mt.player.getPlayerState()?(mt.pauseVideo(),Y.mobilecheck()&&!window.MSStream&&(document.getElementById("player").style.display="none",$(".video-container").toggleClass("click-through"),$(".page-footer").toggleClass("padding-bottom-extra"))):(2==mt.player.getPlayerState()||0===mt.player.getPlayerState()||5===mt.player.getPlayerState()&&Y.mobilecheck())&&(mt.playVideo(),Y.mobilecheck()&&!window.MSStream&&(document.getElementById("player").style.display="block",$(".video-container").toggleClass("click-through"),$(".page-footer").toggleClass("padding-bottom-extra")))},play_pause_show:function(){Ve?$("#play").hasClass("hide")?mt.pauseVideo():$("#pause").hasClass("hide")&&mt.playVideo():(1==document.getElementById("pause").className.split(" ").length&&($("#pause").toggleClass("hide"),$("#pause-overlay").toggleClass("hide")),2==document.getElementById("play").className.split(" ").length&&($("#play").toggleClass("hide"),$("#play-overlay").toggleClass("hide")))},settings:function(){$("#qS").toggleClass("hide")},changeQuality:function(e){mt.player.getPlaybackQuality!=e&&(mt.player.setPlaybackQuality(e),mt.player.getPlaybackQuality()),$("#qS").toggleClass("hide")},mute_video:function(){mt.player.isMuted()?(Ve&&H.sendMessage("urn:x-cast:zoff.me",{type:"unMute"}),mt.player.unMute(),ht.choose_button(mt.player.getVolume(),!1)):(Ve&&H.sendMessage("urn:x-cast:zoff.me",{type:"mute"}),ht.choose_button(0,!0),mt.player.mute())},setVolume:function(e){mt.setVolume(e),ht.choose_button(e,!1),mt.player.isMuted()&&mt.player.unMute()},choose_button:function(e,t){t?(1==document.getElementById("v-full").className.split(" ").length&&($("#v-full").toggleClass("hide"),$("#v-full-overlay").toggleClass("hide")),1==document.getElementById("v-medium").className.split(" ").length&&($("#v-medium").toggleClass("hide"),$("#v-medium-overlay").toggleClass("hide")),1==document.getElementById("v-low").className.split(" ").length&&($("#v-low").toggleClass("hide"),$("#v-low-overlay").toggleClass("hide")),2==document.getElementById("v-mute").className.split(" ").length&&($("#v-mute").toggleClass("hide"),$("#v-mute-overlay").toggleClass("hide"))):e>=0&&e<=33?(1==document.getElementById("v-full").className.split(" ").length&&($("#v-full").toggleClass("hide"),$("#v-full-overlay").toggleClass("hide")),1==document.getElementById("v-medium").className.split(" ").length&&($("#v-medium").toggleClass("hide"),$("#v-medium-overlay").toggleClass("hide")),2==document.getElementById("v-low").className.split(" ").length&&($("#v-low").toggleClass("hide"),$("#v-low-overlay").toggleClass("hide")),1==document.getElementById("v-mute").className.split(" ").length&&($("#v-mute").toggleClass("hide"),$("#v-mute-overlay").toggleClass("hide"))):e>=34&&e<=66?(1==document.getElementById("v-full").className.split(" ").length&&($("#v-full").toggleClass("hide"),$("#v-full-overlay").toggleClass("hide")),2==document.getElementById("v-medium").className.split(" ").length&&($("#v-medium").toggleClass("hide"),$("#v-medium-overlay").toggleClass("hide")),1==document.getElementById("v-low").className.split(" ").length&&($("#v-low").toggleClass("hide"),$("#v-low-overlay").toggleClass("hide")),1==document.getElementById("v-mute").className.split(" ").length&&($("#v-mute").toggleClass("hide"),$("#v-mute-overlay").toggleClass("hide"))):e>=67&&e<=100&&(2==document.getElementById("v-full").className.split(" ").length&&($("#v-full").toggleClass("hide"),$("#v-full-overlay").toggleClass("hide")),1==document.getElementById("v-medium").className.split(" ").length&&($("#v-medium").toggleClass("hide"),$("#v-medium-overlay").toggleClass("hide")),1==document.getElementById("v-low").className.split(" ").length&&($("#v-low").toggleClass("hide"),$("#v-low-overlay").toggleClass("hide")),1==document.getElementById("v-mute").className.split(" ").length&&($("#v-mute").toggleClass("hide"),$("#v-mute-overlay").toggleClass("hide")))},playPause:function(){state=mt.player.getPlayerState(),button=document.getElementById("playpause"),1==state?mt.pauseVideo():2==state&&mt.playVideo()},volumeOptions:function(){Ve||(mt.player.isMuted()?(mt.player.unMute(),vol=mt.player.getVolume(),$("#volume").slider("value",mt.player.getVolume())):(mt.player.mute(),$("#volume").slider("value",0)))},hoverMute:function(e){vol=mt.player.getVolume()}},ft={submitArray:[],submitArrayExpected:null,showSearch:function(){$("#search-wrapper").toggleClass("hide"),Y.mobilecheck()&&$(".search_input").focus(),$("#song-title").toggleClass("hide"),$("#results").empty(),"close"==$("#search-btn i").html()?$("#search-btn i").html("search"):$("#search-btn i").html("close"),$("#search").focus()},search:function(e){if(void 0!==Ze&&void 0!==Xe||(Ze=$("#temp-results-container"),Xe=$("#empty-results-container").html()),$(".search_results").html(""),""!==e){te=!0;var t=encodeURIComponent(e),a="https://www.googleapis.com/youtube/v3/search?key="+ee+"&videoEmbeddable=true&part=id&fields=items(id)&type=video&order=viewCount&safeSearch=none&maxResults=25";a+="&q="+t,ie&&(a+="&videoCategoryId=10");var n="https://www.googleapis.com/youtube/v3/videos?part=contentDetails,snippet,id&key="+ee+"&id=";Y.contains($(".search_loader_spinner").attr("class").split(" "),"active")||$(".search_loader_spinner").addClass("active"),Y.contains($("#results").attr("class").split(" "),"hide")&&$("#results").removeClass("hide"),$.ajax({type:"GET",url:a,dataType:"jsonp",success:function(e){0===e.items.length?($("").appendTo($("#results")).show("blind",83.33),Y.contains($(".search_loader_spinner").attr("class").split(" "),"active")&&$(".search_loader_spinner").removeClass("active")):e.items&&($.each(e.items,function(e,t){n+=t.id.videoId+","}),$.ajax({type:"GET",url:n,dataType:"jsonp",success:function(e){var t="",a=$(Ze);$.each(e.items,function(e,n){var i=n.contentDetails.duration;if(secs=ft.durationToSeconds(i),!longsongs||secs<720){it=n.snippet.title,enc_title=it,et=n.id,i=i.replace("PT","").replace("H","h ").replace("M","m ").replace("S","s"),thumb=n.snippet.thumbnails.medium.url;var o=a;o.find(".search-title").text(it),o.find(".result_info").text(i),o.find(".thumb").attr("src",thumb),o.find("#add-many").attr("data-video-id",et),o.find("#add-many").attr("data-video-title",enc_title),o.find("#add-many").attr("data-video-length",secs),o.find("#temp-results").attr("data-video-id",et),o.find("#temp-results").attr("data-video-title",enc_title),o.find("#temp-results").attr("data-video-length",secs),t+=o.html()}}),$("").appendTo($("#results")).show("blind",83.33*(e.items.length-1)),Y.contains($(".search_loader_spinner").attr("class").split(" "),"active")&&$(".search_loader_spinner").removeClass("active"),$(".add-many").click(function(e){return e.preventDefault(),e.stopPropagation(),!1})}}))}})}else $(".main").removeClass("blurT"),$("#controls").removeClass("blurT"),$(".main").removeClass("clickthrough")},backgroundSearch:function(e,t,a,n,i){var o=encodeURIComponent(e+" "+t),s="https://www.googleapis.com/youtube/v3/search?key="+ee+"&videoEmbeddable=true&part=id,snippet&fields=items(id,snippet)&type=video&order=relevance&safeSearch=none&maxResults=10&videoCategoryId=10";s+="&q="+o;var l="https://www.googleapis.com/youtube/v3/videos?part=contentDetails,snippet,id&key="+ee+"&id=";t=t.split(" ");var r=e.split("-");r=r.join(" ").split(" "),$.ajax({type:"GET",url:s,dataType:"jsonp",success:function(i){if(0===i.items.length){ft.readySubmit(!1,{totalLength:n-1}),Y.log("------------------------------"),Y.log("NO MATCH FOR:"),Y.log("Spotify title: "+e+" "+t.join(" ")),Y.log("Spotify length: "+a),Y.log("------------------------------");var o=$("
    "+Ie+"
    ");o.find(".extra-add-text").text(e+" - "+t.join(" ")),o.find(".extra-add-text").attr("title",e+" - "+t.join(" ")),o.find(".extra-button-search").attr("data-text",e+" - "+t.join(" ")),$(".not-imported-container").append(o.html()),$(".not-imported").removeClass("hide")}else i.items.length>0&&($.each(i.items,function(e,t){l+=t.id.videoId+","}),$.ajax({type:"GET",url:l,dataType:"jsonp",success:function(i){if(i.items.length>0){var o=!1;if($.each(i.items,function(a,i){var s=ft.durationToSeconds(i.contentDetails.duration),l=!1;if($.each(r,function(a,n){return i.snippet.title.toLowerCase().indexOf(n.toLowerCase())!=-1&&i.snippet.title.toLowerCase().indexOf("cover")==-1&&e.toLowerCase().indexOf("cover")==-1&&(i.snippet.title.toLowerCase().indexOf("remix")==-1&&e.toLowerCase().indexOf("remix")==-1||i.snippet.title.toLowerCase().indexOf("remix")!=-1&&e.toLowerCase().indexOf("remix")!=-1||i.snippet.title.toLowerCase().indexOf(t[0].toLowerCase())!=-1||i.snippet.channelTitle.toLowerCase().indexOf(t[0].toLowerCase())!=-1||i.snippet.channelTitle.toLowerCase().indexOf("vevo")!=-1)||(l=!0),!1}),!l)return o=!0,ft.readySubmit(!0,{id:i.id,title:i.snippet.title,duration:s,totalLength:n-1}),!1}),!o){ft.readySubmit(!1,{totalLength:n-1}),Y.log("------------------------------"),Y.log("NO MATCH FOR:"),Y.log("Spotify title: "+e+" "+t.join(" ")),Y.log("Spotify length: "+a),Y.log("------------------------------");var s=$("
    "+Ie+"
    ");s.find(".extra-add-text").text(e+" - "+t.join(" ")),s.find(".extra-add-text").attr("title",e+" - "+t.join(" ")),s.find(".extra-button-search").attr("data-text",e+" - "+t.join(" ")),$(".not-imported-container").append(s.html()),$(".not-imported").removeClass("hide")}}}}))}})},readySubmit:function(e,t){null===ft.submitArrayExpected&&(ft.submitArrayExpected=t.totalLength),e?ft.submitArray.push(t):ft.submitArrayExpected-=1,ft.submitArray.length-1==ft.submitArrayExpected&&($.each(ft.submitArray,function(e,t){ft.submit(t.id,t.title,t.duration,!0,e,ft.submitArray.length-1)}),document.getElementById("import_spotify").disabled=!1,$("#import_spotify").removeClass("hide"),$("#playlist_loader_spotify").addClass("hide"),ft.submitArray=[],ft.submitArrayExpected=null)},submitAndClose:function(e,t,a){ft.submit(e,t,a,!1,0,1),$("#results").html(""),ft.showSearch(),document.getElementById("search").value="",$("#results").html="",$(".main").removeClass("blurT"),$("#controls").removeClass("blurT"),$(".main").removeClass("clickthrough")},importPlaylist:function(e,t){token="";var a,n;void 0!==t&&(token="&pageToken="+t),playlist_url="https://www.googleapis.com/youtube/v3/playlistItems?part=contentDetails&maxResults=49&key="+ee+"&playlistId="+e+token,Pe?(n="html",a={"Content-Type":"application/json",Authorization:"Bearer "+Ae.access_token}):(a={},n="jsonp"),$.ajax({type:"GET",url:playlist_url,dataType:n,headers:a,success:function(a){if(a.error)if("playlistItemsNotAccessible"==a.error.errors[0].reason){var n=C(29);window.callback=function(a){Ae=a,Ae.state==n?(Pe=!0,setTimeout(function(){Pe=!1,Ae={}},1e3*Ae.expires_in),ft.importPlaylist(e,t)):(Ae="",console.error("Nonce doesn't match")),youtube_window.close(),window.callback=""},youtube_window=window.open("/o_callback#youtube=true&nonce="+n,"","width=600, height=600")}else Y.log(a.error),document.getElementById("import").disabled=!1,$("#playlist_loader").addClass("hide"),$("#import").removeClass("hide"),M(),Materialize.toast("It seems you've entered a invalid url.",4e3);else{var i="";"string"==typeof a&&(a=$.parseJSON(a)),$.each(a.items,function(e,t){i+=t.contentDetails.videoId+","}),ft.addVideos(i,!0),a.nextPageToken&&ft.importPlaylist(e,a.nextPageToken),document.getElementById("import").value=""}}})},importSpotifyPlaylist:function(e){$.ajax({url:e,headers:{Authorization:"Bearer "+Te.access_token},success:function(e){$.each(e.items,function(t,a){ft.backgroundSearch(a.track.name,a.track.artists.map(function(e){return e.name}).join(" "),Math.floor(a.track.duration_ms/1e3),e.total,t+e.offset)}),e.next&&ft.importSpotifyPlaylist(e.next)},error:function(){document.getElementById("import_spotify").disabled=!1,$("#import_spotify").removeClass("hide"),$("#playlist_loader_spotify").addClass("hide"),M(),Materialize.toast("It seems you've entered a invalid url.",4e3)}})},addVideos:function(e,t){var a="https://www.googleapis.com/youtube/v3/videos?part=contentDetails,snippet,id&key=***REMOVED***&id=";a+=e,$.ajax({type:"POST",url:a,dataType:"jsonp",success:function(e){var a=0,n=[];$.each(e.items,function(e,i){var o=ft.durationToSeconds(i.contentDetails.duration);(!longsongs||o<720)&&(enc_title=i.snippet.title,a+=1,n.push({id:i.id,enc_title:enc_title,duration:o,playlist:t}))}),$.each(n,function(e,t){ft.submit(t.id,t.enc_title,t.duration,t.playlist,e,a)})}})},submit:function(e,t,a,n,i,o){if(je&&document.getElementsByName("addsongs")[0].checked&&document.getElementsByName("addsongs")[0].disabled){var s=[];s=$.map(tt,function(t,a){if(t.id==e)return a}),0==s.length?U.channel_function({type:"added",value:{added:(new Date).getTime()/1e3,guids:[1],id:e,title:t,duration:a,playlist:!1,now_playing:!1,votes:1}}):U.vote(e,"pos")}else V.emit("add",{id:e,title:decodeURIComponent(t),adminpass:oe,list:J.toLowerCase(),duration:a,playlist:n,num:i,total:o})},durationToSeconds:function(e){var t=e.match(ae);return hours=parseInt(t[12])||0,minutes=parseInt(t[14])||0,seconds=parseInt(t[16])||0,60*hours*60+60*minutes+seconds}},yt={catchUserSuggests:function(e,t){qe+=t?1:e.length;var a=qe>9?"9+":qe;if($(".suggested-link span.badge.new.white").hasClass("hide")&&qe>0&&$(".suggested-link span.badge.new.white").removeClass("hide"),$(".suggested-link span.badge.new.white").text(a),t)yt.createSuggested(e);else for(var n in e)yt.createSuggested(e[n]);yt.checkUserEmpty()},createSuggested:function(e){var t=Y.secondsToOther(e.duration),a=e.id,n=e.title,i=U.generateSong({id:a,title:n,length:e.duration,duration:t},!1,!1,!1,!0);$("#user-suggest-html").append(i)},fetchYoutubeSuggests:function(e){var t="https://www.googleapis.com/youtube/v3/search?part=snippet&relatedToVideoId="+e+"&type=video&key="+ee,a="https://www.googleapis.com/youtube/v3/videos?part=contentDetails,snippet,id&key="+ee+"&id=";$.ajax({type:"GET",url:t,dataType:"jsonp",success:function(e){$.each(e.items.slice(0,5),function(e,t){a+=t.id.videoId+","}),$.ajax({type:"GET",url:a,dataType:"jsonp",success:function(e){$("#suggest-song-html").empty(),$.each(e.items,function(e,t){var a=t.contentDetails.duration,n=ft.durationToSeconds(a);a=Y.secondsToOther(ft.durationToSeconds(a));var i=t.id,o=t.snippet.title;$("#suggest-song-html").append(U.generateSong({id:i,title:o,length:n,duration:a},!1,!1,!1))})}})}})},checkUserEmpty:function(){var e=$("#user-suggest-html").children().length;0===e?Y.contains($("#user_suggests").attr("class").split(" "),"hide")||$("#user_suggests").addClass("hide"):$("#user_suggests").removeClass("hide")}}}(); \ No newline at end of file diff --git a/public/dist/remote.min.js b/public/dist/remote.min.js deleted file mode 100755 index 6652d066..00000000 --- a/public/dist/remote.min.js +++ /dev/null @@ -1 +0,0 @@ -!function(){var e=!0;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},$(document).ready(function(){document.title="Zoff Remote",setTimeout(function(){$("#search").focus()},500);var e={"sync disconnect on unload":!0,secure:!0};$("#about").modal(),$("#contact").modal(),"remote.zoff.me"==window.location.hostname?add="https://zoff.me":add="localhost",socket=io.connect(add+":8080",e),id=window.location.pathname.split("/")[1],id&&(id=id.toLowerCase(),t.control()),git_info=$.ajax({type:"GET",url:"https://api.github.com/users/zoff-music/received_events",async:!1}).responseText,git_info=$.parseJSON(git_info),$("#latest-commit").html("Latest Commit:
    "+git_info[0].created_at.substring(0,10)+": "+git_info[0].actor.display_login+"
    "+git_info[0].payload.commits[0].sha.substring(0,10)+": "+git_info[0].payload.commits[0].message+" - - - - - -
    - - - -
    - -
    -
    -

    Remote Controller

    -
    -
    -
    -
    - - -
    -
    - - - -
    -
    - volume_up -
    - -
    - -
    - Here you can control another Zoff player from any device. -
    - To find the ID of your player, click the Conf menu icon on the top right of the player page, then "Remote Control". -
    You can either scan the QR code or type the ID manually. -
    -
    - - - - - - - diff --git a/public/php/footer.php b/public/php/footer.php deleted file mode 100755 index 5fbb995a..00000000 --- a/public/php/footer.php +++ /dev/null @@ -1,136 +0,0 @@ - - diff --git a/public/php/header.php b/public/php/header.php deleted file mode 100755 index dc9e9ae7..00000000 --- a/public/php/header.php +++ /dev/null @@ -1,46 +0,0 @@ - - - -Zoff - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/public/php/imageblob.php b/public/php/imageblob.php deleted file mode 100755 index fc17b1b5..00000000 --- a/public/php/imageblob.php +++ /dev/null @@ -1,18 +0,0 @@ -readImageBlob($url); - - -$image->blurImage(30,50); - -$output = $image->getimageblob(); - -$image->setImageFormat("jpeg"); - -file_put_contents ("../images/thumbnails/".$_POST['id'].".jpg", $image); - -echo base64_encode($output); -?> diff --git a/public/php/mail.php b/public/php/mail.php deleted file mode 100755 index 0d5235cb..00000000 --- a/public/php/mail.php +++ /dev/null @@ -1,22 +0,0 @@ - diff --git a/server/.gitignore b/server/.gitignore new file mode 100644 index 00000000..02380fbc --- /dev/null +++ b/server/.gitignore @@ -0,0 +1,4 @@ +node_modules/ +scripts/ +.DS_Store +mongo_config.js diff --git a/server/README.md b/server/README.md new file mode 100644 index 00000000..184fc386 --- /dev/null +++ b/server/README.md @@ -0,0 +1,35 @@ +# Zoff-Serverside + +For the client-side repo, go to here + +## Install + +Prerequisites: + +``` +MongoDB : https://www.mongodb.org/ +NodeJS : https://nodejs.org/en/ +npm : https://www.npmjs.com/ +``` + +Clone this repository into a folder, and navigate to it. Use ```npm install``` in the project folder and use ```$ node server.js``` to start the server. + +## About + +Zoff is a shared (free) YouTube based radio service, built upon the YouTube API. + +Zoff is mainly a webbased service. The website uses NodeJS with Socket.IO, MongoDB and PHP on the backend, with JavaScript, jQuery and Materialize on the frontend. + +The team consists of Kasper Rynning-Tønnesen and Nicolas Almagro Tonne, and the project has been worked on since late 2014. + +The team can be reached on contact@zoff.no + +### Legal + +Copyright © 2017 +Nicolas Almagro Tonne and Kasper Rynning-Tønnesen + +Creative Commons License +Zoff is licensed under a +Creative Commons Attribution-NonCommercial-NoDerivs 3.0 Norway License.. +Do not redistribute without permission from the developers. diff --git a/server/change_pinned.js b/server/change_pinned.js new file mode 100644 index 00000000..adb92b9e --- /dev/null +++ b/server/change_pinned.js @@ -0,0 +1,20 @@ +var readline = require('readline'); +var mongojs = require('mongojs'); +var db = mongojs.connect('mydb'); + + +var rl = readline.createInterface({ + input: process.stdin, + output: process.stdout +}); + +rl.question("Channel to pin: ", function(coll) { + // TODO: Log the answer in a database + db.collection("frontpage_lists").update({pinned:1}, {$set:{pinned:0}}, function(err, resp){ + db.collection("frontpage_lists").update({_id:coll}, {$set:{pinned:1}}, function(err, resp){ + console.log("Changed pinned channel to: " + coll); + process.exit(); + }); + }); + rl.close(); +}); \ No newline at end of file diff --git a/server/package.json b/server/package.json new file mode 100644 index 00000000..f73c4571 --- /dev/null +++ b/server/package.json @@ -0,0 +1,36 @@ +{ + "name": "zoff", + "version": "2.0.2", + "description": "Zoff, the shared YouTube based radio services", + "dependencies": { + "bad-words": "^1.5.1", + "body-parser": "^1.17.1", + "cors-anywhere": "^0.2.3", + "emoji-strip": "^0.0.3", + "express": "^4.15.2", + "express-handlebars": "^3.0.0", + "express-subdomain": "^1.0.5", + "jimp": "^0.2.27", + "lwip": "0.0.9", + "mongodb": "^2.0.27", + "mongojs": "^2.4.0", + "node-cryptojs-aes": "^0.4.0", + "request": "^2.72.0", + "sendmail": "^1.1.1", + "socket.io": "^1.7.3" + }, + "repository": { + "type": "git", + "url": "git://github.com/zoff-music/zoff-server.git" + }, + "author": { + "name": "Kasper Rynning Tønnesen", + "email": "kasper@kasperrt.no" + }, + "devDependencies": { + "gulp-util": "~3.0.6", + "gulp": "~3.9.0", + "gulp-concat": "~2.6.0", + "gulp-uglifyjs": "~0.6.2" + } +} diff --git a/server/router.js b/server/router.js new file mode 100644 index 00000000..b91aa0d3 --- /dev/null +++ b/server/router.js @@ -0,0 +1,81 @@ +var express = require('express'); +var router = express.Router(); +const path = require('path'); +var sendmail = require('sendmail')(); + +router.use(function(req, res, next) { + next(); // make sure we go to the next routes and don't stop here +}); + +router.route('/:channel_name').get(function(req, res, next){ + if(req.headers.host.split(".")[0] == "remote") { + var data = { + year: 2017, + javascript_file: "remote.min.js" + } + res.render('layouts/remote', data); + } else { + if(req.params.channel_name == "_embed") { + res.sendFile(path.join(__dirname, '/views/assets/html/embed.html')); + } else if(req.params.channel_name == "o_callback") { + res.sendFile(path.join(__dirname, '/views/assets/html/callback.html')); + } else { + var data = { + list_name: req.params.channel_name, + year: 2017, + javascript_file: "main.min.js" + } + res.render('layouts/channel', data); + } + } +}); + +router.route('/api/imageblob').post(function(req, res) { + var Jimp = require("jimp"); + Jimp.read('https://img.youtube.com/vi/' + req.body.id + '/mqdefault.jpg', function (err, image) { + if (err) throw err; + image.blur(50) + .write(path.join(__dirname, '/views/assets/images/thumbnails/' + req.body.id + '.jpg'), function(e, r) { + res.send(req.body.id + ".jpg"); + }); + }); +}); + +router.route('/:user_name/:channel_name').get(function(req, res, next){ + +}); + +router.route('/api/mail').post(function(req, res) { + var from = req.body.from; + var message = req.body.message; + sendmail({ + from: from, + to: 'contact@zoff.no', + subject: 'ZOFF: Contact form webpage', + html: message, + }, function(err, reply) { + if(err) { + res.sendStatus(500); + } else { + res.sendStatus(200); + } + }); +}); + +router.route('/').get(function(req, res, next){ + if(req.headers.host.split(".")[0] == "remote") { + var data = { + year: 2017, + javascript_file: "remote.min.js" + } + res.render('layouts/remote', data); + } else { + var data = { + year: 2017, + javascript_file: "main.min.js" + } + res.render('layouts/frontpage', data); + } +}); + +module.exports = router; diff --git a/server/server.js b/server/server.js new file mode 100755 index 00000000..e9eb4b91 --- /dev/null +++ b/server/server.js @@ -0,0 +1,1206 @@ +var server; +var add = ""; +var express = require('express'); +var app = express(); +var exphbs = require('express-handlebars'); +app.engine('handlebars',exphbs({defaultLayout: 'main'})); +app.set('view engine', 'handlebars'); + +try{ + var fs = require('fs'); + //var privateKey = fs.readFileSync('/home/kasper/newssl_2016/nopass.key', 'utf8'); + //var certificate = fs.readFileSync('/home/kasper/newssl_2016/zoff.no/ApacheServer/2_zoff.no.crt', 'utf8'); + //var ca = fs.readFileSync('/home/kasper/newssl_2016/zoff.no/ApacheServer/1_root_bundle.crt'); + var privateKey = fs.readFileSync('/etc/letsencrypt/live/zoff.me/privkey.pem').toString(); + var certificate = fs.readFileSync('/etc/letsencrypt/live/zoff.me/cert.pem').toString(); + var ca = fs.readFileSync('/etc/letsencrypt/live/zoff.me/chain.pem').toString(); + + //var ca_bundle = fs.readFileSync('/home/kasper/startssl/ca-bundle.pem') + //var credentials = {key: privateKey, cert: certificate, ca: ca,}; + var credentials = { + key: privateKey, + cert: certificate, + ca: ca + }; + + var https = require('https'); + server = https.createServer(credentials, app); + + var mongo_db_cred = require('./mongo_config.js'); + var cors_proxy = require('cors-anywhere'); + + cors_proxy.createServer({ + requireHeader: ['origin', 'x-requested-with'], + removeHeaders: ['cookie', 'cookie2'], + httpsOptions: credentials + }).listen(8081, function() { + console.log('Running CORS Anywhere on :' + 8081); + }); +} +catch(err){ + console.log("Starting without https (probably on localhost)"); + if(err.errno != 34)console.log(err); + var cors_proxy = require('cors-anywhere'); + var mongo_db_cred = {config: 'mydb'}; + cors_proxy.createServer({ + requireHeader: ['origin', 'x-requested-with'], + removeHeaders: ['cookie', 'cookie2'], + }).listen(8081, function() { + console.log('Running CORS Anywhere on :' + 8081); + }); + var http = require('http'); + server = http.Server(app); + add = ",http://localhost:80*,http://localhost:8080*,localhost:8080*, localhost:8082*,,http://zoff.dev:80*,http://zoff.dev:8080*,zoff.dev:8080*, zoff.dev:8082*"; +} + +var bodyParser = require('body-parser') +app.use( bodyParser.json() ); // to support JSON-encoded bodies +app.use(bodyParser.urlencoded({ // to support URL-encoded bodies + extended: true +})); + +var io = require('socket.io')(server, {'pingTimeout': 25000}); +var request = require('request'); +//db +var mongojs = require('mongojs'); +var db = mongojs(mongo_db_cred.config); + +//crypto +var crypto = require('crypto'); +var node_cryptojs = require('node-cryptojs-aes'); +var router = require('./router.js'); + +// node-cryptojs-aes main object; +var CryptoJS = node_cryptojs.CryptoJS; + +var emojiStrip = require('emoji-strip'); + +var Filter = require('bad-words'); +var filter = new Filter({ placeHolder: 'x'}); + +var port = 8080; +var lists = {}; +var offline_users = []; +var unique_ids = []; +var names = {names: []}; +var locks = {}; +var skipped = {}; +var tot_view = 0; +const path = require('path'); +const publicPath = path.join(__dirname, '../views'); + +server.listen(port, function () { + console.log('Server listening at port %d', port); +}); + + +app.use('/', router); +app.use('/assets', express.static('views/assets')); + + +/*process.on('uncaughtException', function(e){ + console.log("\n" + new Date().toString() + "\n", e.stack || e); + process.exit(1); +})*/ + +db.on('error',function(err) { + console.log("\n" + new Date().toString() + "\n Database error: ", err); +}); + +io.on('connection', function(socket){ + socket.emit("get_list"); + + var guid = hash_pass(socket.handshake.headers["user-agent"] + socket.handshake.address + socket.handshake.headers["accept-language"]); + + socket.on('close', function() { + console.log("closing socket"); + }); + + socket.on('ping', function() { + socket.emit("ok"); + }); + + var socketid = socket.id; + var coll; + var tot_lists = []; + var in_list = false; + var short_id = uniqueID(socketid,4); + var offline = false; + //names.push(name); + unique_ids.push(short_id); + var name; + + if(names[guid] === undefined){ + name = get_name(guid); + } + else + name = names[guid]; + + socket.on("get_spread", function(){ + socket.emit("spread_listeners", {offline: offline_users.length, total: tot_view, online_users: lists}); + }); + + socket.on('suggest_thumbnail', function(msg){ + if(msg.thumbnail && msg.channel && msg.adminpass && msg.thumbnail.indexOf("i.imgur.com") > -1){ + msg.thumbnail = msg.thumbnail.replace(/^https?\:\/\//i, ""); + if(msg.thumbnail.substring(0,2) != "//") msg.thumbnail = "//" + msg.thumbnail; + var channel = msg.channel.toLowerCase(); + var hash = hash_pass(decrypt_string(socketid, msg.adminpass)); + db.collection(channel).find({views:{$exists:true}}, function(err, docs){ + if(docs !== null && docs.length !== 0 && docs[0].adminpass !== "" && docs[0].adminpass == hash){ + db.collection("suggested_thumbnails").update({channel: channel}, {$set:{thumbnail: msg.thumbnail}}, {upsert:true}, function(err, docs){ + socket.emit("toast", "suggested_thumbnail"); + }); + } + }); + } else { + socket.emit("toast", "thumbnail_denied"); + } + }); + + socket.on('suggest_description', function(msg){ + if(msg.description && msg.channel && msg.adminpass && msg.description.length < 100){ + var channel = msg.channel.toLowerCase(); + var hash = hash_pass(decrypt_string(socketid, msg.adminpass)); + db.collection(channel).find({views:{$exists:true}}, function(err, docs){ + if(docs !== null && docs.length !== 0 && docs[0].adminpass !== "" && docs[0].adminpass == hash){ + db.collection("suggested_descriptions").update({channel: channel}, {$set:{description: msg.description}}, {upsert:true}, function(err, docs){ + socket.emit("toast", "suggested_description"); + }); + } + }); + } else { + socket.emit("toast", "description_denied"); + } + }); + + socket.on("offline", function(status){ + if(status){ + in_list = false; + offline = true; + if(coll !== undefined && lists[coll] !== undefined && contains(lists[coll], guid)) + { + var index = lists[coll].indexOf(guid); + if(index != -1) + { + lists[coll].splice(index, 1); + //socket.leave(coll); + io.to(coll).emit("viewers", lists[coll].length); + //io.to(coll).emit('chat', {from: name, msg: " left"}); + tot_view -= 1; + } + + remove_from_array(names.names, name); + delete names[guid]; + + } + + remove_from_array(unique_ids, short_id); + if(!contains(offline_users, guid) && coll != undefined) + { + offline_users.push(guid); + tot_view += 1; + } + } else { + offline = false; + if(contains(offline_users, guid)) + { + var index = offline_users.indexOf(guid); + if(index != -1){ + offline_users.splice(index, 1); + tot_view -= 1; + } + } + check_inlist(coll, guid, socket, names[guid], offline); + } + }); + + socket.on('namechange', function(data) + { + if(typeof(data) !== "string") return; + data = encodeURIComponent(data).replace(/\W/g, '').replace(/[^\x00-\x7F]/g, ""); + old_name = names[guid]; + new_name = change_name(data, guid, name); + if(new_name == name || new_name === false) return; + else if(data.length < 9 && data.indexOf(" ") == -1 && data.length >= 4) + { + remove_from_array(names.names, old_name); + delete names[guid]; + name = new_name; + names[guid] = new_name; + names.names.push(new_name); + io.to(coll).emit('chat', {from: old_name, msg: " changed name to " + new_name}); + io.sockets.emit('chat.all', {from: old_name , msg: " changed name to " + new_name, channel: coll}); + } + }); + + socket.on("removename", function() + { + old_name = names[guid]; + new_name = rndName(guid, 8); + if(old_name != new_name){ + name = new_name; + names[guid] = name; + remove_from_array(names.names, old_name); + io.to(coll).emit('chat', {from: old_name, msg: " changed name to " + new_name}); + io.sockets.emit('chat.all', {from: old_name , msg: " changed name to " + new_name, channel: coll}); + } + }); + + socket.on('chat', function (data) { + if(typeof(data) !== 'string') return; + check_inlist(coll, guid, socket, names[guid], offline); + if(data !== "" && data !== undefined && data !== null && + data.length < 151 && data.replace(/\s/g, '').length){ + if(names[guid] === undefined){ + name = get_name(guid); + } else name = names[guid]; + io.to(coll).emit('chat', {from: names[guid], msg: ": " + data}); + } + }); + + socket.on("all,chat", function(data) + { + if(typeof(data) !== 'string') return; + check_inlist(coll, guid, socket, names[guid], offline); + if(data !== "" && data !== undefined && data !== null && + data.length < 151 && data.replace(/\s/g, '').length){ + if(names[guid] === undefined){ + name = get_name(guid); + } else name = names[guid]; + io.sockets.emit('chat.all', {from: names[guid], msg: ": " + data, channel: coll}); + } + }); + + socket.on('frontpage_lists', function() + { + + var playlists_to_send = []; + var i = 0; + var viewers; + in_list = false; + + db.collection("frontpage_lists").find({frontpage:true}, function(err, docs){ + var playlists_to_send = []; + for(var x in docs){ + var pinned = 0; + if(docs[x].pinned == 1) pinned = 1; + try{viewers = lists[docs[x]._id].length;} + catch(error){viewers = 0;} + var to_push = {viewers: viewers, id: docs[x].id, title: docs[x].title, channel: docs[x]._id, count: docs[x].count, pinned: pinned, accessed: docs[x].accessed != undefined ? docs[x].accessed : 0, thumbnail: docs[x].thumbnail != undefined ? docs[x].thumbnail : "", description: docs[x].description != undefined ? docs[x].description : ""}; + if(pinned == 1 && docs[x].count > 0) playlists_to_send.unshift(to_push); + else if(docs[x].count > 0) playlists_to_send.push(to_push); + } + socket.emit("playlists", {channels: playlists_to_send, viewers: tot_view}); + }); + }); + + socket.on('now_playing', function(list, fn) + { + if(typeof(list) !== 'string' || typeof(fn) !== 'function') return; + db.collection(list).find({now_playing:true}, function(err, docs){ + if(docs.length === 0){ + fn("No song currently playing"); + return; + } + var title = docs[0].title; + //socket.emit("now_playing", title); + if(title === undefined) fn("No song currently playing"); + else fn(title); + }); + }); + + socket.on('id', function(arr) + { + if(typeof(arr) == 'object') + io.to(arr.id).emit(arr.id, {type: arr.type, value: arr.value}); + }); + + socket.on('list', function(list) + { + if(typeof(list) === 'string' && list !== undefined && list !== null && list !== "") + { + in_list = true; + coll = emojiStrip(list).toLowerCase(); + //coll = decodeURIComponent(coll); + coll = coll.replace("_", ""); + coll = encodeURIComponent(coll).replace(/\W/g, ''); + coll = filter.clean(coll); + socket.join(coll); + socket.join(short_id); + socket.emit("id", short_id); + check_inlist(coll, guid, socket, name, offline); + io.to(coll).emit("viewers", lists[coll] == undefined ? 0 : lists[coll].length); + db.getCollectionNames(function(err, docs){ + if(contains(docs, coll)) + { + send_list(coll, socket, true, false, true); + }else{ + db.createCollection(coll, function(err, docs){ + db.collection(coll).insert({"addsongs":false, "adminpass":"", "allvideos":true, "frontpage":true, "longsongs":false, "removeplay": false, "shuffle": true, "skip": false, "skips": [], "startTime":get_time(), "views": [], "vote": false, "desc": ""}, function(err, docs){ + send_list(coll, socket, true, false, true); + db.collection("frontpage_lists").insert({"_id": coll, "count" : 0, "frontpage": true, "accessed": get_time()}); + }); + }); + } + }); + } + }); + + socket.on('end', function(obj) + { + if(typeof(obj) !== 'object') return; + id = obj.id; + if(id !== undefined && id !== null && id !== "") + { + if(coll === undefined) { + coll = obj.channel; + coll = emojiStrip(coll).toLowerCase(); + //coll = decodeURIComponent(coll); + coll = coll.replace("_", ""); + coll = encodeURIComponent(coll).replace(/\W/g, ''); + coll = filter.clean(coll); + } + check_inlist(coll, guid, socket, name, offline); + db.collection(coll).find({now_playing:true}, function(err, np){ + if(err !== null) console.log(err); + if(np !== null && np !== undefined && np.length == 1 && np[0].id == id){ + db.collection(coll).find({views:{$exists:true}}, function(err, docs){ + var startTime = docs[0].startTime; + if(docs[0].removeplay === true && startTime+parseInt(np[0].duration)<=get_time()+5) + { + db.collection(coll).remove({now_playing:true}, function(err, docs){ + change_song_post(coll); + }); + }else{ + if(startTime+parseInt(np[0].duration)<=get_time()+5) + { + change_song(coll, false, id); + } + } + }); + } + }); + } + }); + + socket.on('add', function(arr) + { + if(typeof(arr) === 'object' && arr !== undefined && arr !== null && arr !== "" && !isNaN(parseInt(arr.duration))) + { + //if(arr.length == 5) coll = arr[4]; + if(arr.list !== undefined) { + coll = arr.list; + coll = emojiStrip(coll).toLowerCase(); + //coll = decodeURIComponent(coll); + coll = coll.replace("_", ""); + coll = encodeURIComponent(coll).replace(/\W/g, ''); + coll = filter.clean(coll); + } + + check_inlist(coll, guid, socket, name, offline); + + var id = arr.id; + var title = arr.title; + var hash = hash_pass(decrypt_string(socketid, arr.adminpass)); + var duration = parseInt(arr.duration); + var full_list = arr.playlist; + var last = arr.num == arr.total - 1; + var num = arr.num; + var total = arr.total; + db.collection(coll).find({views:{$exists:true}}, function(err, docs) + { + conf = docs; + + if(docs !== null && docs.length !== 0 && ((docs[0].addsongs === true && (hash == docs[0].adminpass || docs[0].adminpass === "")) || + docs[0].addsongs === false)) + { + db.collection(coll).find({id:id, type:{$ne:"suggested"}}, function(err, docs){ + if(docs !== null && docs.length === 0) + { + var guids = full_list === true ? [] : [guid]; + var votes; + var added; + if(full_list) { + var time = get_time()-total; + time = time.toString(); + var total_len = total.toString().length; + var now_len = num.toString().length; + var to_add = num.toString(); + while(now_len < total_len) { + to_add = "0" + to_add; + now_len = to_add.length; + } + time = time.substring(0, time.length - total_len); + time = time + to_add; + time = parseInt(time); + added = time; + votes = 0; + } else { + added = get_time(); + votes = 1; + } + + db.collection(coll).find({now_playing:true}, function(err, docs){ + if((docs !== null && docs.length === 0)){ + np = true; + if(full_list && num === 0){ + np = true; + //var time = get_time() - total - 1; + time = time.toString(); + total += 1; + var total_len = total.toString().length; + var now_len = total.toString().length; + var to_add = total.toString(); + while(now_len < total_len) { + to_add = "0" + to_add; + now_len = to_add.length; + } + time = time.substring(0, time.length - total_len); + time = parseInt(time).toString() + to_add; + time = parseInt(time); + added = time; + votes = 0; + } else if(full_list) { + np = false; + } + } else + np = false; + db.collection(coll).update({id: id}, {"added": added,"guids":guids,"id":id,"now_playing":np,"title":title,"votes":votes, "duration":duration}, {upsert: true}, function(err, docs){ + if(np) + { + send_list(coll, undefined, false, true, false); + db.collection(coll).update({views:{$exists:true}}, {$set:{startTime: get_time()}}); + send_play(coll, undefined); + //io.to(coll).emit("channel", "song_change", get_time()]); + update_frontpage(coll, id, title); + //io.to(coll).emit("channel", ["added", {"_id": "asd", "added":added,"guids":guids,"id":id,"now_playing":np,"title":title,"votes":votes, "duration":duration}]); + } else { + io.to(coll).emit("channel", {type: "added", value: {"_id": "asd", "added":added,"guids":guids,"id":id,"now_playing":np,"title":title,"votes":votes, "duration":duration}}); + } + db.collection("frontpage_lists").update({_id:coll}, {$inc:{count:1}, $set:{accessed: get_time()}}, {upsert:true}, function(err, docs){}); + }); + if(!full_list) + socket.emit("toast", "addedsong"); + else if(full_list && last) { + socket.emit("toast", "addedplaylist"); + } + }); + }else if(!full_list){ + vote(coll, id, guid, socket, full_list, last); + if(full_list && last) { + socket.emit("toast", "addedplaylist"); + } + } else if(full_list && last) { + socket.emit("toast", "addedplaylist"); + } + }); + }else if(!full_list) + { + db.collection(coll).find({id: id}, function(err, docs){ + if(docs.length === 0){ + db.collection(coll).update({id: id}, + {$set:{ + "added":get_time(), "guids": [guid], "id":id, "now_playing": false, "title":title, "votes":1, "duration":duration, type:"suggested"}}, + {upsert:true}, function(err, docs){ + socket.emit("toast", "suggested"); + io.to(coll).emit("suggested", {id: id, title: title, duration: duration}); + }); + }else if(docs[0].now_playing === true){ + socket.emit("toast", "alreadyplay"); + }else{ + if(conf[0].vote === false) vote(coll, id, guid, socket, full_list, last); + else socket.emit("toast", "listhaspass"); + } + }); + //socket.emit("toast", "listhaspass"); + } + }); + } + }); + + socket.on('vote', function(msg) + { + if(typeof(msg) === 'object' && msg !== undefined && msg !== null) + { + check_inlist(coll, guid, socket, name, offline); + + if(msg.type == "del") + del(msg, socket, socketid); + else + { + var id = msg.id; + var hash = hash_pass(decrypt_string(socketid, msg.adminpass)); + db.collection(coll).find({views:{$exists:true}}, function(err, docs){ + if(docs !== null && docs.length !== 0 && ((docs[0].vote === true && (hash == docs[0].adminpass || docs[0].adminpass === "")) || + docs[0].vote === false)) + { + vote(coll, id, guid, socket, false, false); + }else{ + socket.emit("toast", "listhaspass"); + } + }); + } + } + }); + + socket.on('password', function(inp) + { + if(inp !== undefined && inp !== null && inp !== "") + { + pw = inp.password; + opw = inp.password; + coll = inp.channel; + coll = emojiStrip(coll).toLowerCase(); + //coll = decodeURIComponent(coll); + coll = coll.replace("_", ""); + coll = encodeURIComponent(coll).replace(/\W/g, ''); + coll = filter.clean(coll); + + uncrypted = pw; + pw = decrypt_string(socketid, pw); + + check_inlist(coll, guid, socket, name, offline); + + if(inp.oldpass) + { + opw = inp.oldpass; + } + opw = decrypt_string(socketid, opw); + + db.collection(coll).find({views:{$exists:true}}, function(err, docs){ + if(docs !== null && docs.length !== 0) + { + if(docs[0].adminpass === "" || docs[0].adminpass == hash_pass(opw)) + { + db.collection(coll).update({views:{$exists:true}}, {$set:{adminpass:hash_pass(pw)}}, function(err, docs){ + if(inp.oldpass) + socket.emit("toast", "changedpass"); + else + socket.emit("toast", "correctpass"); + socket.emit("pw", uncrypted); + }); + }else + socket.emit("toast", "wrongpass"); + } + }); + } + }); + + socket.on('skip', function(list) + { + //if(1==2) + if(list !== undefined && list !== null && list !== "") + { + if(coll === undefined) { + coll = list.channel; + coll = emojiStrip(coll).toLowerCase(); + //coll = decodeURIComponent(coll); + coll = coll.replace("_", ""); + coll = encodeURIComponent(coll).replace(/\W/g, ''); + coll = filter.clean(coll); + } + check_inlist(coll, guid, socket, name, offline); + + adminpass = ""; + video_id = list.id; + err = list.error; + var error = false; + var video_id; + if(err != "5" && err != "100" && err != "101" && err != "150") + { + adminpass = list.pass; + }else if(err == "5" || err == "100" || err == "101" || err == "150"){ + error = true; + } + + if(adminpass !== undefined && adminpass !== null && adminpass !== "") + hash = hash_pass(decrypt_string(socketid, adminpass)); + else + hash = ""; + + db.collection(coll).find({views: {$exists:true}}, function(err, docs){ + if(docs !== null && docs.length !== 0) + { + if(!docs[0].skip || (docs[0].adminpass == hash && docs[0].adminpass !== "") || error) + { + if((lists[coll].length/2 <= docs[0].skips.length+1 && !contains(docs[0].skips, guid) && lists[coll].length != 2) || + (lists[coll].length == 2 && docs[0].skips.length+1 == 2 && !contains(docs[0].skips, guid)) || + (docs[0].adminpass == hash && docs[0].adminpass !== "" && docs[0].skip)) + { + //if(!locks[coll] || locks[coll] == undefined){ + locks[coll] = true; + change_song(coll, error, video_id); + socket.emit("toast", "skip"); + io.to(coll).emit('chat', {from: name, msg: " skipped"}); + //} + }else if(!contains(docs[0].skips, guid)){ + db.collection(coll).update({views:{$exists:true}}, {$push:{skips:guid}}, function(err, d){ + if(lists[coll].length == 2) + to_skip = 1; + else + to_skip = (Math.ceil(lists[coll].length/2) - docs[0].skips.length-1); + socket.emit("toast", to_skip + " more are needed to skip!"); + socket.broadcast.to(coll).emit('chat', {from: name, msg: " voted to skip"}); + }); + }else{ + socket.emit("toast", "alreadyskip"); + } + }else + socket.emit("toast", "noskip"); + } + }); + } + }); + + socket.on('conf', function(params) + { + if(params !== undefined && params !== null && params !== "") + { + check_inlist(coll, guid, socket,name, offline); + + var voting = params.voting; + var addsongs = params.addsongs; + var longsongs = params.longsongs; + var frontpage = params.frontpage; + var allvideos = params.allvideos; + var removeplay = params.removeplay; + var adminpass = params.adminpass; + var skipping = params.skipping; + var shuffling = params.shuffling; + var description = ""; + var hash; + if(params.description) description = params.description; + + if(adminpass !== "") + hash = hash_pass(decrypt_string(socketid, adminpass)); + else + hash = adminpass; + + db.collection(coll).find({views:{$exists:true}}, function(err, docs){ + if(docs !== null && docs.length !== 0 && docs[0].adminpass === "" || docs[0].adminpass == hash) + { + db.collection(coll).update({views:{$exists:true}}, { + $set:{addsongs:addsongs, + allvideos:allvideos, + frontpage:frontpage, + skip:skipping, + vote:voting, + removeplay:removeplay, + shuffle:shuffling, + longsongs:longsongs, + adminpass:hash, + desc: description + }}, function(err, docs){ + db.collection(coll).find({views:{$exists:true}}, function(err, docs){ + if(docs[0].adminpass !== "") docs[0].adminpass = true; + io.to(coll).emit("conf", docs); + socket.emit("toast", "savedsettings"); + + db.collection("frontpage_lists").update({_id: coll}, + {$set:{frontpage:frontpage, accessed: get_time()}}, + {upsert:true}, function(err, docs){}); + }); + }); + }else{ + socket.emit("toast", "wrongpass"); + } + }); + } + }); + + socket.on('shuffle', function(pass) + { + if(pass !== undefined && pass !== null) + { + check_inlist(coll, guid, socket, name, offline); + var hash; + if(pass === "") hash = pass; + else hash = hash_pass(decrypt_string(socketid, pass)); + db.collection(coll).find({views:{$exists:true}}, function(err, docs){ + if(docs !== null && docs.length !== 0 && ((docs[0].adminpass == hash || docs[0].adminpass === "") || docs[0].shuffle === false)) + { + db.collection(coll).find({now_playing:false}).forEach(function(err, docs){ + if(!docs){ + send_list(coll, undefined, false, true, false, true); + socket.emit("toast", "shuffled"); + return; + }else{ + num = Math.floor(Math.random()*1000000); + db.collection(coll).update({id:docs.id}, {$set:{added:num}}); + } + }); + }else + socket.emit("toast", "wrongpass"); + }); + + var complete = function(tot, curr){ + if(tot == curr) + { + send_list(coll, undefined, false, true, false); + } + }; + }else + socket.emit("toast", "wrongpass"); + }); + + socket.on('change_channel', function(obj) + { + if(coll === undefined && obj !== undefined && obj.channel !== undefined){ + coll = obj.channel; + coll = emojiStrip(coll).toLowerCase(); + //coll = decodeURIComponent(coll); + coll = coll.replace("_", ""); + coll = encodeURIComponent(coll).replace(/\W/g, ''); + coll = filter.clean(coll); + } + left_channel(coll, guid, name, short_id, in_list, socket, true); + }); + + socket.on('disconnect', function() + { + left_channel(coll, guid, name, short_id, in_list, socket, false); + }); + + socket.on('reconnect_failed', function() + { + left_channel(coll, guid, name, short_id, in_list, socket, false); + }); + + socket.on('connect_timeout', function() + { + left_channel(coll, guid, name, short_id, in_list, socket, false); + }); + + socket.on('error', function() + { + left_channel(coll, guid, name, short_id, in_list, socket, false); + }); + + socket.on('pos', function(obj) + { + if(coll === undefined) { + coll = obj.channel; + coll = emojiStrip(coll).toLowerCase(); + //coll = decodeURIComponent(coll); + coll = coll.replace("_", ""); + coll = encodeURIComponent(coll).replace(/\W/g, ''); + coll = filter.clean(coll); + } + check_inlist(coll, guid, socket, name, offline); + send_play(coll, socket); + }); + +}); + +function decrypt_string(socket_id, pw){ + var decrypted = CryptoJS.AES.decrypt( + pw,socket_id, + { + mode: CryptoJS.mode.CBC, + padding: CryptoJS.pad.Pkcs7 + } + ); + + return decrypted.toString(CryptoJS.enc.Utf8); +} + +function left_channel(coll, guid, name, short_id, in_list, socket, change) +{ + if(lists[coll] !== undefined && contains(lists[coll], guid)) + { + var index = lists[coll].indexOf(guid); + if(index != -1) + { + lists[coll].splice(index, 1); + socket.leave(coll); + io.to(coll).emit("viewers", lists[coll].length); + io.to(coll).emit('chat', {from: name, msg: " left"}); + tot_view -= 1; + } + if(!change) { + remove_from_array(names.names, name); + delete names[guid]; + } + } + if(contains(offline_users, guid)) + { + var index = offline_users.indexOf(guid); + if(index != -1){ + offline_users.splice(index, 1); + tot_view -= 1; + } + } + + remove_from_array(unique_ids, short_id); +} + +function remove_from_array(array, element){ + if(contains(array, element)){ + var index = array.indexOf(element); + if(index != -1) + array.splice(index, 1); + } +} + +function get_name(guid){ + if(names[guid] !== undefined) return names[guid]; + + var name = rndName(guid, 8); + while(contains(names.names, name)){ + name = name + "_"; + } + + names[guid] = name; + names.names.push(name); + return name; +} + +function change_name(name, guid, oldname){ + + if(name.length > 9) return oldname; + + if(names[guid] == name) return false; + if(contains(names.names, name)){ + return change_name(name + "_", guid, oldname); + }else{ + return name; + } +} + +function update_frontpage(coll, id, title) +{ + db.collection("frontpage_lists").update( + {_id: coll}, + {$set:{id: id, title: title, accessed: get_time()}}, + {upsert: true}, function(err, returnDocs){}); +} + +function del(params, socket, socketid) +{ + if(params.id){ + var coll = emojiStrip(params.channel).toLowerCase(); + //coll = decodeURIComponent(coll); + coll = coll.replace("_", ""); + coll = encodeURIComponent(coll).replace(/\W/g, ''); + coll = filter.clean(coll); + db.collection(coll).find({views:{$exists:true}}, function(err, docs){ + if(docs !== null && docs.length !== 0 && docs[0].adminpass == hash_pass(decrypt_string(socketid, params.adminpass))) + { + db.collection(coll).find({id:params.id}, function(err, docs){ + dont_increment = true; + if(docs[0]){ + if(docs[0].type == "suggested"){ + dont_increment = false; + } + db.collection(coll).remove({id:params.id}, function(err, docs){ + socket.emit("toast", "deletesong"); + io.to(coll).emit("channel", {type:"deleted", value: params.id}); + if(dont_increment) db.collection("frontpage_lists").update({_id: coll}, {$inc: {count: -1}, $set:{accessed: get_time()}}, {upsert: true}); + }); + } + }); + + } + }); + } +} + +function check_inlist(coll, guid, socket, name, offline) +{ + if(!offline && coll != undefined){ + if(lists[coll] === undefined) + { + lists[coll] = []; + lists[coll].push(guid); + io.to(coll).emit("viewers", lists[coll].length); + socket.broadcast.to(coll).emit('chat', {from: name, msg: " joined"}); + + tot_view += 1; + }else if(!contains(lists[coll], guid)) + { + lists[coll].push(guid); + io.to(coll).emit("viewers", lists[coll].length); + socket.broadcast.to(coll).emit('chat', {from: name, msg: " joined"}); + tot_view += 1; + } + } else { + if(!contains(offline_users, guid) && coll != undefined) + { + offline_users.push(guid); + tot_view += 1; + } + } +} + +function hash_pass(adminpass) +{ + return crypto.createHash('sha256').update(adminpass).digest('base64'); +} + +function vote(coll, id, guid, socket, full_list, last) +{ + db.collection(coll).find({id:id, now_playing: false}, function(err, docs){ + if(docs !== null && docs.length > 0 && !contains(docs[0].guids, guid)) + { + db.collection(coll).update({id:id}, {$inc:{votes:1}, $set:{added:get_time()}, $push :{guids: guid}}, function(err, docs) + { + if((full_list && last) || (!full_list)) + socket.emit("toast", "voted"); + io.to(coll).emit("channel", {type: "vote", value: id, time: get_time()}); + }); + }else + { + socket.emit("toast", "alreadyvoted"); + } + }); +} + + +function change_song(coll, error, id) +{ + db.collection(coll).find({views:{$exists:true}}, function(err, docs){ + var startTime = docs[0].startTime; + if(docs !== null && docs.length !== 0) + { + db.collection(coll).aggregate([ + {$match:{views:{$exists: false}, type:{$ne: "suggested"}}}, + {$sort:{now_playing: -1, votes:-1, added:1, title: 1}}, + {$limit:2 + }], function(err, now_playing_doc){ + if((id && id == now_playing_doc[0].id) || !id) { + //db.collection(coll).find({now_playing:true}, function(err, now_playing_doc){ + if(error){ + request('http://img.youtube.com/vi/'+now_playing_doc[0].id+'/mqdefault.jpg', function (err, response, body) { + if (err || response.statusCode == 404) { + db.collection(coll).remove({now_playing:true, id:id}, function(err, docs){ + var next_song; + if(now_playing_doc.length == 2) next_song = now_playing_doc[1].id; + change_song_post(coll, next_song); + io.to(coll).emit("channel", {type: "deleted", value: now_playing_doc[0].id, removed: true}); + db.collection("frontpage_lists").update({_id: coll}, {$inc: {count: -1}, $set:{accessed: get_time()}}, {upsert: true}, function(err, docs){}); + }); + }else{ + if(skipped[coll] != get_time()){ + skipped[coll] = get_time(); + db.collection(coll).update({now_playing:true, id:id}, + {$set:{ + now_playing:false, + votes:0, + guids:[] + }},{multi:true}, function(err, docs){ + var next_song; + if(now_playing_doc.length == 2) next_song = now_playing_doc[1].id; + if(docs.n >= 1) change_song_post(coll, next_song); + }); + } + } + }); + + } else if(docs[0].removeplay === true){ + db.collection(coll).remove({now_playing:true, id:id}, function(err, docs){ + var next_song; + if(now_playing_doc.length == 2) next_song = now_playing_doc[1].id; + change_song_post(coll, next_song); + io.to(coll).emit("channel", {type: "deleted", value: now_playing_doc[0].id, removed: true}); + db.collection("frontpage_lists").update({_id: coll}, {$inc: {count: -1}, $set:{accessed: get_time()}}, {upsert: true + }, function(err, docs){}); + }); + } else { + if(skipped[coll] != get_time()){ + //skipped[coll] = get_time(); + db.collection(coll).update({now_playing:true, id:id}, + {$set:{ + now_playing:false, + votes:0, + guids:[] + }},{multi:true}, function(err, docs){ + var next_song; + if(now_playing_doc.length == 2) next_song = now_playing_doc[1].id; + if(docs.n >= 1) change_song_post(coll, next_song); + }); + } + } + } else { + return; + } + }); + } + }); +} + +function change_song_post(coll, next_song) +{ + db.collection(coll).aggregate([ + {$match:{now_playing:false, type:{$ne: "suggested"}}}, + {$sort:{votes:-1, added:1, title: 1}}, + {$limit:1 + }], function(err, docs){ + if(docs !== null && docs.length > 0){ + var id = docs[0].id; + if(next_song && next_song != id) { + return; + } + db.collection(coll).update({id:id}, + {$set:{ + now_playing:true, + votes:0, + guids:[], + added:get_time() + }}, function(err, returnDocs){ + db.collection(coll).update({views:{$exists:true}}, + {$set:{startTime:get_time(), skips:[] + }}, function(err, returnDocs){ + db.collection(coll).find({views:{$exists:true}}, function(err, conf){ + io.to(coll).emit("channel", {type: "song_change", time: get_time(), remove: conf[0].removeplay}); + send_play(coll); + locks[coll] = false; + update_frontpage(coll, docs[0].id, docs[0].title); + }); + }); + }); + } + }); +} + +function send_list(coll, socket, send, list_send, configs, shuffled) +{ + db.collection(coll).find({views:{$exists:true}}, function(err, conf){ + db.collection(coll).find({views:{$exists:false}, type: {$ne: "suggested"}}, function(err, docs) + { + if(docs.length > 0) { + db.collection(coll).find({now_playing: true}, function(err, np_docs) { + if(np_docs.length == 0) { + db.collection(coll).aggregate([ + {$match:{views:{$exists: false}, type:{$ne: "suggested"}}}, + {$sort:{now_playing: -1, votes:-1, added:1, title: 1}}, + {$limit:1 + }], function(err, now_playing_doc){ + if(now_playing_doc[0].now_playing == false) { + db.collection(coll).update({id:now_playing_doc[0].id}, + {$set:{ + now_playing:true, + votes:0, + guids:[], + added:get_time() + }}, function(err, returnDocs){ + db.collection(coll).update({views:{$exists:true}}, + {$set:{startTime:get_time(), skips:[] + }}, function(err, returnDocs){ + update_frontpage(coll, now_playing_doc[0].id, now_playing_doc[0].title); + send_list(coll, socket, send, list_send, configs, shuffled); + }); + }); + } + }); + } else { + if(list_send) + io.to(coll).emit("channel", {type: "list", playlist: docs, shuffled: shuffled}); + else if(!list_send) + socket.emit("channel", {type: "list", playlist: docs, shuffled: shuffled}); + if(socket === undefined && send) + send_play(coll); + else if(send) + send_play(coll, socket); + } + }); + } else { + if(list_send) + io.to(coll).emit("channel", {type: "list", playlist: docs, shuffled: shuffled}); + else if(!list_send) + socket.emit("channel", {type: "list", playlist: docs, shuffled: shuffled}); + if(socket === undefined && send) + send_play(coll); + else if(send) + send_play(coll, socket); + } + }); + + + if(configs) + { + if(conf[0].adminpass !== "") conf[0].adminpass = true; + io.to(coll).emit("conf", conf); + } + }); + if(socket){ + db.collection(coll).find({type:"suggested"}).sort({added: 1}, function(err, sugg){ + socket.emit("suggested", sugg); + }); + } +} + +function send_play(coll, socket) +{ + db.collection(coll).find({now_playing:true}, function(err, np){ + db.collection(coll).find({views:{$exists:true}}, function(err, conf){ + + if(err !== null) console.log(err); + try{ + if(get_time()-conf[0].startTime > np[0].duration){ + change_song(coll, false, np[0].id); + }else if(conf !== null && conf !== undefined && conf.length !== 0) + { + if(conf[0].adminpass !== "") conf[0].adminpass = true; + toSend = {np: np, conf: conf, time: get_time()}; + if(socket === undefined) + io.to(coll).emit("np", toSend); + else{ + socket.emit("np", toSend); + } + } + }catch(e){ + socket.emit("np", {}); + } + }); + }); +} + +function get_time() +{ + var d = new Date(); + var time = Math.floor(d.getTime() / 1000); + return time; +} + +function contains(a, obj) { + try{ + var i = a.length; + while (i--) { + if (a[i] === obj) { + return true; + } + } + return false; + }catch(e){ + return false; + } +} + +function rndName(seed, len) { + var vowels = ['a', 'e', 'i', 'o', 'u']; + consts = ['b', 'c', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'm', 'n', 'p', 'r', 's', 't', 'v', 'w', 'x', 'y']; + //len = 8; + len = Math.floor(len); + word = ''; + is_vowel = false; + var arr; + for (var i = 0; i < len; i++) { + if (is_vowel) arr = vowels; + else arr = consts; + is_vowel = !is_vowel; + word += arr[(seed[i%seed.length].charCodeAt()+i) % (arr.length-1)]; + } + return word; +} + +function uniqueID(seed, minlen){ + var len = minlen; + var id = rndName(seed, minlen); + + while( contains(unique_ids, id) && len<=8){ + id = rndName(String(len)+id, len); + len += 0.1; // try 10 times at each length + } + return id; +} diff --git a/public/css/embed.css b/server/views/assets/css/embed.css similarity index 100% rename from public/css/embed.css rename to server/views/assets/css/embed.css diff --git a/public/css/materialize.min.css b/server/views/assets/css/materialize.min.css similarity index 100% rename from public/css/materialize.min.css rename to server/views/assets/css/materialize.min.css diff --git a/public/css/style.css b/server/views/assets/css/style.css similarity index 99% rename from public/css/style.css rename to server/views/assets/css/style.css index 6b7ceae5..461c47ff 100755 --- a/public/css/style.css +++ b/server/views/assets/css/style.css @@ -1361,7 +1361,7 @@ ul #chat-log{ } -#channelpage{ +.channelpage{ background-color:#2D2D2D; -webkit-transition: background-color .5s ease; -moz-transition: background-color .5s ease; @@ -2220,7 +2220,7 @@ nav ul li:hover, nav ul li.active { } .page-footer{ - margin-top:40px !important; + padding-top: 40px !important; } .padding-bottom-novideo{ diff --git a/public/dist/callback.min.js b/server/views/assets/dist/callback.min.js similarity index 100% rename from public/dist/callback.min.js rename to server/views/assets/dist/callback.min.js diff --git a/server/views/assets/dist/embed.min.js b/server/views/assets/dist/embed.min.js new file mode 100755 index 00000000..8e72e554 --- /dev/null +++ b/server/views/assets/dist/embed.min.js @@ -0,0 +1,2 @@ +!function(){function e(){s.on("np",i.youtube_listener)}function t(){s.on("channel",d.channel_function)}function a(e){$("#volume").slider("value",e),c.setVolume(e)}var i={loaded:!0,before_load:"",after_load:"",player:"",stopInterval:!1,fireplace:"",youtube_listener:function(e){var t;try{t=i.player.getPlayerState()}catch(e){t=null}if(!(!S&&(null!=t||I)||S&&(null==t||I)||!S&&(null==t||I)||S&&t==-1)||S&&prev_chan_player==B)C||i.durationSetter(),duration=i.player.getDuration();else{prev_chan_player=B,I=!1,i.loaded=!1,n.log("--------youtube_listener--------"),n.log("Received: "),n.log(e),n.log("paused variable: "+m),n.log("mobile_beginning variable: "+k);try{n.log("getVideoUrl(): "+i.player.getVideoUrl().split("v=")[1])}catch(e){}if(n.log("video_id variable: "+o),n.log("---------------------------------"),e.np){if(m)i.getTitle(e.np[0].title,viewers),n.mobilecheck()||i.notifyUser(e.np[0].id,e.np[0].title),T||i.stopVideo(),o=e.np[0].id,conf=e.conf[0],time=e.time,l=time-conf.startTime,u=e.np[0].title,duration=e.np[0].duration,i.setBGimage(o);else if(!m){void 0===p?p=e.np[0].id:p!=o&&(p=o),o=e.np[0].id,conf=e.conf[0],time=e.time,l=time-conf.startTime,u=e.np[0].title,duration=e.np[0].duration,k&&n.mobilecheck()&&0===l&&!T&&(l=1);try{full_playlist[0].id!=o||k||d.song_change(full_playlist[0].added),Suggestions.fetchYoutubeSuggests(o)}catch(e){}if(i.getTitle(u,viewers),i.setBGimage(o),f&&!window.MSStream)try{(i.player.getVideoUrl().split("v=")[1]!=o||T)&&(i.loadVideoById(o),n.mobilecheck()||i.notifyUser(o,u),i.seekTo(l),m&&!T&&i.pauseVideo()),m||(k&&!T||i.playVideo(),C||i.durationSetter()),(i.player.getDuration()>l||0===i.player.getDuration()||T||i.player.getCurrentTime()!=l)&&i.seekTo(l),i.after_load=o,i.loaded||setTimeout(function(){i.loaded=!0},500)}catch(e){T&&(i.loadVideoById(o),i.seekTo(l)),C||T||i.durationSetter()}else i.getTitle(u,viewers)}}else{document.getElementById("song-title").innerHTML="Empty channel. Add some songs!",window.MSStream||T||$("#player_overlay").toggleClass("hide");try{T||i.stopVideo()}catch(e){}}}},onPlayerStateChange:function(e){n.log("-------onPlayerStateChange------"),n.log("New state\nState: "),n.log(e);try{n.log("Duration: "+i.player.getDuration(),"Current time: "+i.player.getCurrentTime()),n.log("getVideoUrl(): "+i.player.getVideoUrl().split("v=")[1])}catch(e){}switch(n.log("video_id variable: "+o),n.log("---------------------------------"),e.data){case-1:break;case 0:playing=!1,m=!1,S?i.playNext():s.emit("end",{id:o,channel:B.toLowerCase()});break;case 1:playing=!0,beginning&&n.mobilecheck()&&!T&&(i.pauseVideo(),beginning=!1,k=!1,setTimeout(function(){n.mobilecheck()&&($("#playpause").css("visibility","visible"),$("#playpause").css("pointer-events","all"),$("#channel-load").css("display","none"))},100)),_||"/"==window.location.pathname||T||n.addClass("#player_overlay","hide"),"/"!=window.location.pathname&&(1==document.getElementById("play").className.split(" ").length&&$("#play").toggleClass("hide"),2==document.getElementById("pause").className.split(" ").length&&$("#pause").toggleClass("hide")),m&&!S&&(s.emit("pos",{channel:B.toLowerCase()}),m=!1);break;case 2:T||(m=!0,"/"!=window.location.pathname&&c.play_pause_show(),k=!0);break;case 3:}},playVideo:function(){T?(castSession.sendMessage("urn:x-cast:zoff.me",{type:"playVideo"}),chrome.cast.media.GenericMediaMetadata({metadataType:"GENERIC",title:u,image:"https://img.youtube.com/vi/"+o+"/mqdefault.jpg"}),chrome.cast.Image("https://img.youtube.com/vi/"+o+"/mqdefault.jpg"),$("#pause").hasClass("hide")&&($("#play").toggleClass("hide"),$("#pause").toggleClass("hide"))):i.player.playVideo()},pauseVideo:function(){T?(castSession.sendMessage("urn:x-cast:zoff.me",{type:"pauseVideo"}),$("#play").hasClass("hide")&&($("#play").toggleClass("hide"),$("#pause").toggleClass("hide"))):i.player.pauseVideo()},seekTo:function(e){T?castSession.sendMessage("urn:x-cast:zoff.me",{type:"seekTo",seekTo:e}):S?i.player.seekTo(0):i.player.seekTo(e)},loadVideoById:function(e){T?(castSession.sendMessage("urn:x-cast:zoff.me",{type:"loadVideo",videoId:e}),chrome.cast.media.GenericMediaMetadata({metadataType:"GENERIC",title:u,image:"https://img.youtube.com/vi/"+e+"/mqdefault.jpg"}),chrome.cast.Image("https://img.youtube.com/vi/"+e+"/mqdefault.jpg")):i.player.loadVideoById(e,0)},stopVideo:function(){if(T)castSession.sendMessage("urn:x-cast:zoff.me",{type:"stopVideo"});else try{i.player.stopVideo()}catch(e){}},setVolume:function(e){T?castSession.setVolume(e/100):i.player.setVolume(e)},playNext:function(){var e=full_playlist[0];o=e.id,time=(new Date).getTime(),u=e.title,duration=e.duration,i.getTitle(u,viewers),i.setBGimage(o),T?(castSession.sendMessage("urn:x-cast:zoff.me",{type:"loadVideo",videoId:o}),chrome.cast.media.GenericMediaMetadata({metadataType:"GENERIC",title:u,image:"https://img.youtube.com/vi/"+o+"/mqdefault.jpg"}),chrome.cast.Image("https://img.youtube.com/vi/"+o+"/mqdefault.jpg")):i.loadVideoById(o),d.channel_function({type:"song_change",time:time})},sendNext:function(e){T&&castSession.sendMessage("urn:x-cast:zoff.me",{type:"nextVideo",title:e.title,videoId:e.videoId})},getTitle:function(e,t){var a="visibility",i=decodeURIComponent(e);if("/"!=window.location.pathname){var n=document.getElementById("song-title"),l=document.getElementById("viewers");n.innerHTML=i,l.innerHTML=a+" "+t,n.title=i,T&&($("#player_overlay").css("background","url(https://img.youtube.com/vi/"+o+"/hqdefault.jpg)"),$("#player_overlay").css("background-position","center"),$("#player_overlay").css("background-size","100%"),$("#player_overlay").css("background-color","black"),$("#player_overlay").css("background-repeat","no-repeat"))}document.title=i+" • Zoff / "+B},errorHandler:function(e){5==e.data||100==e.data||101==e.data||150==e.data?(curr_playing=i.player.getVideoUrl().replace("https://www.youtube.com/watch?v=",""),s.emit("skip",{error:e.data,id:o,pass:x,channel:B.toLowerCase})):void 0!==o&&i.loadVideoById(o)},onPlayerReady:function(e){try{beginning=!0,f=!0,window.MSStream||(n.mobilecheck()?($("#playpause").css("visibility","hidden"),$("#playpause").css("pointer-events","none")):$("#channel-load").css("display","none"),$("#player").css("opacity","1"),$("#controls").css("opacity","1"),$(".playlist").css("opacity","1"),i.loadVideoById(o),!M||n.mobilecheck()&&!T||i.playVideo(),C||i.durationSetter(),_?setTimeout(function(){i.player.seekTo(l),M||(i.player.pauseVideo(),c.play_pause_show())},1e3):i.seekTo(l)),i.readyLooks(),c.initYoutubeControls(i.player),c.initSlider(),i.player.setVolume(Crypt.get_volume()),$(".video-container").removeClass("no-opacity")}catch(e){}},readyLooks:function(){i.setBGimage(o)},setBGimage:function(e){if(void 0!==e&&!_){var t=new Image;t.onload=function(){var e=new ColorThief,a=e.getColor(t);"/"!=window.location.pathname&&(document.getElementsByTagName("body")[0].style.backgroundColor=n.rgbToHsl(a,!0),$("meta[name=theme-color]").attr("content",n.rgbToHex(a[0],a[1],a[2])))},t.crossOrigin="Anonymous",t.src="https://zoff.me:8081/https://img.youtube.com/vi/"+e+"/mqdefault.jpg"}},set_width:function(e){if($(".video-container").width(e),!n.mobilecheck())if($(window).width()>769){var t=$(window).width()-$(".control-list").width()-$(".zbrand").outerWidth()-$(".brand-logo-navigate").outerWidth()-66;title_width=t,$(".title-container").width(title_width)}else $(".title-container").width("100%")},notifyUser:function(e,t){if(t=t.replace(/\\\'/g,"'").replace(/"/g,"'").replace(/&/g,"&"),"granted"===Notification.permission&&document.hidden){var a=new Notification("Now Playing",{body:t,icon:"https://i.ytimg.com/vi/"+e+"/mqdefault.jpg",iconUrl:"http://i.ytimg.com/vi/"+e+"/mqdefault.jpg"});a.onclick=function(e){window.focus(),this.cancel()},setTimeout(function(){a.close()},5e3)}},setup_all_listeners:function(){get_list_listener(),e(),setup_admin_listener(),setup_chat_listener(),t()},onYouTubeIframeAPIReady:function(){i.player=new YT.Player("player",{videoId:o,playerVars:{rel:"0",wmode:"transparent",controls:"0",fs:"0",iv_load_policy:"3",theme:"light",color:"white",showinfo:0},events:{onReady:i.onPlayerReady,onStateChange:i.onPlayerStateChange,onError:i.errorHandler}})},createFireplacePlayer:function(){i.fireplace=new YT.Player("fireplace_player",{videoId:"L_LUpnjgPso",playerVars:{rel:"0",wmode:"transparent",controls:"0",fs:"0",iv_load_policy:"3",theme:"light",color:"white",showinfo:0},events:{onReady:i.onFireplaceReady,onStateChange:i.onFireplaceChange}})},onFireplaceReady:function(){i.fireplace.playVideo()},onFireplaceChange:function(e){switch(e.data){case 0:i.fireplace.seekTo(0),i.fireplace.playVideo();break;case 2:i.fireplace.playVideo()}},durationSetter:function(){if(void 0!==duration)try{i.stopInterval||(C=!0),dMinutes=Math.floor(duration/60),dSeconds=duration-60*dMinutes,currDurr=void 0!==i.player.getCurrentTime()?Math.floor(i.player.getCurrentTime()):l,currDurr>duration&&(currDurr=duration),minutes=Math.floor(currDurr/60),seconds=currDurr-60*minutes,document.getElementById("duration").innerHTML=n.pad(minutes)+":"+n.pad(seconds)+" / "+n.pad(dMinutes)+":"+n.pad(dSeconds),per=100/duration*currDurr,per>=100?per=100:0===duration&&(per=0),N||$("#bar").width(per+"%")}catch(e){}i.stopInterval||setTimeout(i.durationSetter,1e3)},loadPlayer:function(){if(1==$("script[src='https://www.youtube.com/iframe_api']").length)try{i.onYouTubeIframeAPIReady()}catch(e){console.error("Seems YouTube iFrame script isn't correctly loaded. Please reload the page.")}else tag=document.createElement("script"),tag.src="https://www.youtube.com/iframe_api",firstScriptTag=document.getElementsByTagName("script")[0],firstScriptTag.parentNode.insertBefore(tag,firstScriptTag)}},n={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(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|Android|Silk|lge |maemo|midp|mmp|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|phone)|xda|xiino/i.test(navigator.userAgent)||/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(navigator.userAgent.substr(0,4)))&&(e=!0),e},predicate:function(){for(var e,t,a,i=[],n=arguments.length,l=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()-lastSample>=2*SAMPLE_RATE&&(s.removeAllListeners(),s.disconnect(),s.connect(),i.setup_all_listeners()),lastSample=Date.now(),setTimeout(n.sample,SAMPLE_RATE)},loadjsfile:function(e){if(filesadded.indexOf("["+e+"]")==-1){var t=document.createElement("script");t.setAttribute("type","text/javascript"),t.setAttribute("src",e),document.getElementsByTagName("head")[0].appendChild(t),filesadded+="["+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},secondsToOther:function(e){var t=e,a=Math.floor(t/60);return t-=60*a,[a,t]},rgbToHsl:function(e,t){r=e[0],g=e[1],b=e[2],r/=255,g/=255,b/=255;var a,i,n=Math.max(r,g,b),l=Math.min(r,g,b),s=(n+l)/2;if(n==l)a=i=0;else{var o=n-l;switch(i=s>.5?o/(2-n-l):o/(n+l),n){case r:a=(g-b)/o+(g.5&&t?s=.4:s<.65&&!t&&(s=.65),"hsl("+Math.floor(360*a)+", "+Math.floor(100*i)+"%, "+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"#"+n.componentToHex(e)+n.componentToHex(t)+n.componentToHex(a)},upperFirst:function(e){return e.substring(0,1).toUpperCase()+e.substring(1).toLowerCase()},addClass:function(e,t){n.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"),$.ajax({type:"POST",data:{from:e,message:t},url:"/api/mail",success:function(e){"success"==e?($("#contact-container").empty(),$("#contact-container").html("Mail has been sent, we'll be back with you shortly.")):($("#contact-container").empty(),$("#contact-container").html("Something went wrong, sorry about that. You could instead try with your own mail-client: contact@zoff.no"))}}))}};$(document).on("submit","#contact-form",function(e){e.preventDefault();var t=$("#contact-form-message").val(),a=$("#contact-form-from").val();n.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=0&&e<=33?(1==document.getElementById("v-full").className.split(" ").length&&($("#v-full").toggleClass("hide"),$("#v-full-overlay").toggleClass("hide")),1==document.getElementById("v-medium").className.split(" ").length&&($("#v-medium").toggleClass("hide"),$("#v-medium-overlay").toggleClass("hide")),2==document.getElementById("v-low").className.split(" ").length&&($("#v-low").toggleClass("hide"),$("#v-low-overlay").toggleClass("hide")),1==document.getElementById("v-mute").className.split(" ").length&&($("#v-mute").toggleClass("hide"),$("#v-mute-overlay").toggleClass("hide"))):e>=34&&e<=66?(1==document.getElementById("v-full").className.split(" ").length&&($("#v-full").toggleClass("hide"),$("#v-full-overlay").toggleClass("hide")),2==document.getElementById("v-medium").className.split(" ").length&&($("#v-medium").toggleClass("hide"),$("#v-medium-overlay").toggleClass("hide")),1==document.getElementById("v-low").className.split(" ").length&&($("#v-low").toggleClass("hide"),$("#v-low-overlay").toggleClass("hide")),1==document.getElementById("v-mute").className.split(" ").length&&($("#v-mute").toggleClass("hide"),$("#v-mute-overlay").toggleClass("hide"))):e>=67&&e<=100&&(2==document.getElementById("v-full").className.split(" ").length&&($("#v-full").toggleClass("hide"),$("#v-full-overlay").toggleClass("hide")),1==document.getElementById("v-medium").className.split(" ").length&&($("#v-medium").toggleClass("hide"),$("#v-medium-overlay").toggleClass("hide")),1==document.getElementById("v-low").className.split(" ").length&&($("#v-low").toggleClass("hide"),$("#v-low-overlay").toggleClass("hide")),1==document.getElementById("v-mute").className.split(" ").length&&($("#v-mute").toggleClass("hide"),$("#v-mute-overlay").toggleClass("hide")))},playPause:function(){state=i.player.getPlayerState(),button=document.getElementById("playpause"),1==state?i.pauseVideo():2==state&&i.playVideo()},volumeOptions:function(){T||(i.player.isMuted()?(i.player.unMute(),w=i.player.getVolume(),$("#volume").slider("value",i.player.getVolume())):(i.player.mute(),$("#volume").slider("value",0)))},hoverMute:function(e){w=i.player.getVolume()}},d={empty:!1,page:0,can_fit:Math.round($("#wrapper").height()/71),element_height:$("#wrapper").height()/Math.round($("#wrapper").height()/71)-25,uris:[],not_found:[],num_songs:0,channel_function:function(e){switch(e.type){case"list":S&&(!S||e.shuffled)||S&&prev_chan_list==B?S&&prev_chan_list==B&&void 0!=full_playlist&&!e.shuffled&&(d.populate_list(full_playlist,!0),T&&i.sendNext({title:full_playlist[0].title,videoId:full_playlist[0].id})):(prev_chan_list=B,d.populate_list(e.playlist),T&&i.sendNext({title:full_playlist[0].title,videoId:full_playlist[0].id}));break;case"added":d.added_song(e.value),T&&i.sendNext({title:full_playlist[0].title,videoId:full_playlist[0].id});break;case"deleted":d.deleted_song(e.value,e.removed);break;case"vote":S||(d.voted_song(e.value,e.time),T&&i.sendNext({title:full_playlist[0].title,videoId:full_playlist[0].id}));break;case"song_change":"/"!=window.location.pathname&&d.song_change(e.time,e.remove),T&&i.sendNext({title:full_playlist[0].title,videoId:full_playlist[0].id})}},insertAtBeginning:function(e,t){var a=0==d.page?"":"none",i=d.generateSong(e,t,!1,!0,!1,a,!1);$("#wrapper").append(i)},insertAtIndex:function(e,t,a){var i=d.getIndexOfSong(e.id),n="none";if(!e.now_playing){i>=d.page&&i div:nth-child("+i+")").after(l);var s=$("#wrapper").children()[i];$(s).css("display",n),"block"==n&&$("#wrapper").children().length>=d.page+d.can_fit+1?$($("#wrapper").children()[d.page+d.can_fit]).css("display","none"):i=0?$($("#wrapper").children()[d.page]).css("display","block"):$("#wrapper").children().length>d.page+d.can_fit&&$($("#wrapper").children()[d.page+d.can_fit-1]).css("display","block"),a&&d.page>0&&$($("#wrapper").children()[d.page-1]).css("display","none"),t&&setTimeout(function(){$(s).css("height",d.element_height)},5)}},populate_list:function(e,t){if(n.mobilecheck()||_?_?(d.can_fit=Math.round($("#wrapper").height()/91)+1,d.element_height=$("#wrapper").height()/d.can_fit-4):(d.can_fit=Math.round(($(window).height()-$(".tabs").height()-$("header").height()-66)/71)+1,d.element_height=($(window).height()-$(".tabs").height()-$("header").height()-66)/d.can_fit-6):(d.can_fit=Math.round($("#wrapper").height()/71)+1,d.element_height=$("#wrapper").height()/d.can_fit-5.3),d.element_height<55.2&&(d.element_height=55.2),void 0===h&&(h=$("#list-song-html").html()),full_playlist=e,S&&!t)for(var a=0;a1?($.each(full_playlist,function(e,t){if(!t.now_playing){var a=d.generateSong(t,!1,v,!0,!1,"",!0);$("#wrapper").append(a)}}),$("#wrapper").children().length>d.can_fit&&!$("#pageButtons").length?($('
    first_pagefirst_pagenavigate_before prevnavigate_before prev 1 next navigate_nextnext navigate_nextlast_pagelast_page
    ').insertAfter("#wrapper"),$(".prev_page").css("display","none"),$(".first_page").css("display","none"),$(".next_page_hide").css("display","none"),$(".last_page_hide").css("display","none")):$("#pageButtons").length||($('
    first_pagefirst_pagenavigate_before prevnavigate_before prev 1 next navigate_nextnext navigate_nextlast_pagelast_page
    ').insertAfter("#wrapper"),$(".prev_page").css("display","none"),$(".next_page").css("display","none"),$(".last_page").css("display","none"),$(".first_page").css("display","none"),$(".next_page_hide").css("display","inline-flex"),$(".prev_page_hide").css("display","inline-flex")),d.dynamicContentPage(-10)):(d.empty=!0,$("#wrapper").html("The playlist is empty."),$("#pageButtons").length||$('
    first_pagefirst_pagenavigate_before prevnavigate_before prev 1 next navigate_nextnext navigate_nextlast_pagelast_page
    ').insertAfter("#wrapper"),$(".prev_page").css("display","none"),$(".next_page").css("display","none"),$(".last_page").css("display","none"),$(".last_page_hide").css("display","inline-flex"),$(".first_page").css("display","none"),$(".next_page_hide").css("display","inline-flex"),$(".prev_page_hide").css("display","inline-flex")),$("#settings").css("visibility","visible"),$("#settings").css("opacity","1"),$("#wrapper").css("opacity","1")},dynamicContentPageJumpTo:function(e){e*=d.can_fit,(e>d.page||e0&&"none"==$(".prev_page").css("display")&&($(".prev_page").css("display","inline-flex"),$(".prev_page_hide").css("display","none"),$(".first_page").css("display","inline-flex"),$(".first_page_hide").css("display","none")),d.page+d.can_fit>=$("#wrapper").children().length&&($(".next_page_hide").css("display","inline-flex"),$(".next_page").css("display","none"),$(".last_page_hide").css("display","inline-flex"),$(".last_page").css("display","none")),$("#pageNumber").html(d.page/d.can_fit+1))},dynamicContentPage:function(e){1==e?($("#wrapper").children().slice(d.page,d.page+d.can_fit).hide(),d.page=d.page+d.can_fit,$("#wrapper").children().slice(d.page,d.page+d.can_fit).show(),d.page>0&&"none"==$(".prev_page").css("display")&&($(".prev_page").css("display","inline-flex"),$(".prev_page_hide").css("display","none"),$(".first_page").css("display","inline-flex"),$(".first_page_hide").css("display","none")),d.page+d.can_fit>=$("#wrapper").children().length&&($(".next_page_hide").css("display","inline-flex"),$(".next_page").css("display","none"),$(".last_page_hide").css("display","inline-flex"),$(".last_page").css("display","none"))):10==e?($("#wrapper").children().slice(d.page,d.page+d.can_fit).hide(),d.page=Math.floor(($("#wrapper").children().length-1)/d.can_fit)*d.can_fit,$("#wrapper").children().slice(d.page,d.page+d.can_fit).show(),d.page>0&&"none"==$(".prev_page").css("display")&&($(".prev_page").css("display","inline-flex"),$(".prev_page_hide").css("display","none"),$(".first_page").css("display","inline-flex"),$(".first_page_hide").css("display","none")),d.page+d.can_fit>=$("#wrapper").children().length&&($(".next_page_hide").css("display","inline-flex"),$(".next_page").css("display","none"),$(".last_page_hide").css("display","inline-flex"),$(".last_page").css("display","none"))):e==-10?($("#wrapper").children().slice(d.page,d.page+d.can_fit).hide(),d.page=0,$("#wrapper").children().slice(d.page,d.page+d.can_fit).show(),0==d.page&&"none"!=$(".prev_page").css("display")?($(".prev_page").css("display","none"),$(".prev_page_hide").css("display","inline-flex"),$(".first_page").css("display","none"),$(".first_page_hide").css("display","inline-flex")):"none"==$(".prev_page").css("display")?($(".prev_page_hide").css("display","inline-flex"),$(".first_page_hide").css("display","inline-flex")):($(".prev_page_hide").css("display","none"),$(".first_page_hide").css("display","none")),d.page+d.can_fit<$("#wrapper").children().length&&($(".next_page_hide").css("display","none"),$(".next_page").css("display","inline-flex"),$(".last_page_hide").css("display","none"),$(".last_page").css("display","inline-flex"))):($("#wrapper").children().slice(d.page-d.can_fit,d.page).show(),$("#wrapper").children().slice(d.page,d.page+d.can_fit).hide(),d.page=d.page-d.can_fit<0?0:d.page-d.can_fit,0==d.page&&"none"!=$(".prev_page").css("display")?($(".prev_page").css("display","none"),$(".prev_page_hide").css("display","inline-flex"),$(".first_page").css("display","none"),$(".first_page_hide").css("display","inline-flex")):"none"==$(".prev_page").css("display")?($(".prev_page_hide").css("display","inline-flex"),$(".first_page_hide").css("display","inline-flex")):($(".prev_page_hide").css("display","none"),$(".first_page_hide").css("display","none")),d.page+d.can_fit<$("#wrapper").children().length&&($(".next_page_hide").css("display","none"),$(".next_page").css("display","inline-flex"),$(".last_page_hide").css("display","none"),$(".last_page").css("display","inline-flex"))),$("#pageNumber").html(d.page/d.can_fit+1)},added_song:function(e){var t;if(void 0!=e){if(0!==full_playlist.length&&(t=full_playlist.pop()),full_playlist.push(e),d.sortList(),t&&full_playlist.push(t),$("#suggested-"+e.id).length>0){number_suggested-=1,number_suggested<0&&(number_suggested=0);var a=number_suggested>9?"9+":number_suggested;$(".suggested-link span.badge.new.white").hasClass("hide")||0!=a||$(".suggested-link span.badge.new.white").addClass("hide"),$(".suggested-link span.badge.new.white").text(a)}$("#suggested-"+e.id).remove(),d.empty&&(d.empty=!1),$("#empty-channel-message").remove(),d.insertAtIndex(e,!0),$($("#wrapper").children()[d.page+d.can_fit]).css("display","none"),$("#wrapper").children().length>d.page+d.can_fit?($(".next_page_hide").css("display","none"),$(".next_page").removeClass("hide"),$(".last_page_hide").css("display","none"),$(".next_page").css("display","inline-flex"),$(".last_page").css("display","inline-flex")):($(".next_page_hide").css("display","inline-flex"), +$(".next_page").css("display","none"))}},deleted_song:function(e,t){try{var a=d.getIndexOfSong(e),n=$("#wrapper").children()[a];t||(n.style.height=0),a=0?($($("#wrapper").children()[d.page]).css("height",0),$($("#wrapper").children()[d.page]).css("display","block"),$($("#wrapper").children()[d.page]).css("height",d.element_height)):$("#wrapper").children().length>d.page+d.can_fit&&($($("#wrapper").children()[d.page+d.can_fit]).css("height",0),$($("#wrapper").children()[d.page+d.can_fit]).css("display","block"),$($("#wrapper").children()[d.page+d.can_fit]).css("height",d.element_height)),d.page>=$("#wrapper").children().length-1?(d.dynamicContentPage(-1),$(".next_page_hide").css("display","inline-flex"),$(".next_page").css("display","none"),$(".last_page_hide").css("display","inline-flex"),$(".last_page").css("display","none")):d.page+d.can_fit+1>=$("#wrapper").children().length-1&&($(".next_page_hide").css("display","inline-flex"),$(".next_page").css("display","none"),$(".last_page_hide").css("display","inline-flex"),$(".last_page").css("display","none")),setTimeout(function(){t||$("#"+e).remove(),full_playlist.splice(d.getIndexOfSong(e),1),T&&i.sendNext({title:full_playlist[0].title,videoId:full_playlist[0].id})},305),t&&$("#"+e).remove()}catch(t){full_playlist.splice(d.getIndexOfSong(e),1),d.empty||($("#"+e).remove(),a=0?$($("#wrapper").children()[d.page-1]).css("display","block"):$("#wrapper").children().length>d.page+d.can_fit&&$($("#wrapper").children()[d.page+(d.can_fit-1)]).css("display","block"),T&&i.sendNext({title:full_playlist[0].title,videoId:full_playlist[0].id}))}full_playlist.length<=2&&(d.empty=!0,$("#wrapper").html("The playlist is empty.")),$("#suggested-"+e).remove(),d.page+d.can_fit<$("#wrapper").children().length+1,d.page>=$("#wrapper").children().length&&d.dynamicContentPage(-1),Suggestions.checkUserEmpty()},voted_song:function(e,t){var a=d.getIndexOfSong(e),i=full_playlist[a];full_playlist[a].votes+=1,full_playlist[a].added=t,d.sortList(),$("#"+e).remove(),d.insertAtIndex(i,!1)},song_change:function(e,t){try{var a=full_playlist.length-1;$("#wrapper").children()[0].remove(),0===$("#wrapper").children().length&&(d.empty=!0,$("#wrapper").html("The playlist is empty.")),full_playlist[0].now_playing=!0,full_playlist[0].votes=0,full_playlist[0].guids=[],full_playlist[0].added=e,t?delete full_playlist[a]:full_playlist[a].now_playing=!1,n.log("---------------------------"),n.log("---SONG ON FIRST INDEX-----"),n.log(full_playlist[0]),n.log("---------------------------"),full_playlist.push(full_playlist.shift()),t||d.insertAtIndex(full_playlist[a-1],!1,!0)}catch(e){}},vote:function(e,t){return!S||"del"==t&&hasadmin&&!y&&""!=x?s.emit("vote",{channel:B,id:e,type:t,adminpass:x}):"pos"==t?d.voted_song(e,(new Date).getTime()/1e3):d.deleted_song(e),!0},skip:function(){return S?i.playNext():s.emit("skip",{pass:x,id:o,channel:B.toLowerCase()}),!0},exportToSpotify:function(){$.ajax({type:"GET",url:"https://api.spotify.com/v1/me",headers:{Authorization:"Bearer "+access_token_data.access_token},success:function(e){var t=e.id;$("#playlist_loader_export").removeClass("hide"),$(".exported-list-container").removeClass("hide"),$.ajax({type:"POST",url:"https://api.spotify.com/v1/users/"+t+"/playlists",headers:{Authorization:"Bearer "+access_token_data.access_token,"Content-Type":"application/json"},data:JSON.stringify({name:B.toLowerCase()+" - Zoff",public:!0}),success:function(e){var a=e.id;$.each(full_playlist,function(e,i){d.searchSpotify(i,a,t)})}})}})},searchSpotify:function(e,t,a){var i=e.title,l=e.title.toLowerCase().replace("-"," ");l=l.replace("official hd video",""),l=l.replace("unofficial video",""),l=l.replace("studio footage",""),l=l.replace("great song",""),l=l.replace("-"," "),l=l.replace("-"," "),l=l.replace(" hq "," "),l=l.replace("lyric video",""),l=l.replace("lyrics video",""),l=l.replace("album version",""),l=l.replace("drive original movie soundtrack",""),l=l.replace("original movie soundtrack",""),l=l.replace("live sessions",""),l=l.replace("audio only",""),l=l.replace("audio",""),l=l.replace("(new)",""),l=l.replace(" by "," "),l=l.replace(" vs "," "),l=l.replace("(full)"," "),l=l.replace("(video)"," "),l=l.replace("&"," "),l=l.replace("with lyrics",""),l=l.replace("lyrics",""),l=l.replace("w/",""),l=l.replace("w/",""),l=l.replace("official video",""),l=l.replace("studio version",""),l=l.replace("official music video",""),l=l.replace("music video",""),l=l.replace("musicvideo",""),l=l.replace("original video",""),l=l.replace("full version",""),l=l.replace("full song",""),l=l.replace("(official)",""),l=l.replace("official",""),l=l.replace("(original)",""),l=l.replace("("," "),l=l.replace(")"," "),l=l.replace("feat."," "),l=l.replace("feat"," "),l=l.replace("ft."," "),l=l.replace("["," "),l=l.replace("]"," "),l=l.replace(" free ",""),l=l.replace(" hd ",""),l=l.replace("original mix"," "),l=l.replace("radio edit"," "),l=l.replace("pop version"," "),l=l.replace(" "," ").replace(" "," ").replace(" "," ").replace(" "," ").replace(" "," ").replace(" "," "),l=encodeURIComponent(l),$.ajax({type:"GET",url:"https://api.spotify.com/v1/search?q="+l+"&type=track",headers:{Authorization:"Bearer "+access_token_data.access_token},async:!0,statusCode:{429:function(t){console.log(t.getAllResponseHeaders());var a=t.getResponseHeader("Retry-After");console.log(a),a||(a=5),a=parseInt(a,10),n.log("Retry-After",a),setTimeout(function(){d.searchSpotify(e)},1e3*a)}},error:function(t){if(429==t.status){console.log(t.getAllResponseHeaders());var a=t.getResponseHeader("Retry-After");console.log(a),a||(a=5),a=parseInt(a,10),n.log("Retry-After",a),setTimeout(function(){d.searchSpotify(e)},1e3*a)}},success:function(e){var s=!1;if($.each(e.tracks.items,function(e,t){if(t.name=t.name.toLowerCase(),t.name=t.name.replace("("," "),t.name=t.name.replace(")"," "),t.name=t.name.replace("["," "),t.name=t.name.replace("]"," "),t.name=t.name.replace("-"," "),t.name=t.name.replace("-"," "),t.name=t.name.replace("-"," "),t.name=t.name.replace("original mix"," "),t.name=t.name.replace("album version"," "),t.name=t.name.replace("abum version"," "),t.name=t.name.replace("feat."," "),t.artists[0].name=t.artists[0].name.replace("feat."," "),t.artists[0].name=t.artists[0].name.replace("feat"," "),t.name=t.name.replace("feat"," "),t.name=t.name.replace("ft."," "),t.name=t.name.replace("radio edit"," "),t.name=t.name.replace("pop version"," "),t.name=t.name.replace(" "," ").replace(" "," ").replace(" "," ").replace(" "," ").replace(" "," ").replace(" "," ").replace(" "," ").replace(" "," "),t.artists[0].name=t.artists[0].name.replace(" "," ").replace(" "," ").replace(" "," ").replace(" "," ").replace(" "," ").replace(" "," ").replace(" "," ").replace(" "," ")," "==t.name.substring(t.name.length-1)&&(t.name=t.name.substring(0,t.name.length-1)),"."==t.name.substring(t.name.length-1)&&"."!=l.substring(l.length-1)&&(t.name=t.name.substring(0,t.name.length-1)),decodeURIComponent(l).indexOf(t.artists[0].name.toLowerCase())>=0&&decodeURIComponent(l).indexOf(t.name.toLowerCase())>=0)return s=!0,d.uris.push(t.uri),n.log("Found",l),!1;for(var a=t.name.split(" "),e=0;e=0||"&"==a[e]&&l.indexOf("and")>=0)&&l.indexOf(a[e])<0)return!0;return s=!0,d.uris.push(t.uri),n.log("Found",l),!1}),s||(d.not_found.push(i),d.num_songs=d.num_songs+1,n.log("Didn't find",i)),d.num_songs+d.uris.length==full_playlist.length){if(d.uris.length>100){for(;d.uris.length>100;)d.addToSpotifyPlaylist(d.uris.slice(0,100),t,a),d.uris=d.uris.slice(100,d.uris.length);d.addToSpotifyPlaylist(d.uris,t,a),$("#playlist_loader_export").addClass("hide")}else d.addToSpotifyPlaylist(d.uris,t,a),$("#playlist_loader_export").addClass("hide");$(".exported-list").append(""+B+""),$.each(d.not_found,function(e,t){var a=$("
    "+not_export_html+"
    ");a.find(".extra-add-text").attr("value",t),a.find(".extra-add-text").attr("title",t),$(".not-exported-container").append(a.html())}),$(".not-exported").removeClass("hide"),$(".spotify_export_button").css("display","block")}}})},addToSpotifyPlaylist:function(e,t,a){$.ajax({type:"POST",url:"https://api.spotify.com/v1/users/"+a+"/playlists/"+t+"/tracks",headers:{Authorization:"Bearer "+access_token_data.access_token,"Content-Type":"application/json"},data:JSON.stringify({uris:e}),error:function(i){setTimeout(function(){d.addToSpotifyPlaylist(e,t,a)},3e3)},success:function(e){n.log("Added songs")}})},exportToYoutube:function(){var e="https://www.googleapis.com/youtube/v3/playlists?part=snippet";$(".exported-list-container").removeClass("hide"),$("#playlist_loader_export").removeClass("hide"),$.ajax({type:"POST",url:e,headers:{Authorization:"Bearer "+access_token_data_youtube.access_token,"Content-Type":"application/json"},data:JSON.stringify({snippet:{title:n.upperFirst(B.toLowerCase()),description:"Playlist exported from zoff"}}),success:function(e){var t=0,a=e.id,i="https://www.googleapis.com/youtube/v3/playlistItems?part=snippet";d.addToYoutubePlaylist(a,full_playlist,t,i)},error:function(e){n.log(e)}})},addToYoutubePlaylist:function(e,t,a,i){var l=JSON.stringify({snippet:{playlistId:e,resourceId:{kind:"youtube#video",videoId:t[a].id}}});$.ajax({type:"POST",url:i,headers:{Authorization:"Bearer "+access_token_data_youtube.access_token,"Content-Type":"application/json"},data:l,success:function(l){n.log("Added video: "+t[a].id+" to playlist id "+e),a==t.length-1?(n.log("All videoes added!"),n.log("url: https://www.youtube.com/playlist?list="+e),$(".exported-list").append(""+B+""),$("#playlist_loader_export").addClass("hide"),$(".current_number").addClass("hide")):($(".current_number").removeClass("hide"),$(".current_number").text(a+1+" of "+t.length),d.addToYoutubePlaylist(e,t,a+1,i))}})},importOldList:function(e){var t="",a=0;playlist_url="lists/"+e+".json",list=$.parseJSON($.ajax({type:"GET",url:playlist_url,async:!1}).responseText),$.each(list.songs,function(e,i){t+=i.id+",",a>45&&(Search.addVideos(t),t="",a=0),a++}),Search.addVideos(t),document.getElementById("search").value=""},sortList:function(){full_playlist.sort(n.predicate({name:"votes",reverse:!0},{name:"added",reverse:!1},{name:"title",reverse:!1}))},show:function(){n.mobilecheck()||(showToggle?(showToggle=!1,$("#toptitle").empty(),$("#chan").addClass("bigChan"),$("#chan").html("zoff.me/"+B.toLowerCase())):(showToggle=!0,$("#toptitle").html("Zoff"),$("#chan").removeClass("bigChan"),$("#chan").html(B)))},generateSong:function(e,t,a,i,l,s,o){void 0===h&&(h=$("#list-song-html").html());var r,p,c=e.id,g=e.title,u=e.votes,m="background-image:url('//img.youtube.com/vi/"+c+"/mqdefault.jpg');",f=$("
    "+h+"
    "),v="style";if(t?f.find("#list-song").css("height",0):f.find(".list-song").css("height",d.element_height),y||f.find(".card-action").removeClass("hide"),1==u&&f.find(".vote-text").text("vote"),a&&(m="//img.youtube.com/vi/"+c+"/mqdefault.jpg",v="data-original"),i){f.find(".list-votes").text(u),f.find("#list-song").attr("id",c),f.find(".vote-container").attr("title",g),($("#wrapper").children().length>=d.can_fit&&o||"none"==s)&&f.find(".card").css("display","none"),r=".vote-container",p="delete_button";var _=n.secondsToOther(e.duration);f.find(".card-duration").text(n.pad(_[0])+":"+n.pad(_[1]))}else if(!i){f.find(".vote-text").text(""),f.find(".card-duration").text(n.pad(e.duration[0])+":"+n.pad(e.duration[1]));var w="user";r=".add-suggested",l?p="del_user_suggested":(p="del_suggested",w="system"),f.find(".vote-container").attr("class","clickable add-suggested"),f.find(".add-suggested").attr("title",g),f.find(".delete_button").addClass(p),f.find(r).attr("data-video-title",g),f.find(r).attr("data-video-length",e.length),f.find(r).attr("data-added-by",w),f.find("#list-song").attr("id","suggested-"+c),f.find(".list-image").attr("class",f.find(".list-image").attr("class").replace("list-image","list-suggested-image"))}return f.find(".list-title").text(g),f.find(".list-title").attr("title",g),f.find(r).attr("data-video-id",c),f.find(".list-image").attr(v,m),f.find(".list-suggested-image").attr(v,m),f.find("."+p).attr("data-video-id",c),f.html()},getIndexOfSong:function(e){try{return indexes=$.map(full_playlist,function(t,a){if(t.id==e)return a}),indexes[0]}catch(e){}},scrollTop:function(){$("#wrapper").scrollTop(0)},scrollBottom:function(){$("#wrapper").scrollTop($("#wrapper")[0].scrollHeight)}},u="",m=!1,f=!1,h=$("#list-song-html").html(),y=!0,v=!1,_=!0,w=100,x="",k=!1,C=!1,T=!1,S=!1,I=!1,E=window.location.hash.substring(1).split("&"),B=E[0],M=!1,V="#808080",N=!1,P={"sync disconnect on unload":!0,secure:!0,"force new connection":!0};$(document).ready(function(){3==E.length&&"autoplay"==E[2]?M=!0:m=!0,V="#"+E[1],add="https://zoff.me",s=io.connect(""+add+":8080",P),s.on("get_list",function(){setTimeout(function(){s.emit("list",B.toLowerCase())},1e3)}),s.on("viewers",function(e){viewers=e,void 0!==u&&i.getTitle(u,viewers)}),e(),t(),window.onYouTubeIframeAPIReady=i.onYouTubeIframeAPIReady,i.loadPlayer(),c.initSlider(),window.setVolume=a,$("#controls").css("background-color",V),$("#playlist").css("background-color",V)}),$(document).on("click","#zoffbutton",function(e){window.open("https://zoff.me/"+B.toLowerCase()+"/","_blank")}),$(document).on("click",".vote-container",function(e){var t=$(this).attr("data-video-id");d.vote(t,"pos")}),$(document).on("click",".prev_page",function(e){e.preventDefault(),d.dynamicContentPage(-1)}),$(document).on("click",".next_page",function(e){e.preventDefault(),d.dynamicContentPage(1)})}(); \ No newline at end of file diff --git a/public/dist/lib/aes.js b/server/views/assets/dist/lib/aes.js similarity index 100% rename from public/dist/lib/aes.js rename to server/views/assets/dist/lib/aes.js diff --git a/public/dist/lib/color-thief.js b/server/views/assets/dist/lib/color-thief.js similarity index 100% rename from public/dist/lib/color-thief.js rename to server/views/assets/dist/lib/color-thief.js diff --git a/public/dist/lib/jquery-2.1.3.min.js b/server/views/assets/dist/lib/jquery-2.1.3.min.js similarity index 100% rename from public/dist/lib/jquery-2.1.3.min.js rename to server/views/assets/dist/lib/jquery-2.1.3.min.js diff --git a/public/dist/lib/jquery-ui-1.10.3.min.js b/server/views/assets/dist/lib/jquery-ui-1.10.3.min.js similarity index 100% rename from public/dist/lib/jquery-ui-1.10.3.min.js rename to server/views/assets/dist/lib/jquery-ui-1.10.3.min.js diff --git a/public/dist/lib/jquery.ui.touch-punch.min.js b/server/views/assets/dist/lib/jquery.ui.touch-punch.min.js similarity index 100% rename from public/dist/lib/jquery.ui.touch-punch.min.js rename to server/views/assets/dist/lib/jquery.ui.touch-punch.min.js diff --git a/public/dist/lib/materialize.min.js b/server/views/assets/dist/lib/materialize.min.js similarity index 100% rename from public/dist/lib/materialize.min.js rename to server/views/assets/dist/lib/materialize.min.js diff --git a/public/dist/lib/sha256.js b/server/views/assets/dist/lib/sha256.js similarity index 100% rename from public/dist/lib/sha256.js rename to server/views/assets/dist/lib/sha256.js diff --git a/public/dist/lib/socket.io.min.js b/server/views/assets/dist/lib/socket.io.min.js similarity index 100% rename from public/dist/lib/socket.io.min.js rename to server/views/assets/dist/lib/socket.io.min.js diff --git a/server/views/assets/dist/main.min.js b/server/views/assets/dist/main.min.js new file mode 100755 index 00000000..1c31d50f --- /dev/null +++ b/server/views/assets/dist/main.min.js @@ -0,0 +1,4 @@ +!function(){function e(){$("#facebook-code-link").attr("href","https://www.facebook.com/sharer/sharer.php?u=https://zoff.me/"),$("#facebook-code-link").attr("onclick","window.open('https://www.facebook.com/sharer/sharer.php?u=https://zoff.me/', 'Share Zoff','width=600,height=300'); return false;"),$("#twitter-code-link").attr("href","https://twitter.com/intent/tweet?url=https://zoff.me/&text=Check%20out%20Zoff!&via=zoffmusic"),$("#twitter-code-link").attr("onclick","window.open('https://twitter.com/intent/tweet?url=https://zoff.me/&text=Check%20out%20Zoff!&via=zoffmusic','Share Playlist','width=600,height=300'); return false;"),$("#qr-code-image-link").attr("src","//chart.googleapis.com/chart?chs=150x150&cht=qr&chl=https://zoff.me/&choe=UTF-8&chld=L%7C1")}function t(){var t=new Date;q.blob_list=[],3==t.getMonth()&&1==t.getDate()&&($(".mega").css("-webkit-transform","rotate(180deg)"),$(".mega").css("-moz-transform","rotate(180deg)")),window.onpopstate=function(e){var t=window.location.href.split("/");""!==t[3]&&"#"!=t[3].substring(0,1)&&q.to_channel(t[3],!0)},A=$("#channel-list-container").clone().html(),"fb.zoff.me"!=window.location.hostname&&e(),"zoff.me"==window.location.hostname?add="https://zoff.me":add=window.location.hostname,(void 0===P||Y.mobilecheck())&&(P=io.connect(""+add+":8080",dt)),0!==$("#alreadyfp").length&&!Y.mobilecheck()&&P._callbacks.$playlists||h(),$("#about").modal(),$("#help").modal(),$("#contact").modal(),$("select").material_select(),Y.log("----"),Y.log("Sending frontpage_lists"),Y.log("Socket",P),Y.log("-----"),O.init(),O.get_offline()?T(!0,Oe):$("#offline-mode").tooltip({delay:5,position:"bottom",tooltip:"Enable private mode"}),P.emit("frontpage_lists"),$("#channel-load").css("display","none"),"#donation"==window.location.hash&&(window.location.hash="#",$("#donation").modal("open")),localStorage.ok_cookie||(M(),Materialize.toast("We're using cookies to enhance your experience! 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")}),!Y.mobilecheck()&&q.winter&&$(".mega").prepend('
    '),Y.mobilecheck()&&$("input#searchFrontpage").characterCounter(),window.__onGCastApiAvailable=function(e,t){e&&(Ge=!0)}}function a(){qe=0;var e=!0;J=$("#chan").html(),console.log(J),Qe=Y.mobilecheck();var t=Y.mobilecheck()?"left":"right";if(window.onpopstate=function(e){N()},"fb.zoff.me"!=window.location.hostname&&L(),"zoff.me"==window.location.hostname?add="https://zoff.me":add=window.location.hostname,void 0!==mt&&(mt.stopInterval=!1),$("ul.playlist-tabs").tabs(),$("ul.playlist-tabs-loggedIn").tabs(),$("ul.chatTabs").tabs(),$("#settings").sideNav({menuWidth:300,edge:t,closeOnClick:!1}),$(".collapsible").collapsible({accordion:!0}),$("#help").modal(),$("#contact").modal(),$("#embed").modal(),S(Se),Ze=$("#temp-results-container"),Xe=$("#empty-results-container").html(),Ie=$(".not-imported-container").html(),Ee=$(".not-exported-container").html(),$(".not-imported-container").empty(),$(".not-exported-container").empty(),$(".video-container").resizable({start:function(e,t){$("iframe").css("pointer-events","none")},stop:function(e,t){$("iframe").css("pointer-events","auto"),O.set_width($(this).width()),k()},handles:"e",minWidth:350,maxWidth:$(window).width()-241}),(void 0===P||Y.mobilecheck())&&(e=!1,P=io.connect(""+add+":8080",dt)),O.init(),O.get_offline()&&($(".offline_switch_class")[0].checked=!0,T(!0,Oe)),0===$("#alreadychannel").length||Y.mobilecheck())s(),l(),c(),d();else{$("#channel-load").css("display","none"),$("#player").css("opacity","1"),$("#controls").css("opacity","1"),$(".playlist").css("opacity","1"),mt.readyLooks(),ht.initYoutubeControls(mt.player),ht.initSlider(),mt.player.setVolume(O.get_volume()),$(".video-container").removeClass("no-opacity");var a="https://remote."+window.location.hostname+"/"+et;$("#code-text").text(et),$("#code-qr").attr("src","https://chart.googleapis.com/chart?chs=221x221&cht=qr&choe=UTF-8&chld=L|1&chl="+a),$("#code-link").attr("href",a)}e&&P.emit("list",J.toLowerCase()),$("#viewers").tooltip({delay:5,position:"top",tooltip:"Viewers"}),window.onYouTubeIframeAPIReady=mt.onYouTubeIframeAPIReady,(""===mt.player||void 0===mt.player||Y.mobilecheck())&&mt.loadPlayer(),Y.mobilecheck()?gt.initiate_volume():$("input#chan_description").characterCounter(),p(),m(),u(),Y.mobilecheck()||0!==$("#alreadychannel").length||f(),Y.msieversion()||Y.mobilecheck()||Notification.requestPermission(),$(".search_input").focus(),Y.sample(),$(".castButton-unactive").tooltip({delay:5,position:"top",tooltip:"Cast Zoff to TV"}),$(".castButton-active").tooltip({delay:5,position:"top",tooltip:"Stop casting"}),$("#results").hover(function(){$("div.result").removeClass("hoverResults"),ye=0},function(){}),$("#search").focus(),$("#embed-button").css("display","inline-block"),$("#embed-area").val(w(Me,Le,Be,De)),$("#search").attr("placeholder","Find song on YouTube..."),/chrom(e|ium)/.test(navigator.userAgent.toLowerCase())||Y.mobilecheck()||$(".castButton-unactive").css("display","none"),Y.log("chromecastAvailable"+Pe),Y.log("chromecastAvailable"+Ge),Pe?n(1):Ge?initializeCastApi():window.__onGCastApiAvailable=function(e,t){e?setTimeout(function(){Ge=!0,initializeCastApi()},1e3):Ge=!0},Y.mobilecheck()||null!=navigator.userAgent.match(/iPad/i)||setTimeout(function(){k()},100)}function n(e){if($(".castButton-unactive").toggleClass("hide"),$(".castButton-active").toggleClass("hide"),1==e){$("#duration").toggleClass("hide"),$("#fullscreen").toggleClass("hide");try{mt.player.stopVideo()}catch(e){}mt.stopInterval=!0,$("#player_overlay").removeClass("hide"),$("#player_overlay").css("display","block"),Y.mobilecheck()?$("#pause").hasClass("hide")?($("#play").toggleClass("hide"),$("#pause").toggleClass("hide")):$("#play").hasClass("hide")&&($("#play").toggleClass("hide"),$("#pause").toggleClass("hide")):($("#volume").slider("value",100),$("#player_overlay").width($("#player").width()+1)),$("#player_overlay").css("background","url(https://i.ytimg.com/vi/"+ot+"/maxresdefault.jpg)"),$("#player_overlay").css("background-position","center"),$("#player_overlay").css("background-size","100%"),$("#player_overlay").css("background-color","black"),$("#player_overlay").css("background-repeat","no-repeat"),$("#playing_on").css("display","flex"),$("#chromecast_text").html("Playing on
    "+H.La.friendlyName),mt.player.setVolume(100),$("#player_overlay_text").toggleClass("hide")}else 0==e&&($("#duration").toggleClass("hide"),$("#fullscreen").toggleClass("hide"),mt.player.playVideo(),mt.stopInterval=!1,duration=mt.player.getDuration(),mt.durationSetter(),Y.mobilecheck()||(mt.player.setVolume(O.get_volume()),$("#volume").slider("value",O.get_volume())),$("#player_overlay").addClass("hide"),$("#player_overlay_text").toggleClass("hide"),$("#chromecast_text").html(""),$("#playing_on").css("display","none"),Oe?mt.loadVideoById(ot):P.emit("pos",{channel:J.toLowerCase()}))}function i(e,t){var a=JSON.parse(t);switch(a.type){case-1:Oe?mt.playNext():P.emit("end",{id:a.videoId,channel:J.toLowerCase()});break;case 0:Oe?mt.playNext():P.emit("skip",{error:a.data_code,id:a.videoId,pass:oe,channel:J.toLowerCase})}}function o(){P.on("connect_failed",function(){Y.log("Connection Failed"),Ne||(Ne=!0,Materialize.toast("Error connecting to server, please wait..",1e8,"red lighten connect_error"))}),P.on("connect_error",function(){Y.log("Connection Failed."),Ne||(Ne=!0,Materialize.toast("Error connecting to server, please wait..",1e8,"red lighten connect_error"))})}function s(){P.on("np",mt.youtube_listener)}function l(){P.on("get_list",function(){P.emit("list",J.toLowerCase())})}function c(){P.on("suggested",function(e){var t=!0;void 0===e.id&&(t=!1),yt.catchUserSuggests(e,t)})}function d(){P.on("viewers",function(e){re=e,void 0!==rt&&mt.getTitle(rt,re)})}function p(){P.on("toast",V.toast),P.on("pw",V.pw),P.on("conf",V.conf)}function u(){P.on("chat.all",j.allchat),P.on("chat",j.channelchat)}function m(){P.on("channel",U.channel_function)}function h(){Y.log("Setting up playlist_listener"),P.on("playlists",q.frontpage_function)}function f(){P.on("id",F.host_listener)}function y(e){P.on(e,F.host_on_action)}function v(){localStorage.debug=!0}function _(){localStorage.debug=!1}function w(e,t,a,n){return''}function k(e){if($(window).width()>760){var t=$(".brand-logo").outerWidth();e&&(t=.15*$(window).width());var a=$(window).width()-$(".control-list").width()-t-66;title_width=a,$(".title-container").width(title_width)}else $(".title-container").width("100%")}function C(e){for(var t="",a="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.-_",n=0;n"+Q+"
    "),Q.find(".list-remove").removeClass("hide"),Q=Q.html()),$(".list-remove").removeClass("hide"),$("#viewers").addClass("hide"),$("#offline-mode").removeClass("waves-cyan"),$("#offline-mode").addClass("cyan"),$("#offline-mode").tooltip({delay:5,position:"bottom",tooltip:"Disable private mode"}),"/"!=window.location.pathname?($("#controls").on("mouseenter",function(e){$("#seekToDuration").hasClass("hide")&&$("#seekToDuration").removeClass("hide")}),$("#controls").on("mouseleave",function(e){ce=!1,$("#seekToDuration").hasClass("hide")||$("#seekToDuration").addClass("hide")}),$("#controls").on("mousedown",function(e){var t=["bar","controls","duration"];t.indexOf($(e.target).attr("id"))>=0&&(ce=!0)}),$("#controls").on("mouseup",function(e){ce=!1}),$("#controls").on("mousemove",I),$("#controls").on("click",E),$("#main_components").append("
    00:00/01:00
    "),Y.mobilecheck()?Y.mobilecheck()&&$("#seekToDuration").css("top",$("#controls").position().top-20):$("#seekToDuration").css("top",$("#controls").position().top-55),$("#controls").hasClass("ewresize")||$("#controls").addClass("ewresize")):($("#controls").off("mouseenter"),$("#controls").off("mouseleave"),$("#controls").off("mousemove"),$("#controls").off("click")),void 0!=tt&&!t){for(var a=0;a"+Q+"
    "),Z&&W&&Q.find(".list-remove").addClass("hide"),Q=Q.html()),$("#viewers").removeClass("hide"),Z&&W&&$(".list-remove").addClass("hide"),$("#offline-mode").addClass("waves-cyan"),$("#offline-mode").removeClass("cyan"),$("#offline-mode").tooltip({delay:5,position:"bottom",tooltip:"Enable private mode"}),$("#controls").off("mouseleave"),$("#controls").off("mouseenter"),$("#controls").off("mousedown"),$("#controls").off("mouseup"),$("#controls").off("mousemove",I),$("#controls").off("click",E),$("#seekToDuration").remove(),"/"!=window.location.pathname&&(P.emit("pos"),P.emit("list",J.toLowerCase()),$("#controls").hasClass("ewresize")&&$("#controls").removeClass("ewresize"))}function S(e){e?(Y.log("------------------------"),Y.log("Spotify is authenticated"),Y.log("access_token: "+Te.access_token),Y.log("token_type:"+Te.token_type),Y.log("expires_in: "+Te.expires_in),Y.log("------------------------"),$(".spotify_authenticated").css("display","block"),$(".spotify_unauthenticated").css("display","none")):(Y.log("----------------------------"),Y.log("Spotify is not authenticated"),Y.log("----------------------------"),$(".spotify_authenticated").css("display","none"),$(".spotify_unauthenticated").css("display","block"))}function I(e){console.log("hello");var t=e.clientX-Math.ceil($("#seekToDuration").width()/2)-8;t<0?t=0:t+$("#seekToDuration").width()>$("#controls").width()&&(t=$("#controls").width()-$("#seekToDuration").width()),$("#seekToDuration").css("left",t);try{var a=tt[tt.length-1].duration/$("#controls").width();a*=e.clientX;var n=Y.secondsToOther(a),i=Y.pad(n[0]),o=Y.pad(Math.ceil(n[1]));$("#seekToDuration").text(i+":"+o);var s=["bar","controls","duration"];s.indexOf($(e.target).attr("id"))>=0&&ce&&$("#bar").width(100/mt.player.getDuration()*a+"%")}catch(e){}}function E(e){var t=["bar","controls","duration"];if(t.indexOf($(e.target).attr("id"))>=0){var a=tt[tt.length-1].duration/$("#controls").width();a*=e.clientX,Y.log(a),Pe?H.sendMessage("urn:x-cast:zoff.me",{type:"seekTo",seekTo:a}):(mt.player.seekTo(a),dMinutes=Math.floor(duration/60),dSeconds=duration-60*dMinutes,currDurr=a,currDurr>duration&&(currDurr=duration),minutes=Math.floor(currDurr/60),seconds=currDurr-60*minutes,document.getElementById("duration").innerHTML=Y.pad(minutes)+":"+Y.pad(seconds)+" / "+Y.pad(dMinutes)+":"+Y.pad(dSeconds),per=100/duration*currDurr,per>=100?per=100:0===duration&&(per=0),$("#bar").width(per+"%"))}}function B(e){search_input=$(".search_input").val(),code=e.keyCode||e.which,40!=code&&38!=code&&13!=code&&39!=code&&37!=code&&17!=code&&16!=code&&225!=code&&18!=code&&27!=code&&(clearTimeout(Ke),search_input.length<3&&$("#results").html(""),13==code?ft.search(search_input):Ke=setTimeout(function(){ft.search(search_input)},1e3))}function L(){$("#facebook-code-link").attr("href","https://www.facebook.com/sharer/sharer.php?u=https://zoff.me/"+J.toLowerCase()),$("#facebook-code-link").attr("onclick","window.open('https://www.facebook.com/sharer/sharer.php?u=https://zoff.me/"+J.toLowerCase()+"', 'Share Playlist','width=600,height=300'); return false;"),$("#twitter-code-link").attr("href","https://twitter.com/intent/tweet?url=https://zoff.me/"+J.toLowerCase()+"&text=Check%20out%20this%20playlist%20"+J.toLowerCase()+"%20on%20Zoff!&via=zoffmusic"),$("#twitter-code-link").attr("onclick","window.open('https://twitter.com/intent/tweet?url=https://zoff.me/"+J.toLowerCase()+"/&text=Check%20out%20this%20playlist%20"+J.toLowerCase()+"%20on%20Zoff!&via=zoffmusic','Share Playlist','width=600,height=300'); return false;"),$("#qr-code-image-link").attr("src","//chart.googleapis.com/chart?chs=150x150&cht=qr&chl=https://zoff.me/"+J.toLowerCase()+"&choe=UTF-8&chld=L%7C1")}function M(){$("#toast-container").remove()}function N(){var e=window.location.href.split("/");"#!"==e[3].substr(0,1)||""===e[3]||5==e.length&&"#"==e[4].substr(0,1)?""===e[3]&&(clearTimeout(G),he&&(he=!1,mt.fireplace.destroy(),$("#fireplace_player").css("display","none")),$("#channel-load").css("display","block"),window.scrollTo(0,0),mt.stopInterval=!0,V.display_logged_out(),V.beginning=!0,fe=!1,we=!1,$("#embed-button").css("display","none"),$(".castButton-active").tooltip("remove"),$("#viewers").tooltip("remove"),$(".castButton-unactive").tooltip("remove"),$("#offline-mode").tooltip("remove"),$("#chan_thumbnail").tooltip("remove"),$("#admin-lock").tooltip("remove"),$("#seekToDuration").remove(),$.ajax({url:"/",success:function(e){if(Y.mobilecheck()?(Y.log("Removing all listeners"),P.removeAllListeners(),P.disconnect()):(P.removeEventListener("chat.all"),P.removeEventListener("chat"),P.removeEventListener("conf"),P.removeEventListener("pw"),P.removeEventListener("toast"),P.removeEventListener("channel")),document.getElementById("volume-button").removeEventListener("click",ht.mute_video),document.getElementById("playpause").removeEventListener("click",ht.play_pause),document.getElementById("fullscreen").removeEventListener("click",ht.fullscreen),Y.mobilecheck()&&(ot="",rt=""),$("meta[name=theme-color]").attr("content","#2D2D2D"),Y.mobilecheck()){try{mt.player.destroy()}catch(e){}mt.player="",document.title="Zoff"}else $(".video-container").resizable("destroy"),$("main").append("X"),$("#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("
    ");var a=$("
    "+e+"
    ");$(".drag-target").remove(),$("#sidenav-overlay").remove(),$("main").attr("class","center-align container"),$("#main-container").removeClass("channelpage"),$("#main-container").attr("style",""),$("header").html($(a.find("header")).html()),$($(a.find(".section.mega"))).insertAfter("header"),$($(a.find(".section.mobile-search"))).insertAfter(".mega"),Y.mobilecheck()?$("main").html($(a.find("main")).html()):$("main").append($(a.find("#main_section_frontpage")).wrap("
    ").parent().html()),$(".page-footer").removeClass("padding-bottom-extra"),$(".page-footer").removeClass("padding-bottom-novideo"),$("#favicon").attr("href","public/images/favicon.png"),Y.log(P),1==$("#alreadyfp").length?t():(ut=!0,R=!0,t()),0===$("#alreadychannel").length&&$("head").append("
    "),void 0!=e.description&&""!=e.description&&$("#description_area").html(e.description)},submitAdmin:function(e){voting=e.vote.checked,addsongs=e.addsongs.checked,longsongs=e.longsongs.checked,R=e.frontpage.checked,allvideos=e.allvideos.checked,removeplay=e.removeplay.checked,skipping=e.skip.checked,shuffling=e.shuffle.checked,configs={voting:voting,addsongs:addsongs,longsongs:longsongs,frontpage:R,allvideos:allvideos,removeplay:removeplay,adminpass:oe,skipping:skipping,shuffling:shuffling},P.emit("conf",configs)},hide_settings:function(){$("#settings").sideNav("hide")},shuffle:function(){if(Oe){for(var e=0;e to change name","/removename to remove name"],namechange:function(e){P.emit("namechange",e),O.set_name(e)},removename:function(){P.emit("removename"),O.remove_name()},chat:function(e){if(!(e.value.length>150)){if(e.value.startsWith("/name "))j.namechange(e.value.substring(6));else if(e.value.startsWith("/help"))if("#all_chat"==$(".chat-tab-li a.active").attr("href")){$("#chatall").children().length>100&&$("#chatall").children()[0].remove();for(var t=0;tSystem: ");var i=document.createTextNode(j.chat_help[t]);$("#chatall li:last")[0].appendChild(i),document.getElementById("chatall").scrollTop=document.getElementById("chatall").scrollHeight}}else{$("#chatchannel").children().length>100&&$("#chatchannel").children()[0].remove();for(var t=0;tSystem: ");var i=document.createTextNode(j.chat_help[t]);$("#chatchannel li:last")[0].appendChild(i),document.getElementById("chatchannel").scrollTop=document.getElementById("chatchannel").scrollHeight}}else e.value.startsWith("/removename")?j.removename():"#all_chat"==$(".chat-tab-li a.active").attr("href")?P.emit("all,chat",e.value):P.emit("chat",e.value);e.value=""}},allchat:function(e){if(":"==e.msg.substring(0,1)&&!be){j.all_received+=1,$("#favicon").attr("href","public/images/highlogo.png"),K=!0,ke=!0,$(".chat-link span.badge.new.white").hasClass("hide")&&$(".chat-link span.badge.new.white").removeClass("hide");var t=j.channel_received+j.all_received>9?"9+":j.channel_received+j.all_received;$(".chat-link span.badge.new.white").html(t)}document.hidden&&$("#favicon").attr("href","public/images/highlogo.png"),$("#chatall").children().length>100&&$("#chatall").children()[0].remove();var a=Y.intToARGB(Y.hashCode(e.from));if(a.length<6)for(x=a.length;x<6;x++)a="0"+a;a=Y.hexToRgb(a.substring(0,6));var n=Y.rgbToHsl([a.r,a.g,a.b],!1);$("#chatall").append("
  • "+e.from+"
  • ");var i=document.createTextNode(e.msg);$("#chatall li:last")[0].appendChild(i),document.getElementById("chatall").scrollTop=document.getElementById("chatall").scrollHeight},channelchat:function(e){if(":"==e.msg.substring(0,1)&&!be){$("#favicon").attr("href","public/images/highlogo.png"),K=!0,ke=!0,j.channel_received+=1,$(".chat-link span.badge.new.white").hasClass("hide")&&$(".chat-link span.badge.new.white").removeClass("hide");var t=j.channel_received+j.all_received>9?"9+":j.channel_received+j.all_received;$(".chat-link span.badge.new.white").html(t)}$("#chatchannel").children().length>100&&$("#chatchannel").children()[0].remove();var a=Y.intToARGB(Y.hashCode(e.from));if(a.length<6)for(x=a.length;x<6;x++)a="0"+a;a=Y.hexToRgb(a.substring(0,6));var n=Y.rgbToHsl([a.r,a.g,a.b],!1);$("#chatchannel").append("
  • "+e.from+"
  • ");var i=document.createTextNode(e.msg);$("#chatchannel li:last")[0].appendChild(i),document.getElementById("chatchannel").scrollTop=document.getElementById("chatchannel").scrollHeight},chat_blink:function(){Ce=!0,$(".chat-link").attr("style","color: grey !important;"),setTimeout(function(){$(".chat-link").attr("style","color: white !important;"),setTimeout(function(){Ce&&j.chat_blink()},1e3)},1e3)}},O={conf_pass:void 0,init:function(){"/"!=window.location.pathname&&("https:"!=location.protocol?document.cookie=J.toLowerCase()+"=;path=/"+J.toLowerCase()+";expires="+new Date(0).toUTCString():document.cookie=J.toLowerCase()+"=;path=/"+J.toLowerCase()+";secure;expires="+new Date(0).toUTCString());try{conf_arr=O.decrypt(O.getCookie("_opt"),"_opt")}catch(e){conf_arr=O.decrypt(O.create_cookie("_opt"),"_opt")}if("/"!=window.location.pathname){try{O.conf_pass=O.decrypt(O.getCookie(J.toLowerCase()),J.toLowerCase())}catch(e){O.conf_pass=O.decrypt(O.create_cookie(J.toLowerCase()),J.toLowerCase())}console.log("test"),F.change_enabled(conf_arr.remote),console.log("test 2"),100!=conf_arr.width&&mt.set_width(conf_arr.width),void 0!==conf_arr.name&&""!==conf_arr.name&&j.namechange(conf_arr.name)}},decrypt:function(e,t){void 0===O.getCookie(t)&&(e=O.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,P.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}),i=new Date;i.setFullYear(i.getFullYear()+1),"https:"!=location.protocol?document.cookie=t+"="+n.toString()+";expires="+i.toGMTString()+";path=/;":document.cookie=t+"="+n.toString()+";secure;expires="+i.toGMTString()+";path=/;"},encrypt_string:function(e){var t=CryptoJS.AES.encrypt(e,P.id,{mode:CryptoJS.mode.CBC,padding:CryptoJS.pad.Pkcs7});return t.toString()},get_volume:function(){return O.decrypt(O.getCookie("_opt"),"_opt").volume},get_offline:function(){var e=O.decrypt(O.getCookie("_opt"),"_opt").offline;return void 0!=e?O.decrypt(O.getCookie("_opt"),"_opt").offline:(O.set_offline(!1),!1)},set_volume:function(e){conf_arr.volume=e,O.encrypt(conf_arr,"_opt")},create_cookie:function(e){"_opt"==e?cookie_object={volume:100,width:100,remote:!0,name:"",offline:!1}: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),"https:"!=location.protocol?document.cookie=e+"="+a.toString()+";expires="+n.toGMTString()+";path=/;":document.cookie=e+"="+a.toString()+";secure;expires="+n.toGMTString()+";path=/;",O.getCookie(e)},set_pass:function(e,t){O.conf_pass.passwords[e]=t,O.encrypt(O.conf_pass,e)},remove_pass:function(e){delete O.conf_pass.passwords[e],O.encrypt(O.conf_pass,e.toLowerCase())},set_name:function(e){conf_arr.name=encodeURIComponent(e).replace(/\W/g,""),O.encrypt(conf_arr,"_opt")},set_offline:function(e){conf_arr.offline=e,O.encrypt(conf_arr,"_opt")},remove_name:function(){conf_arr.name="",O.encrypt(conf_arr,"_opt")},get_pass:function(e){if(void 0!==O.conf_pass)return O.conf_pass.passwords[e]},set_remote:function(e){conf_arr.remote=e,O.encrypt(conf_arr,"_opt")},get_remote:function(e){return conf_arr.remote},crypt_pass:function(e){var t=CryptoJS.AES.encrypt(e,P.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,O.encrypt(conf_arr,"_opt")},getCookie:function(e){var t="; "+document.cookie,a=t.split("; "+e+"=");if(2==a.length)return a.pop().split(";").shift()}},R=!0,q={blob_list:[],winter:(new Date).getMonth()>=10,times_rotated:0,all_channels:[],frontpage_function:function(e){R=!0,Y.log("-----------"),Y.log("Frontpage fetch"),Y.log(e),Y.log("------------"),q.all_channels=e.channels,q.populate_channels(e.channels,!0),q.set_viewers(e.viewers)},populate_channels:function(e,t){$("#channels").empty();var a,n=0;1==e[0].pinned&&(a=e.shift()),e=t?e.sort(Y.predicate({name:"viewers",reverse:!0},{name:"accessed",reverse:!0},{name:"count",reverse:!0})):e.sort(Y.predicate({name:"viewers",reverse:!0},{name:"count",reverse:!0})),void 0!==a&&e.unshift(a),Y.mobilecheck()||q.add_backdrop(e,0),pre_card=$(A),Y.log("------------"),Y.log(pre_card),Y.log("-------------");for(var i in e){var o=e[i].channel;if(n<12||!t){var s=e[i].id,l=e[i].viewers,r=e[i].description,c="background-image:url('https://img.youtube.com/vi/"+s+"/hqdefault.jpg');";e[i].thumbnail&&(c="background-image:url('"+e[i].thumbnail+"');");var d=e[i].count,p=pre_card.clone();1==e[i].pinned?(p.find(".pin").attr("style","display:block;"),p.find(".card").attr("title","Pinned!")):(p.find(".pin").attr("style","display:none;"),p.find(".card").attr("title","")),p.find(".chan-name").text(o),p.find(".chan-name").attr("title",o),p.find(".chan-views").text(l),p.find(".chan-songs").text(d),p.find(".chan-bg").attr("style",c),p.find(".chan-link").attr("href",o+"/"),""==r||Y.mobilecheck()?(p.find(".card-reveal").remove(),p.find(".card").removeClass("sticky-action")):(p.find(".card-title").text(o),p.find(".description_text").text(r),r=""),$("#channels").append(p.html())}n++}var u=e.slice();u=u.sort(q.sortFunction_active);var g={};for(var i in u)g[u[i].channel]=null;var m="input.desktop-search";Y.mobilecheck()&&(m="input.mobile-search"),$(m).autocomplete({data:g,limit:5,onAutocomplete:function(e){q.to_channel(e,!1)}}),document.getElementById("preloader").style.display="none",$("#channels").fadeIn(800),$("#searchFrontpage").focus(),n=0},sortFunction:function(e,t){var a=e.viewers,n=t.viewers,i=e.count,o=t.count;return an?-1:io?-1:0},sortFunction_active:function(e,t){var a=e.accessed,n=t.accessed,i=e.count,o=t.count;return an?-1:io?-1:0},getCookie:function(e){for(var t=e+"=",a=document.cookie.split(";"),n=0;n=e.length||t>=20)&&(t=0);var a=e[t].id;if(void 0!==q.blob_list[t])setTimeout(function(){R&&($("#mega-background").css("background","url(data:image/png;base64,"+q.blob_list[t]+")"),$("#mega-background").css("background-size","200%"),$("#mega-background").css("opacity",1),$(".desktop-search").attr("placeholder",e[t].channel))},500);else{var n=new Image;n.src="/assets/images/thumbnails/"+a+".jpg",n.onerror=function(){$.ajax({type:"POST",data:{id:a},url:"/api/imageblob",success:function(a){setTimeout(function(){$("#mega-background").css("background","url(/assets/images/thumbnails/"+a+")"),$("#mega-background").css("background-size","200%"),$("#mega-background").css("opacity",1),$(".desktop-search").attr("placeholder",e[t].channel)},500)}})},n.onload=function(){$("#mega-background").css("background","url("+n.src+")"),$("#mega-background").css("background-size","200%"),$("#mega-background").css("opacity",1),$(".desktop-search").attr("placeholder",e[t].channel)}}D=setTimeout(function(){50==q.times_rotated&&R?(q.times_rotated=0,t=0,P.emit("frontpage_lists")):R&&(q.times_rotated+=1,q.add_backdrop(e,t+1))},6e3)},start_snowfall:function(){setTimeout(function(){var e=Math.floor(Math.random()*window.innerWidth+1),t=document.createElement("div"),a=document.getElementsByClassName("mega")[0];t.className="snow",t.style.left=e+"px",t.style.top="0px",a.appendChild(t),q.fall_snow(t),q.start_snowfall()},800)},fall_snow:function(e){e.style.top=parseInt(e.style.top.replace("px",""))+2+"px",parseInt(e.style.top.replace("px",""))visibility
    "+e)},to_channel:function(e,t){$("#channel-load").css("display","block"),window.scrollTo(0,0),R=!1,clearTimeout(D),Y.mobilecheck()&&(Y.log("removing all listeners"),P.removeAllListeners()),$("#main-container").css("background-color","#2d2d2d"),$("#offline-mode").tooltip("remove"),pe=1,$.ajax({url:"/"+e,method:"get",data:{channel:e},success:function(n){""!==mt.player&&P.emit("change_channel",{channel:J.toLowerCase()}),$("#frontpage_player").empty(),Y.mobilecheck()&&(Y.log("disconnecting"),P.disconnect()),t||(window.history.pushState("to the channel!","Title","/"+e),""==Ye&&(Ye=e),""==He&&(He=e),window.chan=e);var i=$("
    "+n+"
    ");$("select").material_select("destroy"),$(".mega").remove(),$(".mobile-search").remove(),$("main").attr("class","container center-align main"),$("#main-container").addClass("channelpage"),$("header").html($(i.find("header")).html()),0===$("#alreadychannel").length||Y.mobilecheck()||void 0===mt.player?$("main").html($(i.find("main")).html()):($("#main-row").append($(i.find("#playlist").wrap("
    ").parent().html())),$("#video-container").append($(i.find("#main_components").wrap("
    ").parent().html())),$("#main-row").append("
    "),$("#player").removeClass("player_bottom"),$("#main-row").removeClass("frontpage_modified_heights"),$("#main_section_frontpage").remove(),$("#closePlayer").remove(),$("#player_bottom_overlay").remove()),$("#search").attr("placeholder","Find song on YouTube..."),$(".page-footer").addClass("padding-bottom-novideo"),xe=!0,1==$("#alreadychannel").length?a():(pt=!0,a()),0===$("#alreadyfp").length&&$("head").append("
    ")}})}};String.prototype.capitalizeFirstLetter=function(){return this.charAt(0).toUpperCase()+this.slice(1)};var Y={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(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|Android|Silk|lge |maemo|midp|mmp|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|phone)|xda|xiino/i.test(navigator.userAgent)||/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(navigator.userAgent.substr(0,4)))&&(e=!0),e},predicate:function(){for(var e,t,a,n=[],i=arguments.length,o=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()-me>=2*ge&&(P.removeAllListeners(),P.disconnect(),P.connect(),mt.setup_all_listeners()),me=Date.now(),setTimeout(Y.sample,ge)},loadjsfile:function(e){if(se.indexOf("["+e+"]")==-1){var t=document.createElement("script");t.setAttribute("type","text/javascript"),t.setAttribute("src",e),document.getElementsByTagName("head")[0].appendChild(t),se+="["+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},secondsToOther:function(e){var t=e,a=Math.floor(t/60);return t-=60*a,[a,t]},rgbToHsl:function(e,t){r=e[0],g=e[1],b=e[2],r/=255,g/=255,b/=255;var a,n,i=Math.max(r,g,b),o=Math.min(r,g,b),s=(i+o)/2;if(i==o)a=n=0;else{var l=i-o;switch(n=s>.5?l/(2-i-o):l/(i+o),i){case r:a=(g-b)/l+(g.5&&t?s=.4: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"#"+Y.componentToHex(e)+Y.componentToHex(t)+Y.componentToHex(a)},upperFirst:function(e){return e.substring(0,1).toUpperCase()+e.substring(1).toLowerCase()},addClass:function(e,t){Y.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"),$.ajax({type:"POST",data:{from:e,message:t},url:"/api/mail",success:function(e){"success"==e?($("#contact-container").empty(),$("#contact-container").html("Mail has been sent, we'll be back with you shortly.")):($("#contact-container").empty(),$("#contact-container").html("Something went wrong, sorry about that. You could instead try with your own mail-client: contact@zoff.no"))}}))}};$(document).on("submit","#contact-form",function(e){e.preventDefault();var t=$("#contact-form-message").val(),a=$("#contact-form-from").val();Y.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=U.page&&n div:nth-child("+n+")").after(o);var s=$("#wrapper").children()[n];$(s).css("display",i),"block"==i&&$("#wrapper").children().length>=U.page+U.can_fit+1?$($("#wrapper").children()[U.page+U.can_fit]).css("display","none"):n=0?$($("#wrapper").children()[U.page]).css("display","block"):$("#wrapper").children().length>U.page+U.can_fit&&$($("#wrapper").children()[U.page+U.can_fit-1]).css("display","block"),a&&U.page>0&&$($("#wrapper").children()[U.page-1]).css("display","none"),t&&setTimeout(function(){$(s).css("height",U.element_height)},5)}},populate_list:function(e,t){if(Y.mobilecheck()||$e?$e?(U.can_fit=Math.round($("#wrapper").height()/91)+1,U.element_height=$("#wrapper").height()/U.can_fit-4):(U.can_fit=Math.round(($(window).height()-$(".tabs").height()-$("header").height()-66)/71)+1,U.element_height=($(window).height()-$(".tabs").height()-$("header").height()-66)/U.can_fit-6):(U.can_fit=Math.round($("#wrapper").height()/71)+1,U.element_height=$("#wrapper").height()/U.can_fit-5.3),U.element_height<55.2&&(U.element_height=55.2),void 0===Q&&(Q=$("#list-song-html").html()),tt=e,Oe&&!t)for(var a=0;a1?($.each(tt,function(e,t){if(!t.now_playing){var a=U.generateSong(t,!1,ve,!0,!1,"",!0);$("#wrapper").append(a)}}),$("#wrapper").children().length>U.can_fit&&!$("#pageButtons").length?($('
    first_pagefirst_pagenavigate_before prevnavigate_before prev 1 next navigate_nextnext navigate_nextlast_pagelast_page
    ').insertAfter("#wrapper"),$(".prev_page").css("display","none"),$(".first_page").css("display","none"),$(".next_page_hide").css("display","none"),$(".last_page_hide").css("display","none")):$("#pageButtons").length||($('
    first_pagefirst_pagenavigate_before prevnavigate_before prev 1 next navigate_nextnext navigate_nextlast_pagelast_page
    ').insertAfter("#wrapper"),$(".prev_page").css("display","none"),$(".next_page").css("display","none"),$(".last_page").css("display","none"),$(".first_page").css("display","none"),$(".next_page_hide").css("display","inline-flex"),$(".prev_page_hide").css("display","inline-flex")),U.dynamicContentPage(-10)):(U.empty=!0,$("#wrapper").html("The playlist is empty."),$("#pageButtons").length||$('
    first_pagefirst_pagenavigate_before prevnavigate_before prev 1 next navigate_nextnext navigate_nextlast_pagelast_page
    ').insertAfter("#wrapper"),$(".prev_page").css("display","none"),$(".next_page").css("display","none"),$(".last_page").css("display","none"),$(".last_page_hide").css("display","inline-flex"),$(".first_page").css("display","none"),$(".next_page_hide").css("display","inline-flex"),$(".prev_page_hide").css("display","inline-flex")),$("#settings").css("visibility","visible"),$("#settings").css("opacity","1"),$("#wrapper").css("opacity","1")},dynamicContentPageJumpTo:function(e){e*=U.can_fit,(e>U.page||e0&&"none"==$(".prev_page").css("display")&&($(".prev_page").css("display","inline-flex"),$(".prev_page_hide").css("display","none"),$(".first_page").css("display","inline-flex"),$(".first_page_hide").css("display","none")),U.page+U.can_fit>=$("#wrapper").children().length&&($(".next_page_hide").css("display","inline-flex"),$(".next_page").css("display","none"),$(".last_page_hide").css("display","inline-flex"),$(".last_page").css("display","none")),$("#pageNumber").html(U.page/U.can_fit+1))},dynamicContentPage:function(e){1==e?($("#wrapper").children().slice(U.page,U.page+U.can_fit).hide(),U.page=U.page+U.can_fit,$("#wrapper").children().slice(U.page,U.page+U.can_fit).show(),U.page>0&&"none"==$(".prev_page").css("display")&&($(".prev_page").css("display","inline-flex"),$(".prev_page_hide").css("display","none"),$(".first_page").css("display","inline-flex"),$(".first_page_hide").css("display","none")),U.page+U.can_fit>=$("#wrapper").children().length&&($(".next_page_hide").css("display","inline-flex"),$(".next_page").css("display","none"),$(".last_page_hide").css("display","inline-flex"),$(".last_page").css("display","none"))):10==e?($("#wrapper").children().slice(U.page,U.page+U.can_fit).hide(),U.page=Math.floor(($("#wrapper").children().length-1)/U.can_fit)*U.can_fit,$("#wrapper").children().slice(U.page,U.page+U.can_fit).show(),U.page>0&&"none"==$(".prev_page").css("display")&&($(".prev_page").css("display","inline-flex"),$(".prev_page_hide").css("display","none"),$(".first_page").css("display","inline-flex"),$(".first_page_hide").css("display","none")),U.page+U.can_fit>=$("#wrapper").children().length&&($(".next_page_hide").css("display","inline-flex"),$(".next_page").css("display","none"),$(".last_page_hide").css("display","inline-flex"),$(".last_page").css("display","none"))):e==-10?($("#wrapper").children().slice(U.page,U.page+U.can_fit).hide(),U.page=0,$("#wrapper").children().slice(U.page,U.page+U.can_fit).show(),0==U.page&&"none"!=$(".prev_page").css("display")?($(".prev_page").css("display","none"),$(".prev_page_hide").css("display","inline-flex"),$(".first_page").css("display","none"),$(".first_page_hide").css("display","inline-flex")):"none"==$(".prev_page").css("display")?($(".prev_page_hide").css("display","inline-flex"),$(".first_page_hide").css("display","inline-flex")):($(".prev_page_hide").css("display","none"),$(".first_page_hide").css("display","none")),U.page+U.can_fit<$("#wrapper").children().length&&($(".next_page_hide").css("display","none"),$(".next_page").css("display","inline-flex"),$(".last_page_hide").css("display","none"),$(".last_page").css("display","inline-flex"))):($("#wrapper").children().slice(U.page-U.can_fit,U.page).show(),$("#wrapper").children().slice(U.page,U.page+U.can_fit).hide(),U.page=U.page-U.can_fit<0?0:U.page-U.can_fit,0==U.page&&"none"!=$(".prev_page").css("display")?($(".prev_page").css("display","none"),$(".prev_page_hide").css("display","inline-flex"),$(".first_page").css("display","none"),$(".first_page_hide").css("display","inline-flex")):"none"==$(".prev_page").css("display")?($(".prev_page_hide").css("display","inline-flex"),$(".first_page_hide").css("display","inline-flex")):($(".prev_page_hide").css("display","none"),$(".first_page_hide").css("display","none")),U.page+U.can_fit<$("#wrapper").children().length&&($(".next_page_hide").css("display","none"),$(".next_page").css("display","inline-flex"),$(".last_page_hide").css("display","none"),$(".last_page").css("display","inline-flex"))),$("#pageNumber").html(U.page/U.can_fit+1)},added_song:function(e){var t;if(void 0!=e){if(0!==tt.length&&(t=tt.pop()),tt.push(e),U.sortList(),t&&tt.push(t),$("#suggested-"+e.id).length>0){qe-=1,qe<0&&(qe=0);var a=qe>9?"9+":qe;$(".suggested-link span.badge.new.white").hasClass("hide")||0!=a||$(".suggested-link span.badge.new.white").addClass("hide"),$(".suggested-link span.badge.new.white").text(a)}$("#suggested-"+e.id).remove(),U.empty&&(U.empty=!1),$("#empty-channel-message").remove(),U.insertAtIndex(e,!0),$($("#wrapper").children()[U.page+U.can_fit]).css("display","none"),$("#wrapper").children().length>U.page+U.can_fit?($(".next_page_hide").css("display","none"),$(".next_page").removeClass("hide"),$(".last_page_hide").css("display","none"),$(".next_page").css("display","inline-flex"),$(".last_page").css("display","inline-flex")):($(".next_page_hide").css("display","inline-flex"),$(".next_page").css("display","none"))}},deleted_song:function(e,t){try{var a=U.getIndexOfSong(e),n=$("#wrapper").children()[a];t||(n.style.height=0),a=0?($($("#wrapper").children()[U.page]).css("height",0),$($("#wrapper").children()[U.page]).css("display","block"),$($("#wrapper").children()[U.page]).css("height",U.element_height)):$("#wrapper").children().length>U.page+U.can_fit&&($($("#wrapper").children()[U.page+U.can_fit]).css("height",0),$($("#wrapper").children()[U.page+U.can_fit]).css("display","block"),$($("#wrapper").children()[U.page+U.can_fit]).css("height",U.element_height)),U.page>=$("#wrapper").children().length-1?(U.dynamicContentPage(-1),$(".next_page_hide").css("display","inline-flex"),$(".next_page").css("display","none"),$(".last_page_hide").css("display","inline-flex"),$(".last_page").css("display","none")):U.page+U.can_fit+1>=$("#wrapper").children().length-1&&($(".next_page_hide").css("display","inline-flex"),$(".next_page").css("display","none"),$(".last_page_hide").css("display","inline-flex"),$(".last_page").css("display","none")),setTimeout(function(){t||$("#"+e).remove(),tt.splice(U.getIndexOfSong(e),1),Pe&&mt.sendNext({title:tt[0].title,videoId:tt[0].id})},305),t&&$("#"+e).remove()}catch(t){tt.splice(U.getIndexOfSong(e),1),U.empty||($("#"+e).remove(),a=0?$($("#wrapper").children()[U.page-1]).css("display","block"):$("#wrapper").children().length>U.page+U.can_fit&&$($("#wrapper").children()[U.page+(U.can_fit-1)]).css("display","block"),Pe&&mt.sendNext({title:tt[0].title,videoId:tt[0].id}))}tt.length<=2&&(U.empty=!0,$("#wrapper").html("The playlist is empty.")),$("#suggested-"+e).remove(),U.page+U.can_fit<$("#wrapper").children().length+1,U.page>=$("#wrapper").children().length&&U.dynamicContentPage(-1),yt.checkUserEmpty()},voted_song:function(e,t){var a=U.getIndexOfSong(e),n=tt[a];tt[a].votes+=1,tt[a].added=t,U.sortList(),$("#"+e).remove(),U.insertAtIndex(n,!1)},song_change:function(e,t){try{var a=tt.length-1;$("#wrapper").children()[0].remove(),0===$("#wrapper").children().length&&(U.empty=!0,$("#wrapper").html("The playlist is empty.")),tt[0].now_playing=!0,tt[0].votes=0,tt[0].guids=[],tt[0].added=e,t?delete tt[a]:tt[a].now_playing=!1,Y.log("---------------------------"),Y.log("---SONG ON FIRST INDEX-----"),Y.log(tt[0]),Y.log("---------------------------"),tt.push(tt.shift()),t||U.insertAtIndex(tt[a-1],!1,!0)}catch(e){}},vote:function(e,t){return!Oe||"del"==t&&Z&&!W&&""!=oe?P.emit("vote",{channel:J,id:e,type:t,adminpass:oe}):"pos"==t?U.voted_song(e,(new Date).getTime()/1e3):U.deleted_song(e),!0},skip:function(){return Oe?mt.playNext():P.emit("skip",{pass:oe,id:ot,channel:J.toLowerCase()}),!0},exportToSpotify:function(){$.ajax({type:"GET",url:"https://api.spotify.com/v1/me",headers:{Authorization:"Bearer "+Te.access_token},success:function(e){var t=e.id;$("#playlist_loader_export").removeClass("hide"),$(".exported-list-container").removeClass("hide"),$.ajax({type:"POST",url:"https://api.spotify.com/v1/users/"+t+"/playlists",headers:{Authorization:"Bearer "+Te.access_token,"Content-Type":"application/json"},data:JSON.stringify({name:J.toLowerCase()+" - Zoff",public:!0}),success:function(e){var a=e.id;$.each(tt,function(e,n){U.searchSpotify(n,a,t)})}})}})},searchSpotify:function(e,t,a){var n=e.title,i=e.title.toLowerCase().replace("-"," ");i=i.replace("official hd video",""),i=i.replace("unofficial video",""),i=i.replace("studio footage",""),i=i.replace("great song",""),i=i.replace("-"," "),i=i.replace("-"," "),i=i.replace(" hq "," "),i=i.replace("lyric video",""),i=i.replace("lyrics video",""),i=i.replace("album version",""),i=i.replace("drive original movie soundtrack",""),i=i.replace("original movie soundtrack",""),i=i.replace("live sessions",""),i=i.replace("audio only",""),i=i.replace("audio",""),i=i.replace("(new)",""),i=i.replace(" by "," "),i=i.replace(" vs "," "),i=i.replace("(full)"," "),i=i.replace("(video)"," "),i=i.replace("&"," "),i=i.replace("with lyrics",""),i=i.replace("lyrics",""),i=i.replace("w/",""),i=i.replace("w/",""),i=i.replace("official video",""),i=i.replace("studio version",""),i=i.replace("official music video",""),i=i.replace("music video",""),i=i.replace("musicvideo",""),i=i.replace("original video",""),i=i.replace("full version",""),i=i.replace("full song",""),i=i.replace("(official)",""),i=i.replace("official",""),i=i.replace("(original)",""),i=i.replace("("," "),i=i.replace(")"," "),i=i.replace("feat."," "),i=i.replace("feat"," "),i=i.replace("ft."," "),i=i.replace("["," "),i=i.replace("]"," "),i=i.replace(" free ",""),i=i.replace(" hd ",""),i=i.replace("original mix"," "),i=i.replace("radio edit"," "),i=i.replace("pop version"," "),i=i.replace(" "," ").replace(" "," ").replace(" "," ").replace(" "," ").replace(" "," ").replace(" "," "),i=encodeURIComponent(i),$.ajax({type:"GET",url:"https://api.spotify.com/v1/search?q="+i+"&type=track",headers:{Authorization:"Bearer "+Te.access_token},async:!0,statusCode:{429:function(t){console.log(t.getAllResponseHeaders());var a=t.getResponseHeader("Retry-After");console.log(a),a||(a=5),a=parseInt(a,10),Y.log("Retry-After",a),setTimeout(function(){U.searchSpotify(e)},1e3*a)}},error:function(t){if(429==t.status){console.log(t.getAllResponseHeaders());var a=t.getResponseHeader("Retry-After");console.log(a),a||(a=5),a=parseInt(a,10),Y.log("Retry-After",a),setTimeout(function(){U.searchSpotify(e)},1e3*a)}},success:function(e){var o=!1;if($.each(e.tracks.items,function(e,t){if(t.name=t.name.toLowerCase(),t.name=t.name.replace("("," "),t.name=t.name.replace(")"," "),t.name=t.name.replace("["," "),t.name=t.name.replace("]"," "),t.name=t.name.replace("-"," "),t.name=t.name.replace("-"," "),t.name=t.name.replace("-"," "),t.name=t.name.replace("original mix"," "),t.name=t.name.replace("album version"," "),t.name=t.name.replace("abum version"," "),t.name=t.name.replace("feat."," "),t.artists[0].name=t.artists[0].name.replace("feat."," "),t.artists[0].name=t.artists[0].name.replace("feat"," "),t.name=t.name.replace("feat"," "),t.name=t.name.replace("ft."," "),t.name=t.name.replace("radio edit"," "),t.name=t.name.replace("pop version"," "),t.name=t.name.replace(" "," ").replace(" "," ").replace(" "," ").replace(" "," ").replace(" "," ").replace(" "," ").replace(" "," ").replace(" "," "),t.artists[0].name=t.artists[0].name.replace(" "," ").replace(" "," ").replace(" "," ").replace(" "," ").replace(" "," ").replace(" "," ").replace(" "," ").replace(" "," ")," "==t.name.substring(t.name.length-1)&&(t.name=t.name.substring(0,t.name.length-1)),"."==t.name.substring(t.name.length-1)&&"."!=i.substring(i.length-1)&&(t.name=t.name.substring(0,t.name.length-1)),decodeURIComponent(i).indexOf(t.artists[0].name.toLowerCase())>=0&&decodeURIComponent(i).indexOf(t.name.toLowerCase())>=0)return o=!0,U.uris.push(t.uri),Y.log("Found",i),!1;for(var a=t.name.split(" "),e=0;e=0||"&"==a[e]&&i.indexOf("and")>=0)&&i.indexOf(a[e])<0)return!0; +return o=!0,U.uris.push(t.uri),Y.log("Found",i),!1}),o||(U.not_found.push(n),U.num_songs=U.num_songs+1,Y.log("Didn't find",n)),U.num_songs+U.uris.length==tt.length){if(U.uris.length>100){for(;U.uris.length>100;)U.addToSpotifyPlaylist(U.uris.slice(0,100),t,a),U.uris=U.uris.slice(100,U.uris.length);U.addToSpotifyPlaylist(U.uris,t,a),$("#playlist_loader_export").addClass("hide")}else U.addToSpotifyPlaylist(U.uris,t,a),$("#playlist_loader_export").addClass("hide");$(".exported-list").append(""+J+""),$.each(U.not_found,function(e,t){var a=$("
    "+Ee+"
    ");a.find(".extra-add-text").attr("value",t),a.find(".extra-add-text").attr("title",t),$(".not-exported-container").append(a.html())}),$(".not-exported").removeClass("hide"),$(".spotify_export_button").css("display","block")}}})},addToSpotifyPlaylist:function(e,t,a){$.ajax({type:"POST",url:"https://api.spotify.com/v1/users/"+a+"/playlists/"+t+"/tracks",headers:{Authorization:"Bearer "+Te.access_token,"Content-Type":"application/json"},data:JSON.stringify({uris:e}),error:function(n){setTimeout(function(){U.addToSpotifyPlaylist(e,t,a)},3e3)},success:function(e){Y.log("Added songs")}})},exportToYoutube:function(){var e="https://www.googleapis.com/youtube/v3/playlists?part=snippet";$(".exported-list-container").removeClass("hide"),$("#playlist_loader_export").removeClass("hide"),$.ajax({type:"POST",url:e,headers:{Authorization:"Bearer "+Ae.access_token,"Content-Type":"application/json"},data:JSON.stringify({snippet:{title:Y.upperFirst(J.toLowerCase()),description:"Playlist exported from zoff"}}),success:function(e){var t=0,a=e.id,n="https://www.googleapis.com/youtube/v3/playlistItems?part=snippet";U.addToYoutubePlaylist(a,tt,t,n)},error:function(e){Y.log(e)}})},addToYoutubePlaylist:function(e,t,a,n){var i=JSON.stringify({snippet:{playlistId:e,resourceId:{kind:"youtube#video",videoId:t[a].id}}});$.ajax({type:"POST",url:n,headers:{Authorization:"Bearer "+Ae.access_token,"Content-Type":"application/json"},data:i,success:function(i){Y.log("Added video: "+t[a].id+" to playlist id "+e),a==t.length-1?(Y.log("All videoes added!"),Y.log("url: https://www.youtube.com/playlist?list="+e),$(".exported-list").append(""+J+""),$("#playlist_loader_export").addClass("hide"),$(".current_number").addClass("hide")):($(".current_number").removeClass("hide"),$(".current_number").text(a+1+" of "+t.length),U.addToYoutubePlaylist(e,t,a+1,n))}})},importOldList:function(e){var t="",a=0;playlist_url="lists/"+e+".json",st=$.parseJSON($.ajax({type:"GET",url:playlist_url,async:!1}).responseText),$.each(st.songs,function(e,n){t+=n.id+",",a>45&&(ft.addVideos(t),t="",a=0),a++}),ft.addVideos(t),document.getElementById("search").value=""},sortList:function(){tt.sort(Y.predicate({name:"votes",reverse:!0},{name:"added",reverse:!1},{name:"title",reverse:!1}))},show:function(){Y.mobilecheck()||(X?(X=!1,$("#toptitle").empty(),$("#chan").addClass("bigChan"),$("#chan").html("zoff.me/"+J.toLowerCase())):(X=!0,$("#toptitle").html("Zoff"),$("#chan").removeClass("bigChan"),$("#chan").html(J)))},generateSong:function(e,t,a,n,i,o,s){void 0===Q&&(Q=$("#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=$("
    "+Q+"
    "),m="style";if(t?g.find("#list-song").css("height",0):g.find(".list-song").css("height",U.element_height),W||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>=U.can_fit&&s||"none"==o)&&g.find(".card").css("display","none"),l=".vote-container",r="delete_button";var h=Y.secondsToOther(e.duration);g.find(".card-duration").text(Y.pad(h[0])+":"+Y.pad(h[1]))}else if(!n){g.find(".vote-text").text(""),g.find(".card-duration").text(Y.pad(e.duration[0])+":"+Y.pad(e.duration[1]));var f="user";l=".add-suggested",i?r="del_user_suggested":(r="del_suggested",f="system"),g.find(".vote-container").attr("class","clickable add-suggested"),g.find(".add-suggested").attr("title",d),g.find(".delete_button").addClass(r),g.find(l).attr("data-video-title",d),g.find(l).attr("data-video-length",e.length),g.find(l).attr("data-added-by",f),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"))}return 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){try{return indexes=$.map(tt,function(t,a){if(t.id==e)return a}),indexes[0]}catch(e){}},scrollTop:function(){$("#wrapper").scrollTop(0)},scrollBottom:function(){$("#wrapper").scrollTop($("#wrapper")[0].scrollHeight)}},J=void 0===window.chan?$("#chan").html():window.chan,W=!0,Z=0,X=!0,Q=$("#list-song-html").html(),K=!1,ee="***REMOVED***",te=!1,ae=/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)?)?/,ne=[],ie=0,R=1,oe="",se="",le=!1,re=1,ce=!1,de=!1,pe=1,ue=!1,ge=6e3,me=Date.now(),he=!1,fe=!1,ye=-1,ve=!1,$e=!1,_e=!0,we=!1,be=!1,ke=!1,Ce=!1,xe=!1,Te={},Se=!1,Ie="",Ee="",Be=300,Le=600,Me="&autoplay",Ne=!1,Ae={},ze=!1,Pe=!1,De="808080",Ve=!1,je=!1,Oe=!1,Re=!1,qe=0,Ye="",He="",Ge=!1,Fe=[],Ue=0;if(void 0===localStorage.debug){var Je=!1;localStorage.debug=Je}var We,Ze,Xe,Qe,Ke,et,tt,ne,at,nt,it,re,ot,st,lt,rt,ct,P,dt={"sync disconnect on unload":!0,secure:!0,"force new connection":!0},pt=!1,ut=!1;try{navigator.serviceWorker.getRegistration("/").then(function(e){e.unregister()})}catch(e){}$().ready(function(){pt||"/"==window.location.pathname?ut||"/"!=window.location.pathname||t():a(),P.on("connect",function(){Ne&&(Ne=!1,$(".connect_error").fadeOut(function(){$(".connect_error").remove(),Materialize.toast("Connected!",2e3,"green lighten"),void 0!==O.get_pass(J.toLowerCase())&&""!==O.get_pass(J.toLowerCase())&&P.emit("password",{password:O.crypt_pass(O.get_pass(J.toLowerCase())),channel:J.toLowerCase()})}))}),o();try{z=$.ajax({type:"GET",url:"https://api.github.com/users/zoff-music/received_events",async:!1}).responseText,z=$.parseJSON(z),$("#latest-commit").html("Latest Commit:
    "+z[0].created_at.substring(0,10)+": "+z[0].actor.display_login+"
    "+z[0].payload.commits[0].sha.substring(0,10)+": "+z[0].payload.commits[0].message+"U.can_fit||ee&&$($("#wrapper").children()[U.page+e]).css("display","none"),U.can_fit=e,U.element_height=$("#wrapper").height()/U.can_fit-5.3,$(".list-song").css("height",U.element_height+"px"),$("#player_overlay").width($("#player").width()+1),k(),$("#controls").length>0&&!Y.mobilecheck()?$("#seekToDuration").css("top",$("#controls").position().top-55):$("#controls").length>0&&$("#seekToDuration").css("top",$("#controls").position().top-20)}}),$(document).on("click",".result-object",function(e){var t=$(e.target),a=t.prop("outerHTML").substring(0,4);if("9?"9+":qe;$(".suggested-link span.badge.new.white").hasClass("hide")||0!=o||$(".suggested-link span.badge.new.white").addClass("hide"),$(".suggested-link span.badge.new.white").text(o)}$("#suggested-"+t).remove()}),$(document).on("click",".del_suggested",function(e){var t=$(this).attr("data-video-id");$("#suggested-"+t).remove()}),$(document).on("click",".del_user_suggested",function(e){var t=$(this).attr("data-video-id");$("#suggested-"+t).remove(),qe-=1,qe<0&&(qe=0);var a=qe>9?"9+":qe;$(".suggested-link span.badge.new.white").hasClass("hide")||0!=a||$(".suggested-link span.badge.new.white").addClass("hide"),$(".suggested-link span.badge.new.white").text(a),U.vote(t,"del")}),$(document).on("click","#toast-container",function(){$(this).fadeOut(function(){$(this).remove()})}),$(document).on("click","#embed-area",function(){this.select()}),$(document).on("click",".brand-logo-navigate",function(e){e.preventDefault(),window.history.pushState("to the frontpage!","Title","/"),N()}),$(document).on("click","#player_bottom_overlay",function(){q.to_channel(J.toLowerCase(),!1)}),$(document).keydown(function(e){"/"!=window.location.pathname&&(91==e.keyCode||17==e.keyCode?Ve=!0:Ve&&70==e.keyCode?(Ve=!1,je=!je,e.preventDefault(),je?($("#find_div").toggleClass("hide"),$("#find_input").focus()):($("#find_div").toggleClass("hide"),$("#find_input").val(""),$("#find_input").blur(),$(".highlight").removeClass("highlight"),Fe=[],Ue=0)):Ve=!1)}),$(document).keyup(function(e){91!=e.keyCode&&17!=e.keyCode||je||(Ve=!1)}),$(document).on("submit","#find_form",function(e){if(e.preventDefault(),0==Fe.length){var t=this;Ue=0,Fe=$.map(tt,function(e,a){if(e.title.toLowerCase().indexOf(t.find_value.value.toLowerCase())>=0)return a})}else Ue+=1,Fe.length-10&&Fe[Ue]!=tt.length-1){$(".highlight").removeClass("highlight");var a=Math.floor(Fe[Ue]/U.can_fit);$($("#wrapper").children()[Fe[Ue]]).addClass("highlight"),U.dynamicContentPageJumpTo(a)}else Y.log("none found")});var gt={id:"",get_input:function(e){""===gt.id?gt.set_id(e.toLowerCase()):gt.set_channel(e.toLowerCase())},set_id:function(e){gt.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","inline-block"),$(".slider-vol-mobile").attr("style","display: inline-block !important")},set_channel:function(e){P.emit("id",{id:gt.id,type:"channel",value:e})},play_remote:function(){P.emit("id",{id:gt.id,type:"play",value:"mock"})},pause_remote:function(){P.emit("id",{id:gt.id,type:"pause",value:"mock"})},skip_remote:function(){P.emit("id",{id:gt.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){P.emit("id",{id:gt.id,type:"volume",value:t.value}),Y.log("volume")}})}},mt={loaded:!0,before_load:"",after_load:"",player:"",stopInterval:!1,fireplace:"",youtube_listener:function(e){var t;try{t=mt.player.getPlayerState()}catch(e){t=null}if(!(!Oe&&(null!=t||xe)||Oe&&(null==t||xe)||!Oe&&(null==t||xe)||Oe&&t==-1)||Oe&&He==J)we||mt.durationSetter(),duration=mt.player.getDuration();else{He=J,xe=!1,mt.loaded=!1,Y.log("--------youtube_listener--------"),Y.log("Received: "),Y.log(e),Y.log("paused variable: "+de),Y.log("mobile_beginning variable: "+Qe);try{Y.log("getVideoUrl(): "+mt.player.getVideoUrl().split("v=")[1])}catch(e){}if(Y.log("video_id variable: "+ot),Y.log("---------------------------------"),e.np){if(de)mt.getTitle(e.np[0].title,re),Y.mobilecheck()||mt.notifyUser(e.np[0].id,e.np[0].title),Pe||mt.stopVideo(),ot=e.np[0].id,ne=e.conf[0],time=e.time,lt=time-ne.startTime,rt=e.np[0].title,duration=e.np[0].duration,mt.setBGimage(ot);else if(!de){void 0===ct?ct=e.np[0].id:ct!=ot&&(ct=ot),ot=e.np[0].id,ne=e.conf[0],time=e.time,lt=time-ne.startTime,rt=e.np[0].title,duration=e.np[0].duration,Qe&&Y.mobilecheck()&&0===lt&&!Pe&&(lt=1);try{tt[0].id!=ot||Qe||U.song_change(tt[0].added),yt.fetchYoutubeSuggests(ot)}catch(e){}if(mt.getTitle(rt,re),mt.setBGimage(ot),le&&!window.MSStream)try{(mt.player.getVideoUrl().split("v=")[1]!=ot||Pe)&&(mt.loadVideoById(ot),Y.mobilecheck()||mt.notifyUser(ot,rt),mt.seekTo(lt),de&&!Pe&&mt.pauseVideo()),de||(Qe&&!Pe||mt.playVideo(),we||mt.durationSetter()),(mt.player.getDuration()>lt||0===mt.player.getDuration()||Pe||mt.player.getCurrentTime()!=lt)&&mt.seekTo(lt),mt.after_load=ot,mt.loaded||setTimeout(function(){mt.loaded=!0},500)}catch(e){Pe&&(mt.loadVideoById(ot),mt.seekTo(lt)),we||Pe||mt.durationSetter()}else mt.getTitle(rt,re)}}else{document.getElementById("song-title").innerHTML="Empty channel. Add some songs!",window.MSStream||Pe||$("#player_overlay").toggleClass("hide");try{Pe||mt.stopVideo()}catch(e){}}}},onPlayerStateChange:function(e){Y.log("-------onPlayerStateChange------"),Y.log("New state\nState: "),Y.log(e);try{Y.log("Duration: "+mt.player.getDuration(),"Current time: "+mt.player.getCurrentTime()),Y.log("getVideoUrl(): "+mt.player.getVideoUrl().split("v=")[1])}catch(e){}switch(Y.log("video_id variable: "+ot),Y.log("---------------------------------"),e.data){case-1:break;case 0:ue=!1,de=!1,Oe?mt.playNext():P.emit("end",{id:ot,channel:J.toLowerCase()});break;case 1:ue=!0,beginning&&Y.mobilecheck()&&!Pe&&(mt.pauseVideo(),beginning=!1,Qe=!1,setTimeout(function(){Y.mobilecheck()&&($("#playpause").css("visibility","visible"),$("#playpause").css("pointer-events","all"),$("#channel-load").css("display","none"))},100)),$e||"/"==window.location.pathname||Pe||Y.addClass("#player_overlay","hide"),"/"!=window.location.pathname&&(1==document.getElementById("play").className.split(" ").length&&$("#play").toggleClass("hide"),2==document.getElementById("pause").className.split(" ").length&&$("#pause").toggleClass("hide")),de&&!Oe&&(P.emit("pos",{channel:J.toLowerCase()}),de=!1);break;case 2:Pe||(de=!0,"/"!=window.location.pathname&&ht.play_pause_show(),Qe=!0);break;case 3:}},playVideo:function(){Pe?(H.sendMessage("urn:x-cast:zoff.me",{type:"playVideo"}),chrome.cast.media.GenericMediaMetadata({metadataType:"GENERIC",title:rt,image:"https://img.youtube.com/vi/"+ot+"/mqdefault.jpg"}),chrome.cast.Image("https://img.youtube.com/vi/"+ot+"/mqdefault.jpg"),$("#pause").hasClass("hide")&&($("#play").toggleClass("hide"),$("#pause").toggleClass("hide"))):mt.player.playVideo()},pauseVideo:function(){Pe?(H.sendMessage("urn:x-cast:zoff.me",{type:"pauseVideo"}),$("#play").hasClass("hide")&&($("#play").toggleClass("hide"),$("#pause").toggleClass("hide"))):mt.player.pauseVideo()},seekTo:function(e){Pe?H.sendMessage("urn:x-cast:zoff.me",{type:"seekTo",seekTo:e}):Oe?mt.player.seekTo(0):mt.player.seekTo(e)},loadVideoById:function(e){Pe?(H.sendMessage("urn:x-cast:zoff.me",{type:"loadVideo",videoId:e}),chrome.cast.media.GenericMediaMetadata({metadataType:"GENERIC",title:rt,image:"https://img.youtube.com/vi/"+e+"/mqdefault.jpg"}),chrome.cast.Image("https://img.youtube.com/vi/"+e+"/mqdefault.jpg")):mt.player.loadVideoById(e,0)},stopVideo:function(){if(Pe)H.sendMessage("urn:x-cast:zoff.me",{type:"stopVideo"});else try{mt.player.stopVideo()}catch(e){}},setVolume:function(e){Pe?H.setVolume(e/100):mt.player.setVolume(e)},playNext:function(){var e=tt[0];ot=e.id,time=(new Date).getTime(),rt=e.title,duration=e.duration,mt.getTitle(rt,re),mt.setBGimage(ot),Pe?(H.sendMessage("urn:x-cast:zoff.me",{type:"loadVideo",videoId:ot}),chrome.cast.media.GenericMediaMetadata({metadataType:"GENERIC",title:rt,image:"https://img.youtube.com/vi/"+ot+"/mqdefault.jpg"}),chrome.cast.Image("https://img.youtube.com/vi/"+ot+"/mqdefault.jpg")):mt.loadVideoById(ot),U.channel_function({type:"song_change",time:time})},sendNext:function(e){Pe&&H.sendMessage("urn:x-cast:zoff.me",{type:"nextVideo",title:e.title,videoId:e.videoId})},getTitle:function(e,t){var a="visibility",n=decodeURIComponent(e);if("/"!=window.location.pathname){var i=document.getElementById("song-title"),o=document.getElementById("viewers");i.innerHTML=n,o.innerHTML=a+" "+t,i.title=n,Pe&&($("#player_overlay").css("background","url(https://img.youtube.com/vi/"+ot+"/hqdefault.jpg)"),$("#player_overlay").css("background-position","center"),$("#player_overlay").css("background-size","100%"),$("#player_overlay").css("background-color","black"),$("#player_overlay").css("background-repeat","no-repeat"))}document.title=n+" • Zoff / "+J},errorHandler:function(e){5==e.data||100==e.data||101==e.data||150==e.data?(curr_playing=mt.player.getVideoUrl().replace("https://www.youtube.com/watch?v=",""),P.emit("skip",{error:e.data,id:ot,pass:oe,channel:J.toLowerCase})):void 0!==ot&&mt.loadVideoById(ot)},onPlayerReady:function(e){try{beginning=!0,le=!0,window.MSStream||(Y.mobilecheck()?($("#playpause").css("visibility","hidden"),$("#playpause").css("pointer-events","none")):$("#channel-load").css("display","none"),$("#player").css("opacity","1"),$("#controls").css("opacity","1"),$(".playlist").css("opacity","1"),mt.loadVideoById(ot),!_e||Y.mobilecheck()&&!Pe||mt.playVideo(),we||mt.durationSetter(),$e?setTimeout(function(){mt.player.seekTo(lt),_e||(mt.player.pauseVideo(),ht.play_pause_show())},1e3):mt.seekTo(lt)),mt.readyLooks(),ht.initYoutubeControls(mt.player),ht.initSlider(),mt.player.setVolume(O.get_volume()),$(".video-container").removeClass("no-opacity"); +}catch(e){}},readyLooks:function(){mt.setBGimage(ot)},setBGimage:function(e){if(void 0!==e&&!$e){var t=new Image;t.onload=function(){var e=new ColorThief,a=e.getColor(t);"/"!=window.location.pathname&&(document.getElementsByTagName("body")[0].style.backgroundColor=Y.rgbToHsl(a,!0),$("meta[name=theme-color]").attr("content",Y.rgbToHex(a[0],a[1],a[2])))},t.crossOrigin="Anonymous",t.src="https://zoff.me:8081/https://img.youtube.com/vi/"+e+"/mqdefault.jpg"}},set_width:function(e){if($(".video-container").width(e),!Y.mobilecheck())if($(window).width()>769){var t=$(window).width()-$(".control-list").width()-$(".zbrand").outerWidth()-$(".brand-logo-navigate").outerWidth()-66;title_width=t,$(".title-container").width(title_width)}else $(".title-container").width("100%")},notifyUser:function(e,t){if(t=t.replace(/\\\'/g,"'").replace(/"/g,"'").replace(/&/g,"&"),"granted"===Notification.permission&&document.hidden){var a=new Notification("Now Playing",{body:t,icon:"https://i.ytimg.com/vi/"+e+"/mqdefault.jpg",iconUrl:"http://i.ytimg.com/vi/"+e+"/mqdefault.jpg"});a.onclick=function(e){window.focus(),this.cancel()},setTimeout(function(){a.close()},5e3)}},setup_all_listeners:function(){l(),s(),p(),u(),m()},onYouTubeIframeAPIReady:function(){mt.player=new YT.Player("player",{videoId:ot,playerVars:{rel:"0",wmode:"transparent",controls:"0",fs:"0",iv_load_policy:"3",theme:"light",color:"white",showinfo:0},events:{onReady:mt.onPlayerReady,onStateChange:mt.onPlayerStateChange,onError:mt.errorHandler}})},createFireplacePlayer:function(){mt.fireplace=new YT.Player("fireplace_player",{videoId:"L_LUpnjgPso",playerVars:{rel:"0",wmode:"transparent",controls:"0",fs:"0",iv_load_policy:"3",theme:"light",color:"white",showinfo:0},events:{onReady:mt.onFireplaceReady,onStateChange:mt.onFireplaceChange}})},onFireplaceReady:function(){mt.fireplace.playVideo()},onFireplaceChange:function(e){switch(e.data){case 0:mt.fireplace.seekTo(0),mt.fireplace.playVideo();break;case 2:mt.fireplace.playVideo()}},durationSetter:function(){if(void 0!==duration)try{mt.stopInterval||(we=!0),dMinutes=Math.floor(duration/60),dSeconds=duration-60*dMinutes,currDurr=void 0!==mt.player.getCurrentTime()?Math.floor(mt.player.getCurrentTime()):lt,currDurr>duration&&(currDurr=duration),minutes=Math.floor(currDurr/60),seconds=currDurr-60*minutes,document.getElementById("duration").innerHTML=Y.pad(minutes)+":"+Y.pad(seconds)+" / "+Y.pad(dMinutes)+":"+Y.pad(dSeconds),per=100/duration*currDurr,per>=100?per=100:0===duration&&(per=0),ce||$("#bar").width(per+"%")}catch(e){}mt.stopInterval||setTimeout(mt.durationSetter,1e3)},loadPlayer:function(){if(1==$("script[src='https://www.youtube.com/iframe_api']").length)try{mt.onYouTubeIframeAPIReady()}catch(e){console.error("Seems YouTube iFrame script isn't correctly loaded. Please reload the page.")}else at=document.createElement("script"),at.src="https://www.youtube.com/iframe_api",nt=document.getElementsByTagName("script")[0],nt.parentNode.insertBefore(at,nt)}},ht={stopInterval:!1,initYoutubeControls:function(){Y.mobilecheck()&&!window.MSStream&&$("#controls").appendTo("#playbar"),ht.initControls()},initControls:function(){document.getElementById("volume-button").addEventListener("click",ht.mute_video),document.getElementById("playpause").addEventListener("click",ht.play_pause),document.getElementById("volume-button-overlay").addEventListener("click",ht.mute_video),document.getElementById("playpause-overlay").addEventListener("click",ht.play_pause),document.getElementById("fullscreen").addEventListener("click",ht.fullscreen)},initSlider:function(){try{vol=O.get_volume()}catch(e){}$("#volume").slider({min:0,max:100,value:vol,range:"min",animate:!0,slide:function(e,t){ht.setVolume(t.value);try{O.set_volume(t.value)}catch(e){}}}),ht.choose_button(vol,!1)},fullscreen:function(){var e=document.getElementById("player"),t=e.requestFullScreen||e.mozRequestFullScreen||e.webkitRequestFullScreen;t&&t.bind(e)()},play_pause:function(){Pe?ht.play_pause_show():1==mt.player.getPlayerState()?(mt.pauseVideo(),Y.mobilecheck()&&!window.MSStream&&(document.getElementById("player").style.display="none",$(".video-container").toggleClass("click-through"),$(".page-footer").toggleClass("padding-bottom-extra"))):(2==mt.player.getPlayerState()||0===mt.player.getPlayerState()||5===mt.player.getPlayerState()&&Y.mobilecheck())&&(mt.playVideo(),Y.mobilecheck()&&!window.MSStream&&(document.getElementById("player").style.display="block",$(".video-container").toggleClass("click-through"),$(".page-footer").toggleClass("padding-bottom-extra")))},play_pause_show:function(){Pe?$("#play").hasClass("hide")?mt.pauseVideo():$("#pause").hasClass("hide")&&mt.playVideo():(1==document.getElementById("pause").className.split(" ").length&&($("#pause").toggleClass("hide"),$("#pause-overlay").toggleClass("hide")),2==document.getElementById("play").className.split(" ").length&&($("#play").toggleClass("hide"),$("#play-overlay").toggleClass("hide")))},settings:function(){$("#qS").toggleClass("hide")},changeQuality:function(e){mt.player.getPlaybackQuality!=e&&(mt.player.setPlaybackQuality(e),mt.player.getPlaybackQuality()),$("#qS").toggleClass("hide")},mute_video:function(){mt.player.isMuted()?(Pe&&H.sendMessage("urn:x-cast:zoff.me",{type:"unMute"}),mt.player.unMute(),ht.choose_button(mt.player.getVolume(),!1)):(Pe&&H.sendMessage("urn:x-cast:zoff.me",{type:"mute"}),ht.choose_button(0,!0),mt.player.mute())},setVolume:function(e){mt.setVolume(e),ht.choose_button(e,!1),mt.player.isMuted()&&mt.player.unMute()},choose_button:function(e,t){t?(1==document.getElementById("v-full").className.split(" ").length&&($("#v-full").toggleClass("hide"),$("#v-full-overlay").toggleClass("hide")),1==document.getElementById("v-medium").className.split(" ").length&&($("#v-medium").toggleClass("hide"),$("#v-medium-overlay").toggleClass("hide")),1==document.getElementById("v-low").className.split(" ").length&&($("#v-low").toggleClass("hide"),$("#v-low-overlay").toggleClass("hide")),2==document.getElementById("v-mute").className.split(" ").length&&($("#v-mute").toggleClass("hide"),$("#v-mute-overlay").toggleClass("hide"))):e>=0&&e<=33?(1==document.getElementById("v-full").className.split(" ").length&&($("#v-full").toggleClass("hide"),$("#v-full-overlay").toggleClass("hide")),1==document.getElementById("v-medium").className.split(" ").length&&($("#v-medium").toggleClass("hide"),$("#v-medium-overlay").toggleClass("hide")),2==document.getElementById("v-low").className.split(" ").length&&($("#v-low").toggleClass("hide"),$("#v-low-overlay").toggleClass("hide")),1==document.getElementById("v-mute").className.split(" ").length&&($("#v-mute").toggleClass("hide"),$("#v-mute-overlay").toggleClass("hide"))):e>=34&&e<=66?(1==document.getElementById("v-full").className.split(" ").length&&($("#v-full").toggleClass("hide"),$("#v-full-overlay").toggleClass("hide")),2==document.getElementById("v-medium").className.split(" ").length&&($("#v-medium").toggleClass("hide"),$("#v-medium-overlay").toggleClass("hide")),1==document.getElementById("v-low").className.split(" ").length&&($("#v-low").toggleClass("hide"),$("#v-low-overlay").toggleClass("hide")),1==document.getElementById("v-mute").className.split(" ").length&&($("#v-mute").toggleClass("hide"),$("#v-mute-overlay").toggleClass("hide"))):e>=67&&e<=100&&(2==document.getElementById("v-full").className.split(" ").length&&($("#v-full").toggleClass("hide"),$("#v-full-overlay").toggleClass("hide")),1==document.getElementById("v-medium").className.split(" ").length&&($("#v-medium").toggleClass("hide"),$("#v-medium-overlay").toggleClass("hide")),1==document.getElementById("v-low").className.split(" ").length&&($("#v-low").toggleClass("hide"),$("#v-low-overlay").toggleClass("hide")),1==document.getElementById("v-mute").className.split(" ").length&&($("#v-mute").toggleClass("hide"),$("#v-mute-overlay").toggleClass("hide")))},playPause:function(){state=mt.player.getPlayerState(),button=document.getElementById("playpause"),1==state?mt.pauseVideo():2==state&&mt.playVideo()},volumeOptions:function(){Pe||(mt.player.isMuted()?(mt.player.unMute(),vol=mt.player.getVolume(),$("#volume").slider("value",mt.player.getVolume())):(mt.player.mute(),$("#volume").slider("value",0)))},hoverMute:function(e){vol=mt.player.getVolume()}},ft={submitArray:[],submitArrayExpected:null,showSearch:function(){$("#search-wrapper").toggleClass("hide"),Y.mobilecheck()&&$(".search_input").focus(),$("#song-title").toggleClass("hide"),$("#results").empty(),"close"==$("#search-btn i").html()?$("#search-btn i").html("search"):$("#search-btn i").html("close"),$("#search").focus()},search:function(e){if(void 0!==Ze&&void 0!==Xe||(Ze=$("#temp-results-container"),Xe=$("#empty-results-container").html()),$(".search_results").html(""),""!==e){te=!0;var t=encodeURIComponent(e),a="https://www.googleapis.com/youtube/v3/search?key="+ee+"&videoEmbeddable=true&part=id&fields=items(id)&type=video&order=viewCount&safeSearch=none&maxResults=25";a+="&q="+t,ie&&(a+="&videoCategoryId=10");var n="https://www.googleapis.com/youtube/v3/videos?part=contentDetails,snippet,id&key="+ee+"&id=";Y.contains($(".search_loader_spinner").attr("class").split(" "),"active")||$(".search_loader_spinner").addClass("active"),Y.contains($("#results").attr("class").split(" "),"hide")&&$("#results").removeClass("hide"),$.ajax({type:"GET",url:a,dataType:"jsonp",success:function(e){0===e.items.length?($("").appendTo($("#results")).show("blind",83.33),Y.contains($(".search_loader_spinner").attr("class").split(" "),"active")&&$(".search_loader_spinner").removeClass("active")):e.items&&($.each(e.items,function(e,t){n+=t.id.videoId+","}),$.ajax({type:"GET",url:n,dataType:"jsonp",success:function(e){var t="",a=$(Ze);$.each(e.items,function(e,n){var i=n.contentDetails.duration;if(secs=ft.durationToSeconds(i),!longsongs||secs<720){it=n.snippet.title,enc_title=it,et=n.id,i=i.replace("PT","").replace("H","h ").replace("M","m ").replace("S","s"),thumb=n.snippet.thumbnails.medium.url;var o=a;o.find(".search-title").text(it),o.find(".result_info").text(i),o.find(".thumb").attr("src",thumb),o.find("#add-many").attr("data-video-id",et),o.find("#add-many").attr("data-video-title",enc_title),o.find("#add-many").attr("data-video-length",secs),o.find("#temp-results").attr("data-video-id",et),o.find("#temp-results").attr("data-video-title",enc_title),o.find("#temp-results").attr("data-video-length",secs),t+=o.html()}}),$("").appendTo($("#results")).show("blind",83.33*(e.items.length-1)),Y.contains($(".search_loader_spinner").attr("class").split(" "),"active")&&$(".search_loader_spinner").removeClass("active"),$(".add-many").click(function(e){return e.preventDefault(),e.stopPropagation(),!1})}}))}})}else $(".main").removeClass("blurT"),$("#controls").removeClass("blurT"),$(".main").removeClass("clickthrough")},backgroundSearch:function(e,t,a,n,i){var o=encodeURIComponent(e+" "+t),s="https://www.googleapis.com/youtube/v3/search?key="+ee+"&videoEmbeddable=true&part=id,snippet&fields=items(id,snippet)&type=video&order=relevance&safeSearch=none&maxResults=10&videoCategoryId=10";s+="&q="+o;var l="https://www.googleapis.com/youtube/v3/videos?part=contentDetails,snippet,id&key="+ee+"&id=";t=t.split(" ");var r=e.split("-");r=r.join(" ").split(" "),$.ajax({type:"GET",url:s,dataType:"jsonp",success:function(i){if(0===i.items.length){ft.readySubmit(!1,{totalLength:n-1}),Y.log("------------------------------"),Y.log("NO MATCH FOR:"),Y.log("Spotify title: "+e+" "+t.join(" ")),Y.log("Spotify length: "+a),Y.log("------------------------------");var o=$("
    "+Ie+"
    ");o.find(".extra-add-text").text(e+" - "+t.join(" ")),o.find(".extra-add-text").attr("title",e+" - "+t.join(" ")),o.find(".extra-button-search").attr("data-text",e+" - "+t.join(" ")),$(".not-imported-container").append(o.html()),$(".not-imported").removeClass("hide")}else i.items.length>0&&($.each(i.items,function(e,t){l+=t.id.videoId+","}),$.ajax({type:"GET",url:l,dataType:"jsonp",success:function(i){if(i.items.length>0){var o=!1;if($.each(i.items,function(a,i){var s=ft.durationToSeconds(i.contentDetails.duration),l=!1;if($.each(r,function(a,n){return i.snippet.title.toLowerCase().indexOf(n.toLowerCase())!=-1&&i.snippet.title.toLowerCase().indexOf("cover")==-1&&e.toLowerCase().indexOf("cover")==-1&&(i.snippet.title.toLowerCase().indexOf("remix")==-1&&e.toLowerCase().indexOf("remix")==-1||i.snippet.title.toLowerCase().indexOf("remix")!=-1&&e.toLowerCase().indexOf("remix")!=-1||i.snippet.title.toLowerCase().indexOf(t[0].toLowerCase())!=-1||i.snippet.channelTitle.toLowerCase().indexOf(t[0].toLowerCase())!=-1||i.snippet.channelTitle.toLowerCase().indexOf("vevo")!=-1)||(l=!0),!1}),!l)return o=!0,ft.readySubmit(!0,{id:i.id,title:i.snippet.title,duration:s,totalLength:n-1}),!1}),!o){ft.readySubmit(!1,{totalLength:n-1}),Y.log("------------------------------"),Y.log("NO MATCH FOR:"),Y.log("Spotify title: "+e+" "+t.join(" ")),Y.log("Spotify length: "+a),Y.log("------------------------------");var s=$("
    "+Ie+"
    ");s.find(".extra-add-text").text(e+" - "+t.join(" ")),s.find(".extra-add-text").attr("title",e+" - "+t.join(" ")),s.find(".extra-button-search").attr("data-text",e+" - "+t.join(" ")),$(".not-imported-container").append(s.html()),$(".not-imported").removeClass("hide")}}}}))}})},readySubmit:function(e,t){null===ft.submitArrayExpected&&(ft.submitArrayExpected=t.totalLength),e?ft.submitArray.push(t):ft.submitArrayExpected-=1,ft.submitArray.length-1==ft.submitArrayExpected&&($.each(ft.submitArray,function(e,t){ft.submit(t.id,t.title,t.duration,!0,e,ft.submitArray.length-1)}),document.getElementById("import_spotify").disabled=!1,$("#import_spotify").removeClass("hide"),$("#playlist_loader_spotify").addClass("hide"),ft.submitArray=[],ft.submitArrayExpected=null)},submitAndClose:function(e,t,a){ft.submit(e,t,a,!1,0,1),$("#results").html(""),ft.showSearch(),document.getElementById("search").value="",$("#results").html="",$(".main").removeClass("blurT"),$("#controls").removeClass("blurT"),$(".main").removeClass("clickthrough")},importPlaylist:function(e,t){token="";var a,n;void 0!==t&&(token="&pageToken="+t),playlist_url="https://www.googleapis.com/youtube/v3/playlistItems?part=contentDetails&maxResults=49&key="+ee+"&playlistId="+e+token,ze?(n="html",a={"Content-Type":"application/json",Authorization:"Bearer "+Ae.access_token}):(a={},n="jsonp"),$.ajax({type:"GET",url:playlist_url,dataType:n,headers:a,success:function(a){if(a.error)if("playlistItemsNotAccessible"==a.error.errors[0].reason){var n=C(29);window.callback=function(a){Ae=a,Ae.state==n?(ze=!0,setTimeout(function(){ze=!1,Ae={}},1e3*Ae.expires_in),ft.importPlaylist(e,t)):(Ae="",console.error("Nonce doesn't match")),youtube_window.close(),window.callback=""},youtube_window=window.open("/o_callback#youtube=true&nonce="+n,"","width=600, height=600")}else Y.log(a.error),document.getElementById("import").disabled=!1,$("#playlist_loader").addClass("hide"),$("#import").removeClass("hide"),M(),Materialize.toast("It seems you've entered a invalid url.",4e3);else{var i="";"string"==typeof a&&(a=$.parseJSON(a)),$.each(a.items,function(e,t){i+=t.contentDetails.videoId+","}),ft.addVideos(i,!0),a.nextPageToken&&ft.importPlaylist(e,a.nextPageToken),document.getElementById("import").value=""}}})},importSpotifyPlaylist:function(e){$.ajax({url:e,headers:{Authorization:"Bearer "+Te.access_token},success:function(e){$.each(e.items,function(t,a){ft.backgroundSearch(a.track.name,a.track.artists.map(function(e){return e.name}).join(" "),Math.floor(a.track.duration_ms/1e3),e.total,t+e.offset)}),e.next&&ft.importSpotifyPlaylist(e.next)},error:function(){document.getElementById("import_spotify").disabled=!1,$("#import_spotify").removeClass("hide"),$("#playlist_loader_spotify").addClass("hide"),M(),Materialize.toast("It seems you've entered a invalid url.",4e3)}})},addVideos:function(e,t){var a="https://www.googleapis.com/youtube/v3/videos?part=contentDetails,snippet,id&key=***REMOVED***&id=";a+=e,$.ajax({type:"POST",url:a,dataType:"jsonp",success:function(e){var a=0,n=[];$.each(e.items,function(e,i){var o=ft.durationToSeconds(i.contentDetails.duration);(!longsongs||o<720)&&(enc_title=i.snippet.title,a+=1,n.push({id:i.id,enc_title:enc_title,duration:o,playlist:t}))}),$.each(n,function(e,t){ft.submit(t.id,t.enc_title,t.duration,t.playlist,e,a)})}})},submit:function(e,t,a,n,i,o){if(Oe&&document.getElementsByName("addsongs")[0].checked&&document.getElementsByName("addsongs")[0].disabled){var s=[];s=$.map(tt,function(t,a){if(t.id==e)return a}),0==s.length?U.channel_function({type:"added",value:{added:(new Date).getTime()/1e3,guids:[1],id:e,title:t,duration:a,playlist:!1,now_playing:!1,votes:1}}):U.vote(e,"pos")}else P.emit("add",{id:e,title:decodeURIComponent(t),adminpass:oe,list:J.toLowerCase(),duration:a,playlist:n,num:i,total:o})},durationToSeconds:function(e){var t=e.match(ae);return hours=parseInt(t[12])||0,minutes=parseInt(t[14])||0,seconds=parseInt(t[16])||0,60*hours*60+60*minutes+seconds}},yt={catchUserSuggests:function(e,t){qe+=t?1:e.length;var a=qe>9?"9+":qe;if($(".suggested-link span.badge.new.white").hasClass("hide")&&qe>0&&$(".suggested-link span.badge.new.white").removeClass("hide"),$(".suggested-link span.badge.new.white").text(a),t)yt.createSuggested(e);else for(var n in e)yt.createSuggested(e[n]);yt.checkUserEmpty()},createSuggested:function(e){var t=Y.secondsToOther(e.duration),a=e.id,n=e.title,i=U.generateSong({id:a,title:n,length:e.duration,duration:t},!1,!1,!1,!0);$("#user-suggest-html").append(i)},fetchYoutubeSuggests:function(e){var t="https://www.googleapis.com/youtube/v3/search?part=snippet&relatedToVideoId="+e+"&type=video&key="+ee,a="https://www.googleapis.com/youtube/v3/videos?part=contentDetails,snippet,id&key="+ee+"&id=";$.ajax({type:"GET",url:t,dataType:"jsonp",success:function(e){$.each(e.items.slice(0,5),function(e,t){a+=t.id.videoId+","}),$.ajax({type:"GET",url:a,dataType:"jsonp",success:function(e){$("#suggest-song-html").empty(),$.each(e.items,function(e,t){var a=t.contentDetails.duration,n=ft.durationToSeconds(a);a=Y.secondsToOther(ft.durationToSeconds(a));var i=t.id,o=t.snippet.title;$("#suggest-song-html").append(U.generateSong({id:i,title:o,length:n,duration:a},!1,!1,!1))})}})}})},checkUserEmpty:function(){var e=$("#user-suggest-html").children().length;0===e?Y.contains($("#user_suggests").attr("class").split(" "),"hide")||$("#user_suggests").addClass("hide"):$("#user_suggests").removeClass("hide")}}}(); \ No newline at end of file diff --git a/server/views/assets/dist/remote.min.js b/server/views/assets/dist/remote.min.js new file mode 100755 index 00000000..02e2b73d --- /dev/null +++ b/server/views/assets/dist/remote.min.js @@ -0,0 +1 @@ +!function(){var t=!0;mobilecheck=function(){var t=!1;return function(e){(/(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(e)||/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(e.substr(0,4)))&&(t=!0)}(navigator.userAgent||navigator.vendor||window.opera),t},$(document).ready(function(){document.title="Zoff Remote",setTimeout(function(){$("#search").focus()},500);var t={"sync disconnect on unload":!0,secure:!0};$("#about").modal(),$("#contact").modal(),"remote.zoff.me"==window.location.hostname?add="https://zoff.me":add="localhost",socket=io.connect(add+":8080",t),id=window.location.pathname.split("/")[1],id&&(id=id.toLowerCase(),e.control());try{git_info=$.ajax({type:"GET",url:"https://api.github.com/users/zoff-music/received_events",async:!1}).responseText,git_info=$.parseJSON(git_info),$("#latest-commit").html("Latest Commit:
    "+git_info[0].created_at.substring(0,10)+": "+git_info[0].actor.display_login+"
    "+git_info[0].payload.commits[0].sha.substring(0,10)+": "+git_info[0].payload.commits[0].message+" Zoff OAuth Callback - + diff --git a/public/html/embed.html b/server/views/assets/html/embed.html similarity index 85% rename from public/html/embed.html rename to server/views/assets/html/embed.html index e5bb7865..0765bf71 100755 --- a/public/html/embed.html +++ b/server/views/assets/html/embed.html @@ -5,13 +5,13 @@ - + - - - - - + + + + + diff --git a/public/images/144x144.png b/server/views/assets/images/144x144.png similarity index 100% rename from public/images/144x144.png rename to server/views/assets/images/144x144.png diff --git a/public/images/GitHub_Logo.png b/server/views/assets/images/GitHub_Logo.png similarity index 100% rename from public/images/GitHub_Logo.png rename to server/views/assets/images/GitHub_Logo.png diff --git a/public/images/Logo.png b/server/views/assets/images/Logo.png similarity index 100% rename from public/images/Logo.png rename to server/views/assets/images/Logo.png diff --git a/public/images/facebook.png b/server/views/assets/images/facebook.png similarity index 100% rename from public/images/facebook.png rename to server/views/assets/images/facebook.png diff --git a/public/images/favicon.png b/server/views/assets/images/favicon.png similarity index 100% rename from public/images/favicon.png rename to server/views/assets/images/favicon.png diff --git a/public/images/glight.png b/server/views/assets/images/glight.png similarity index 100% rename from public/images/glight.png rename to server/views/assets/images/glight.png diff --git a/public/images/gmark.png b/server/views/assets/images/gmark.png similarity index 100% rename from public/images/gmark.png rename to server/views/assets/images/gmark.png diff --git a/public/images/google_play.png b/server/views/assets/images/google_play.png similarity index 100% rename from public/images/google_play.png rename to server/views/assets/images/google_play.png diff --git a/public/images/highlogo.png b/server/views/assets/images/highlogo.png similarity index 100% rename from public/images/highlogo.png rename to server/views/assets/images/highlogo.png diff --git a/public/images/loading.png b/server/views/assets/images/loading.png similarity index 100% rename from public/images/loading.png rename to server/views/assets/images/loading.png diff --git a/public/images/pin.png b/server/views/assets/images/pin.png similarity index 100% rename from public/images/pin.png rename to server/views/assets/images/pin.png diff --git a/public/images/q.png b/server/views/assets/images/q.png similarity index 100% rename from public/images/q.png rename to server/views/assets/images/q.png diff --git a/public/images/s1.png b/server/views/assets/images/s1.png similarity index 100% rename from public/images/s1.png rename to server/views/assets/images/s1.png diff --git a/public/images/s2.png b/server/views/assets/images/s2.png similarity index 100% rename from public/images/s2.png rename to server/views/assets/images/s2.png diff --git a/public/images/s3.png b/server/views/assets/images/s3.png similarity index 100% rename from public/images/s3.png rename to server/views/assets/images/s3.png diff --git a/public/images/spotify.png b/server/views/assets/images/spotify.png similarity index 100% rename from public/images/spotify.png rename to server/views/assets/images/spotify.png diff --git a/public/images/squareicon.png b/server/views/assets/images/squareicon.png similarity index 100% rename from public/images/squareicon.png rename to server/views/assets/images/squareicon.png diff --git a/public/images/squareicon_small.png b/server/views/assets/images/squareicon_small.png similarity index 100% rename from public/images/squareicon_small.png rename to server/views/assets/images/squareicon_small.png diff --git a/public/images/squareicon_small_old.png b/server/views/assets/images/squareicon_small_old.png similarity index 100% rename from public/images/squareicon_small_old.png rename to server/views/assets/images/squareicon_small_old.png diff --git a/public/images/twitter.png b/server/views/assets/images/twitter.png similarity index 100% rename from public/images/twitter.png rename to server/views/assets/images/twitter.png diff --git a/public/images/youtube.png b/server/views/assets/images/youtube.png similarity index 100% rename from public/images/youtube.png rename to server/views/assets/images/youtube.png diff --git a/public/images/z.svg b/server/views/assets/images/z.svg similarity index 100% rename from public/images/z.svg rename to server/views/assets/images/z.svg diff --git a/public/js/admin.js b/server/views/assets/js/admin.js similarity index 100% rename from public/js/admin.js rename to server/views/assets/js/admin.js diff --git a/public/js/callback.js b/server/views/assets/js/callback.js similarity index 100% rename from public/js/callback.js rename to server/views/assets/js/callback.js diff --git a/public/js/chat.js b/server/views/assets/js/chat.js similarity index 100% rename from public/js/chat.js rename to server/views/assets/js/chat.js diff --git a/public/js/crypt.js b/server/views/assets/js/crypt.js similarity index 99% rename from public/js/crypt.js rename to server/views/assets/js/crypt.js index bb09a47f..5d58f7bd 100755 --- a/public/js/crypt.js +++ b/server/views/assets/js/crypt.js @@ -25,7 +25,9 @@ var Crypt = { Crypt.conf_pass = Crypt.decrypt(Crypt.create_cookie(chan.toLowerCase()), chan.toLowerCase()); } + console.log("test"); Hostcontroller.change_enabled(conf_arr.remote); + console.log("test 2"); if(conf_arr.width != 100) Player.set_width(conf_arr.width); if(conf_arr.name !== undefined && conf_arr.name !== "") Chat.namechange(conf_arr.name); } diff --git a/public/js/embed.js b/server/views/assets/js/embed.js similarity index 100% rename from public/js/embed.js rename to server/views/assets/js/embed.js diff --git a/public/js/frontpage.js b/server/views/assets/js/frontpage.js similarity index 97% rename from public/js/frontpage.js rename to server/views/assets/js/frontpage.js index fc6566fe..89f3dfbb 100755 --- a/public/js/frontpage.js +++ b/server/views/assets/js/frontpage.js @@ -232,19 +232,19 @@ var Frontpage = { },500); } else { var img = new Image(); - img.src = "/public/images/thumbnails/"+id+".jpg"; + img.src = "/assets/images/thumbnails/"+id+".jpg"; img.onerror = function(){ // Failed to load $.ajax({ type: "POST", data: {id:id}, - url: "/public/php/imageblob.php", + url: "/api/imageblob", success: function(data){ - Frontpage.blob_list.push(data); + //Frontpage.blob_list.push(data); //data will contain the vote count echoed by the controller i.e. //$(".room-namer").css("opacity", 0); setTimeout(function(){ - $("#mega-background").css("background", "url(data:image/png;base64,"+data+")"); + $("#mega-background").css("background", "url(/assets/images/thumbnails/"+data+")"); $("#mega-background").css("background-size" , "200%"); $("#mega-background").css("opacity", 1); $(".desktop-search").attr("placeholder", list[i].channel); @@ -321,12 +321,13 @@ var Frontpage = { Helper.log("removing all listeners"); socket.removeAllListeners(); } - $("body").css("background-color", "#2d2d2d"); + $("#main-container").css("background-color", "#2d2d2d"); $("#offline-mode").tooltip("remove"); currently_showing_channels = 1; $.ajax({ - url: new_channel + "/public/php/index.php", - + url: "/" + new_channel, + method: "get", + data: {channel: new_channel}, success: function(e){ if(Player.player !== ""){ @@ -352,7 +353,7 @@ var Frontpage = { $(".mega").remove(); $(".mobile-search").remove(); $("main").attr("class", "container center-align main"); - $("body").attr("id", "channelpage"); + $("#main-container").addClass("channelpage"); //$("header").html($($(e)[63]).html()); $("header").html($(response.find("header")).html()); if($("#alreadychannel").length === 0 || Helper.mobilecheck() || Player.player === undefined){ diff --git a/public/js/helpers.js b/server/views/assets/js/helpers.js similarity index 99% rename from public/js/helpers.js rename to server/views/assets/js/helpers.js index 8369f2ed..ef96ec65 100755 --- a/public/js/helpers.js +++ b/server/views/assets/js/helpers.js @@ -222,7 +222,7 @@ var Helper = { $.ajax({ type: "POST", data: {from: from, message: message}, - url: "/public/php/mail.php", + url: "/api/mail", success: function(data){ if(data == "success"){ $("#contact-container").empty(); diff --git a/public/js/hostcontroller.js b/server/views/assets/js/hostcontroller.js similarity index 100% rename from public/js/hostcontroller.js rename to server/views/assets/js/hostcontroller.js diff --git a/public/js/list.js b/server/views/assets/js/list.js similarity index 100% rename from public/js/list.js rename to server/views/assets/js/list.js diff --git a/public/js/listeners.js b/server/views/assets/js/listeners.js similarity index 99% rename from public/js/listeners.js rename to server/views/assets/js/listeners.js index 18a7a449..1bd216b7 100755 --- a/public/js/listeners.js +++ b/server/views/assets/js/listeners.js @@ -150,6 +150,7 @@ function init(){ var no_socket = true; chan = $("#chan").html(); + console.log(chan); mobile_beginning = Helper.mobilecheck(); var side = Helper.mobilecheck() ? "left" : "right"; @@ -1602,8 +1603,9 @@ function onepage_load(){ $('#chan_thumbnail').tooltip("remove"); $('#admin-lock').tooltip("remove"); $("#seekToDuration").remove(); + $.ajax({ - url: "public/php/frontpage.php", + url: "/", success: function(e){ if(Helper.mobilecheck()) { @@ -1658,8 +1660,8 @@ function onepage_load(){ $(".drag-target").remove(); $("#sidenav-overlay").remove(); $("main").attr("class", "center-align container"); - $("body").attr("id", ""); - $("body").attr("style", ""); + $("#main-container").removeClass("channelpage"); + $("#main-container").attr("style", ""); $("header").html($(response.find("header")).html()); $($(response.find(".section.mega"))).insertAfter("header"); $($(response.find(".section.mobile-search"))).insertAfter(".mega"); diff --git a/public/js/mobileremote.js b/server/views/assets/js/mobileremote.js similarity index 100% rename from public/js/mobileremote.js rename to server/views/assets/js/mobileremote.js diff --git a/public/js/player.js b/server/views/assets/js/player.js similarity index 100% rename from public/js/player.js rename to server/views/assets/js/player.js diff --git a/public/js/playercontrols.js b/server/views/assets/js/playercontrols.js similarity index 100% rename from public/js/playercontrols.js rename to server/views/assets/js/playercontrols.js diff --git a/public/js/remotecontroller.js b/server/views/assets/js/remotecontroller.js similarity index 97% rename from public/js/remotecontroller.js rename to server/views/assets/js/remotecontroller.js index d4708e92..9bd3f2a2 100755 --- a/public/js/remotecontroller.js +++ b/server/views/assets/js/remotecontroller.js @@ -27,6 +27,7 @@ $(document).ready(function (){ Remotecontroller.control(); } + try{ git_info = $.ajax({ type: "GET", url: "https://api.github.com/users/zoff-music/received_events", async: false @@ -39,6 +40,7 @@ $(document).ready(function (){ "
    " + git_info[0].payload.commits[0].sha.substring(0,10) + ": " + git_info[0].payload.commits[0].message+" - - - - - - -
    +
    +