Files
zoff/server/public/assets/js/list.js
2019-07-25 16:47:01 +02:00

2019 lines
69 KiB
JavaScript
Executable File
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

var List = {
empty: false,
page: 0,
can_fit:
document.querySelectorAll("#wrapper").length > 0
? Math.round(Helper.computedStyle("#wrapper", "height") / 71)
: 0,
element_height:
document.querySelectorAll("#wrapper").length > 0
? Helper.computedStyle("#wrapper", "height") /
Math.round(Helper.computedStyle("#wrapper", "height") / 71) -
25
: 0,
uris: [],
not_found: [],
num_songs: 0,
found: [],
channel_function: function(msg) {
if (Helper.mobilecheck()) socket_connected = true;
if (user_auth_started) {
user_auth_started = false;
M.Modal.getInstance(document.getElementById("user_password")).close();
}
switch (msg.type) {
case "list":
//if(full_playlist == undefined || !offline){
if (
(!offline || (offline && !msg.shuffled)) &&
!(offline && prev_chan_list == chan)
) {
prev_chan_list = chan;
List.populate_list(msg.playlist);
if (full_playlist.length > 0) {
Player.sendNext({
title: full_playlist[0].title,
videoId: full_playlist[0].id,
source: full_playlist[0].source,
thumbnail: full_playlist[0].thumbnail
});
}
} else if (
offline &&
prev_chan_list == chan &&
full_playlist != undefined &&
!msg.shuffled
) {
List.populate_list(full_playlist, true);
if (full_playlist.length > 0) {
Player.sendNext({
title: full_playlist[0].title,
videoId: full_playlist[0].id,
source: full_playlist[0].source,
thumbnail: full_playlist[0].thumbnail
});
}
}
break;
case "added":
List.added_song(msg.value);
if (full_playlist.length > 0) {
Player.sendNext({
title: full_playlist[0].title,
videoId: full_playlist[0].id,
source: full_playlist[0].source,
thumbnail: full_playlist[0].thumbnail
});
}
found_array = [];
found_array_index = 0;
break;
case "deleted":
List.deleted_song(msg.value, msg.removed);
found_array = [];
found_array_index = 0;
break;
case "vote":
if (!offline) {
List.voted_song(msg.value, msg.time);
if (full_playlist.length > 0) {
Player.sendNext({
title: full_playlist[0].title,
videoId: full_playlist[0].id,
source: full_playlist[0].source,
thumbnail: full_playlist[0].thumbnail
});
}
}
found_array = [];
found_array_index = 0;
break;
case "song_change":
if ((offline && msg.offline_change) || !offline) {
if (window.location.pathname != "/")
List.song_change(msg.time, msg.remove, msg.id);
if (full_playlist.length > 0) {
Player.sendNext({
title: full_playlist[0].title,
videoId: full_playlist[0].id,
source: full_playlist[0].source,
thumbnail: full_playlist[0].thumbnail
});
}
found_array = [];
found_array_index = 0;
}
break;
case "changed_values":
List.changedValues(msg.value);
break;
case "song_change_prev":
if ((offline && msg.offline_change) || !offline) {
if (window.location.pathname != "/") List.song_change_prev(msg.time);
if (full_playlist.length > 0) {
Player.sendNext({
title: full_playlist[0].title,
videoId: full_playlist[0].id,
source: full_playlist[0].source,
thumbnail: full_playlist[0].thumbnail
});
}
found_array = [];
found_array_index = 0;
}
break;
}
},
changedValues: function(song) {
if (song.type == "suggested") {
try {
document
.querySelector("#suggested-" + song.id)
.querySelector(".vote-container")
.setAttribute("title", song.title);
document
.querySelector("#suggested-" + song.id)
.querySelector(".list-title")
.setAttribute("title", song.title);
document
.querySelector("#suggested-" + song.id)
.querySelector(".list-title").innerText = song.title;
var _temp_duration = Helper.secondsToOther(song.duration);
document
.querySelector("#suggested-" + song.id)
.querySelector(".card-duration").innerText =
Helper.pad(_temp_duration[0]) + ":" + Helper.pad(_temp_duration[1]);
document
.querySelector("#suggested-" + song.id)
.querySelector(".list-image")
.setAttribute(
"style",
"background-image:url('//img.youtube.com/vi/" +
song.new_id +
"/mqdefault.jpg');"
);
document
.querySelector("#suggested-" + song.id)
.setAttribute("id", song.new_id);
} catch (e) {}
return;
}
var i = List.getIndexOfSong(song.id);
if (i >= 0 && window.location.pathname != "/") {
full_playlist[i].title = song.title;
full_playlist[i].duration = song.duration;
full_playlist[i].start = song.start;
full_playlist[i].end = song.end;
full_playlist[i].id = song.new_id;
try {
document
.querySelector("#" + song.id)
.querySelector(".vote-container")
.setAttribute("title", song.title);
document
.querySelector("#" + song.id)
.querySelector(".list-title")
.setAttribute("title", song.title);
document
.querySelector("#" + song.id)
.querySelector(".list-title").innerText = song.title;
var _temp_duration = Helper.secondsToOther(song.duration);
document
.querySelector("#" + song.id)
.querySelector(".card-duration").innerText =
Helper.pad(_temp_duration[0]) + ":" + Helper.pad(_temp_duration[1]);
document
.querySelector("#" + song.id)
.querySelector(".list-image")
.setAttribute(
"style",
"background-image:url('//img.youtube.com/vi/" +
song.new_id +
"/mqdefault.jpg');"
);
document.querySelector("#" + song.id).setAttribute("id", song.new_id);
} catch (e) {}
}
},
insertAtBeginning: function(song_info, transition) {
if (document.querySelector("#wrapper") == null) return;
var display = List.page == 0 ? "" : "none";
var add = List.generateSong(
song_info,
transition,
false,
true,
false,
display,
false
);
document.querySelector("#wrapper").insertAdjacentHTML("beforeend", add);
},
insertAtIndex: function(song_info, transition, change) {
if (document.querySelector("#wrapper") == null) return;
var i = List.getIndexOfSong(song_info.id);
if (i == -1) return;
if (!song_info.now_playing) {
var display = "none";
if (i >= List.page && i < List.page + List.can_fit)
display = "inline-flex";
var add = List.generateSong(
song_info,
transition,
false,
true,
false,
display,
false
);
if (i === 0) {
document
.querySelector("#wrapper")
.insertAdjacentHTML("afterbegin", add);
} else {
document
.querySelector("#wrapper > div:nth-child(" + i + ")")
.insertAdjacentHTML("afterend", add);
}
var added = document.querySelector("#wrapper").children[i];
Helper.css(added, "display", display);
if (
display == "inline-flex" &&
document.querySelector("#wrapper").children.length >=
List.page + List.can_fit + 1
) {
Helper.css(
document.querySelector("#wrapper").children[List.page + List.can_fit],
"display",
"none"
);
} else if (
i < List.page &&
document.querySelector("#wrapper").children.length - (List.page + 1) >=
0
) {
Helper.css(
document.querySelector("#wrapper").children[List.page],
"display",
"inline-flex"
);
} else if (
document.querySelector("#wrapper").children.length >
List.page + List.can_fit
) {
Helper.css(
document.querySelector("#wrapper").children[
List.page + List.can_fit - 1
],
"display",
"inline-flex"
);
}
if (change && List.page > 0) {
Helper.css(
document.querySelector("#wrapper").children[List.page - 1],
"display",
"none"
);
}
if (transition) {
setTimeout(function() {
Helper.css(added, "transform", "translateX(0%)");
setTimeout(function() {
Helper.removeClass(added, "side_away");
}, 300);
}, 5);
}
}
},
calculate_song_heights: function() {
if (!Helper.mobilecheck() && !embed && !client) {
List.can_fit = Math.round(
Helper.computedStyle("#wrapper", "height") / 71
);
List.element_height =
Helper.computedStyle("#wrapper", "height") / List.can_fit - 5.3;
} else if (embed) {
List.can_fit =
Math.round(Helper.computedStyle("#wrapper", "height") / 91) + 1;
List.element_height =
Helper.computedStyle("#wrapper", "height") / List.can_fit - 4;
} else if (!client) {
List.can_fit =
Math.round(
(Helper.computedStyle(".tabs", "height") -
Helper.computedStyle("header", "height") -
64 -
40) /
71
) + 1;
List.element_height =
(window.innerHeight -
Helper.computedStyle(".tabs", "height") -
Helper.computedStyle("header", "height") -
64 -
40) /
List.can_fit -
5;
} else {
List.can_fit =
Math.round(Helper.computedStyle("#wrapper", "height") / 71) + 1;
List.element_height =
Helper.computedStyle("#wrapper", "height") / List.can_fit - 5.3;
}
if (List.element_height < 55.2 && !client && !embed) {
List.can_fit = List.can_fit - 1;
List.element_height = 55.2;
List.can_fit = Math.round(
(window.innerHeight -
Helper.computedStyle(".tabs", "height") -
Helper.computedStyle("header", "height") -
64 -
40) /
71
);
List.element_height =
(window.innerHeight -
Helper.computedStyle(".tabs", "height") -
Helper.computedStyle("header", "height") -
64 -
40) /
List.can_fit -
5;
} else if (List.element_height < 55.2 && embed) {
//List.can_fit = List.can_fit - 1;
List.can_fit = Math.round(
(window.innerHeight -
Helper.computedStyle(".tabs", "height") -
Helper.computedStyle("header", "height") -
64 -
40) /
71
);
List.element_height =
(window.innerHeight -
Helper.computedStyle(".tabs", "height") -
Helper.computedStyle("header", "height") -
64 -
40) /
List.can_fit -
5;
List.can_fit = List.can_fit - 2;
}
},
populate_list: function(msg, no_reset) {
if (document.querySelector("#wrapper") == null) return;
// This math is fucked and I don't know how it works. Should be fixed sometime
if (list_html === undefined) list_html = Helper.html("#list-song-html");
full_playlist = msg;
if (offline && !no_reset) {
for (var x = 0; x < full_playlist.length; x++) {
full_playlist[x].votes = 0;
}
}
List.sortList();
Helper.setHtml("#wrapper", "");
Helper.log(["FULL PLAYLIST", full_playlist]);
if (full_playlist.length > 1) {
for (var j = 0; j < full_playlist.length; j++) {
var _current_song = full_playlist[j];
if (!_current_song.hasOwnProperty("start")) full_playlist[j].start = 0;
if (!_current_song.hasOwnProperty("end"))
full_playlist[j].end = full_playlist[j].duration;
if (!_current_song.now_playing && _current_song.type != "suggested") {
//check that the song isnt playing
var generated = List.generateSong(
_current_song,
false,
lazy_load,
true,
false,
"inline-flex",
true
);
document
.querySelector("#wrapper")
.insertAdjacentHTML("beforeend", generated);
}
}
if (
document.querySelector("#wrapper").children.length > List.can_fit &&
!document.querySelectorAll("#pageButtons").length
) {
Helper.css(".prev_page", "display", "none");
Helper.css(".first_page", "display", "none");
Helper.css(".next_page_hide", "display", "none");
Helper.css(".last_page_hide", "display", "none");
} else if (!document.querySelectorAll("#pageButtons").length) {
Helper.css(".prev_page", "display", "none");
Helper.css(".next_page", "display", "none");
Helper.css(".last_page", "display", "none");
Helper.css(".first_page", "display", "none");
Helper.css(".next_page_hide", "display", "inline-flex");
Helper.css(".prev_page_hide", "display", "inline-flex");
} else {
Helper.css(".next_page", "display", "none");
Helper.css(".last_page", "display", "none");
}
List.dynamicContentPage(-10);
} else {
List.empty = true;
Helper.setHtml(
"#wrapper",
"<span id='empty-channel-message'>The playlist is empty.</span>"
);
Helper.css(".prev_page", "display", "none");
Helper.css(".next_page", "display", "none");
Helper.css(".last_page", "display", "none");
Helper.css(".last_page_hide", "display", "inline-flex");
Helper.css(".first_page", "display", "none");
Helper.css(".next_page_hide", "display", "inline-flex");
Helper.css(".prev_page_hide", "display", "inline-flex");
}
Helper.css("#settings", "visibility", "visible");
Helper.css("#settings", "opacity", "1");
Helper.css("#wrapper", "opacity", "1");
Helper.removeClass("#pageButtons", "hide");
if (!embed) {
Helper.log(["Starting empty-checker"]);
clearTimeout(timed_remove_check);
timed_remove_check = setTimeout(function() {
if (full_playlist.length > 0) {
List.check_error_videos(0);
}
}, 1500);
}
},
check_error_videos: function(i) {
//Helper.log("Empty-checker at " + i);
if (full_playlist.length == 0) return;
else if (
full_playlist[i].source == "soundcloud" &&
full_playlist.length > i + 1 &&
window.location.pathname != "/"
)
List.check_error_videos(i + 1);
else {
Helper.ajax({
method: "get",
url:
"https://www.googleapis.com/youtube/v3/videos?id=" +
full_playlist[i].id +
"&key=" +
api_key.youtube +
"&part=snippet",
success: function(data) {
data = JSON.parse(data);
//Helper.log("Empty-checker items " + data.items.length);
if (data.items.length == 0) {
Helper.log([
"Emtpy-checker error at " +
full_playlist[i].id +
" " +
full_playlist[i].title
]);
socket.emit("error_video", {
channel: chan.toLowerCase(),
id: full_playlist[i].id,
title: full_playlist[i].title,
source: full_playlist[i].source
});
}
if (full_playlist.length > i + 1 && window.location.pathname != "/") {
List.check_error_videos(i + 1);
}
}
});
}
},
dynamicContentPageJumpTo: function(page) {
if (document.querySelector("#wrapper") == null) return;
page = page * List.can_fit;
var wrapperChildren = [].slice.call(
document.querySelector("#wrapper").children
);
if (page > List.page || page < List.page) {
Helper.css(
wrapperChildren.slice(List.page, List.page + List.can_fit),
"display",
"none"
);
List.page = page;
Helper.css(
wrapperChildren.slice(List.page, List.page + List.can_fit),
"display",
"inline-flex"
);
if (
List.page > 0 &&
document.querySelector(".prev_page").style.display == "none"
) {
Helper.css(".prev_page", "display", "inline-flex");
Helper.css(".prev_page_hide", "display", "none");
Helper.css(".first_page", "display", "inline-flex");
Helper.css(".first_page_hide", "display", "none");
}
if (List.page + List.can_fit >= wrapperChildren.length) {
Helper.css(".next_page_hide", "display", "inline-flex");
Helper.css(".next_page", "display", "none");
Helper.css(".last_page_hide", "display", "inline-flex");
Helper.css(".last_page", "display", "none");
}
Helper.setHtml("#pageNumber", List.page / List.can_fit + 1);
}
},
dynamicContentPage: function(way) {
if (document.querySelector("#wrapper") == null) return;
var wrapperChildren = [].slice.call(
document.querySelector("#wrapper").children
);
if (way == 1 || way == 10) {
Helper.css(
wrapperChildren.slice(List.page, List.page + List.can_fit),
"display",
"none"
);
if (way == 1) {
List.page = List.page + List.can_fit;
} else if (way == 10) {
List.page =
Math.floor(
(document.querySelector("#wrapper").children.length - 1) /
List.can_fit
) * List.can_fit;
}
Helper.css(
wrapperChildren.slice(List.page, List.page + List.can_fit),
"display",
"inline-flex"
);
if (
List.page > 0 &&
document.querySelector(".prev_page").style.display == "none"
) {
Helper.css(".prev_page", "display", "inline-flex");
Helper.css(".prev_page_hide", "display", "none");
Helper.css(".first_page", "display", "inline-flex");
Helper.css(".first_page_hide", "display", "none");
}
if (
List.page + List.can_fit >=
document.querySelector("#wrapper").children.length
) {
Helper.css(".next_page_hide", "display", "inline-flex");
Helper.css(".next_page", "display", "none");
Helper.css(".last_page_hide", "display", "inline-flex");
Helper.css(".last_page", "display", "none");
}
} else {
if (way == -10) {
Helper.css(
wrapperChildren.slice(List.page, List.page + List.can_fit),
"display",
"none"
);
List.page = 0;
Helper.css(
wrapperChildren.slice(List.page, List.page + List.can_fit),
"display",
"inline-flex"
);
} else {
Helper.css(
wrapperChildren.slice(List.page - List.can_fit, List.page),
"display",
"inline-flex"
);
Helper.css(
wrapperChildren.slice(List.page, List.page + List.can_fit),
"display",
"none"
);
List.page = List.page - List.can_fit < 0 ? 0 : List.page - List.can_fit;
}
if (
List.page == 0 &&
document.querySelector(".prev_page").style.display != "none"
) {
Helper.css(".prev_page", "display", "none");
Helper.css(".prev_page_hide", "display", "inline-flex");
Helper.css(".first_page", "display", "none");
Helper.css(".first_page_hide", "display", "inline-flex");
} else if (document.querySelector(".prev_page").style.display == "none") {
Helper.css(".prev_page_hide", "display", "inline-flex");
Helper.css(".first_page_hide", "display", "inline-flex");
} else {
Helper.css(".prev_page_hide", "display", "none");
Helper.css(".first_page_hide", "display", "none");
}
if (
List.page + List.can_fit <
document.querySelector("#wrapper").children.length
) {
Helper.css(".next_page_hide", "display", "none");
Helper.css(".next_page", "display", "inline-flex");
Helper.css(".last_page_hide", "display", "none");
Helper.css(".last_page", "display", "inline-flex");
}
}
document.querySelector("#pageNumber").innerText =
List.page / List.can_fit + 1;
},
added_song: function(added) {
var now_playing;
if (added != undefined) {
if (full_playlist.length !== 0) {
now_playing = full_playlist.pop();
}
full_playlist.push(added);
List.sortList();
if (now_playing) {
full_playlist.push(now_playing);
}
if (hostMode) {
M.toast({
html:
"<div style='display:flex;'><img style='height:100px;align-self:center;' src='" +
added.thumbnail +
"' /><div style='padding-left:32px;padding-right:32px;'><p>New song added</p><p>" +
added.title +
"</p></div></div>",
displayLength: 10000
});
document
.querySelector("#toast-container")
.setAttribute("style", "z-index: 99999999999 !important");
}
if (
added.source != "soundcloud" &&
document.querySelectorAll("#suggested-" + added.id).length > 0
) {
number_suggested = number_suggested - 1;
if (number_suggested < 0) number_suggested = 0;
var to_display = number_suggested > 9 ? "9+" : number_suggested;
if (to_display == 0) {
Helper.addClass(
document.querySelector(".suggested-link span.badge.new.white"),
"hide"
);
}
document.querySelector(
".suggested-link span.badge.new.white"
).innerText = to_display;
Helper.removeElement("#suggested-" + added.id);
}
if (List.empty) {
List.empty = false;
}
if (document.querySelectorAll("#empty-channel-message").length > 0) {
document.querySelector("#empty-channel-message").remove();
}
if (intelligentList) {
intelligentQueue.push({
type: "add",
element: added
});
if (Helper.mobilecheck()) {
say_updated();
}
} else {
List.insertAtIndex(added, true);
Helper.css(
document.querySelector("#wrapper").children[List.page + List.can_fit],
"display",
"none"
);
if (
document.querySelector("#wrapper").children.length >
List.page + List.can_fit
) {
Helper.css(".next_page_hide", "display", "none");
Helper.removeClass(".next_page", "hide");
Helper.css(".last_page_hide", "display", "none");
Helper.css(".next_page", "display", "inline-flex");
Helper.css(".last_page", "display", "inline-flex");
} else {
Helper.css(".next_page_hide", "display", "inline-flex");
Helper.css(".next_page", "display", "none");
}
}
}
},
deleted_song: function(deleted, removed, intelligentSecond, deleted_index) {
try {
var index = List.getIndexOfSong(deleted);
if (intelligentList && !intelligentSecond) {
intelligentQueue.push({
type: "delete",
element: full_playlist[index],
index: index
});
if (Helper.mobilecheck()) {
say_updated();
}
if (index != -1) full_playlist.splice(index, 1);
var this_element = document.getElementById(deleted);
Helper.addClass(this_element, "disabled-vote");
this_element.querySelector(".vote-span").innerText = "Deleted";
Helper.addClass(
this_element.querySelector(".vote-container"),
"deleted-vote-container"
);
Helper.removeClass(
this_element.querySelector(".vote-container"),
"clickable"
);
Helper.removeClass(
this_element.querySelector(".vote-container"),
"vote-container"
);
return;
} else {
//if(!removed) to_delete.style.height = 0;
var nextToChange;
if (index == -1) index = deleted_index;
if (
index < List.page &&
document.querySelector("#wrapper").children.length -
(List.page + 2) >=
0
) {
//Helper.css(document.querySelector("#wrapper").children[List.page], "height", 0 + "px");
nextToChange = document.querySelector("#wrapper").children[List.page];
//Helper.css(document.querySelector("#wrapper").children[List.page], "display", "inline-flex");
//Helper.css(document.querySelector("#wrapper").children[List.page], "height", List.element_height + "px");
} else if (
document.querySelector("#wrapper").children.length >
List.page + List.can_fit
) {
//Helper.css(document.querySelector("#wrapper").children[List.page + (List.can_fit)], "height", 0 + "px");
nextToChange = document.querySelector("#wrapper").children[
List.page + List.can_fit
];
//Helper.css(document.querySelector("#wrapper").children[List.page + (List.can_fit)], "display", "inline-flex");
//Helper.css(document.querySelector("#wrapper").children[List.page + (List.can_fit)], "height", List.element_height + "px");
}
if (
List.page >=
document.querySelector("#wrapper").children.length - 1
) {
List.dynamicContentPage(-1);
Helper.css(".next_page_hide", "display", "inline-flex");
Helper.css(".next_page", "display", "none");
Helper.css(".last_page_hide", "display", "inline-flex");
Helper.css(".last_page", "display", "none");
} else if (
List.page + List.can_fit + 1 >=
document.querySelector("#wrapper").children.length - 1
) {
Helper.css(".next_page_hide", "display", "inline-flex");
Helper.css(".next_page", "display", "none");
Helper.css(".last_page_hide", "display", "inline-flex");
Helper.css(".last_page", "display", "none");
}
if (List.page <= index && List.page - List.can_fit <= index) {
Helper.addClass("#" + deleted, "side_away");
//document.getElementById(deleted).querySelector(".mobile-delete").remove();
Helper.css("#" + deleted, "transform", "translateX(-100%)");
setTimeout(function() {
Helper.removeElement("#" + deleted);
/*var wrapperChildren = [].slice.call(document.querySelector("#wrapper").children);
if(wrapperChildren.length > List.can_fit) {
Helper.css(wrapperChildren[List.can_fit], "display", "inline-flex");
}*/
if (nextToChange != undefined) {
Helper.css(nextToChange, "display", "inline-flex");
Helper.css(nextToChange, "height", List.element_height + "px");
}
}, 300);
} else {
Helper.removeElement("#" + deleted);
if (nextToChange != undefined) {
Helper.css(nextToChange, "display", "inline-flex");
Helper.css(nextToChange, "height", List.element_height + "px");
}
}
var index = List.getIndexOfSong(deleted);
if (index != -1) full_playlist.splice(index, 1);
Player.sendNext({
title: full_playlist[0].title,
videoId: full_playlist[0].id,
source: full_playlist[0].source,
thumbnail: full_playlist[0].thumbnail
});
//}
}
} catch (err) {
var index = List.getIndexOfSong(deleted);
if (index != -1) full_playlist.splice(index, 1);
if (!List.empty) {
try {
document.getElementById(deleted).remove();
} catch (e) {}
if (
index < List.page &&
document.querySelector("#wrapper").children.length -
(List.page + 1) >=
0
) {
//Helper.css(document.querySelector("#wrapper").children[List.page - 1], "display", "inline-flex");
} else if (
document.querySelector("#wrapper").children.length >
List.page + List.can_fit
) {
//Helper.css(document.querySelector("#wrapper").children[List.page + (List.can_fit - 1)], "display", "inline-flex");
}
if (nextToChange != undefined) {
Helper.css(nextToChange, "display", "inline-flex");
Helper.css(nextToChange, "height", List.element_height + "px");
}
Player.sendNext({
title: full_playlist[0].title,
videoId: full_playlist[0].id,
source: full_playlist[0].source,
thumbnail: full_playlist[0].thumbnail
});
}
}
if (full_playlist.length < 2) {
List.empty = true;
Helper.setHtml(
"#wrapper",
"<span id='empty-channel-message'>The playlist is empty.</span>"
);
}
Helper.removeElement("#suggested-" + deleted);
if (
List.page + List.can_fit <
document.querySelector("#wrapper").children.length + 1
) {
//$(".next_page_hide").css("display", "none");
//$(".next_page").css("display", "flex");
}
if (List.page >= document.querySelector("#wrapper").children.length) {
List.dynamicContentPage(-1);
}
Suggestions.checkUserEmpty();
},
voted_song: function(voted, time) {
var index_of_song = List.getIndexOfSong(voted);
if (index_of_song == -1) return;
var song_voted_on = full_playlist[index_of_song];
full_playlist[index_of_song].votes += 1;
full_playlist[index_of_song].added = time;
if (intelligentList) {
document.getElementById(voted).querySelector(".list-votes").innerText =
full_playlist[index_of_song].votes;
intelligentQueue.push({
type: "vote",
element: song_voted_on
});
List.sortList();
if (Helper.mobilecheck()) {
say_updated();
}
} else {
List.sortList();
Helper.removeElement("#" + voted);
List.insertAtIndex(song_voted_on, false);
}
},
song_change_prev: function(time) {
full_playlist[full_playlist.length - 1].now_playing = false;
full_playlist[full_playlist.length - 1].votes = full_playlist[0].votes;
full_playlist[full_playlist.length - 1].guids = [];
full_playlist[full_playlist.length - 1].added = full_playlist[0].added - 1;
full_playlist.unshift(full_playlist.pop());
full_playlist[full_playlist.length - 1].now_playing = true;
if (full_playlist.length == 1) return;
document
.querySelector("#wrapper")
.children[
document.querySelector("#wrapper").children.length - 1
].remove();
var length = full_playlist.length - 2;
if (length < 0) {
length = 0;
}
List.insertAtIndex(full_playlist[0], false, true);
},
song_change: function(time, remove, id) {
try {
var length = full_playlist.length - 1;
if (full_playlist.length <= 1) {
List.empty = true;
Helper.setHtml(
"#wrapper",
"<span id='empty-channel-message'>The playlist is empty.</span>"
);
}
if (id != full_playlist[0].id) {
return;
}
var newLast = full_playlist[0];
full_playlist[0].now_playing = true;
full_playlist[0].votes = 0;
full_playlist[0].guids = [];
full_playlist[0].added = time;
var i = intelligentQueue.length;
while (i--) {
var current = intelligentQueue[i];
if (current.type == "delete") {
intelligentQueue.splice(i, 1);
Helper.removeElement("#" + current.element.id);
deleted_elements += 1;
}
}
try {
document.getElementById(full_playlist[0].id).remove();
} catch (e) {}
if (!remove) {
full_playlist[length].now_playing = false;
} else {
delete full_playlist[length];
}
Helper.log(["SONG ON FIRST INDEX", full_playlist[0]]);
full_playlist.push(full_playlist.shift());
if (!remove) {
if (full_playlist.length >= 2) {
var index = full_playlist.length - 2;
List.insertAtIndex(full_playlist[index], false, true);
}
}
var wrapperChildren = [].slice.call(
document.querySelector("#wrapper").children
);
if (wrapperChildren.length >= List.can_fit && deleted_elements > 0) {
for (var i = 0; i < deleted_elements + 1; i++) {
//Helper.css(wrapperChildren[List.can_fit - 2], "display", "inline-flex");
Helper.css(
wrapperChildren[List.page + List.can_fit - 1 - i],
"display",
"inline-flex"
);
}
}
deleted_elements = 0;
} catch (e) {}
},
vote: function(id, vote) {
Helper.log([
"Voting on video",
"client " + client,
"socket_connected " + socket_connected
]);
if ((client || Helper.mobilecheck()) && !socket_connected) {
if (vote != "del") {
vote_ajax(id);
} else {
del_ajax(id);
}
return;
}
if (
!offline ||
(vote == "del" && (hasadmin && (!w_p && adminpass != "")))
) {
/*var u = Crypt.crypt_pass(Crypt.get_userpass(chan.toLowerCase()), true);
if(u == undefined) u = "";*/
emit("vote", { channel: chan, id: id, type: vote });
} else {
if (vote == "pos") {
List.voted_song(id, new Date().getTime() / 1000);
} else {
List.deleted_song(id);
}
}
return true;
},
skip: function(way) {
if (!offline) {
/*var u = Crypt.crypt_pass(Crypt.get_userpass(chan.toLowerCase()), true);
if(u == undefined) u = "";*/
emit("skip", { id: video_id, channel: chan.toLowerCase() });
} else {
if (way) {
Player.playNext();
} else {
Player.playPrev();
}
}
return true;
},
exportToSoundCloud: function(thisSong, i) {
if (i >= full_playlist.length) {
if (List.found.length == 0) {
for (var x = 0; x < List.not_found.length; x++) {
var data = List.not_found[x];
var not_added_song = document.createElement("div");
not_added_song.innerHTML = not_export_html;
not_added_song
.querySelector(".extra-add-text")
.setAttribute("value", data);
not_added_song
.querySelector(".extra-add-text")
.setAttribute("title", data);
document
.querySelector(".not-exported-container")
.insertAdjacentHTML("beforeend", not_added_song.innerHTML);
}
Helper.removeClass(".not-exported", "hide");
Helper.addClass(".current_number", "hide");
Helper.addClass("#playlist_loader_export", "hide");
Helper.addClass(".exported-list-container", "hide");
List.found = [];
List.not_found = [];
} else {
SC_player.post("/playlists", {
playlist: {
title: chan.toLowerCase() + " - Zoff",
tracks: List.found,
description:
"Playlist exported from https://zoff.me/" +
Helper.encodeChannelName(chan.toLowerCase())
}
})
.then(function(result) {
for (var x = 0; x < List.not_found.length; x++) {
var data = List.not_found[x];
var not_added_song = document.createElement("div");
not_added_song.innerHTML = not_export_html;
not_added_song
.querySelector(".extra-add-text")
.setAttribute("value", data);
not_added_song
.querySelector(".extra-add-text")
.setAttribute("title", data);
document
.querySelector(".not-exported-container")
.insertAdjacentHTML("beforeend", not_added_song.innerHTML);
}
Helper.addClass(".current_number", "hide");
Helper.addClass("#playlist_loader_export", "hide");
Helper.addClass(".exported-list-container", "hide");
document
.querySelector(".exported-list")
.insertAdjacentHTML(
"beforeend",
"<a target='_blank' class='btn light exported-playlist exported-soundcloud-list' href='" +
result.permalink_url +
"'>" +
result.title +
"</a>"
);
Helper.removeClass(".not-exported", "hide");
toast("List exported!");
List.found = [];
List.not_found = [];
})
.catch(function(error) {
console.log(error);
});
}
} else if (thisSong == undefined) {
ga("send", "event", "export", "soundcloud");
if (full_playlist.length > 0) {
List.exportToSoundCloud(full_playlist[0], 0);
}
} else if (thisSong != undefined && i != undefined) {
var isFound = false;
Helper.removeClass(".current_number", "hide");
document.querySelector(".current_number").innerText =
i + " of " + full_playlist.length;
if (thisSong.source == "soundcloud") {
List.found.push({ id: parseInt(thisSong.id) });
List.exportToSoundCloud(full_playlist[i + 1], i + 1);
} else {
var _title = thisSong.title;
_title = Helper.replaceForFind(_title);
SC_player.get("/tracks", {
q: _title
})
.then(function(tracks) {
//$("#results").append(result_html);
//Helper.css(document.querySelector(".search_results .col.s12"), "display", "block");
for (var y = 0; y < tracks.length; y++) {
var song = tracks[y];
if (!song.streamable) continue;
var duration = Math.floor(song.duration / 1000);
//var secs=Search.durationToSeconds(duration);
var secs = duration;
if (longsongs == undefined) longsongs = true;
if ((longsongs != undefined && !longsongs) || secs < 720) {
var title = song.title;
if (title.indexOf(song.user.username) == -1) {
title = song.user.username + " - " + title;
}
title = title.toLowerCase();
var id = song.id;
if (similarity(title, _title) > 0.6) {
List.found.push({ id: parseInt(song.id) });
isFound = true;
break;
}
}
}
if (!isFound) {
List.not_found.push(full_playlist[i].title);
}
List.exportToSoundCloud(full_playlist[i + 1], i + 1);
})
.catch(function(e) {
List.not_found.push(full_playlist[i].title);
List.exportToSoundCloud(full_playlist[i + 1], i + 1);
});
}
}
},
exportToSpotify: function() {
ga("send", "event", "export", "spotify");
Helper.ajax({
type: "GET",
url: "https://api.spotify.com/v1/me",
headers: {
Authorization: "Bearer " + access_token_data.access_token
},
success: function(response) {
response = JSON.parse(response);
var user_id = response.id;
Helper.removeClass("#playlist_loader_export", "hide");
Helper.removeClass(".exported-list-container", "hide");
Helper.ajax({
type: "POST",
url: "https://api.spotify.com/v1/users/" + user_id + "/playlists",
headers: {
Authorization: "Bearer " + access_token_data.access_token,
"Content-Type": "application/json"
},
data: JSON.stringify({
name: chan.toLowerCase() + " - Zoff",
description:
"Playlist exported from Zoff (https://zoff.me/" +
chan.toLowerCase() +
"/)",
public: true
}),
success: function(response) {
response = JSON.parse(response);
var playlist_id = response.id;
Helper.ajax({
type: "GET",
url:
window.location.protocol +
"//" +
window.location.hostname +
"/assets/images/small-square.base64.txt",
success: function(base64image) {
var image = base64image.substring(0, base64image.length - 1);
Helper.ajax({
type: "PUT",
url:
"https://api.spotify.com/v1/users/" +
user_id +
"/playlists/" +
playlist_id +
"/images",
headers: {
Authorization: "Bearer " + access_token_data.access_token,
"Content-Type": "image/jpeg"
},
contentType: "image/jpeg",
data: image,
success: function(resp) {},
error: function(error) {
console.error(error);
}
});
}
});
var i = 0;
List.searchSpotify(
full_playlist[i],
playlist_id,
user_id,
full_playlist,
i
);
//});
},
error: function(e) {}
});
},
error: function(e) {
console.error(e);
}
});
},
searchSpotify: function(
curr_song,
playlist_id,
user_id,
full_playlist,
current_element
) {
var original_track = curr_song.title;
var track = curr_song.title.toLowerCase().replace("-", " ");
track = Helper.replaceForFind(track);
track = encodeURIComponent(track);
Helper.removeClass(".current_number", "hide");
document.querySelector(".current_number").innerText =
current_element + 1 + " of " + full_playlist.length;
Helper.ajax({
type: "GET",
url: "https://api.spotify.com/v1/search?q=" + track + "&type=track",
headers: {
Authorization: "Bearer " + access_token_data.access_token
},
async: true,
error: function(err) {
if (err.status == 429 || err.status == 502) {
Helper.log([err.getAllResponseHeaders()]);
var retryAfter = err.getResponseHeader("Retry-After");
Helper.log([retryAfter]);
if (!retryAfter) retryAfter = 5;
retryAfter = parseInt(retryAfter, 10);
Helper.log(["Retry-After", retryAfter]);
setTimeout(function() {
List.searchSpotify(
curr_song,
playlist_id,
user_id,
full_playlist,
current_element
);
}, retryAfter * 1000);
}
},
success: function(response) {
response = JSON.parse(response);
var found = false;
for (var i = 0; i < response.tracks.items.length; i++) {
var data = response.tracks.items[i];
data.name = Helper.replaceForFind(data.name);
data.artists[0].name = Helper.replaceForFind(data.artists[0].name);
if (data.name.substring(data.name.length - 1) == " ")
data.name = data.name.substring(0, data.name.length - 1);
if (
data.name.substring(data.name.length - 1) == "." &&
track.substring(track.length - 1) != "."
) {
data.name = data.name.substring(0, data.name.length - 1);
}
if (
similarity(
data.artists[0].name + " - " + data.name,
decodeURIComponent(track)
) > 0.6 ||
(data.artists.length > 1 &&
similarity(
data.artists[0].name +
" " +
data.artists[1].name +
" - " +
data.name,
decodeURIComponent(track)
))
) {
found = true;
List.uris.push(data.uri);
Helper.log(["Found", track]);
//List.num_songs = List.num_songs + 1;
break;
} else if (
decodeURIComponent(track).indexOf(
data.artists[0].name.toLowerCase()
) >= 0 &&
decodeURIComponent(track).indexOf(data.name.toLowerCase()) >= 0
) {
found = true;
List.uris.push(data.uri);
Helper.log(["Found", track]);
//List.num_songs = List.num_songs + 1;
break;
} else {
var splitted = data.name.split(" ");
var toBreak = false;
for (var i = 0; i < splitted.length; i++) {
if (
(splitted[i] == "and" && track.indexOf("&") >= 0) ||
(splitted[i] == "&" && track.indexOf("and") >= 0)
) {
continue;
} else if (track.indexOf(splitted[i]) < 0) {
toBreak = true;
break;
}
}
if (toBreak) break;
found = true;
List.uris.push(data.uri);
Helper.log(["Found", track]);
//List.num_songs = List.num_songs + 1;
break;
}
}
if (!found) {
List.not_found.push(original_track);
List.num_songs = List.num_songs + 1;
Helper.log(["Didn't find", original_track]);
}
if (List.num_songs + List.uris.length == full_playlist.length) {
if (List.uris.length > 100) {
while (List.uris.length > 100) {
List.addToSpotifyPlaylist(
List.uris.slice(0, 100),
playlist_id,
user_id
);
List.uris = List.uris.slice(100, List.uris.length);
}
List.addToSpotifyPlaylist(List.uris, playlist_id, user_id);
Helper.addClass("#playlist_loader_export", "hide");
} else {
List.addToSpotifyPlaylist(List.uris, playlist_id, user_id);
Helper.addClass("#playlist_loader_export", "hide");
}
if (document.querySelectorAll(".exported-spotify-list").length == 0) {
document
.querySelector(".exported-list")
.insertAdjacentHTML(
"beforeend",
"<a target='_blank' class='btn light green lighten exported-playlist exported-spotify-list' href='https://open.spotify.com/user/" +
user_id +
"/playlist/" +
playlist_id +
"'>" +
chan +
"</a>"
);
}
for (var i = 0; i < List.not_found.length; i++) {
var data = List.not_found[i];
var not_added_song = document.createElement("div");
not_added_song.innerHTML = not_export_html;
not_added_song
.querySelector(".extra-add-text")
.setAttribute("value", data);
not_added_song
.querySelector(".extra-add-text")
.setAttribute("title", data);
document
.querySelector(".not-exported-container")
.insertAdjacentHTML("beforeend", not_added_song.innerHTML);
}
Helper.addClass(".current_number", "hide");
Helper.removeClass(".not-exported", "hide");
Helper.css(".spotify_export_button", "display", "block");
} else {
List.searchSpotify(
full_playlist[current_element + 1],
playlist_id,
user_id,
full_playlist,
current_element + 1
);
}
}
});
},
addToSpotifyPlaylist: function(uris, playlist_id, user_id) {
Helper.ajax({
type: "POST",
url:
"https://api.spotify.com/v1/users/" +
user_id +
"/playlists/" +
playlist_id +
"/tracks",
headers: {
Authorization: "Bearer " + access_token_data.access_token,
"Content-Type": "application/json"
},
data: JSON.stringify({
uris: uris
}),
error: function(response) {
var temp_playlist_id = playlist_id;
var temp_uris = uris;
var temp_user_id = user_id;
setTimeout(function() {
List.addToSpotifyPlaylist(temp_uris, temp_playlist_id, temp_user_id);
}, 3000);
},
success: function(response) {
Helper.log(["Added songs"]);
}
});
},
exportToYoutube: function() {
ga("send", "event", "export", "youtube");
var request_url =
"https://www.googleapis.com/youtube/v3/playlists?part=snippet&key=" +
api_key.youtube;
Helper.removeClass(".exported-list-container", "hide");
Helper.removeClass("#playlist_loader_export", "hide");
Helper.ajax({
type: "POST",
url: request_url,
headers: {
Authorization: "Bearer " + access_token_data_youtube.access_token,
"Content-Type": "application/json"
},
data: JSON.stringify({
snippet: {
title: Helper.upperFirst(chan.toLowerCase()),
description: "Playlist exported from zoff"
}
}),
success: function(response) {
response = JSON.parse(response);
var number_added = 0;
var playlist_id = response.id;
var request_url =
"https://www.googleapis.com/youtube/v3/playlistItems?part=snippet&key=" +
api_key.youtube;
List.addToYoutubePlaylist(
playlist_id,
full_playlist,
number_added,
request_url
);
},
error: function(response) {
console.error(response);
toast(
"Couldn't export to YouTube for some reason.. Try again later",
"red lighten"
);
Helper.addClass(".exported-list-container", "hide");
Helper.addClass("#playlist_loader_export", "hide");
Helper.removeClass(".youtube_export_button", "hide");
response = response.responseText;
Helper.log(["export to youtube response", response]);
}
});
},
insertInYouTubePlaylist: function(playlist_id, _videoId, num, request_url) {
var _data = JSON.stringify({
snippet: {
playlistId: playlist_id,
resourceId: {
kind: "youtube#video",
videoId: _videoId
}
}
});
Helper.ajax({
type: "POST",
url: request_url,
headers: {
Authorization: "Bearer " + access_token_data_youtube.access_token,
"Content-Type": "application/json"
},
data: _data,
success: function(response) {
response = JSON.parse(response);
Helper.log([
"Added video: " +
full_playlist[num].id +
" to playlist id " +
playlist_id
]);
if (num == full_playlist.length - 1) {
Helper.log(["All videoes added!"]);
Helper.log([
"url: https://www.youtube.com/playlist?list=" + playlist_id
]);
document
.querySelector(".exported-list")
.insertAdjacentHTML(
"beforeend",
"<a target='_blank' class='btn light red exported-playlist' href='https://www.youtube.com/playlist?list=" +
playlist_id +
"'>" +
chan +
"</a>"
);
Helper.addClass("#playlist_loader_export", "hide");
Helper.addClass(".current_number", "hide");
//$(".youtube_export_button").removeClass("hide");
} else {
//setTimeout(function(){
Helper.removeClass(".current_number", "hide");
document.querySelector(".current_number").innerText =
num + 1 + " of " + full_playlist.length;
List.addToYoutubePlaylist(
playlist_id,
full_playlist,
num + 1,
request_url
);
//}, 50);
}
},
error: function(response) {
console.error(response);
}
});
},
addToYoutubePlaylist: function(playlist_id, full_playlist, num, request_url) {
if (num == full_playlist.length) {
Helper.log(["All videoes added!"]);
Helper.log(["url: https://www.youtube.com/playlist?list=" + playlist_id]);
document
.querySelector(".exported-list")
.insertAdjacentHTML(
"beforeend",
"<a target='_blank' class='btn light exported-playlist' href='https://www.youtube.com/playlist?list=" +
playlist_id +
"'>" +
chan +
"</a>"
);
Helper.addClass("#playlist_loader_export", "hide");
Helper.addClass(".current_number", "hide");
return;
//$(".youtube_export_button").removeClass("hide");
}
if (
full_playlist[num].hasOwnProperty("source") &&
full_playlist[num].source != "soundcloud"
) {
List.insertInYouTubePlaylist(
playlist_id,
full_playlist[num].id,
num,
request_url
);
} else {
var yt_url =
"https://www.googleapis.com/youtube/v3/search?key=" +
api_key.youtube +
"&videoEmbeddable=true&part=id,snippet&fields=items(id,snippet)&type=video&order=relevance&safeSearch=none&maxResults=10&videoCategoryId=10";
yt_url += "&q=" + full_playlist[num].title;
var title = full_playlist[num].title;
var temptitle = title.split("-");
temptitle = temptitle.join(" ").split(" ");
var vid_url =
"https://www.googleapis.com/youtube/v3/videos?part=contentDetails,snippet,id&key=" +
api_key.youtube +
"&id=";
Helper.ajax({
type: "GET",
url: yt_url,
dataType: "jsonp",
success: function(response) {
response = JSON.parse(response);
//Helper.log(response);
if (response.items.length === 0) {
Helper.log([
"NO MATCH FOR:",
"Spotify title: " + title,
"Spotify length: " + length
]);
var not_added_song = document.createElement("div");
not_added_song.innerHTML = not_export_html;
not_added_song.querySelector(".extra-add-text").innerText = title;
not_added_song
.querySelector(".extra-add-text")
.setAttribute("title", title);
not_added_song
.querySelector(".extra-button-search")
.setAttribute("data-text", title);
document
.querySelector(".not-exported-container")
.insertAdjacentHTML("beforeend", not_added_song.innerHTML);
Helper.removeClass(".not-exported", "hide");
if (num == full_playlist.length) {
Helper.log(["All videoes added!"]);
Helper.log([
"url: https://www.youtube.com/playlist?list=" + playlist_id
]);
document
.querySelector(".exported-list")
.insertAdjacentHTML(
"beforeend",
"<a target='_blank' class='btn light exported-playlist' href='https://www.youtube.com/playlist?list=" +
playlist_id +
"'>" +
chan +
"</a>"
);
Helper.addClass("#playlist_loader_export", "hide");
Helper.addClass(".current_number", "hide");
//$(".youtube_export_button").removeClass("hide");
} else {
//setTimeout(function(){
Helper.removeClass(".current_number", "hide");
document.querySelector(".current_number").innerText =
num + 1 + " of " + full_playlist.length;
List.addToYoutubePlaylist(
playlist_id,
full_playlist,
num + 1,
request_url
);
//}, 50);
}
} else if (response.items.length > 0) {
for (var i = 0; i < response.items.length; i++) {
var data = response.items[i];
vid_url += data.id.videoId + ",";
}
Helper.ajax({
type: "GET",
url: vid_url,
dataType: "jsonp",
success: function(response) {
response = JSON.parse(response);
if (response.items.length > 0) {
var matched = false;
for (var y = 0; y < response.items.length; y++) {
var data = response.items[y];
//Helper.log(data);
//var title = data.snippet.title;
var duration = Search.durationToSeconds(
data.contentDetails.duration
);
var not_matched = false;
if (similarity(data.snippet.title, title) > 0.75) {
not_matched = false;
} else {
for (var i = 0; i < temptitle.length; i++) {
var data_title = temptitle[i];
if (
data.snippet.title
.toLowerCase()
.indexOf(data_title.toLowerCase()) == -1 ||
!(
data.snippet.title.toLowerCase().indexOf("cover") ==
-1 &&
title.toLowerCase().indexOf("cover") == -1 &&
((data.snippet.title
.toLowerCase()
.indexOf("remix") == -1 &&
title.toLowerCase().indexOf("remix") == -1) ||
(data.snippet.title
.toLowerCase()
.indexOf("remix") != -1 &&
title.toLowerCase().indexOf("remix") != -1) ||
!(
data.snippet.title
.toLowerCase()
.indexOf(data_title.toLowerCase()) == -1 &&
data.snippet.channelTitle
.toLowerCase()
.indexOf("vevo") == -1
))
)
)
not_matched = true;
else if (duration > 1800) not_matched = true;
}
}
if (!not_matched) {
matched = true;
List.insertInYouTubePlaylist(
playlist_id,
data.id,
num,
request_url
);
break;
}
}
if (!matched) {
if (num == full_playlist.length - 1) {
Helper.log(["All videoes added!"]);
Helper.log([
"url: https://www.youtube.com/playlist?list=" +
playlist_id
]);
document
.querySelector(".exported-list")
.insertAdjacentHTML(
"beforeend",
"<a target='_blank' class='btn light exported-playlist' href='https://www.youtube.com/playlist?list=" +
playlist_id +
"'>" +
chan +
"</a>"
);
Helper.addClass("#playlist_loader_export", "hide");
Helper.addClass(".current_number", "hide");
//$(".youtube_export_button").removeClass("hide");
} else {
//setTimeout(function(){
Helper.removeClass(".current_number", "hide");
document.querySelector(".current_number").innerText =
num + 1 + " of " + full_playlist.length;
//}, 50);
}
Helper.log([
"NO MATCH FOR:",
"Spotify title: " + title,
"Spotify length: " + length
]);
var not_added_song = document.createElement("div");
not_added_song.innerHTML = not_export_html;
not_added_song.querySelector(
".extra-add-text"
).value = title;
not_added_song
.querySelector(".extra-add-text")
.setAttribute("value", title);
not_added_song
.querySelector(".extra-add-text")
.setAttribute("title", title);
//not_added_song.querySelector(".extra-button-search").setAttribute("data-text", title);
document
.querySelector(".not-exported-container")
.insertAdjacentHTML(
"beforeend",
not_added_song.innerHTML
);
Helper.removeClass(".not-exported", "hide");
List.addToYoutubePlaylist(
playlist_id,
full_playlist,
num + 1,
request_url
);
}
}
},
error: function(e) {
console.error(e);
}
});
}
},
error: function(e) {
console.error(e);
}
});
}
},
sortList: function() {
full_playlist.sort(
Helper.predicate(
{
name: "votes",
reverse: true
},
{
name: "added",
reverse: false
},
{
name: "title",
reverse: false
}
)
);
},
show: function() {
if (!Helper.mobilecheck() && !chromecastAvailable) {
M.Modal.getInstance(
document.getElementById("channel-share-modal")
).open();
}
if (chromecastAvailable) {
castSession.sendMessage("urn:x-cast:zoff.me", { type: "showJoinInfo" });
}
},
generateSong: function(
_song_info,
transition,
lazy,
list,
user,
display,
initial,
filtered
) {
if (list_html === undefined) list_html = Helper.html("#list-song-html");
var video_id = _song_info.id;
var video_title = _song_info.title;
var video_votes = _song_info.votes;
var video_thumb_url = "//img.youtube.com/vi/" + video_id + "/mqdefault.jpg";
if (_song_info.source == "soundcloud") {
video_thumb_url = _song_info.thumbnail;
}
var video_thumb = "background-image:url('" + video_thumb_url + "');";
var song = document.createElement("div");
song.innerHTML = list_html;
song = song.cloneNode(true);
var image_attr = "style";
if (
_song_info.hasOwnProperty("start") &&
_song_info.hasOwnProperty("end")
) {
_song_info.duration = _song_info.end - _song_info.start;
}
var attr;
var del_attr;
//song.find(".list-song");
if (transition) {
Helper.css(
song.querySelector(".list-song"),
"transform",
"translateX(100%)"
);
Helper.addClass(song.querySelector(".list-song"), "side_away");
}
Helper.css(
song.querySelector(".list-song"),
"height",
List.element_height + "px"
);
if (!w_p) Helper.removeClass(song.querySelector(".card-action"), "hide");
if (video_votes == 1) song.querySelector(".vote-text").innerText = "vote";
if (lazy) {
video_thumb = "//img.youtube.com/vi/" + video_id + "/mqdefault.jpg";
image_attr = "data-original";
}
song.querySelector(".list-image").setAttribute(image_attr, video_thumb);
if (list && !filtered) {
//song.querySelector("#list-song")
song.querySelector(".list-votes").innerText = video_votes;
song.querySelector("#list-song").setAttribute("data-video-id", video_id);
song.querySelector("#list-song").setAttribute("data-video-type", "song");
song
.querySelector("#list-song")
.setAttribute("data-video-source", _song_info.source);
song.querySelector("#list-song").setAttribute("id", video_id);
song.classList.remove("hide");
song.querySelector(".vote-container").setAttribute("title", video_title);
if (
(document.querySelector("#wrapper").children.length >= List.can_fit &&
initial) ||
display == "none"
) {
Helper.css(song.querySelector(".card"), "display", "none");
}
attr = ".vote-container";
del_attr = "delete_button";
var _temp_duration = Helper.secondsToOther(_song_info.duration);
song.querySelector(".card-duration").innerText =
Helper.pad(_temp_duration[0]) + ":" + Helper.pad(_temp_duration[1]);
} else if (!list && !filtered) {
//song.querySelector(".card-duration").remove();
//song.querySelector(".list-song").removeClass("playlist-element");
//song.querySelector(".more_button").addClass("hide");
Helper.removeClass(song.querySelector(".suggested_remove"), "hide");
song.querySelector(".vote-text").innerText = "";
song.querySelector(".card-duration").innerText =
Helper.pad(_song_info.duration[0]) +
":" +
Helper.pad(_song_info.duration[1]);
var added_by = "user";
attr = ".add-suggested";
if (user) {
del_attr = "del_user_suggested";
} else {
del_attr = "del_suggested";
added_by = "system";
}
song
.querySelector(".vote-container")
.setAttribute("class", "clickable add-suggested");
song.querySelector(".add-suggested").setAttribute("title", video_title);
//Helper.addClass(song.querySelector(".delete_button"), del_attr);
song.querySelector(".list-votes").innerText = _song_info.extra;
song.querySelector(".vote-text").innerText = video_votes;
song.querySelector(attr).setAttribute("data-video-title", video_title);
song
.querySelector(attr)
.setAttribute("data-video-length", _song_info.length);
song.querySelector(attr).setAttribute("data-added-by", added_by);
song.querySelector(attr).setAttribute("data-video-type", "suggested");
if (_song_info.source == "soundcloud") {
song
.querySelector(attr)
.setAttribute("data-type-thumbnail", _song_info.thumbnail);
}
song
.querySelector(attr)
.setAttribute("data-video-source", _song_info.source);
song.querySelector("#list-song").setAttribute("data-video-id", video_id);
Helper.css(song.querySelector("#list-song"), "display", "inline-flex");
song
.querySelector("#list-song")
.setAttribute("id", "suggested-" + video_id);
var list_image = song.querySelector(".list-image");
list_image.classList.remove("list-image");
list_image.className += " list-suggested-image";
//song.querySelector(".list-image").setAttribute("class", song.querySelector(".list-image").getAttribute("class").replace("list-image", "list-suggested-image"));
} else if (filtered) {
song.querySelector("#list-song").className += " filtered-search-element";
song.querySelector(".list-votes").innerText = _song_info.tags.join(", ");
song.querySelector(".vote-text").remove();
song.querySelector("#list-song").setAttribute("data-video-id", video_id);
song.querySelector("#list-song").setAttribute("data-video-type", "song");
song
.querySelector("#list-song")
.setAttribute("data-video-source", _song_info.source);
song
.querySelector("#list-song")
.setAttribute("id", "filtered-" + video_id);
song.classList.remove("hide");
song.className += " filtered-search-element";
song.querySelector(".vote-container").setAttribute("title", video_title);
attr = ".vote-container";
del_attr = "delete_button";
var _temp_duration = Helper.secondsToOther(_song_info.duration);
song.querySelector(".card-duration").innerText =
Helper.pad(_temp_duration[0]) + ":" + Helper.pad(_temp_duration[1]);
}
if (!embed) {
song.querySelector(".mobile-delete").remove();
}
if (hostMode) {
song.querySelector(".list-remove").style.display = "none";
}
song.querySelector(".list-title").innerText = video_title;
song.querySelector(".list-title").setAttribute("title", video_title);
song.querySelector(attr).setAttribute("data-video-id", video_id);
//song.querySelector(".list-image-placeholder").setAttribute("src", video_thumb_url);
if (song.querySelectorAll(".list-suggested-image").length > 0) {
song
.querySelector(".list-suggested-image")
.setAttribute(image_attr, video_thumb);
}
//song.querySelector("."+del_attr).setAttribute("data-video-id", video_id);
return song.innerHTML;
},
getIndexOfSong: function(id) {
try {
for (var i = 0; i < full_playlist.length; i++) {
if (full_playlist[i].id == id) return i;
}
return -1;
} catch (e) {
return -1;
}
}
};