mirror of
https://github.com/KevinMidboe/zoff.git
synced 2025-10-29 18:00:23 +00:00
535 lines
13 KiB
JavaScript
Executable File
535 lines
13 KiB
JavaScript
Executable File
var slider_type = "horizontal";
|
|
var timed_remove_check;
|
|
var gotten_np = false;
|
|
var song_title = "";
|
|
var paused = false;
|
|
var intelligentList = false;
|
|
var client = false;
|
|
var _VERSION;
|
|
try {
|
|
_VERSION = localStorage.getItem("VERSION");
|
|
if (_VERSION == null || _VERSION == undefined) throw "Some error";
|
|
} catch (e) {
|
|
_VERSION = 6;
|
|
}
|
|
var SC_widget;
|
|
var scUsingWidget = false;
|
|
var zoff_api_token = "DwpnKVkaMH2HdcpJT2YPy783SY33byF5/32rbs0+xdU=";
|
|
if (
|
|
window.location.hostname == "localhost" ||
|
|
window.location.hostname == "client.localhost"
|
|
) {
|
|
var zoff_api_token = "AhmC4Yg2BhaWPZBXeoWK96DAiAVfbou8TUG2IXtD3ZQ=";
|
|
}
|
|
var SC_player;
|
|
var durationTimeout;
|
|
var intelligentQueue = [];
|
|
var deleted_elements = 0;
|
|
var sc_need_initialization = true;
|
|
var sc_initialized = false;
|
|
var startTime = 0;
|
|
var small = false;
|
|
var small_player = false;
|
|
var full_playlist = [];
|
|
var hostMode = false;
|
|
var soundcloud_enabled = true;
|
|
var socket_connected = false;
|
|
var dynamicListeners = {};
|
|
var player_ready = false;
|
|
var previousSoundcloud;
|
|
var buffering = false;
|
|
var prev_chan_list = "";
|
|
var local_new_channel = false;
|
|
var empty_clear = false;
|
|
var fix_too_far = false;
|
|
var beginning = false;
|
|
var soundcloud_loading = false;
|
|
var videoSource = "";
|
|
var list_html = document.getElementById("list-song-html").innerHTML;
|
|
var w_p = true;
|
|
var lazy_load = false;
|
|
var end_programmatically = false;
|
|
var embed = true;
|
|
var vol = 100;
|
|
var adminpass = "";
|
|
var mobile_beginning = false;
|
|
var durationBegun = false;
|
|
var chromecastAvailable = false;
|
|
var private_channel = false;
|
|
var was_stopped = false;
|
|
var offline = false;
|
|
var began = false;
|
|
var seekTo;
|
|
var socket;
|
|
var video_id;
|
|
var embedOptions = getSearch(window.location.search);
|
|
var chan = Helper.decodeChannelName(embedOptions["channel"]);
|
|
var autoplay = embedOptions["autoplay"];
|
|
var videoonly = embedOptions["videoonly"];
|
|
var color = "#" + embedOptions["color"];
|
|
var localmode = embedOptions["localmode"];
|
|
var dragging = false;
|
|
var user_auth_started = false;
|
|
var user_auth_avoid = false;
|
|
|
|
var connection_options = {
|
|
"sync disconnect on unload": true,
|
|
secure: true,
|
|
"force new connection": true
|
|
};
|
|
|
|
var Crypt = {
|
|
crypt_pass: function(pass) {
|
|
return pass;
|
|
},
|
|
get_background_color: function() {
|
|
return "dynamic";
|
|
}
|
|
};
|
|
|
|
function receiveMessage(event) {
|
|
if (event.data == "parent") {
|
|
window.parentWindow = event.source;
|
|
window.parentOrigin = event.origin;
|
|
}
|
|
if (event.data == "lower") {
|
|
window.setVolume(10);
|
|
} else if (event.data == "reset") {
|
|
window.setVolume(100);
|
|
} else if (event.data == "get_info") {
|
|
window.parentWindow.postMessage(
|
|
{ type: "np", title: song_title },
|
|
window.parentOrigin
|
|
);
|
|
window.parentWindow.postMessage(
|
|
{ type: "controller", id: Hostcontroller.old_id },
|
|
window.parentOrigin
|
|
);
|
|
try {
|
|
if (full_playlist.length > 0) {
|
|
Player.sendNext({
|
|
title: full_playlist[0].title,
|
|
videoId: full_playlist[0].id
|
|
});
|
|
}
|
|
} catch (e) {}
|
|
}
|
|
}
|
|
|
|
window.addEventListener("message", receiveMessage, false);
|
|
window.addEventListener("DOMContentLoaded", function() {});
|
|
|
|
var Channel = {
|
|
set_title_width: function() {},
|
|
window_width_volume_slider: function() {}
|
|
};
|
|
|
|
function getSearch(elem) {
|
|
var result = {};
|
|
var search = window.location.search.split("&");
|
|
for (var i = 0; i < search.length; i++) {
|
|
var currElement = search[i].split("=");
|
|
var key = currElement[0].replace("?", "");
|
|
var value = currElement[1];
|
|
if (value == "true") value = true;
|
|
else if (value == "false") value = false;
|
|
result[key] = value;
|
|
}
|
|
return result;
|
|
}
|
|
|
|
window.addEventListener("load", function() {
|
|
if (autoplay) {
|
|
Helper.css("#player", "visibility", "hidden");
|
|
}
|
|
if (videoonly) {
|
|
Helper.addClass("#wrapper", "hide");
|
|
Helper.addClass("#controls", "hide");
|
|
Helper.addClass("#player", "video_only");
|
|
Helper.addClass("#player_overlay", "video_only");
|
|
Helper.css("#zoffbutton", "bottom", "0px");
|
|
Helper.css("#song-title", "width", "100vw");
|
|
}
|
|
|
|
M.Modal.init(document.getElementById("locked_channel"), {
|
|
dismissible: false
|
|
});
|
|
|
|
add = "https://zoff.me";
|
|
//if(window.location.hostname == "localhost") add = "localhost";
|
|
//add = "localhost";
|
|
socket = io.connect(
|
|
"" + add,
|
|
connection_options
|
|
);
|
|
|
|
if (localmode) {
|
|
change_offline(true, false);
|
|
}
|
|
|
|
socket.on("auth_required", function() {
|
|
M.Modal.getInstance(document.getElementById("locked_channel")).open();
|
|
});
|
|
|
|
document.querySelector(".channel-info-container").href =
|
|
"https://zoff.me/" + chan.toLowerCase();
|
|
document.querySelector(".channel-title").innerText = "/" + chan.toLowerCase();
|
|
|
|
socket.on("get_list", function() {
|
|
socket_connected = true;
|
|
setTimeout(function() {
|
|
socket.emit("list", {
|
|
version: VERSION,
|
|
channel: chan.toLowerCase(),
|
|
pass: ""
|
|
});
|
|
}, 1000);
|
|
});
|
|
|
|
socket.on("self_ping", function() {
|
|
if (chan != undefined && chan.toLowerCase() != "") {
|
|
socket.emit("self_ping", { channel: chan.toLowerCase() });
|
|
}
|
|
});
|
|
|
|
socket.on("viewers", function(view) {
|
|
viewers = view;
|
|
|
|
if (song_title !== undefined) Player.getTitle(song_title, viewers);
|
|
});
|
|
|
|
Player.loadPlayer();
|
|
setup_host_initialization();
|
|
setup_now_playing_listener();
|
|
setup_list_listener();
|
|
|
|
if (autoplay) {
|
|
startWaitTimerPlay();
|
|
}
|
|
|
|
List.calculate_song_heights();
|
|
|
|
window.onYouTubeIframeAPIReady = Player.onYouTubeIframeAPIReady;
|
|
socket.on("toast", toast);
|
|
|
|
Playercontrols.initSlider();
|
|
document
|
|
.getElementById("playpause")
|
|
.addEventListener("click", Playercontrols.play_pause);
|
|
window.setVolume = setVolume;
|
|
//Helper.css("#controls", "background-color", color);
|
|
|
|
document.querySelector("body").style.backgroundColor = color;
|
|
if (embedOptions.hasOwnProperty("control") && embedOptions.control) {
|
|
Hostcontroller.change_enabled(true);
|
|
} else {
|
|
Hostcontroller.change_enabled(false);
|
|
}
|
|
});
|
|
|
|
window.addEventListener("resize", function() {
|
|
resizeFunction();
|
|
});
|
|
|
|
function resizePlaylistPlaying() {}
|
|
|
|
function startWaitTimerPlay() {
|
|
setTimeout(function() {
|
|
if (videoSource == "youtube") {
|
|
Player.player.playVideo();
|
|
} else if (videoSource == "soundcloud") {
|
|
Player.soundcloud_player.play();
|
|
}
|
|
}, 5000);
|
|
}
|
|
|
|
function setup_host_listener(id) {
|
|
socket.on(id, Hostcontroller.host_on_action);
|
|
}
|
|
|
|
function setup_host_initialization() {
|
|
socket.on("id", Hostcontroller.host_listener);
|
|
}
|
|
|
|
function setup_now_playing_listener() {
|
|
socket.on("np", Player.now_playing_listener);
|
|
}
|
|
|
|
function setup_list_listener() {
|
|
socket.on("channel", function(msg) {
|
|
Helper.addClass(".site_loader", "hide");
|
|
List.channel_function(msg);
|
|
});
|
|
}
|
|
|
|
function setVolume(val) {
|
|
Playercontrols.visualVolume(val);
|
|
Playercontrols.setVolume(val);
|
|
}
|
|
|
|
function updateChromecastMetadata() {}
|
|
function loadChromecastVideo() {}
|
|
|
|
function toast(msg) {
|
|
switch (msg) {
|
|
case "suggested_thumbnail":
|
|
if (embed) return;
|
|
msg = "The thumbnail has been suggested!";
|
|
break;
|
|
case "faulty_start_end":
|
|
if (embed) return;
|
|
break;
|
|
case "wait_longer":
|
|
if (embed) return;
|
|
break;
|
|
case "suggested_description":
|
|
if (embed) return;
|
|
break;
|
|
case "thumbnail_denied":
|
|
if (embed) return;
|
|
break;
|
|
case "description_denied":
|
|
if (embed) return;
|
|
break;
|
|
case "addedsong":
|
|
if (embed) return;
|
|
break;
|
|
case "addedplaylist":
|
|
if (embed) return;
|
|
break;
|
|
case "savedsettings":
|
|
if (embed) return;
|
|
break;
|
|
case "wrongpass":
|
|
if (embed) return;
|
|
break;
|
|
case "deleted_songs":
|
|
if (embed) return;
|
|
break;
|
|
case "shuffled":
|
|
if (embed) return;
|
|
break;
|
|
case "deletesong":
|
|
if (embed) return;
|
|
break;
|
|
case "voted":
|
|
msg = Helper.rnd([
|
|
"You voted!",
|
|
"You vote like a boss",
|
|
"Voting is the key to democracy",
|
|
"May you get your song to the very top!",
|
|
"I love that song! I vouch for you.",
|
|
"Only you vote that good",
|
|
"I like the way you vote...",
|
|
"Up the video goes!",
|
|
"Voted Zoff for president",
|
|
"Only 999 more to go!"
|
|
]);
|
|
break;
|
|
case "alreadyvoted":
|
|
msg = Helper.rnd([
|
|
"You can't vote twice on that song!",
|
|
"I see you have voted on that song before",
|
|
"One vote per person!",
|
|
"I know you want to hear your song, but have patience!",
|
|
"I'm sorry, but I can't let you vote twice, Dave."
|
|
]);
|
|
break;
|
|
case "skip":
|
|
if (embed) return;
|
|
break;
|
|
case "listhaspass":
|
|
if (embed) return;
|
|
break;
|
|
case "noskip":
|
|
if (embed) return;
|
|
break;
|
|
case "alreadyskip":
|
|
if (embed) return;
|
|
break;
|
|
case "notyetskip":
|
|
if (embed) return;
|
|
break;
|
|
case "correctpass":
|
|
if (embed) return;
|
|
break;
|
|
case "changedpass":
|
|
if (embed) return;
|
|
break;
|
|
case "suggested":
|
|
if (embed) return;
|
|
break;
|
|
case "alreadyplay":
|
|
if (embed) return;
|
|
break;
|
|
}
|
|
before_toast();
|
|
M.toast({ html: msg, displayLength: 4000 });
|
|
}
|
|
|
|
function emit() {
|
|
if (!embed) {
|
|
lastCommand = [];
|
|
for (var i = 0; i < arguments.length; i++) {
|
|
lastCommand.push(arguments[i]);
|
|
}
|
|
}
|
|
if (arguments.length == 1) {
|
|
socket.emit(arguments[0]);
|
|
} else {
|
|
socket.emit(arguments[0], arguments[1]);
|
|
}
|
|
}
|
|
|
|
function change_offline(enabled, already_offline) {
|
|
offline = enabled;
|
|
socket.emit("offline", {
|
|
status: enabled,
|
|
channel: chan != undefined ? chan.toLowerCase() : ""
|
|
});
|
|
if (!Helper.mobilecheck()) {
|
|
if (
|
|
document.querySelectorAll("#offline-mode").length == 1 &&
|
|
M.Tooltip.getInstance(document.getElementById("offline-mode"))
|
|
) {
|
|
Helper.tooltip("#offline-mode", "destroy");
|
|
}
|
|
}
|
|
|
|
var mouseEnter = function(e) {
|
|
Helper.removeClass("#seekToDuration", "hide");
|
|
};
|
|
|
|
var mouseLeave = function(e) {
|
|
dragging = false;
|
|
Helper.addClass("#seekToDuration", "hide");
|
|
};
|
|
|
|
var mouseDown = function(e) {
|
|
var acceptable = ["bar", "controls", "duration"];
|
|
if (acceptable.indexOf(e.target.id) >= 0) {
|
|
dragging = true;
|
|
}
|
|
};
|
|
|
|
var mouseUp = function(e) {
|
|
dragging = false;
|
|
};
|
|
if (enabled) {
|
|
Helper.addClass("#viewers", "hide");
|
|
Helper.removeClass(".margin-playbar", "margin-playbar");
|
|
Helper.addClass(".prev playbar", "margin-playbar");
|
|
Helper.removeClass(".prev playbar", "hide");
|
|
|
|
if (window.location.pathname != "/") {
|
|
document
|
|
.getElementById("controls")
|
|
.addEventListener("mouseenter", mouseEnter, false);
|
|
document
|
|
.getElementById("controls")
|
|
.addEventListener("mouseleave", mouseLeave, false);
|
|
document
|
|
.getElementById("controls")
|
|
.addEventListener("mousedown", mouseDown, false);
|
|
document
|
|
.getElementById("controls")
|
|
.addEventListener("mouseup", mouseUp, false);
|
|
document
|
|
.getElementById("controls")
|
|
.addEventListener("mousemove", seekToMove);
|
|
document
|
|
.getElementById("controls")
|
|
.addEventListener("click", seekToClick);
|
|
|
|
document
|
|
.querySelector("#main_components")
|
|
.insertAdjacentHTML(
|
|
"beforeend",
|
|
"<div id='seekToDuration' class='hide'>00:00/01:00</div>"
|
|
);
|
|
var controlElement = document.querySelector("#controls");
|
|
Helper.css("#seekToDuration", "bottom", "50px");
|
|
Helper.addClass("#controls", "ewresize");
|
|
}
|
|
if (
|
|
full_playlist != undefined &&
|
|
!already_offline &&
|
|
full_playlist.length > 0
|
|
) {
|
|
for (var x = 0; x < full_playlist.length; x++) {
|
|
full_playlist[x].votes = 0;
|
|
}
|
|
|
|
List.sortList();
|
|
List.populate_list(full_playlist);
|
|
}
|
|
}
|
|
}
|
|
|
|
function before_toast() {
|
|
/*if($('.toast').length > 0) {
|
|
var toastElement = $('.toast').first()[0];
|
|
var toastInstance = toastElement.M_Toast;
|
|
toastInstance.remove();
|
|
}*/
|
|
M.Toast.dismissAll();
|
|
//Materialize.Toast.removeAll();
|
|
}
|
|
|
|
document.addEventListener(
|
|
"click",
|
|
function(e) {
|
|
handleEvent(e, e.target, false, "click");
|
|
},
|
|
false
|
|
);
|
|
|
|
addListener("click", ".channel-info-container", function(e) {
|
|
this.preventDefault();
|
|
Player.pauseVideo();
|
|
window.open("https://zoff.me/" + chan.toLowerCase() + "/", "_blank");
|
|
});
|
|
|
|
addListener("click", ".vote-container", function(e) {
|
|
var that = e;
|
|
var id = that.getAttribute("data-video-id");
|
|
|
|
List.vote(id, "pos");
|
|
});
|
|
|
|
addListener("click", ".prev_page", function(e) {
|
|
event.preventDefault();
|
|
List.dynamicContentPage(-1);
|
|
});
|
|
|
|
addListener("click", "#player_overlay", function(event) {
|
|
if (videoSource == "soundcloud") Playercontrols.play_pause();
|
|
});
|
|
|
|
addListener("click", ".next_page", function(e) {
|
|
event.preventDefault();
|
|
List.dynamicContentPage(1);
|
|
});
|
|
|
|
addListener("click", ".prev", function(event) {
|
|
this.preventDefault();
|
|
if (!offline) return;
|
|
List.skip(false);
|
|
});
|
|
|
|
addListener("click", ".skip", function(event) {
|
|
this.preventDefault();
|
|
//if(!offline) return;
|
|
List.skip(true);
|
|
});
|
|
|
|
addListener("click", ".last_page", function(e) {
|
|
event.preventDefault();
|
|
List.dynamicContentPage(10);
|
|
});
|
|
|
|
addListener("click", ".first_page", function(e) {
|
|
event.preventDefault();
|
|
List.dynamicContentPage(-10);
|
|
});
|