Added localmode for embedded players, configurable on embed-code create

This commit is contained in:
Kasper Rynning-Tønnesen
2018-08-30 12:26:59 +02:00
parent 752472547e
commit a7f25ab4a5
11 changed files with 752 additions and 291 deletions

View File

@@ -5,6 +5,7 @@ var song_title = "";
var paused = false;
var client = false;
var startTime = 0;
var full_playlist;
var hostMode = false;
var soundcloud_enabled = true;
var socket_connected = false;
@@ -12,6 +13,8 @@ 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;
@@ -76,12 +79,12 @@ window.addEventListener("message", receiveMessage, false);
window.addEventListener("DOMContentLoaded", function() {
});
window.addEventListener("load", function() {
if(hash.length >= 2 && hash.indexOf("autoplay") > 0){
autoplay = true;
Helper.css("#player", "visibility", "hidden");
} else {
//paused = true;
}
if(hash.length >= 2 && hash.indexOf("autoplay") > 0){
autoplay = true;
Helper.css("#player", "visibility", "hidden");
} else {
//paused = true;
}
if(hash.indexOf("videoonly") > -1) {
Helper.addClass("#wrapper", "hide");
Helper.addClass("#controls", "hide");
@@ -89,6 +92,7 @@ window.addEventListener("load", function() {
Helper.addClass("#player_overlay", "video_only");
Helper.css("#zoffbutton", "bottom", "0px");
}
M.Modal.init(document.getElementById("locked_channel"), {
dismissible: false
});
@@ -98,6 +102,10 @@ window.addEventListener("load", function() {
//add = "localhost";
socket = io.connect(''+add+':8080', connection_options);
if(hash.indexOf("localmode") > 1) {
change_offline(true, false);
}
socket.on('auth_required', function() {
M.Modal.getInstance(document.getElementById("locked_channel")).open();
});
@@ -125,7 +133,7 @@ window.addEventListener("load", function() {
setup_list_listener();
if(autoplay) {
startWaitTimerPlay();
startWaitTimerPlay();
}
window.onYouTubeIframeAPIReady = Player.onYouTubeIframeAPIReady;
@@ -147,13 +155,13 @@ window.addEventListener("load", function() {
function resizePlaylistPlaying(){};
function startWaitTimerPlay() {
setTimeout(function() {
if(videoSource == "youtube") {
Player.player.playVideo();
} else if(videoSource == "soundcloud"){
Player.soundcloud_player.play();
}
}, 5000);
setTimeout(function() {
if(videoSource == "youtube") {
Player.player.playVideo();
} else if(videoSource == "soundcloud"){
Player.soundcloud_player.play();
}
}, 5000);
}
function setup_host_listener(id) {
@@ -183,78 +191,78 @@ function loadChromecastVideo(){}
function toast(msg) {
switch(msg) {
case "suggested_thumbnail":
if(embed) return;
msg = "The thumbnail has been suggested!";
break;
if(embed) return;
msg = "The thumbnail has been suggested!";
break;
case "faulty_start_end":
if(embed) return;
break;
if(embed) return;
break;
case "wait_longer":
if(embed) return;
break;
if(embed) return;
break;
case "suggested_description":
if(embed) return;
break;
if(embed) return;
break;
case "thumbnail_denied":
if(embed) return;
break;
if(embed) return;
break;
case "description_denied":
if(embed) return;
break;
if(embed) return;
break;
case "addedsong":
if(embed) return;
break;
if(embed) return;
break;
case "addedplaylist":
if(embed) return;
break;
if(embed) return;
break;
case "savedsettings":
if(embed) return;
break;
if(embed) return;
break;
case "wrongpass":
if(embed) return;
break;
if(embed) return;
break;
case "deleted_songs":
if(embed) return;
break;
if(embed) return;
break;
case "shuffled":
if(embed) return;
break;
if(embed) return;
break;
case "deletesong":
if(embed) return;
break;
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;
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;
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;
if(embed) return;
break;
case "listhaspass":
if(embed) return;
break;
if(embed) return;
break;
case "noskip":
if(embed) return;
break;
if(embed) return;
break;
case "alreadyskip":
if(embed) return;
break;
if(embed) return;
break;
case "notyetskip":
if(embed) return;
break;
if(embed) return;
break;
case "correctpass":
if(embed) return;
break;
if(embed) return;
break;
case "changedpass":
if(embed) return;
break;
if(embed) return;
break;
case "suggested":
if(embed) return;
break;
if(embed) return;
break;
case "alreadyplay":
if(embed) return;
break;
if(embed) return;
break;
}
before_toast();
M.toast({html: msg, displayLength: 4000});
@@ -274,38 +282,121 @@ function emit() {
}
}
function change_offline(enabled, already_offline){
if(client) {
offline = false;
return;
}
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');
}
}
function handleEvent(e, target, tried, type) {
for(var y = 0; y < e.path.length; y++) {
var target = e.path[y];
if(dynamicListeners[type] && dynamicListeners[type]["#" + target.id]) {
dynamicListeners[type]["#" + target.id].call(target);
return;
} else {
if(target.classList == undefined) return;
for(var i = 0; i < target.classList.length; i++) {
if(dynamicListeners[type] && dynamicListeners[type]["." + target.classList[i]]) {
dynamicListeners[type]["." + target.classList[i]].call(target);
return;
}
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");
Helper.removeClass(".skip playbar", "hide");
Helper.removeClass("#offline-mode", "waves-cyan");
Helper.addClass("#offline-mode", "cyan");
Helper.removeClass(".delete-context-menu", "context-menu-disabled");
if(!Helper.mobilecheck()) {
Helper.tooltip("#offline-mode", {
delay: 5,
position: "bottom",
html: "Disable local mode"
});
}
if(window.location.pathname != "/"){
socket.removeEventListener("color");
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){
for(var x = 0; x < full_playlist.length; x++){
full_playlist[x].votes = 0;
}
List.sortList();
List.populate_list(full_playlist);
}
} else {
if(!Admin.logged_in) Helper.addClass(".delete-context-menu", "context-menu-disabled");
Helper.removeClass(".margin-playbar", "margin-playbar");
Helper.addClass("#playpause", "margin-playbar");
Helper.removeClass("#viewers", "hide");
Helper.addClass(".prev playbar", "hide");
Helper.addClass(".skip playbar", "hide");
Helper.addClass("#offline-mode", "waves-cyan");
Helper.removeClass("#offline-mode", "cyan");
if(!Helper.mobilecheck()) {
Helper.tooltip("#offline-mode", {
delay: 5,
position: "bottom",
html: "Enable local mode"
});
}
if(window.location.pathname != "/"){
document.getElementById("controls").removeEventListener("mouseenter", mouseEnter, false);
document.getElementById("controls").removeEventListener("mouseleave", mouseLeave, false);
document.getElementById("controls").removeEventListener("mousedown", mouseDown, false);
document.getElementById("controls").removeEventListener("mouseup", mouseUp, false);
document.getElementById("controls").removeEventListener("mousemove", seekToMove);
document.getElementById("controls").removeEventListener("click", seekToClick);
Helper.removeElement("#seekToDuration");
socket.on("color", Player.setBGimage);
socket.emit("pos", {channel: chan.toLowerCase()});
var add = "";
//if(private_channel) add = Crypt.getCookie("_uI") + "_";
socket.emit("list", {version: parseInt(localStorage.getItem("VERSION")), channel: add + chan.toLowerCase()});
Helper.removeClass("#controls", "ewresize");
}
}
}
function addListener(type, element, callback) {
if(dynamicListeners[type] == undefined) dynamicListeners[type] = {};
dynamicListeners[type][element] = callback;
}
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();
var toastElement = $('.toast').first()[0];
var toastInstance = toastElement.M_Toast;
toastInstance.remove();
}*/
M.Toast.dismissAll();
//Materialize.Toast.removeAll();
}
document.addEventListener("click", function(e) {
@@ -318,7 +409,8 @@ addListener("click", "#zoffbutton", function(e) {
});
addListener("click", ".vote-container", function(e) {
var id = this.getAttribute("data-video-id");
var that = e;
var id = that.getAttribute("data-video-id");
List.vote(id, "pos");
});
@@ -336,6 +428,18 @@ addListener("click", ".next_page", function(e) {
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);