"
+ );
+ } else {
+ $("#chats").append(
+ '
DJ ' +
+ nicename +
+ " started playing " +
+ data.title +
+ " by " +
+ data.artist +
+ "
"
+ );
+ }
+ if (doTheScrollThing) firetable.utilities.scrollToBottom();
+ firetable.lastChatPerson = false;
+ firetable.lastChatId = false;
+ }
+ }
+ $("#timr").countdown({
+ until: timeLeft,
+ compact: true,
+ description: "",
+ format: "MS",
+ });
- $("#volstatus").bind("click", function() {
- firetable.actions.muteToggle();
- });
- $(".openModal").bind("click", function() {
- var modalContentID = $(this).attr('data-modal');
- $(".modalThing").removeClass('show');
- $("#overlay").addClass('show');
- $("#" + modalContentID).addClass('show');
- });
- $(".closeModal").bind("click", function() {
- $("#overlay").removeClass('show');
- $("#deletepicker").html("");
- firetable.actions.cardCase();
- $("#plMachine").val("");
- });
- $(document).on("click", ".closeeditor", function() {
- $(this).closest('.pvbar').removeClass('editing').find('.tagPromptBox').remove();
- firetable.songToEdit = null;
- });
- $("#cardCaseButton").bind("click", function() {
- firetable.actions.cardCase();
- $("#cardsOverlay").show();
- });
- $("#pickerNav").on("click", "span", function() {
- try {
- var sec = $(this)[0].id;
- firetable.emojis.sec(sec);
- } catch (s) {}
- });
- $("#pickEmoji").bind("click", function() {
- //toggle emoji picker
- if ($("#emojiPicker").is(":hidden")) {
- $(this).addClass('on');
- $("#emojiPicker").slideDown(function() {
- $('#pickerSearch').focus();
+ $(".prgbar-style").remove();
+ var now = Date.now();
+ var sofar = parseInt((now - firetable.song.started) / 1000);
+ sofar = sofar < 0 ? 0 : sofar;
+ var pcnt = parseInt((sofar / firetable.song.duration) * 100);
+ var timeleft = firetable.song.duration - sofar;
+ $("head")
+ .delay(500)
+ .queue(function (next) {
+ $(this).append(
+ ``
+ );
+ next();
+ });
});
+ ftapi.events.on("screenStateChanged", function (data) {
+ firetable.debug && console.log("thescreen:", data);
+ firetable.screenSyncPos = data;
+ if (firetable.screenControl == "sync") {
+ if (data) {
+ firetable.utilities.screenDown();
+ } else {
+ firetable.utilities.screenUp();
+ }
+ }
+ });
+ ftapi.events.on("danceStateChanged", function (data) {
+ firetable.debug && console.log("dance check:", data);
+ if (data) {
+ $("#deck").addClass("dance");
+ } else {
+ $("#deck").removeClass("dance");
+ }
+ });
+ ftapi.events.on("lightsChanged", function (data) {
+ firetable.debug && console.log("lights check:", data);
+ if (data) {
+ firetable.lights = true;
+ $(".festiveLights").remove();
+ var colorThing = firetable.utilities.hexToRGB(firetable.color);
+ var style =
+ "";
+ $("head").append(style);
+ } else {
+ $(".festiveLights").remove();
+ firetable.lights = false;
+ }
+ });
+ ftapi.events.on("waitlistChanged", function (data) {
+ if (data) {
+ $("#allUsers .djOrder.waitlist").each(function () {
+ $(this).html("").removeClass("waitlist");
+ var $prson = $(this).closest(".prson");
+ switch (true) {
+ case $prson.hasClass("robot"):
+ $prson.remove().appendTo("#usersBot");
+ break;
+ case $prson.hasClass("supermod"):
+ $prson.remove().appendTo("#usersSuper");
+ break;
+ case $prson.hasClass("mod"):
+ $prson.remove().appendTo("#usersMod");
+ break;
+ default:
+ $prson.remove().appendTo("#usersRegular");
+ break;
+ }
+ });
+ for (var key in data) {
+ var position = parseInt(key + 1);
+ firetable.debug && console.log("waitlist", position, data);
+ if (data.hasOwnProperty(key)) {
+ $("#user" + data[key].id)
+ .remove()
+ .appendTo("#usersWaitlist")
+ .find(".djOrder")
+ .html(
+ '
pending_actions ' +
+ position
+ )
+ .removeClass("ondeck")
+ .addClass("waitlist");
+ }
+ }
+ }
+ });
+ ftapi.events.on("tableChanged", function (data) {
+ var ok1 = "";
+ if (data) {
+ console.log("table changed", data);
+ var countr = 0;
+ $("#allUsers .djOrder.ondeck").each(function () {
+ $(this).html("").removeClass("ondeck");
+ var $prson = $(this).closest(".prson");
+ switch (true) {
+ case $prson.hasClass("robot"):
+ $prson.remove().appendTo("#usersBot");
+ break;
+ case $prson.hasClass("supermod"):
+ $prson.remove().appendTo("#usersSuper");
+ break;
+ case $prson.hasClass("mod"):
+ $prson.remove().appendTo("#usersMod");
+ break;
+ default:
+ $prson.remove().appendTo("#usersRegular");
+ break;
+ }
+ });
+ for (var key in data) {
+ if (data.hasOwnProperty(key)) {
+ var removeMe = "";
+ if (data[key].removeAfter) removeMe = "departure_board";
+
+ ok1 +=
+ '
' +
+ removeMe +
+ " " +
+ data[key].name +
+ '
' +
+ data[key].plays +
+ '/' +
+ firetable.playlimit +
+ "
";
+ countr++;
+ $("#user" + data[key].id)
+ .remove()
+ .appendTo("#usersDJs")
+ .find(".djOrder")
+ .html('
album ' + countr)
+ .removeClass("waitlist")
+ .addClass("ondeck");
+ }
+ }
+ if (countr < 4) {
+ ok1 +=
+ '
';
+ countr++;
+ for (var i = countr; i < 4; i++) {
+ ok1 += '
';
+ }
+ }
+ } else {
+ ok1 +=
+ '
';
+ for (var i = 0; i < 3; i++) {
+ ok1 += '
';
+ }
+ }
+ $("#deck").html(ok1);
+ for (var i = 0; i < 4; i++) {
+ if (i != firetable.playdex) {
+ $("#avtr" + i).removeClass("animate");
+ $("#djthing" + i).removeClass("djActive");
+ } else {
+ $("#avtr" + i).addClass("animate");
+ $("#djthing" + i).addClass("djActive");
+ $(".djactive-style").remove();
+ $("head")
+ .delay(500)
+ .queue(function (next) {
+ $(this).append(
+ ``
+ );
+ next();
+ });
+ }
+ }
+ });
+ ftapi.events.on("spotlightStateChanged", function (data) {
+ firetable.playdex = data;
+ for (var i = 0; i < 4; i++) {
+ if (i != data) {
+ $("#avtr" + i).removeClass("animate");
+ $("#djthing" + i).removeClass("djActive");
+ } else {
+ $("#avtr" + i).addClass("animate");
+ $("#djthing" + i).addClass("djActive");
+ $(".djactive-style").remove();
+ $("head")
+ .delay(500)
+ .queue(function (next) {
+ $(this).append(
+ ``
+ );
+ next();
+ });
+ }
+ }
+ });
+ ftapi.events.on("playLimitChanged", function (data) {
+ firetable.playlimit = data;
+ for (var i = 0; i < 4; i++) {
+ $("#plimit" + i).text(data);
+ }
+ });
+ ftapi.events.on("banListChanged", function (data) {
+ $("#activeSuspentions").html("");
+ for (key in data) {
+ if (data[key]) {
+ ftapi.lookup.userByName(key, function (person) {
+ $("#activeSuspentions").append(
+ '
' +
+ person.username +
+ '
'
+ );
+ });
+ }
+ }
+ });
+ var $userTemplate = $("#userKEY").remove();
+ function userBits(data) {
+ if (!data.username) data.username = data.userid;
+ if (data.idle) {
+ if (data.idle.isIdle && !data.hostbot)
+ data.html.addClass("idle").find(".prsnStatus").text("nightlight");
+ if (data.idle.audio == 2) data.html.addClass("idlething");
+ }
+ if (data.blocked) {
+ data.html.addClass("blockd");
+ }
- if (!firetable.pickerInit) {
- const makeRequest = async () => {
- twemoji.parse(document.getElementById("pickerResults"));
- return true;
- }
-
- makeRequest()
+ data.destination = "#usersRegular";
+ data.rolename = "";
+ data.rolecon = "";
+ data.smallcon = true;
+ if (data.mod) {
+ data.rolename = "mod";
+ data.rolecon = "star";
+ data.smallcon = false;
+ data.destination = "#usersMod";
+ }
+ if (data.supermod) {
+ data.rolename = "supermod";
+ data.rolecon = "local_police";
+ data.smallcon = false;
+ data.destination = "#usersSuper";
+ }
+ if (data.hostbot) {
+ data.rolename = "robot";
+ data.rolecon = "smart_toy";
+ data.smallcon = false;
+ data.destination = "#usersBot";
+ }
+ return data;
}
- } else {
- $(this).removeClass('on');
- $("#emojiPicker").slideUp(function() {
- $('#pickerSearch').val('').trigger('change');
- $('#newchat').focus();
+ ftapi.events.on("userJoined", function (data) {
+ firetable.debug && console.log("user joined", data);
+ data.html = $userTemplate.clone();
+ data = userBits(data);
+ data.html.attr("id", "user" + data.userid).addClass(data.rolename);
+ data.html
+ .find(".botson")
+ .css(
+ "background-image",
+ "url(https://indiediscotheque.com/robots/" + data.userid + data.username + ".png?size=110x110)"
+ );
+ data.html.find(".prsnName").text(data.username);
+ data.html.find(".prsnRole").text(data.rolecon);
+ if (data.rolename) data.html.find(".prsnRole").prop("title", data.rolename);
+ if (data.smallcon) data.html.addClass("smallIcon");
+ else data.html.removeClass("smallIcon");
+ data.html.prop("title", "joined " + firetable.utilities.format_date(data.joined));
+ firetable.utilities.chatAt(data.html); // adds the click event to @ the user
+ $(data.destination).append(data.html);
});
- }
- });
+ ftapi.events.on("userLeft", function (data) {
+ $("#user" + data.userid).remove();
+ });
+ ftapi.events.on("userChanged", function (data) {
+ console.log("user changed", data);
+ data.html = $("#user" + data.userid);
+ data.html.removeClass("idle").find(".prsnStatus").text("lens");
+ data.html.removeClass("blockd");
+ data = userBits(data);
+ data.html
+ .find(".botson")
+ .css(
+ "background-image",
+ "url(https://indiediscotheque.com/robots/" + data.userid + data.username + ".png?size=110x110)"
+ );
+ data.html.find(".prsnName").text(data.username);
+ data.html.find(".prsnRole").text(data.rolecon);
+ if (data.rolename) data.html.find(".prsnRole").prop("title", data.rolename);
+ if (data.smallcon) data.html.addClass("smallIcon");
+ else data.html.removeClass("smallIcon");
+ });
+ ftapi.events.on("usersChanged", function (okdata) {
+ if ($("#loggedInUser .botson").data("uid") == ftapi.uid) {
+ if (ftapi.users[ftapi.uid]) {
+ if (ftapi.users[ftapi.uid].username) {
+ $("#loggedInUser .botson")
+ .css(
+ "background-image",
+ "url(https://indiediscotheque.com/robots/" +
+ ftapi.uid +
+ ftapi.users[ftapi.uid].username +
+ ".png?size=175x175)"
+ )
+ .prop("title", "You're logged in as " + ftapi.users[ftapi.uid].username);
+ $("#loggedInUsername").text(ftapi.users[ftapi.uid].username);
+ }
+ }
+ }
+ if (ftapi.uid) {
+ if (ftapi.users[ftapi.uid]) {
+ if (ftapi.users[ftapi.uid].supermod) {
+ if ($("#ftSuperCopButton").is(":hidden")) {
+ $("#ftSuperCopButton").show();
+ }
+ }
+ }
+ }
+ var count = Object.keys(okdata).length;
+ $("#numListeners, #numRoomListeners").text(count);
+ firetable.debug && console.log("users changed:", okdata);
+ });
+ var $chatTemplate = $("#chatKEY").remove();
+ ftapi.events.on("newChat", function (chatData) {
+ var namebo = chatData.id;
+ var utitle = "";
- $("#morechats .butt").bind("click", function() {
- firetable.utilities.scrollToBottom();
- });
+ var atBottom = false;
+ if (firetable.utilities.isChatPrettyMuchAtBottom()) atBottom = true;
- $("#fire").bind("click", function() {
- ftapi.actions.sendChat(":fire:");
- $("#cloud_with_rain").removeClass("on");
- $("#fire").addClass("on");
- });
+ var you = ftapi.uid;
+ if (ftapi.users[ftapi.uid]) {
+ if (ftapi.users[ftapi.uid].username) you = ftapi.users[ftapi.uid].username;
+ }
- $("#cloud_with_rain").bind("click", function() {
- ftapi.actions.sendChat(":cloud_with_rain:");
- $("#cloud_with_rain").addClass("on");
- $("#fire").removeClass("on");
- });
+ if (ftapi.users[chatData.id]) {
+ if (ftapi.users[chatData.id].username) namebo = ftapi.users[chatData.id].username;
+ if (ftapi.users[chatData.id].mod) utitle = "stars";
+ if (ftapi.users[chatData.id].supermod) utitle = "local_police";
+ if (ftapi.users[chatData.id].hostbot) utitle = "smart_toy";
+ } else if (chatData.name) {
+ namebo = chatData.name;
+ }
+ var badoop = false;
+ if (chatData.txt.match("@" + you, "i") || chatData.txt.match(/\@everyone/)) {
+ var oknow = Date.now();
+ if (oknow - chatData.time < 10 * 1000) {
+ firetable.utilities.playSound("sound");
+ if (firetable.desktopNotifyMentions) firetable.utilities.desktopNotify(chatData, namebo);
+ badoop = true;
+ }
+ }
+ if (chatData.id == firetable.lastChatPerson && !badoop) {
+ $("#chat" + firetable.lastChatId + " .chatContent").append(
+ '
'
+ );
+ $("#chatTime" + firetable.lastChatId).text(firetable.utilities.format_time(chatData.time));
+ var txtOut = firetable.ui.strip(chatData.txt);
+ txtOut = firetable.ui.showImages(txtOut);
+ txtOut = firetable.ui.textToLinks(txtOut);
+ txtOut = firetable.utilities.emojiShortnamestoUnicode(txtOut);
+ txtOut = txtOut.replace(/\`(.*?)\`/g, function (x) {
+ return "
" + x.replace(/\`/g, "") + "";
+ });
+ if (chatData.hidden) txtOut = "[message removed]";
+ $("#chattxt" + chatData.chatID).html(txtOut);
+ var canBeDeleted = false;
+ if (ftapi.users[ftapi.uid].mod || ftapi.users[ftapi.uid].supermod) {
+ if (ftapi.users[chatData.id]) {
+ if (!ftapi.users[chatData.id].mod && !ftapi.users[chatData.id].supermod) {
+ canBeDeleted = true;
+ }
+ } else {
+ canBeDeleted = true;
+ }
+ if (canBeDeleted && !chatData.hidden) {
+ // add delete button
+ $("#chattxt" + chatData.chatID).addClass("deleteMe");
+ $("#chattxt" + chatData.chatID).append('
x
');
+ $("#chattxt" + chatData.chatID)
+ .find(".modDelete")
+ .on("click", function () {
+ console.log("DELETE CHAT", chatData);
+ ftapi.actions.deleteChat(chatData.feedID);
+ });
+ }
+ }
+ twemoji.parse(document.getElementById("chattxt" + chatData.chatID));
+ } else {
+ var $chatthing = $chatTemplate.clone();
+ $chatthing.attr("id", "chat" + chatData.chatID);
+ $chatthing
+ .find(".botson")
+ .css(
+ "background-image",
+ "url(https://indiediscotheque.com/robots/" + chatData.id + namebo + ".png?size=110x110"
+ );
+ $chatthing.find(".utitle").html(utitle);
+ $chatthing
+ .find(".chatTime")
+ .attr("id", "chatTime" + chatData.chatID)
+ .html(firetable.utilities.format_time(chatData.time));
+ if (badoop) $chatthing.addClass("badoop");
+ var txtOut = firetable.ui.strip(chatData.txt);
+ txtOut = firetable.ui.showImages(txtOut);
+ txtOut = firetable.ui.textToLinks(txtOut);
+ txtOut = firetable.utilities.emojiShortnamestoUnicode(txtOut);
+ txtOut = txtOut.replace(/\`(.*?)\`/g, function (x) {
+ return "
" + x.replace(/\`/g, "") + "";
+ });
+ if (chatData.hidden) txtOut = "[message removed]";
+ $chatthing
+ .find(".chatText")
+ .html(txtOut)
+ .attr("id", "chattxt" + chatData.chatID);
+ console.log(chatData);
+
+ $chatthing.find(".chatName").text(namebo);
+ firetable.utilities.chatAt($chatthing.find(".botson")); // adds the click event to @ the user
+ firetable.utilities.chatAt($chatthing.find(".chatName")); // adds the click event to @ the user
+ twemoji.parse($chatthing.find(".chatText")[0]);
+ $chatthing.appendTo("#chats");
+ try {
+ if (ftapi.users[ftapi.uid].mod || ftapi.users[ftapi.uid].supermod) {
+ var canBeDeleted = false;
+ if (ftapi.users[chatData.id]) {
+ if (
+ !ftapi.users[chatData.id].mod &&
+ !ftapi.users[chatData.id].supermod &&
+ !chatData.hidden
+ ) {
+ canBeDeleted = true;
+ }
+ } else {
+ canBeDeleted = true;
+ }
+ if (canBeDeleted && !chatData.hidden) {
+ // add delete button
+ $chatthing.find(".chatText").addClass("deleteMe");
+ $chatthing.find(".chatText").append('
x
');
+ $chatthing.find(".modDelete").on("click", function () {
+ ftapi.actions.deleteChat(chatData.feedID);
+ });
+ }
+ }
+ } catch (e) {
+ console.log(e);
+ }
+ firetable.lastChatPerson = chatData.id;
+ firetable.lastChatId = chatData.chatID;
+ }
- //SETTINGS TOGGLES
- $('#badoopToggle').change(function() {
- if (this.checked) {
- firetable.debug && console.log("badoop on");
- localStorage["firetableBadoop"] = true;
- firetable.playBadoop = true;
- } else {
- firetable.debug && console.log("badoop off");
- localStorage["firetableBadoop"] = false;
- firetable.playBadoop = false;
+ if (chatData.card) {
+ $("#chattxt" + chatData.chatID).append(
+ '
'
+ );
- }
- });
- $('#showImagesToggle').change(function() {
- if (this.checked) {
- firetable.debug && console.log("show images on");
- localStorage["firetableShowImages"] = true;
- firetable.showImages = true;
- } else {
- firetable.debug && console.log("show images off");
- localStorage["firetableShowImages"] = false;
- firetable.showImages = false;
-
- }
- });
- $('#mediaDisableToggle').change(function() {
- if (this.checked) {
- firetable.debug && console.log("media disable on");
- localStorage["firetableDisableMedia"] = true;
- firetable.disableMediaPlayback = true;
- if (firetable.scLoaded) firetable.scwidget.pause();
- if (firetable.ytLoaded) player.stopVideo();
- firetable.ui.hidePlayerControls();
- } else {
- firetable.debug && console.log("media disable off");
- localStorage["firetableDisableMedia"] = false;
- firetable.disableMediaPlayback = false;
- firetable.ui.showPlayerControls();
- firetable.actions.reloadtrack();
- }
- });
- $('#showAvatarsToggle').change(function() {
- if (this.checked) {
- firetable.debug && console.log("show avatars on");
- localStorage["firetableShowAvatars"] = true;
- firetable.showAvatars = true;
- document.getElementById("actualChat").classList.remove("avatarsOff");
- } else {
- firetable.debug && console.log("show avatars off");
- localStorage["firetableShowAvatars"] = false;
- firetable.showAvatars = false;
- document.getElementById("actualChat").classList.add("avatarsOff");
- }
- });
- $(document).on('click', '.hideImage', function(e) {
- e.stopPropagation();
- e.preventDefault();
- $(this).closest('.chatText').toggleClass('hideImg');
- });
- $('#desktopNotifyMentionsToggle').change(function() {
- if (this.checked) {
- firetable.debug && console.log("dtnm on");
- localStorage["firetableDTNM"] = true;
- firetable.desktopNotifyMentions = true;
- if (Notification) {
- if (Notification.permission !== "granted") {
- Notification.requestPermission();
- }
- }
- } else {
- firetable.debug && console.log("dtnm off");
- localStorage["firetableDTNM"] = false;
- firetable.desktopNotifyMentions = false;
+ firetable.actions.showCard(chatData.card, chatData.chatID);
+ firetable.debug && console.log("showin card");
+ }
- }
- });
+ if (atBottom || ftapi.uid == chatData.id) firetable.utilities.scrollToBottom();
+ else $("#morechats").addClass("show");
+ });
- $('input[type=radio][name=screenControl]').change(function() {
- firetable.debug && console.log('screen control:', this.value);
- localStorage["firetableScreenControl"] = this.value;
- firetable.screenControl = this.value;
- if (this.value == "off") {
- firetable.utilities.screenUp();
- } else if (this.value == "on") {
- firetable.utilities.screenDown();
- } else if (this.value == "sync") {
- if (firetable.screenSyncPos) {
- firetable.utilities.screenDown();
- } else {
- firetable.utilities.screenUp();
- }
- }
- });
+ ftapi.events.on("chatRemoved", function (data) {
+ console.log("CHAT DELETED", data);
+ $("#chattxt" + data.chatID).text("[message removed]");
+ if (ftapi.users[ftapi.uid].mod || ftapi.users[ftapi.uid].supermod)
+ $("#chattxt" + data.chatID).removeClass("deleteMe");
+ });
+ ftapi.events.on("playlistChanged", function (okdata, listID) {
+ firetable.debug && console.log(okdata.length);
+ firetable.queue = okdata;
+ $("#mainqueue").html("").removeClass("emptyList overFiltered").addClass("loading");
+ $("#queueFilterForm")[0].reset();
+ if ($.isEmptyObject(okdata)) $("#mainqueue").addClass("emptyList");
+ for (var key in okdata) {
+ if (okdata.hasOwnProperty(key)) {
+ var $newli = $playlistItemTemplate.clone();
+ var thisone = okdata[key];
+ var psign = "";
+ if (key == firetable.preview) {
+ psign = "";
+ }
+ $newli.attr("id", "pvbar" + key);
+ $newli.attr("data-key", key);
+ $newli.attr("data-type", thisone.type);
+ $newli
+ .find(".previewicon")
+ .attr("id", "pv" + key)
+ .on("click", function () {
+ firetable.actions.pview(
+ $(this).closest(".pvbar").attr("data-key"),
+ false,
+ $(this).closest(".pvbar").attr("data-type")
+ );
+ })
+ .html(psign);
+ $newli.find(".listwords").html(thisone.name);
+ $newli.find(".bumpsongs").on("click", function () {
+ firetable.actions.bumpSongInQueue($(this).closest(".pvbar").attr("data-key"));
+ });
+ $newli.find(".bottomsongs").on("click", function () {
+ var oldID = $(this).closest(".pvbar").attr("data-key");
+ ftapi.actions.moveTrackToBottom($(this).closest(".pvbar").attr("data-key"), function (newID) {
+ if (firetable.preview) {
+ // visually update preview in the new location if applicable
+ if (firetable.preview == oldID) {
+ firetable.preview = newID;
+ $("#pv" + newID).html("");
+ }
+ }
+ });
+ });
+ if (thisone.flagged) {
+ var flagLabel = "broken";
+ var flagIcon = "warning";
+ if (thisone.flagged.code == 7) {
+ flagLabel = "age restricted";
+ } else if (thisone.flagged.code >= 8) {
+ if (thisone.flagged.code == 8) {
+ // manual broken flagged by mod
+ flagLabel = "broken (manual)";
+ } else if (thisone.flagged.code == 9) {
+ // low quality
+ flagLabel = "low audio quality";
+ flagIcon = "disc_full";
+ } else if (thisone.flagged.code == 10) {
+ // offtheme
+ flagLabel = "offtheme";
+ flagIcon = "flag";
+ }
+ }
+ $newli.find(".track-warning").html('
' + flagIcon + " ");
+ $newli
+ .find(".track-warning")
+ .prop(
+ "title",
+ "Flagged as " +
+ flagLabel +
+ " on " +
+ firetable.utilities.format_date(thisone.flagged.date) +
+ ". Click to remove flag."
+ );
+ $newli.find(".track-warning").on("click", function () {
+ ftapi.actions.unflagTrack($(this).closest(".pvbar").attr("data-key"));
+ $(this).html("");
+ });
+ }
+ $newli.find(".edittags").on("click", function () {
+ firetable.actions.editTagsPrompt($(this).closest(".pvbar").attr("data-key"));
+ });
+ $newli.find(".deletesong").on("click", function () {
+ firetable.actions.deleteSong($(this).closest(".pvbar").attr("data-key"));
+ });
+ $("#mainqueue").append($newli);
+ }
+ }
+ $("#mainqueue").removeClass("loading");
+ });
- $("#stealpicker").change(function() {
- var dest = $("#stealpicker").val();
- if (dest == "-1") return;
- if (firetable.song.cid != 0) {
- var title = firetable.song.artist + " - " + firetable.song.title;
- $("#grab").removeClass('on');
- ftapi.actions.addToList(firetable.song.type, title, firetable.song.cid, dest);
- $("#stealContain").hide();
- }
- });
+ firetable.ui.LinkGrabber.start();
- $("#pldeleteButton").bind("click", function() {
- var val = $("#deletepicker").val();
- firetable.debug && console.log('playlist delete:', val);
- if (ftapi.users[ftapi.uid]) {
- if (ftapi.users[ftapi.uid].selectedList) {
- if (ftapi.users[ftapi.uid].selectedList == val) {
- $("#listpicker").val("0").change();
- }
- }
- }
- ftapi.actions.deleteList(val);
- $("#pdopt" + val).remove();
- $("#overlay").removeClass('show');
- });
- $("#plimportLauncher").bind("click", function() {
- $("#overlay").addClass('show');
- $(".modalThing").removeClass('show');
- $('#importPromptBox').addClass('show');
- });
- $("#pldeleteLauncher").bind("click", function() {
- ftapi.lookup.allLists(function(allPlaylists) {
- $("#deletepicker").html("");
- for (var key in allPlaylists) {
- if (allPlaylists.hasOwnProperty(key)) {
- $("#deletepicker").append("
" + allPlaylists[key].name + " ");
- }
- }
- $("#overlay").addClass('show');
- $(".modalThing").removeClass('show');
- $('#deletePromptBox').addClass('show');
- });
- });
- $("#pickerSearch").on("change paste keyup", function() {
- firetable.emojis.niceSearch($("#pickerSearch").val());
- });
- $("#queueFilter").on("change paste keyup", function() {
- firetable.actions.filterQueue($("#queueFilter").val());
- });
- $("#pickerResults").on("click", "span", function() {
- try {
- var oldval = $("#newchat").val();
- var newval = oldval + ":" + $(this).attr("title").trim() + ":";
- $("#newchat").focus().val(newval);
+ $("#addToQueueBttn").bind("click", function () {
+ $("#mainqueuestuff").css("display", "none");
+ $("#filterMachine").css("display", "none");
+ $("#addbox").css("display", "flex");
+ $("#cancelqsearch").show();
+ $("#qControlButtons").hide();
- } catch (s) {}
- });
+ $("#plmanager").css("display", "none");
+ });
- firetable.ui.loginEventsInit();
+ $("#minimodeoptions .tab").bind("click", function (event) {
+ $("#mainGrid").removeClass().addClass($(this).attr("id"));
+ $("#minimodeoptions .tab").removeClass("on");
+ $(this).addClass("on");
+ });
- $("#ytsearchSelect").bind("click", function() {
- $("#scsearchSelect").removeClass("on");
- $("#ytsearchSelect").addClass("on");
- firetable.searchSelectsChoice = 1;
- });
- $("#scsearchSelect").bind("click", function() {
- $("#ytsearchSelect").removeClass("on");
- $("#scsearchSelect").addClass("on");
- firetable.searchSelectsChoice = 2;
- });
- $("#ytimportchoice").bind("click", function() {
- firetable.debug && console.log("yt import");
- firetable.importSelectsChoice = 1;
- });
- $("#scimportchoice").bind("click", function() {
- firetable.debug && console.log("sc import");
- firetable.importSelectsChoice = 2;
- });
- $("#dtimportchoice").bind("click", function() {
- firetable.debug && console.log("dt import");
- firetable.importSelectsChoice = 3;
- });
- $(document).on("keyup", ".tagMachine", function(e) {
- if (e.which == 13) {
- var songKey = $(this).closest('.tagPromptBox').prev('.pvbar').attr('data-key');
- if (firetable.songToEdit) {
- var val = $(this).val();
- if (val != "") {
- var obj = firetable.songToEdit;
- ftapi.actions.editTrackTag(obj.key, obj.song.cid, val);
- firetable.songToEdit = null;
- $(this).closest('.editing').removeClass('editing').next('.tagPromptBox').remove();
- }
- }
- }
- });
- $("#changeUsername").bind("keyup", function(e) {
- if (e.which == 13) {
- var oldDjName = ftapi.users[ftapi.uid].username;
- var newDjName = $("#changeUsername").val();
- $("#usernameResponse").html("");
- if (newDjName != "") {
- // try to change name
- ftapi.actions.changeName(newDjName, function(error) {
- if (error) {
- alert(error);
- $("#usernameResponse").text(error);
- } else {
- $("#usernameResponse").text("Great job! Your name is now " + newDjName);
- $("#loggedInName").text(newDjName);
- }
- });
- }
- }
- });
- $('#dubtrackimportfile').bind('change', firetable.ui.dubtrackImportFileSelect);
- $("#supercopSearch").bind("keyup", function(e) {
- if (e.which == 13) {
- var val = $("#supercopSearch").val();
- $("#supercopResponse").html("");
- if (val != "") {
- //begin user search...
- ftapi.lookup.userByName(val, function(person) {
- //check search results
- if (person) {
- //found something!
- if (!person.supermod) {
- ftapi.actions.banUser(person.userid);
- $("#supercopResponse").html(person.username + " suspended.");
-
- } else {
- $("#supercopResponse").text("Can not suspend that (or any) supermod.");
- }
- } else {
- $("#supercopResponse").text(val + " not found...");
- }
- });
- }
- }
- });
- $("#importSources .tab").bind("click", function(e) {
- var searchFrom = firetable.importSelectsChoice;
- if (searchFrom == 3) {
- $("#importDubContent").show();
- $("#importContent").hide();
- } else {
- $("#importDubContent").hide();
- $("#importContent").show();
- }
- $(this).siblings().removeClass('on');
- $(this).addClass('on');
- });
- $("#plMachine").bind("keyup", function(e) {
- if (e.which == 13) {
- var val = $("#plMachine").val();
- if (val != "") {
- $("#importResults").html("");
- $("#plMachine").val("");
- var searchFrom = firetable.importSelectsChoice;
- if (searchFrom == 1) {
- var listID;
- var directLink = false;
- //see if this is a particular list's url...
- if (val.match(/youtube.com\/watch/) || val.match(/youtube.com\/playlist/)) {
- function getQueryStringValue(str, key) {
- return unescape(str.replace(new RegExp("^(?:.*[&\\?]" + escape(key).replace(/[\.\+\*]/g, "\\$&") + "(?:\\=([^&]*))?)?.*$", "i"), "$1"));
- }
- listID = getQueryStringValue(val, "list");
- if (listID) directLink = true;
+ $("#plmaker").bind("keyup", function (e) {
+ if (e.which == 13) {
+ var val = $("#plmaker").val();
+ if (val != "") {
+ var listid = ftapi.actions.createList(val);
+ $("#listpicker").append(
+ '
' + val + " "
+ );
+ $("#listpicker").val(listid).change();
+ ftapi.actions.switchList(listid);
+ }
}
+ });
+ $("#cancelqsearch").bind("click", function () {
+ $("#mainqueuestuff").css("display", "block");
+ $("#filterMachine").css("display", "block");
+ $("#cancelqsearch").hide();
+ $("#qControlButtons").show();
- if (directLink) {
- function keyWordsearch() {
- gapi.client.setApiKey(ftconfigs.youtubeKey);
- gapi.client.load('youtube', 'v3', function() {
- makeRequest();
- });
- }
+ $("#addbox").css("display", "none");
+ if (firetable.preview) {
+ if (firetable.preview.slice(0, 5) == "ytcid" || firetable.preview.slice(0, 5) == "sccid") {
+ $("#pv" + firetable.preview).html("");
+ clearTimeout(firetable.ptimeout);
+ firetable.ptimeout = null;
+ $("#pvbar" + firetable.preview).css("background-image", "none");
+ clearInterval(firetable.movePvBar);
+ firetable.movePvBar = null;
+ firetable.preview = false;
+ //start regular song
+ var nownow = Date.now();
+ var timeSince = nownow - firetable.song.started;
+ if (timeSince <= 0) timeSince = 0;
+
+ var secSince = Math.floor(timeSince / 1000);
+ var timeLeft = firetable.song.duration - secSince;
+ if (firetable.song.type == 1) {
+ if (!firetable.preview) {
+ if (firetable.scLoaded) firetable.scwidget.pause();
+ if (!firetable.disableMediaPlayback)
+ player.loadVideoById(firetable.song.cid, secSince, "large");
+ }
+ } else if (firetable.song.type == 2) {
+ if (!firetable.preview) {
+ if (firetable.ytLoaded) player.stopVideo();
+ firetable.scSeek = timeSince;
+ if (!firetable.disableMediaPlayback)
+ firetable.scwidget.load("http://api.soundcloud.com/tracks/" + firetable.song.cid, {
+ auto_play: true,
+ });
+ }
+ }
+ }
+ }
+ });
- function makeRequest() {
- var request = gapi.client.youtube.playlists.list({
- id: listID,
- part: 'snippet'
+ $("#grab").bind("click", function () {
+ var isHidden = $("#stealContain").is(":hidden");
+ if (isHidden) {
+ ftapi.lookup.allLists(function (allPlaylists) {
+ $("#stealpicker").html(
+ '
Where to? Default Queue '
+ );
+ for (var key in allPlaylists) {
+ if (allPlaylists.hasOwnProperty(key)) {
+ $("#stealpicker").append(
+ '
' + allPlaylists[key].name + " "
+ );
+ }
+ }
+ $("#grab").addClass("on");
+ $("#stealContain")
+ .css({
+ top: $("#grab").offset().top + $("#grab").height(),
+ left: $("#grab").offset().left - 16,
+ })
+ .show();
});
- request.execute(function(response) {
- if (response.result) {
- if (response.result.items) {
- if (response.result.items.length === 1) {
- var item = response.result.items[0];
- vidTitle = item.snippet.title;
- $("#importResults").append("
" + item.snippet.title + " by " + item.snippet.channelTitle + "
");
- } else {
- // no result
- }
+ } else {
+ $("#grab").removeClass("on");
+ $("#stealContain").hide();
+ }
+ });
+ $("#shuffleQueue").bind("click", firetable.actions.shuffleQueue);
+ $("#history").bind("click", function () {
+ $("#thehistoryWrap")
+ .slideToggle()
+ .css("top", $("#djStage").outerHeight() + $("#topbar").outerHeight());
+ $(this).toggleClass("on");
+ });
+ $("#startMerge").bind("click", function () {
+ var source = $("#mergepicker").val();
+ var sourceName = $("#mergepicker option:selected").text();
+ var dest = $("#mergepicker2").val();
+ var destName = $("#mergepicker2 option:selected").text();
+ $("#mergeSetup").hide();
+ $("#mergeHappening").show();
+ firetable.debug && console.log(sourceName + " -> " + destName);
+ firetable.actions.mergeLists(source, dest, sourceName);
+ });
+ $("#mergeOK").bind("click", function () {
+ $("#mergeSetup").show();
+ $("#mergeCompleted").hide();
+ $("#mergeHappening").hide();
+ $("#mergeContain").hide();
+ });
+ $("#mergeLists").bind("click", function () {
+ var $this = $(this);
+ var isHidden = $("#mergeContain").is(":hidden");
+ if (isHidden) {
+ ftapi.lookup.allLists(function (allPlaylists) {
+ $("#mergepicker").html('
Default Queue ');
+ $("#mergepicker2").html(
+ '
Create New Copy Default Queue '
+ );
+ for (var key in allPlaylists) {
+ if (allPlaylists.hasOwnProperty(key)) {
+ $("#mergepicker").append(
+ '
' + allPlaylists[key].name + " "
+ );
+ $("#mergepicker2").append(
+ '
' + allPlaylists[key].name + " "
+ );
+ }
}
- }
- })
- }
- keyWordsearch();
- } else {
- //youtube
- function keyWordsearch() {
- gapi.client.setApiKey(ftconfigs.youtubeKey);
- gapi.client.load('youtube', 'v3', function() {
- makeRequest();
- });
- }
-
- function makeRequest() {
- var request = gapi.client.youtube.search.list({
- q: val,
- type: 'playlist',
- part: 'snippet',
- maxResults: 15
+ if (ftapi.users[ftapi.uid]) {
+ if (ftapi.users[ftapi.uid].selectedList) {
+ $("#mergepicker").val(ftapi.users[ftapi.uid].selectedList).change();
+ $("#mergepicker2").val(-1).change();
+ }
+ }
+ $("#mergeContain").show();
+ $this.addClass("on");
});
- request.execute(function(response) {
- var srchItems = response.result.items;
- firetable.debug && console.log('import search results:', response);
- $.each(srchItems, function(index, item) {
- vidTitle = item.snippet.title;
- $("#importResults").append("
" + item.snippet.title + " by " + item.snippet.channelTitle + "
");
- })
- })
- }
- keyWordsearch();
+ } else {
+ $("#mergeContain").hide();
+ $this.removeClass("on");
}
+ });
+ $("#reloadtrack").bind("click", firetable.actions.reloadtrack);
- } else if (searchFrom == 2) {
- var listData;
- var directLink = false;
- //see if this is a particular list's url...
- console.log(val);
- if (val.match(/.*\/\/soundcloud\.com\/.*\/sets\/.*/)) {
- firetable.actions.resolveSCLink(val, function(item) {
- if (item) {
- if (item.sharing == "public" && item.kind == "playlist") {
- $("#importResults").append("
" + item.title + " by " + item.user.username + " (" + item.track_count + " songs)
");
- }
- }
- });
- //var getList = SC.resolve(val).then(finishUp);
+ $("#importDubGo").bind("click", firetable.actions.dubtrackImport);
- } else {
- //cloud sound world dot com
- SC.get('/playlists', {
- q: val
- }).then(function(lists) {
- for (var i = 0; i < lists.length; i++) {
- var item = lists[i];
- if (item.sharing == "public") {
- $("#importResults").append("
" + item.title + " by " + item.user.username + " (" + item.track_count + " songs)
");
- }
- }
- });
- }
- }
- }
- }
- });
- var $searchItemTemplate = $('#searchResults .pvbar').remove();
- $("#qsearch").bind("keyup", function(e) {
- if (e.which == 13) {
- var txt = $("#qsearch").val();
- if (firetable.searchSelectsChoice == 1) {
- var showResults = function(response) {
- firetable.debug && console.log('queue search:', response);
- // $("#qsearch").val("");
- $('#searchResults').html("");
+ $("#volstatus").bind("click", function () {
+ firetable.actions.muteToggle();
+ });
+ $(".openModal").bind("click", function () {
+ var modalContentID = $(this).attr("data-modal");
+ $(".modalThing").removeClass("show");
+ $("#overlay").addClass("show");
+ $("#" + modalContentID).addClass("show");
+ });
+ $(".closeModal").bind("click", function () {
+ $("#overlay").removeClass("show");
+ $("#deletepicker").html("");
+ firetable.actions.cardCase();
+ $("#plMachine").val("");
+ });
+ $(document).on("click", ".closeeditor", function () {
+ $(this).closest(".pvbar").removeClass("editing").find(".tagPromptBox").remove();
+ firetable.songToEdit = null;
+ });
+ $("#cardCaseButton").bind("click", function () {
+ firetable.actions.cardCase();
+ $("#cardsOverlay").show();
+ });
+ $("#pickerNav").on("click", "span", function () {
+ try {
+ var sec = $(this)[0].id;
+ firetable.emojis.sec(sec);
+ } catch (s) {}
+ });
+ $("#pickEmoji").bind("click", function () {
+ //toggle emoji picker
+ if ($("#emojiPicker").is(":hidden")) {
+ $(this).addClass("on");
+ $("#emojiPicker").slideDown(function () {
+ $("#pickerSearch").focus();
+ });
- if (firetable.preview) {
- if (firetable.preview.slice(0, 5) == "ytcid" || firetable.preview.slice(0, 5) == "sccid") {
- $("#pv" + firetable.preview).html("");
- clearTimeout(firetable.ptimeout);
- firetable.ptimeout = null;
- $("#pvbar" + firetable.preview).css("background-image", "none");
- clearInterval(firetable.movePvBar);
- firetable.movePvBar = null;
- firetable.preview = false;
- //start regular song
- var nownow = Date.now();
- var timeSince = nownow - firetable.song.started;
- if (timeSince <= 0) timeSince = 0;
+ if (!firetable.pickerInit) {
+ const makeRequest = async () => {
+ twemoji.parse(document.getElementById("pickerResults"));
+ return true;
+ };
- var secSince = Math.floor(timeSince / 1000);
- var timeLeft = firetable.song.duration - secSince;
- if (firetable.song.type == 1) {
- if (!firetable.preview) {
- if (firetable.scLoaded) firetable.scwidget.pause();
- if (!firetable.disableMediaPlayback) player.loadVideoById(firetable.song.cid, secSince, "large");
- }
- } else if (firetable.song.type == 2) {
- if (!firetable.preview) {
- if (firetable.ytLoaded) player.stopVideo();
- firetable.scSeek = timeSince;
- if (!firetable.disableMediaPlayback) firetable.scwidget.load("http://api.soundcloud.com/tracks/" + firetable.song.cid, {
- auto_play: true
- });
- }
+ makeRequest();
}
- }
- }
- var srchItems = response.result.items;
- $.each(srchItems, function(index, item) {
- console.log(item);
- var thecid;
- if (item.kind == "youtube#searchResult") {
- thecid = item.id.videoId;
- } else if (item.kind == "youtube#video") {
- thecid = item.id;
- }
- vidtitle = item.snippet.title;
- var yargo = item.snippet.title.split(" - ");
- var sartist = yargo[0];
- var stitle = yargo[1];
- if (!stitle) {
- // yt title not formatted artist - title. use uploader name instead as artist
- stitle = sartist;
- sartist = item.snippet.channelTitle.replace(" - Topic", "");
- }
- vidTitle = sartist + " - " + stitle;
- var pkey = "ytcid" + thecid;
- var $srli = $searchItemTemplate.clone();
- $srli.attr('id', "pvbar" + pkey);
- $srli.attr("data-key", pkey);
- $srli.attr("data-cid", thecid);
- $srli.find('.previewicon').attr('id', "pv" + pkey).on('click', function() {
- firetable.actions.pview($(this).closest('.pvbar').attr('data-key'), true, 1);
- });
- $srli.find('.listwords').html(vidTitle);
- $srli.find('.queuetrack').on('click', function() {
- firetable.actions.queueTrack(
- $(this).closest('.pvbar').attr('data-cid'),
- firetable.utilities.htmlEscape($(this).closest('.pvbar').find('.listwords').text()),
- 1
- );
- });
- $("#searchResults").append($srli);
- })
- };
- var directLink = false;
- var thecid = false;
- //see if this is a particular track's url...
- if (txt.match(/youtube.com\/watch/)) {
- function getQueryStringValue(str, key) {
- return unescape(str.replace(new RegExp("^(?:.*[&\\?]" + escape(key).replace(/[\.\+\*]/g, "\\$&") + "(?:\\=([^&]*))?)?.*$", "i"), "$1"));
- }
- thecid = getQueryStringValue(txt, "v");
- if (thecid) directLink = true;
- }
- if (directLink) {
- firetable.debug && console.log("direct yt link found");
-
- function keyWordsearch() {
- gapi.client.setApiKey(ftconfigs.youtubeKey);
- gapi.client.load('youtube', 'v3', function() {
- makeRequest();
- });
- }
-
- function makeRequest() {
- var request = gapi.client.youtube.videos.list({
- id: thecid,
- part: 'snippet',
- maxResults: 1
- });
- request.execute(function(response) {
- console.log(response);
- showResults(response);
- })
- }
- keyWordsearch();
- } else {
- function keyWordsearch() {
- gapi.client.setApiKey(ftconfigs.youtubeKey);
- gapi.client.load('youtube', 'v3', function() {
- makeRequest();
- });
- }
-
- function makeRequest() {
- var q = $('#qsearch').val();
- $('#searchResults').html("Searching...");
-
- var request = gapi.client.youtube.search.list({
- q: q,
- type: 'video',
- part: 'snippet',
- maxResults: 15
- });
- request.execute(function(response) {
- showResults(response);
- })
+ } else {
+ $(this).removeClass("on");
+ $("#emojiPicker").slideUp(function () {
+ $("#pickerSearch").val("").trigger("change");
+ $("#newchat").focus();
+ });
}
- keyWordsearch();
- }
- } else if (firetable.searchSelectsChoice == 2) {
- var q = $('#qsearch').val();
- var showResults = function(tracks) {
- firetable.debug && console.log('sc tracks:', tracks);
- // $("#qsearch").val("");
- $('#searchResults').html("");
+ });
- if (firetable.preview) {
- if (firetable.preview.slice(0, 5) == "ytcid" || firetable.preview.slice(0, 5) == "sccid") {
- $("#pv" + firetable.preview).html("");
- clearTimeout(firetable.ptimeout);
- firetable.ptimeout = null
- $("#pvbar" + firetable.preview).css("background-image", "none");
- clearInterval(firetable.movePvBar);
- firetable.movePvBar = null;
- firetable.preview = false;
- //start regular song
- var nownow = Date.now();
- var timeSince = nownow - firetable.song.started;
- if (timeSince <= 0) timeSince = 0;
+ $("#morechats .butt").bind("click", function () {
+ firetable.utilities.scrollToBottom();
+ });
- var secSince = Math.floor(timeSince / 1000);
- var timeLeft = firetable.song.duration - secSince;
- if (firetable.song.type == 1) {
- if (!firetable.preview) {
- firetable.scwidget.pause();
- if (!firetable.disableMediaPlayback) player.loadVideoById(firetable.song.cid, secSince, "large");
- }
- } else if (firetable.song.type == 2) {
- if (!firetable.preview) {
- if (firetable.ytLoaded) player.stopVideo();
- firetable.scSeek = timeSince;
- if (!firetable.disableMediaPlayback) firetable.scwidget.load("http://api.soundcloud.com/tracks/" + firetable.song.cid, {
- auto_play: true
- });
- }
- }
- }
- }
- var srchItems = tracks;
- $.each(srchItems, function(index, item) {
- vidTitle = item.title;
- var yargo = item.title.split(" - ");
- var sartist = yargo[0];
- var stitle = yargo[1];
- if (!stitle) {
- stitle = sartist;
- sartist = item.user.username;
- }
- vidTitle = sartist + " - " + stitle;
- var pkey = "sccid" + item.id;
- var $srli = $searchItemTemplate.clone();
- $srli.attr('id', "pvbar" + pkey);
- $srli.attr("data-key", pkey);
- $srli.attr("data-cid", item.id);
- $srli.find('.previewicon').attr('id', "pv" + pkey).on('click', function() {
- firetable.actions.pview(
- $(this).closest('.pvbar').attr('data-key'),
- true,
- 2
- );
- });
- $srli.find('.listwords').html(vidTitle);
- $srli.find('.queuetrack').on('click', function() {
- firetable.actions.queueTrack(
- $(this).closest('.pvbar').attr('data-cid'),
- firetable.utilities.htmlEscape($(this).closest('.pvbar').find('.listwords').text()),
- 2
- );
- });
- $("#searchResults").append($srli);
- })
- }
- var directLink = false;
- if (q.match(/:\/\/soundcloud\.com\//)) {
- directLink = true;
- }
- $('#searchResults').html("Searching...");
- if (directLink) {
- firetable.debug && console.log("sc direct link found");
- firetable.actions.resolveSCLink(q, function(item) {
- var items = [];
- if (item.kind == "track") items.push(item);
- showResults(items);
- });
- //var getList = SC.resolve(q).then(finishUp);
- } else {
- SC.get('/tracks', {
- q: q
- }).then(function(tracks) {
- showResults(tracks);
- });
- }
- }
- }
- });
- $("#newchat").bind("keypress", function(e) {
- firetable.debug && console.log('chat key', e.key);
- if (e.key == "Enter") {
- var txt = $("#newchat").val();
- if (txt == "") return;
- var matches = txt.match(/^(?:[\/])(\w+)\s*(.*)/i);
- if (txt == ":fire:" || txt == "🔥") {
- $("#cloud_with_rain").removeClass("on");
- $("#fire").addClass("on");
- } else if (txt == ":cloud_with_rain:" || txt == "🌧") {
- $("#cloud_with_rain").addClass("on");
- $("#fire").removeClass("on");
- }
- if (matches) {
- var command = matches[1].toLowerCase();
- var args = matches[2];
- if (command == "mod") {
- var personToMod = firetable.actions.uidLookup(args);
- if (personToMod) {
- ftapi.actions.modUser(personToMod);
- }
- } else if (command == "unmod") {
- var personToMod = firetable.actions.uidLookup(args);
- if (personToMod) {
- ftapi.actions.unmodUser(personToMod);
- }
- } else if (command == "block") {
- if (args) {
- ftapi.actions.blockUser(args, function(response) {
- console.log(response);
- firetable.actions.localChatResponse(response);
- });
- }
- } else if (command == "unblock") {
- if (args) {
- ftapi.actions.unblockUser(args, function(response) {
- console.log(response);
-
- firetable.actions.localChatResponse(response);
- });
- }
- } else if (command == "hot") {
+ $("#fire").bind("click", function () {
ftapi.actions.sendChat(":fire:");
$("#cloud_with_rain").removeClass("on");
$("#fire").addClass("on");
- } else if (command == "storm") {
+ });
+
+ $("#cloud_with_rain").bind("click", function () {
ftapi.actions.sendChat(":cloud_with_rain:");
$("#cloud_with_rain").addClass("on");
$("#fire").removeClass("on");
- } else if (command == "shrug") {
- var thingtosay = "¯\\_(ツ)_/¯";
- if (args) thingtosay = args + " ¯\\_(ツ)_/¯";
- ftapi.actions.sendChat(thingtosay);
- } else if (command == "tableflip") {
- var thingtosay = "(╯°□°)╯︵ ┻━┻";
- if (args) thingtosay = args + " (╯°□°)╯︵ ┻━┻";
- ftapi.actions.sendChat(thingtosay);
- } else if (command == "unflip") {
- var thingtosay = "┬─┬ ノ( ゜-゜ノ)";
- if (args) thingtosay = args + " ┬─┬ ノ( ゜-゜ノ)";
- ftapi.actions.sendChat(thingtosay);
- }
- } else {
- ftapi.actions.sendChat(txt);
- }
- $("#newchat").val("");
- $("#emojiPicker").slideUp();
- $("#pickEmoji").removeClass("on");
- firetable.utilities.exitAtLand();
- } else if (e.key == "@") { // open the door to @ land
- if (firetable.atLand) { // double @@
- firetable.utilities.exitAtLand();
- } else { // first step into @ land
- firetable.utilities.initAtLand();
- for (var user of firetable.atUsersFiltered) {
- $('#atPicker').addClass('show');
- $('
@' + user + '
').appendTo('#atPicker');
- }
- }
- } else if (firetable.atLand) { // we're in @ land
- if (e.key == " " || e.key == "Spacebar") { // we've got what we want
- firetable.utilities.exitAtLand();
- } else if (!e.key.match(/[0-9a-zA-Z_]/)) { // not possibly a characer from a name
- firetable.atString += e.key;
- $('#atPicker').html('');
- $('
Usernames cannot contain "' + e.key + '"
').appendTo('#atPicker');
- } else { // we're still in @ land
- firetable.atString += e.key;
- firetable.utilities.updateAtLand();
- }
- }
- });
- $("#newchat").bind("keyup", function(e) {
- if (firetable.atLand) { // we're in @ land
- if (e.key == "Backspace") {
- if (!firetable.atString) { // deleting the @, exit @ land
- firetable.utilities.exitAtLand();
- } else { // still got someone we're lookin for
- firetable.atString = firetable.atString.slice(0, -1);
- firetable.utilities.updateAtLand();
- }
- } else if (e.key == "ArrowUp") { // i see my @, go up!
- $('#atPicker .butt:last').focus();
- } else if (e.key == "ArrowDown") { // i see my @, go down!
- $('#atPicker .butt:first').focus();
- }
- }
- });
- $("#newchat").bind("keydown", function(e) {
- if (e.key == "Tab") {
- if (firetable.atUsersFiltered.length === 1) {
- $("#newchat").one("blur", function(e) {
- $("#newchat").focus().val($("#newchat").val());
- });
- firetable.utilities.chooseAt(firetable.atUsersFiltered[0]);
- } else {
- firetable.utilities.exitAtLand();
- }
- }
- });
- $(document).on('click', '#atPicker .butt', function(e) {
- e.preventDefault();
- firetable.utilities.chooseAt($(this).text().replace("@", ""));
- setTimeout(() => {
- var tempText = $("#newchat").val();
- $('#newchat').focus().val('');
- $('#newchat').val(tempText);
- }, 250);
- });
- $(document).on('keyup', '#atPicker .butt:focus', function(e) {
- if (e.key == "ArrowUp") {
- if ($('#atPicker .butt:focus').parent().prev().length) {
- $('#atPicker .butt:focus').parent().prev().find('.butt').focus();
- } else {
- $('#atPicker .butt:last').focus();
- }
- } else if (e.key == "ArrowDown") {
- if ($('#atPicker .butt:focus').parent().next().length) {
- $('#atPicker .butt:focus').parent().next().find('.butt').focus();
- } else {
- $('#atPicker .butt:first').focus();
- }
- }
- });
+ });
- ftapi.events.on("colorsChanged", function(data) {
- firetable.debug && console.log("COLOR CHANGE!", data);
-
- firetable.color = data.color;
- firetable.countcolor = data.txt;
- if (data.color == "#fff" || data.color == "#7f7f7f") {
- firetable.color = firetable.orange;
- firetable.countcolor = "#fff";
- $("#stage").css("background-color", "#fff");
- } else {
- $("#stage").css("background-color", data.color);
- }
- /*
- if (firetable.countcolor == "#fff"){
- firetable.countcolor = "#ffffffc9";
- } else if (firetable.countcolor == "#000"){
- firetable.debug && console.log("a")
- firetable.countcolor = "#000000c9";
- }
- $("#stage").css("color", firetable.countcolor);
- */
- $('.customColorStyles').remove();
-
- $('.festiveLights').remove();
-
- var colorThing = firetable.utilities.hexToRGB(firetable.color);
- $("head").append("");
-
- if (firetable.lights) {
- var style = "";
- $("head").append(style);
- }
+ //SETTINGS TOGGLES
+ $("#badoopToggle").change(function () {
+ if (this.checked) {
+ firetable.debug && console.log("badoop on");
+ localStorage["firetableBadoop"] = true;
+ firetable.playBadoop = true;
+ } else {
+ firetable.debug && console.log("badoop off");
+ localStorage["firetableBadoop"] = false;
+ firetable.playBadoop = false;
+ }
+ });
+ $("#showImagesToggle").change(function () {
+ if (this.checked) {
+ firetable.debug && console.log("show images on");
+ localStorage["firetableShowImages"] = true;
+ firetable.showImages = true;
+ } else {
+ firetable.debug && console.log("show images off");
+ localStorage["firetableShowImages"] = false;
+ firetable.showImages = false;
+ }
+ });
+ $("#mediaDisableToggle").change(function () {
+ if (this.checked) {
+ firetable.debug && console.log("media disable on");
+ localStorage["firetableDisableMedia"] = true;
+ firetable.disableMediaPlayback = true;
+ if (firetable.scLoaded) firetable.scwidget.pause();
+ if (firetable.ytLoaded) player.stopVideo();
+ firetable.ui.hidePlayerControls();
+ } else {
+ firetable.debug && console.log("media disable off");
+ localStorage["firetableDisableMedia"] = false;
+ firetable.disableMediaPlayback = false;
+ firetable.ui.showPlayerControls();
+ firetable.actions.reloadtrack();
+ }
+ });
+ $("#showAvatarsToggle").change(function () {
+ if (this.checked) {
+ firetable.debug && console.log("show avatars on");
+ localStorage["firetableShowAvatars"] = true;
+ firetable.showAvatars = true;
+ document.getElementById("actualChat").classList.remove("avatarsOff");
+ } else {
+ firetable.debug && console.log("show avatars off");
+ localStorage["firetableShowAvatars"] = false;
+ firetable.showAvatars = false;
+ document.getElementById("actualChat").classList.add("avatarsOff");
+ }
+ });
+ $(document).on("click", ".hideImage", function (e) {
+ e.stopPropagation();
+ e.preventDefault();
+ $(this).closest(".chatText").toggleClass("hideImg");
+ });
+ $("#desktopNotifyMentionsToggle").change(function () {
+ if (this.checked) {
+ firetable.debug && console.log("dtnm on");
+ localStorage["firetableDTNM"] = true;
+ firetable.desktopNotifyMentions = true;
+ if (Notification) {
+ if (Notification.permission !== "granted") {
+ Notification.requestPermission();
+ }
+ }
+ } else {
+ firetable.debug && console.log("dtnm off");
+ localStorage["firetableDTNM"] = false;
+ firetable.desktopNotifyMentions = false;
+ }
+ });
- });
- },
- usertab1: function() {
- $("#allusersWrap").css("display", "block");
- $("#justwaitWrap").css("display", "none");
- $("#usertabs").find(".on").removeClass("on");
- $("#label1").addClass("on");
- },
- usertab2: function() {
- $("#usertabs").find(".on").removeClass("on");
- $("#label2").addClass("on");
- $("#allusersWrap").css("display", "none");
- $("#justwaitWrap").css("display", "block");
+ $("input[type=radio][name=screenControl]").change(function () {
+ firetable.debug && console.log("screen control:", this.value);
+ localStorage["firetableScreenControl"] = this.value;
+ firetable.screenControl = this.value;
+ if (this.value == "off") {
+ firetable.utilities.screenUp();
+ } else if (this.value == "on") {
+ firetable.utilities.screenDown();
+ } else if (this.value == "sync") {
+ if (firetable.screenSyncPos) {
+ firetable.utilities.screenDown();
+ } else {
+ firetable.utilities.screenUp();
+ }
+ }
+ });
- },
- LinkGrabber: {
- textarea: null,
+ $("#stealpicker").change(function () {
+ var dest = $("#stealpicker").val();
+ if (dest == "-1") return;
+ if (firetable.song.cid != 0) {
+ var title = firetable.song.artist + " - " + firetable.song.title;
+ $("#grab").removeClass("on");
+ ftapi.actions.addToList(firetable.song.type, title, firetable.song.cid, dest);
+ $("#stealContain").hide();
+ }
+ });
- /* Textarea Management */
+ $("#pldeleteButton").bind("click", function () {
+ var val = $("#deletepicker").val();
+ firetable.debug && console.log("playlist delete:", val);
+ if (ftapi.users[ftapi.uid]) {
+ if (ftapi.users[ftapi.uid].selectedList) {
+ if (ftapi.users[ftapi.uid].selectedList == val) {
+ $("#listpicker").val("0").change();
+ }
+ }
+ }
+ ftapi.actions.deleteList(val);
+ $("#pdopt" + val).remove();
+ $("#overlay").removeClass("show");
+ });
+ $("#plimportLauncher").bind("click", function () {
+ $("#overlay").addClass("show");
+ $(".modalThing").removeClass("show");
+ $("#importPromptBox").addClass("show");
+ });
+ $("#pldeleteLauncher").bind("click", function () {
+ ftapi.lookup.allLists(function (allPlaylists) {
+ $("#deletepicker").html("");
+ for (var key in allPlaylists) {
+ if (allPlaylists.hasOwnProperty(key)) {
+ $("#deletepicker").append(
+ '
' + allPlaylists[key].name + " "
+ );
+ }
+ }
+ $("#overlay").addClass("show");
+ $(".modalThing").removeClass("show");
+ $("#deletePromptBox").addClass("show");
+ });
+ });
+ $("#pickerSearch").on("change paste keyup", function () {
+ firetable.emojis.niceSearch($("#pickerSearch").val());
+ });
+ $("#queueFilter").on("change paste keyup", function () {
+ firetable.actions.filterQueue($("#queueFilter").val());
+ });
+ $("#pickerResults").on("click", "span", function () {
+ try {
+ var oldval = $("#newchat").val();
+ var newval = oldval + ":" + $(this).attr("title").trim() + ":";
+ $("#newchat").focus().val(newval);
+ } catch (s) {}
+ });
- attach_ta: function(event) {
- if (!$.contains(document.getElementById("queuelist"), event.target)) return;
- if (firetable.ui.LinkGrabber.textarea != null) return;
+ firetable.ui.loginEventsInit();
- var textarea = firetable.ui.LinkGrabber.textarea = document.createElement("textarea");
- textarea.setAttribute("style", "position: fixed; width: 100%; margin: 0; top: 0; bottom: 0; right: 0; left: 0; z-index: 99999999");
- textarea.style.opacity = "0.000000000000000001";
+ $("#ytsearchSelect").bind("click", function () {
+ $("#scsearchSelect").removeClass("on");
+ $("#ytsearchSelect").addClass("on");
+ firetable.searchSelectsChoice = 1;
+ });
+ $("#scsearchSelect").bind("click", function () {
+ $("#ytsearchSelect").removeClass("on");
+ $("#scsearchSelect").addClass("on");
+ firetable.searchSelectsChoice = 2;
+ });
+ $("#ytimportchoice").bind("click", function () {
+ firetable.debug && console.log("yt import");
+ firetable.importSelectsChoice = 1;
+ });
+ $("#scimportchoice").bind("click", function () {
+ firetable.debug && console.log("sc import");
+ firetable.importSelectsChoice = 2;
+ });
+ $("#dtimportchoice").bind("click", function () {
+ firetable.debug && console.log("dt import");
+ firetable.importSelectsChoice = 3;
+ });
+ $(document).on("keyup", ".tagMachine", function (e) {
+ if (e.which == 13) {
+ var songKey = $(this).closest(".tagPromptBox").prev(".pvbar").attr("data-key");
+ if (firetable.songToEdit) {
+ var val = $(this).val();
+ if (val != "") {
+ var obj = firetable.songToEdit;
+ ftapi.actions.editTrackTag(obj.key, obj.song.cid, val);
+ firetable.songToEdit = null;
+ $(this).closest(".editing").removeClass("editing").next(".tagPromptBox").remove();
+ }
+ }
+ }
+ });
+ $("#changeUsername").bind("keyup", function (e) {
+ if (e.which == 13) {
+ var oldDjName = ftapi.users[ftapi.uid].username;
+ var newDjName = $("#changeUsername").val();
+ $("#usernameResponse").html("");
+ if (newDjName != "") {
+ // try to change name
+ ftapi.actions.changeName(newDjName, function (error) {
+ if (error) {
+ alert(error);
+ $("#usernameResponse").text(error);
+ } else {
+ $("#usernameResponse").text("Great job! Your name is now " + newDjName);
+ $("#loggedInUser .botson")
+ .css(
+ "background-image",
+ "url(https://indiediscotheque.com/robots/" +
+ ftapi.uid +
+ newDjName +
+ ".png?size=175x175)"
+ )
+ .prop("title", "You're logged in as " + ftapi.users[ftapi.uid].username);
+ $("#loggedInUsername").text(ftapi.users[ftapi.uid].username);
+ }
+ });
+ }
+ }
+ });
+ $("#dubtrackimportfile").bind("change", firetable.ui.dubtrackImportFileSelect);
+ $("#supercopSearch").bind("keyup", function (e) {
+ if (e.which == 13) {
+ var val = $("#supercopSearch").val();
+ $("#supercopResponse").html("");
+ if (val != "") {
+ //begin user search...
+ ftapi.lookup.userByName(val, function (person) {
+ //check search results
+ if (person) {
+ //found something!
+ if (!person.supermod) {
+ ftapi.actions.banUser(person.userid);
+ $("#supercopResponse").html(person.username + " suspended.");
+ } else {
+ $("#supercopResponse").text("Can not suspend that (or any) supermod.");
+ }
+ } else {
+ $("#supercopResponse").text(val + " not found...");
+ }
+ });
+ }
+ }
+ });
+ $("#importSources .tab").bind("click", function (e) {
+ var searchFrom = firetable.importSelectsChoice;
+ if (searchFrom == 3) {
+ $("#importDubContent").show();
+ $("#importContent").hide();
+ } else {
+ $("#importDubContent").hide();
+ $("#importContent").show();
+ }
+ $(this).siblings().removeClass("on");
+ $(this).addClass("on");
+ });
+ $("#plMachine").bind("keyup", function (e) {
+ if (e.which == 13) {
+ var val = $("#plMachine").val();
+ if (val != "") {
+ $("#importResults").html("");
+ $("#plMachine").val("");
+ var searchFrom = firetable.importSelectsChoice;
+ if (searchFrom == 1) {
+ var listID;
+ var directLink = false;
+ //see if this is a particular list's url...
+ if (val.match(/youtube.com\/watch/) || val.match(/youtube.com\/playlist/)) {
+ function getQueryStringValue(str, key) {
+ return unescape(
+ str.replace(
+ new RegExp(
+ "^(?:.*[&\\?]" +
+ escape(key).replace(/[\.\+\*]/g, "\\$&") +
+ "(?:\\=([^&]*))?)?.*$",
+ "i"
+ ),
+ "$1"
+ )
+ );
+ }
+ listID = getQueryStringValue(val, "list");
+ if (listID) directLink = true;
+ }
+
+ if (directLink) {
+ function keyWordsearch() {
+ gapi.client.setApiKey(ftconfigs.youtubeKey);
+ gapi.client.load("youtube", "v3", function () {
+ makeRequest();
+ });
+ }
+
+ function makeRequest() {
+ var request = gapi.client.youtube.playlists.list({
+ id: listID,
+ part: "snippet",
+ });
+ request.execute(function (response) {
+ if (response.result) {
+ if (response.result.items) {
+ if (response.result.items.length === 1) {
+ var item = response.result.items[0];
+ vidTitle = item.snippet.title;
+ $("#importResults").append(
+ '
' +
+ item.snippet.title +
+ " by " +
+ item.snippet.channelTitle +
+ '
'
+ );
+ } else {
+ // no result
+ }
+ }
+ }
+ });
+ }
+ keyWordsearch();
+ } else {
+ //youtube
+ function keyWordsearch() {
+ gapi.client.setApiKey(ftconfigs.youtubeKey);
+ gapi.client.load("youtube", "v3", function () {
+ makeRequest();
+ });
+ }
+
+ function makeRequest() {
+ var request = gapi.client.youtube.search.list({
+ q: val,
+ type: "playlist",
+ part: "snippet",
+ maxResults: 15,
+ });
+ request.execute(function (response) {
+ var srchItems = response.result.items;
+ firetable.debug && console.log("import search results:", response);
+ $.each(srchItems, function (index, item) {
+ vidTitle = item.snippet.title;
+ $("#importResults").append(
+ '
' +
+ item.snippet.title +
+ " by " +
+ item.snippet.channelTitle +
+ '
'
+ );
+ });
+ });
+ }
+ keyWordsearch();
+ }
+ } else if (searchFrom == 2) {
+ var listData;
+ var directLink = false;
+ //see if this is a particular list's url...
+ console.log(val);
+ if (val.match(/.*\/\/soundcloud\.com\/.*\/sets\/.*/)) {
+ firetable.actions.resolveSCLink(val, function (item) {
+ if (item) {
+ if (item.sharing == "public" && item.kind == "playlist") {
+ $("#importResults").append(
+ '
' +
+ item.title +
+ " by " +
+ item.user.username +
+ " (" +
+ item.track_count +
+ ' songs)
'
+ );
+ }
+ }
+ });
+ //var getList = SC.resolve(val).then(finishUp);
+ } else {
+ //cloud sound world dot com
+ SC.get("/playlists", {
+ q: val,
+ }).then(function (lists) {
+ for (var i = 0; i < lists.length; i++) {
+ var item = lists[i];
+ if (item.sharing == "public") {
+ $("#importResults").append(
+ '
' +
+ item.title +
+ " by " +
+ item.user.username +
+ " (" +
+ item.track_count +
+ ' songs)
'
+ );
+ }
+ }
+ });
+ }
+ }
+ }
+ }
+ });
+ var $searchItemTemplate = $("#searchResults .pvbar").remove();
+ $("#qsearch").bind("keyup", function (e) {
+ if (e.which == 13) {
+ var txt = $("#qsearch").val();
+ if (firetable.searchSelectsChoice == 1) {
+ var showResults = function (response) {
+ firetable.debug && console.log("queue search:", response);
+ // $("#qsearch").val("");
+ $("#searchResults").html("");
+
+ if (firetable.preview) {
+ if (firetable.preview.slice(0, 5) == "ytcid" || firetable.preview.slice(0, 5) == "sccid") {
+ $("#pv" + firetable.preview).html("");
+ clearTimeout(firetable.ptimeout);
+ firetable.ptimeout = null;
+ $("#pvbar" + firetable.preview).css("background-image", "none");
+ clearInterval(firetable.movePvBar);
+ firetable.movePvBar = null;
+ firetable.preview = false;
+ //start regular song
+ var nownow = Date.now();
+ var timeSince = nownow - firetable.song.started;
+ if (timeSince <= 0) timeSince = 0;
+
+ var secSince = Math.floor(timeSince / 1000);
+ var timeLeft = firetable.song.duration - secSince;
+ if (firetable.song.type == 1) {
+ if (!firetable.preview) {
+ if (firetable.scLoaded) firetable.scwidget.pause();
+ if (!firetable.disableMediaPlayback)
+ player.loadVideoById(firetable.song.cid, secSince, "large");
+ }
+ } else if (firetable.song.type == 2) {
+ if (!firetable.preview) {
+ if (firetable.ytLoaded) player.stopVideo();
+ firetable.scSeek = timeSince;
+ if (!firetable.disableMediaPlayback)
+ firetable.scwidget.load(
+ "http://api.soundcloud.com/tracks/" + firetable.song.cid,
+ {
+ auto_play: true,
+ }
+ );
+ }
+ }
+ }
+ }
+ var srchItems = response.result.items;
+ $.each(srchItems, function (index, item) {
+ console.log(item);
+ var thecid;
+ if (item.kind == "youtube#searchResult") {
+ thecid = item.id.videoId;
+ } else if (item.kind == "youtube#video") {
+ thecid = item.id;
+ }
+ vidtitle = item.snippet.title;
+ var yargo = item.snippet.title.split(" - ");
+ var sartist = yargo[0];
+ var stitle = yargo[1];
+ if (!stitle) {
+ // yt title not formatted artist - title. use uploader name instead as artist
+ stitle = sartist;
+ sartist = item.snippet.channelTitle.replace(" - Topic", "");
+ }
+ vidTitle = sartist + " - " + stitle;
+ var pkey = "ytcid" + thecid;
+ var $srli = $searchItemTemplate.clone();
+ $srli.attr("id", "pvbar" + pkey);
+ $srli.attr("data-key", pkey);
+ $srli.attr("data-cid", thecid);
+ $srli
+ .find(".previewicon")
+ .attr("id", "pv" + pkey)
+ .on("click", function () {
+ firetable.actions.pview($(this).closest(".pvbar").attr("data-key"), true, 1);
+ });
+ $srli.find(".listwords").html(vidTitle);
+ $srli.find(".queuetrack").on("click", function () {
+ firetable.actions.queueTrack(
+ $(this).closest(".pvbar").attr("data-cid"),
+ firetable.utilities.htmlEscape($(this).closest(".pvbar").find(".listwords").text()),
+ 1
+ );
+ });
+ $("#searchResults").append($srli);
+ });
+ };
+ var directLink = false;
+ var thecid = false;
+ //see if this is a particular track's url...
+ if (txt.match(/youtube.com\/watch/)) {
+ function getQueryStringValue(str, key) {
+ return unescape(
+ str.replace(
+ new RegExp(
+ "^(?:.*[&\\?]" +
+ escape(key).replace(/[\.\+\*]/g, "\\$&") +
+ "(?:\\=([^&]*))?)?.*$",
+ "i"
+ ),
+ "$1"
+ )
+ );
+ }
+ thecid = getQueryStringValue(txt, "v");
+ if (thecid) directLink = true;
+ }
+ if (directLink) {
+ firetable.debug && console.log("direct yt link found");
+
+ function keyWordsearch() {
+ gapi.client.setApiKey(ftconfigs.youtubeKey);
+ gapi.client.load("youtube", "v3", function () {
+ makeRequest();
+ });
+ }
+
+ function makeRequest() {
+ var request = gapi.client.youtube.videos.list({
+ id: thecid,
+ part: "snippet",
+ maxResults: 1,
+ });
+ request.execute(function (response) {
+ console.log(response);
+ showResults(response);
+ });
+ }
+ keyWordsearch();
+ } else {
+ function keyWordsearch() {
+ gapi.client.setApiKey(ftconfigs.youtubeKey);
+ gapi.client.load("youtube", "v3", function () {
+ makeRequest();
+ });
+ }
+
+ function makeRequest() {
+ var q = $("#qsearch").val();
+ $("#searchResults").html("Searching...");
+
+ var request = gapi.client.youtube.search.list({
+ q: q,
+ type: "video",
+ part: "snippet",
+ maxResults: 15,
+ });
+ request.execute(function (response) {
+ showResults(response);
+ });
+ }
+ keyWordsearch();
+ }
+ } else if (firetable.searchSelectsChoice == 2) {
+ var q = $("#qsearch").val();
+ var showResults = function (tracks) {
+ firetable.debug && console.log("sc tracks:", tracks);
+ // $("#qsearch").val("");
+ $("#searchResults").html("");
+
+ if (firetable.preview) {
+ if (firetable.preview.slice(0, 5) == "ytcid" || firetable.preview.slice(0, 5) == "sccid") {
+ $("#pv" + firetable.preview).html("");
+ clearTimeout(firetable.ptimeout);
+ firetable.ptimeout = null;
+ $("#pvbar" + firetable.preview).css("background-image", "none");
+ clearInterval(firetable.movePvBar);
+ firetable.movePvBar = null;
+ firetable.preview = false;
+ //start regular song
+ var nownow = Date.now();
+ var timeSince = nownow - firetable.song.started;
+ if (timeSince <= 0) timeSince = 0;
+
+ var secSince = Math.floor(timeSince / 1000);
+ var timeLeft = firetable.song.duration - secSince;
+ if (firetable.song.type == 1) {
+ if (!firetable.preview) {
+ firetable.scwidget.pause();
+ if (!firetable.disableMediaPlayback)
+ player.loadVideoById(firetable.song.cid, secSince, "large");
+ }
+ } else if (firetable.song.type == 2) {
+ if (!firetable.preview) {
+ if (firetable.ytLoaded) player.stopVideo();
+ firetable.scSeek = timeSince;
+ if (!firetable.disableMediaPlayback)
+ firetable.scwidget.load(
+ "http://api.soundcloud.com/tracks/" + firetable.song.cid,
+ {
+ auto_play: true,
+ }
+ );
+ }
+ }
+ }
+ }
+ var srchItems = tracks;
+ $.each(srchItems, function (index, item) {
+ vidTitle = item.title;
+ var yargo = item.title.split(" - ");
+ var sartist = yargo[0];
+ var stitle = yargo[1];
+ if (!stitle) {
+ stitle = sartist;
+ sartist = item.user.username;
+ }
+ vidTitle = sartist + " - " + stitle;
+ var pkey = "sccid" + item.id;
+ var $srli = $searchItemTemplate.clone();
+ $srli.attr("id", "pvbar" + pkey);
+ $srli.attr("data-key", pkey);
+ $srli.attr("data-cid", item.id);
+ $srli
+ .find(".previewicon")
+ .attr("id", "pv" + pkey)
+ .on("click", function () {
+ firetable.actions.pview($(this).closest(".pvbar").attr("data-key"), true, 2);
+ });
+ $srli.find(".listwords").html(vidTitle);
+ $srli.find(".queuetrack").on("click", function () {
+ firetable.actions.queueTrack(
+ $(this).closest(".pvbar").attr("data-cid"),
+ firetable.utilities.htmlEscape($(this).closest(".pvbar").find(".listwords").text()),
+ 2
+ );
+ });
+ $("#searchResults").append($srli);
+ });
+ };
+ var directLink = false;
+ if (q.match(/:\/\/soundcloud\.com\//)) {
+ directLink = true;
+ }
+ $("#searchResults").html("Searching...");
+ if (directLink) {
+ firetable.debug && console.log("sc direct link found");
+ firetable.actions.resolveSCLink(q, function (item) {
+ var items = [];
+ if (item.kind == "track") items.push(item);
+ showResults(items);
+ });
+ //var getList = SC.resolve(q).then(finishUp);
+ } else {
+ SC.get("/tracks", {
+ q: q,
+ }).then(function (tracks) {
+ showResults(tracks);
+ });
+ }
+ }
+ }
+ });
+ $("#newchat").bind("keypress", function (e) {
+ firetable.debug && console.log("chat key", e.key);
+ if (e.key == "Enter") {
+ var txt = $("#newchat").val();
+ if (txt == "") return;
+ var matches = txt.match(/^(?:[\/])(\w+)\s*(.*)/i);
+ if (txt == ":fire:" || txt == "🔥") {
+ $("#cloud_with_rain").removeClass("on");
+ $("#fire").addClass("on");
+ } else if (txt == ":cloud_with_rain:" || txt == "🌧") {
+ $("#cloud_with_rain").addClass("on");
+ $("#fire").removeClass("on");
+ }
+ if (matches) {
+ var command = matches[1].toLowerCase();
+ var args = matches[2];
+ if (command == "mod") {
+ var personToMod = firetable.actions.uidLookup(args);
+ if (personToMod) {
+ ftapi.actions.modUser(personToMod);
+ }
+ } else if (command == "unmod") {
+ var personToMod = firetable.actions.uidLookup(args);
+ if (personToMod) {
+ ftapi.actions.unmodUser(personToMod);
+ }
+ } else if (command == "block") {
+ if (args) {
+ ftapi.actions.blockUser(args, function (response) {
+ console.log(response);
+ firetable.actions.localChatResponse(response);
+ });
+ }
+ } else if (command == "unblock") {
+ if (args) {
+ ftapi.actions.unblockUser(args, function (response) {
+ console.log(response);
+
+ firetable.actions.localChatResponse(response);
+ });
+ }
+ } else if (command == "hot") {
+ ftapi.actions.sendChat(":fire:");
+ $("#cloud_with_rain").removeClass("on");
+ $("#fire").addClass("on");
+ } else if (command == "storm") {
+ ftapi.actions.sendChat(":cloud_with_rain:");
+ $("#cloud_with_rain").addClass("on");
+ $("#fire").removeClass("on");
+ } else if (command == "shrug") {
+ var thingtosay = "¯\\_(ツ)_/¯";
+ if (args) thingtosay = args + " ¯\\_(ツ)_/¯";
+ ftapi.actions.sendChat(thingtosay);
+ } else if (command == "tableflip") {
+ var thingtosay = "(╯°□°)╯︵ ┻━┻";
+ if (args) thingtosay = args + " (╯°□°)╯︵ ┻━┻";
+ ftapi.actions.sendChat(thingtosay);
+ } else if (command == "unflip") {
+ var thingtosay = "┬─┬ ノ( ゜-゜ノ)";
+ if (args) thingtosay = args + " ┬─┬ ノ( ゜-゜ノ)";
+ ftapi.actions.sendChat(thingtosay);
+ }
+ } else {
+ ftapi.actions.sendChat(txt);
+ }
+ $("#newchat").val("");
+ $("#emojiPicker").slideUp();
+ $("#pickEmoji").removeClass("on");
+ firetable.utilities.exitAtLand();
+ } else if (e.key == "@") {
+ // open the door to @ land
+ if (firetable.atLand) {
+ // double @@
+ firetable.utilities.exitAtLand();
+ } else {
+ // first step into @ land
+ firetable.utilities.initAtLand();
+ for (var user of firetable.atUsersFiltered) {
+ $("#atPicker").addClass("show");
+ $(
+ '
@' +
+ user +
+ "
"
+ ).appendTo("#atPicker");
+ }
+ }
+ } else if (firetable.atLand) {
+ // we're in @ land
+ if (e.key == " " || e.key == "Spacebar") {
+ // we've got what we want
+ firetable.utilities.exitAtLand();
+ } else if (!e.key.match(/[0-9a-zA-Z_]/)) {
+ // not possibly a characer from a name
+ firetable.atString += e.key;
+ $("#atPicker").html("");
+ $('
Usernames cannot contain "' + e.key + '"
').appendTo(
+ "#atPicker"
+ );
+ } else {
+ // we're still in @ land
+ firetable.atString += e.key;
+ firetable.utilities.updateAtLand();
+ }
+ }
+ });
+ $("#newchat").bind("keyup", function (e) {
+ if (firetable.atLand) {
+ // we're in @ land
+ if (e.key == "Backspace") {
+ if (!firetable.atString) {
+ // deleting the @, exit @ land
+ firetable.utilities.exitAtLand();
+ } else {
+ // still got someone we're lookin for
+ firetable.atString = firetable.atString.slice(0, -1);
+ firetable.utilities.updateAtLand();
+ }
+ } else if (e.key == "ArrowUp") {
+ // i see my @, go up!
+ $("#atPicker .butt:last").focus();
+ } else if (e.key == "ArrowDown") {
+ // i see my @, go down!
+ $("#atPicker .butt:first").focus();
+ }
+ }
+ });
+ $("#newchat").bind("keydown", function (e) {
+ if (e.key == "Tab") {
+ if (firetable.atUsersFiltered.length === 1) {
+ $("#newchat").one("blur", function (e) {
+ $("#newchat").focus().val($("#newchat").val());
+ });
+ firetable.utilities.chooseAt(firetable.atUsersFiltered[0]);
+ } else {
+ firetable.utilities.exitAtLand();
+ }
+ }
+ });
+ $(document).on("click", "#atPicker .butt", function (e) {
+ e.preventDefault();
+ firetable.utilities.chooseAt($(this).text().replace("@", ""));
+ setTimeout(() => {
+ var tempText = $("#newchat").val();
+ $("#newchat").focus().val("");
+ $("#newchat").val(tempText);
+ }, 250);
+ });
+ $(document).on("keyup", "#atPicker .butt:focus", function (e) {
+ if (e.key == "ArrowUp") {
+ if ($("#atPicker .butt:focus").parent().prev().length) {
+ $("#atPicker .butt:focus").parent().prev().find(".butt").focus();
+ } else {
+ $("#atPicker .butt:last").focus();
+ }
+ } else if (e.key == "ArrowDown") {
+ if ($("#atPicker .butt:focus").parent().next().length) {
+ $("#atPicker .butt:focus").parent().next().find(".butt").focus();
+ } else {
+ $("#atPicker .butt:first").focus();
+ }
+ }
+ });
- var body = document.getElementsByTagName("body")[0];
- body.appendChild(textarea);
+ ftapi.events.on("colorsChanged", function (data) {
+ firetable.debug && console.log("COLOR CHANGE!", data);
- textarea.oninput = firetable.ui.LinkGrabber.evt_got_link;
+ firetable.color = data.color;
+ //firetable.countcolor = data.txt;
+ if (data.color == "#fff" || data.color == "#7f7f7f") {
+ firetable.color = firetable.orange;
+ firetable.countcolor = "#fff";
+ $("#djStage").css("background-color", "#ccc");
+ } else {
+ $("#djStage").css("background-color", data.color);
+ }
+ /*
+ if (firetable.countcolor == "#fff"){
+ firetable.countcolor = "#ffffffc9";
+ } else if (firetable.countcolor == "#000"){
+ firetable.debug && console.log("a")
+ firetable.countcolor = "#000000c9";
+ }
+ $("#djStage").css("color", firetable.countcolor);
+ */
+ $(".customColorStyles").remove();
+
+ $(".festiveLights").remove();
+
+ var colorThing = firetable.utilities.hexToRGB(firetable.color);
+ $("head").append(
+ ""
+ );
+
+ if (firetable.lights) {
+ var style =
+ "";
+ $("head").append(style);
+ }
+ });
},
+ LinkGrabber: {
+ textarea: null,
- detach_ta: function() {
- if (firetable.ui.LinkGrabber.textarea == null) return;
- var textarea = firetable.ui.LinkGrabber.textarea;
+ /* Textarea Management */
- textarea.parentNode.removeChild(textarea);
- firetable.ui.LinkGrabber.textarea = null;
- },
+ attach_ta: function (event) {
+ if (!$.contains(document.getElementById("queuelist"), event.target)) return;
+ if (firetable.ui.LinkGrabber.textarea != null) return;
- /* Event Handlers */
+ var textarea = (firetable.ui.LinkGrabber.textarea = document.createElement("textarea"));
+ textarea.setAttribute(
+ "style",
+ "position: fixed; width: 100%; margin: 0; top: 0; bottom: 0; right: 0; left: 0; z-index: 99999999"
+ );
+ textarea.style.opacity = "0.000000000000000001";
- evt_drag_over: function(event) {
- firetable.ui.LinkGrabber.attach_ta(event); //Create TA overlay
- },
+ var body = document.getElementsByTagName("body")[0];
+ body.appendChild(textarea);
- evt_got_link: function() {
- /* THIS IS WHERE WE HANDLE THE RECEIVED LINK */
+ textarea.oninput = firetable.ui.LinkGrabber.evt_got_link;
+ },
- var link = firetable.ui.LinkGrabber.textarea.value;
- firetable.debug && console.log("NEW LINK RECEIVED VIA THE DRAGON'S DROP. " + link);
- firetable.actions.queueFromLink(link);
+ detach_ta: function () {
+ if (firetable.ui.LinkGrabber.textarea == null) return;
+ var textarea = firetable.ui.LinkGrabber.textarea;
- firetable.ui.LinkGrabber.detach_ta();
- },
+ textarea.parentNode.removeChild(textarea);
+ firetable.ui.LinkGrabber.textarea = null;
+ },
- evt_drag_out: function(e) {
- if (e.target == firetable.ui.LinkGrabber.textarea) firetable.ui.LinkGrabber.detach_ta();
- },
+ /* Event Handlers */
- /* Start/Stop */
+ evt_drag_over: function (event) {
+ firetable.ui.LinkGrabber.attach_ta(event); //Create TA overlay
+ },
- start: function() {
- document.addEventListener("dragover", firetable.ui.LinkGrabber.evt_drag_over, false);
- document.addEventListener("dragenter", firetable.ui.LinkGrabber.evt_drag_over, false);
+ evt_got_link: function () {
+ /* THIS IS WHERE WE HANDLE THE RECEIVED LINK */
- document.addEventListener("mouseup", firetable.ui.LinkGrabber.evt_drag_out, false);
- document.addEventListener("dragleave", firetable.ui.LinkGrabber.evt_drag_out, false);
- },
+ var link = firetable.ui.LinkGrabber.textarea.value;
+ firetable.debug && console.log("NEW LINK RECEIVED VIA THE DRAGON'S DROP. " + link);
+ firetable.actions.queueFromLink(link);
- stop: function() {
- document.removeEventListener("dragover", firetable.ui.LinkGrabber.evt_drag_over);
- document.removeEventListener("dragenter", firetable.ui.LinkGrabber.evt_drag_over);
+ firetable.ui.LinkGrabber.detach_ta();
+ },
- document.removeEventListener("mouseup", firetable.ui.LinkGrabber.evt_drag_out);
- document.removeEventListener("dragleave", firetable.ui.LinkGrabber.evt_drag_out);
+ evt_drag_out: function (e) {
+ if (e.target == firetable.ui.LinkGrabber.textarea) firetable.ui.LinkGrabber.detach_ta();
+ },
- firetable.ui.LinkGrabber.detach_ta();
- }
- }
+ /* Start/Stop */
+ start: function () {
+ document.addEventListener("dragover", firetable.ui.LinkGrabber.evt_drag_over, false);
+ document.addEventListener("dragenter", firetable.ui.LinkGrabber.evt_drag_over, false);
-}
+ document.addEventListener("mouseup", firetable.ui.LinkGrabber.evt_drag_out, false);
+ document.addEventListener("dragleave", firetable.ui.LinkGrabber.evt_drag_out, false);
+ },
+
+ stop: function () {
+ document.removeEventListener("dragover", firetable.ui.LinkGrabber.evt_drag_over);
+ document.removeEventListener("dragenter", firetable.ui.LinkGrabber.evt_drag_over);
+ document.removeEventListener("mouseup", firetable.ui.LinkGrabber.evt_drag_out);
+ document.removeEventListener("dragleave", firetable.ui.LinkGrabber.evt_drag_out);
+ firetable.ui.LinkGrabber.detach_ta();
+ },
+ },
+};
let isLoaded = false;
let glitch;
-let imgSrc = '';
+let imgSrc = "";
function setup(useThis) {
- if (!useThis) useThis = firetable.scImg;
- background(0);
- let cnv = createCanvas($('#djStage').outerWidth(), $('#djStage').outerHeight());
- cnv.parent('scScreen');
- loadImage(useThis, function(img) {
- glitch = new Glitch(img);
- isLoaded = true;
- var $can = $('#scScreen canvas');
- var canrat = $can.width() / $can.height();
- $can.data('ratio', canrat);
- });
+ if (!useThis) useThis = firetable.scImg;
+ background(0);
+ let cnv = createCanvas($("#djStage").outerWidth(), $("#djStage").outerHeight());
+ cnv.parent("scScreen");
+ loadImage(useThis, function (img) {
+ glitch = new Glitch(img);
+ isLoaded = true;
+ var $can = $("#scScreen canvas");
+ var canrat = $can.width() / $can.height();
+ $can.data("ratio", canrat);
+ });
}
function draw() {
- clear();
- background(0);
-
- if (isLoaded) {
- glitch.show();
- }
+ clear();
+ background(0);
- // fill(255, 255, 255);
- // textSize(14);
- // text('FPS: ' + floor(frameRate()), 20, 30);
+ if (isLoaded) {
+ glitch.show();
+ }
+ // fill(255, 255, 255);
+ // textSize(14);
+ // text('FPS: ' + floor(frameRate()), 20, 30);
}
class Glitch {
- constructor(img) {
- this.channelLen = 4;
- this.imgOrigin = img;
- this.imgOrigin.loadPixels();
- this.copyData = [];
- this.flowLineImgs = [];
- this.shiftLineImgs = [];
- this.shiftRGBs = [];
- this.scatImgs = [];
- this.throughFlag = true;
- this.copyData = new Uint8ClampedArray(this.imgOrigin.pixels);
-
- // flow line
- for (let i = 0; i < 1; i++) {
- let o = {
- pixels: null,
- t1: floor(random(0, 1000)),
- speed: floor(random(4, 24)),
- randX: floor(random(24, 80))
- };
- this.flowLineImgs.push(o);
- }
+ constructor(img) {
+ this.channelLen = 4;
+ this.imgOrigin = img;
+ this.imgOrigin.loadPixels();
+ this.copyData = [];
+ this.flowLineImgs = [];
+ this.shiftLineImgs = [];
+ this.shiftRGBs = [];
+ this.scatImgs = [];
+ this.throughFlag = true;
+ this.copyData = new Uint8ClampedArray(this.imgOrigin.pixels);
+
+ // flow line
+ for (let i = 0; i < 1; i++) {
+ let o = {
+ pixels: null,
+ t1: floor(random(0, 1000)),
+ speed: floor(random(4, 24)),
+ randX: floor(random(24, 80)),
+ };
+ this.flowLineImgs.push(o);
+ }
- // shift line
- for (let i = 0; i < 6; i++) {
- let o = null;
- this.shiftLineImgs.push(o);
- }
+ // shift line
+ for (let i = 0; i < 6; i++) {
+ let o = null;
+ this.shiftLineImgs.push(o);
+ }
- // shift RGB
- for (let i = 0; i < 1; i++) {
- let o = null;
- this.shiftRGBs.push(o);
- }
+ // shift RGB
+ for (let i = 0; i < 1; i++) {
+ let o = null;
+ this.shiftRGBs.push(o);
+ }
- // scat imgs
- for (let i = 0; i < 3; i++) {
- let scatImg = {
- img: null,
- x: 0,
- y: 0
- };
- this.scatImgs.push(scatImg);
- }
- }
-
- replaceData(destImg, srcPixels) {
- for (let y = 0; y < destImg.height; y++) {
- for (let x = 0; x < destImg.width; x++) {
- let r, g, b, a;
- let index;
- index = (y * destImg.width + x) * this.channelLen;
- r = index;
- g = index + 1;
- b = index + 2;
- a = index + 3;
- destImg.pixels[r] = srcPixels[r];
- destImg.pixels[g] = srcPixels[g];
- destImg.pixels[b] = srcPixels[b];
- destImg.pixels[a] = srcPixels[a];
- }
+ // scat imgs
+ for (let i = 0; i < 3; i++) {
+ let scatImg = {
+ img: null,
+ x: 0,
+ y: 0,
+ };
+ this.scatImgs.push(scatImg);
+ }
}
- destImg.updatePixels();
- }
-
- flowLine(srcImg, obj) {
-
- let destPixels,
- tempY;
- destPixels = new Uint8ClampedArray(srcImg.pixels);
- obj.t1 %= srcImg.height;
- obj.t1 += obj.speed;
- //tempY = floor(noise(obj.t1) * srcImg.height);
- tempY = floor(obj.t1);
- for (let y = 0; y < srcImg.height; y++) {
- if (tempY === y) {
- for (let x = 0; x < srcImg.width; x++) {
- let r, g, b, a;
- let index;
- index = (y * srcImg.width + x) * this.channelLen;
- r = index;
- g = index + 1;
- b = index + 2;
- a = index + 3;
- destPixels[r] = srcImg.pixels[r] + obj.randX;
- destPixels[g] = srcImg.pixels[g] + obj.randX;
- destPixels[b] = srcImg.pixels[b] + obj.randX;
- destPixels[a] = srcImg.pixels[a];
+
+ replaceData(destImg, srcPixels) {
+ for (let y = 0; y < destImg.height; y++) {
+ for (let x = 0; x < destImg.width; x++) {
+ let r, g, b, a;
+ let index;
+ index = (y * destImg.width + x) * this.channelLen;
+ r = index;
+ g = index + 1;
+ b = index + 2;
+ a = index + 3;
+ destImg.pixels[r] = srcPixels[r];
+ destImg.pixels[g] = srcPixels[g];
+ destImg.pixels[b] = srcPixels[b];
+ destImg.pixels[a] = srcPixels[a];
+ }
}
- }
+ destImg.updatePixels();
}
- return destPixels;
- }
-
- shiftLine(srcImg) {
-
- let offsetX;
- let rangeMin, rangeMax;
- let destPixels;
- let rangeH;
-
- destPixels = new Uint8ClampedArray(srcImg.pixels);
- rangeH = srcImg.height;
- rangeMin = floor(random(0, rangeH));
- rangeMax = rangeMin + floor(random(1, rangeH - rangeMin));
- offsetX = this.channelLen * floor(random(-40, 40));
-
- for (let y = 0; y < srcImg.height; y++) {
- if (y > rangeMin && y < rangeMax) {
- for (let x = 0; x < srcImg.width; x++) {
- let r, g, b, a;
- let r2, g2, b2, a2;
- let index;
-
- index = (y * srcImg.width + x) * this.channelLen;
- r = index;
- g = index + 1;
- b = index + 2;
- a = index + 3;
- r2 = r + offsetX;
- g2 = g + offsetX;
- b2 = b + offsetX;
- destPixels[r] = srcImg.pixels[r2];
- destPixels[g] = srcImg.pixels[g2];
- destPixels[b] = srcImg.pixels[b2];
- destPixels[a] = srcImg.pixels[a];
+
+ flowLine(srcImg, obj) {
+ let destPixels, tempY;
+ destPixels = new Uint8ClampedArray(srcImg.pixels);
+ obj.t1 %= srcImg.height;
+ obj.t1 += obj.speed;
+ //tempY = floor(noise(obj.t1) * srcImg.height);
+ tempY = floor(obj.t1);
+ for (let y = 0; y < srcImg.height; y++) {
+ if (tempY === y) {
+ for (let x = 0; x < srcImg.width; x++) {
+ let r, g, b, a;
+ let index;
+ index = (y * srcImg.width + x) * this.channelLen;
+ r = index;
+ g = index + 1;
+ b = index + 2;
+ a = index + 3;
+ destPixels[r] = srcImg.pixels[r] + obj.randX;
+ destPixels[g] = srcImg.pixels[g] + obj.randX;
+ destPixels[b] = srcImg.pixels[b] + obj.randX;
+ destPixels[a] = srcImg.pixels[a];
+ }
+ }
}
- }
+ return destPixels;
}
- return destPixels;
- }
-
- shiftRGB(srcImg) {
-
- let randR, randG, randB;
- let destPixels;
- let range;
-
- range = 16;
- destPixels = new Uint8ClampedArray(srcImg.pixels);
- randR = (floor(random(-range, range)) * srcImg.width + floor(random(-range, range))) * this.channelLen;
- randG = (floor(random(-range, range)) * srcImg.width + floor(random(-range, range))) * this.channelLen;
- randB = (floor(random(-range, range)) * srcImg.width + floor(random(-range, range))) * this.channelLen;
-
- for (let y = 0; y < srcImg.height; y++) {
- for (let x = 0; x < srcImg.width; x++) {
- let r, g, b, a;
- let r2, g2, b2, a2;
- let index;
-
- index = (y * srcImg.width + x) * this.channelLen;
- r = index;
- g = index + 1;
- b = index + 2;
- a = index + 3;
- r2 = (r + randR) % srcImg.pixels.length;
- g2 = (g + randG) % srcImg.pixels.length;
- b2 = (b + randB) % srcImg.pixels.length;
- destPixels[r] = srcImg.pixels[r2];
- destPixels[g] = srcImg.pixels[g2];
- destPixels[b] = srcImg.pixels[b2];
- destPixels[a] = srcImg.pixels[a];
- }
+
+ shiftLine(srcImg) {
+ let offsetX;
+ let rangeMin, rangeMax;
+ let destPixels;
+ let rangeH;
+
+ destPixels = new Uint8ClampedArray(srcImg.pixels);
+ rangeH = srcImg.height;
+ rangeMin = floor(random(0, rangeH));
+ rangeMax = rangeMin + floor(random(1, rangeH - rangeMin));
+ offsetX = this.channelLen * floor(random(-40, 40));
+
+ for (let y = 0; y < srcImg.height; y++) {
+ if (y > rangeMin && y < rangeMax) {
+ for (let x = 0; x < srcImg.width; x++) {
+ let r, g, b, a;
+ let r2, g2, b2, a2;
+ let index;
+
+ index = (y * srcImg.width + x) * this.channelLen;
+ r = index;
+ g = index + 1;
+ b = index + 2;
+ a = index + 3;
+ r2 = r + offsetX;
+ g2 = g + offsetX;
+ b2 = b + offsetX;
+ destPixels[r] = srcImg.pixels[r2];
+ destPixels[g] = srcImg.pixels[g2];
+ destPixels[b] = srcImg.pixels[b2];
+ destPixels[a] = srcImg.pixels[a];
+ }
+ }
+ }
+ return destPixels;
}
- return destPixels;
- }
-
- getRandomRectImg(srcImg) {
- let startX;
- let startY;
- let rectW;
- let rectH;
- let destImg;
- startX = floor(random(0, srcImg.width - 30));
- startY = floor(random(0, srcImg.height - 50));
- rectW = floor(random(30, srcImg.width - startX));
- rectH = floor(random(1, 50));
- destImg = srcImg.get(startX, startY, rectW, rectH);
- destImg.loadPixels();
- return destImg;
- }
-
- show() {
-
- // restore the original state
- this.replaceData(this.imgOrigin, this.copyData);
-
- // sometimes pass without effect processing
- let n = floor(random(100));
- if (n > 75 && this.throughFlag) {
- this.throughFlag = false;
- setTimeout(() => {
- this.throughFlag = true;
- }, floor(random(200, 1500)));
+ shiftRGB(srcImg) {
+ let randR, randG, randB;
+ let destPixels;
+ let range;
+
+ range = 16;
+ destPixels = new Uint8ClampedArray(srcImg.pixels);
+ randR = (floor(random(-range, range)) * srcImg.width + floor(random(-range, range))) * this.channelLen;
+ randG = (floor(random(-range, range)) * srcImg.width + floor(random(-range, range))) * this.channelLen;
+ randB = (floor(random(-range, range)) * srcImg.width + floor(random(-range, range))) * this.channelLen;
+
+ for (let y = 0; y < srcImg.height; y++) {
+ for (let x = 0; x < srcImg.width; x++) {
+ let r, g, b, a;
+ let r2, g2, b2, a2;
+ let index;
+
+ index = (y * srcImg.width + x) * this.channelLen;
+ r = index;
+ g = index + 1;
+ b = index + 2;
+ a = index + 3;
+ r2 = (r + randR) % srcImg.pixels.length;
+ g2 = (g + randG) % srcImg.pixels.length;
+ b2 = (b + randB) % srcImg.pixels.length;
+ destPixels[r] = srcImg.pixels[r2];
+ destPixels[g] = srcImg.pixels[g2];
+ destPixels[b] = srcImg.pixels[b2];
+ destPixels[a] = srcImg.pixels[a];
+ }
+ }
+
+ return destPixels;
}
- if (!this.throughFlag) {
- push();
- translate((width - this.imgOrigin.width) / 2, (height - this.imgOrigin.height) / 2);
- image(this.imgOrigin, 0, 0);
- pop();
- return;
+
+ getRandomRectImg(srcImg) {
+ let startX;
+ let startY;
+ let rectW;
+ let rectH;
+ let destImg;
+ startX = floor(random(0, srcImg.width - 30));
+ startY = floor(random(0, srcImg.height - 50));
+ rectW = floor(random(30, srcImg.width - startX));
+ rectH = floor(random(1, 50));
+ destImg = srcImg.get(startX, startY, rectW, rectH);
+ destImg.loadPixels();
+ return destImg;
}
- // flow line
- this.flowLineImgs.forEach((v, i, arr) => {
- arr[i].pixels = this.flowLine(this.imgOrigin, v);
- if (arr[i].pixels) {
- this.replaceData(this.imgOrigin, arr[i].pixels);
- }
- })
-
- // shift line
- this.shiftLineImgs.forEach((v, i, arr) => {
- if (floor(random(100)) > 50) {
- arr[i] = this.shiftLine(this.imgOrigin);
- this.replaceData(this.imgOrigin, arr[i]);
- } else {
- if (arr[i]) {
- this.replaceData(this.imgOrigin, arr[i]);
+ show() {
+ // restore the original state
+ this.replaceData(this.imgOrigin, this.copyData);
+
+ // sometimes pass without effect processing
+ let n = floor(random(100));
+ if (n > 75 && this.throughFlag) {
+ this.throughFlag = false;
+ setTimeout(() => {
+ this.throughFlag = true;
+ }, floor(random(200, 1500)));
}
- }
- })
-
- // shift rgb
- this.shiftRGBs.forEach((v, i, arr) => {
- if (floor(random(100)) > 65) {
- arr[i] = this.shiftRGB(this.imgOrigin);
- this.replaceData(this.imgOrigin, arr[i]);
- }
- })
-
- push();
- translate((width - this.imgOrigin.width) / 2, (height - this.imgOrigin.height) / 2);
- image(this.imgOrigin, 0, 0);
- pop();
-
- // scat image
- this.scatImgs.forEach((obj) => {
- push();
- translate((width - this.imgOrigin.width) / 2, (height - this.imgOrigin.height) / 2);
- if (floor(random(100)) > 80) {
- obj.x = floor(random(-this.imgOrigin.width * 0.3, this.imgOrigin.width * 0.7));
- obj.y = floor(random(-this.imgOrigin.height * 0.1, this.imgOrigin.height));
- obj.img = this.getRandomRectImg(this.imgOrigin);
- }
- if (obj.img) {
- image(obj.img, obj.x, obj.y);
- }
- pop();
- })
-
- }
+ if (!this.throughFlag) {
+ push();
+ translate((width - this.imgOrigin.width) / 2, (height - this.imgOrigin.height) / 2);
+ image(this.imgOrigin, 0, 0);
+ pop();
+ return;
+ }
+
+ // flow line
+ this.flowLineImgs.forEach((v, i, arr) => {
+ arr[i].pixels = this.flowLine(this.imgOrigin, v);
+ if (arr[i].pixels) {
+ this.replaceData(this.imgOrigin, arr[i].pixels);
+ }
+ });
+
+ // shift line
+ this.shiftLineImgs.forEach((v, i, arr) => {
+ if (floor(random(100)) > 50) {
+ arr[i] = this.shiftLine(this.imgOrigin);
+ this.replaceData(this.imgOrigin, arr[i]);
+ } else {
+ if (arr[i]) {
+ this.replaceData(this.imgOrigin, arr[i]);
+ }
+ }
+ });
+
+ // shift rgb
+ this.shiftRGBs.forEach((v, i, arr) => {
+ if (floor(random(100)) > 65) {
+ arr[i] = this.shiftRGB(this.imgOrigin);
+ this.replaceData(this.imgOrigin, arr[i]);
+ }
+ });
+ push();
+ translate((width - this.imgOrigin.width) / 2, (height - this.imgOrigin.height) / 2);
+ image(this.imgOrigin, 0, 0);
+ pop();
+
+ // scat image
+ this.scatImgs.forEach((obj) => {
+ push();
+ translate((width - this.imgOrigin.width) / 2, (height - this.imgOrigin.height) / 2);
+ if (floor(random(100)) > 80) {
+ obj.x = floor(random(-this.imgOrigin.width * 0.3, this.imgOrigin.width * 0.7));
+ obj.y = floor(random(-this.imgOrigin.height * 0.1, this.imgOrigin.height));
+ obj.img = this.getRandomRectImg(this.imgOrigin);
+ }
+ if (obj.img) {
+ image(obj.img, obj.x, obj.y);
+ }
+ pop();
+ });
+ }
}
if (!firetable.started) firetable.init();