mirror of https://github.com/calzoneman/sync.git
Fixes, continue work
This commit is contained in:
parent
42fc2e45c8
commit
1850f009ff
24
channel.js
24
channel.js
|
@ -916,7 +916,7 @@ Channel.prototype.broadcastVoteskipUpdate = function() {
|
||||||
}
|
}
|
||||||
|
|
||||||
Channel.prototype.broadcastMotd = function() {
|
Channel.prototype.broadcastMotd = function() {
|
||||||
this.sendAll("updateMotd", this.motd);
|
this.sendAll("setMotd", this.motd);
|
||||||
}
|
}
|
||||||
|
|
||||||
Channel.prototype.broadcastDrinks = function() {
|
Channel.prototype.broadcastDrinks = function() {
|
||||||
|
@ -1150,7 +1150,7 @@ Channel.prototype.trySetTemp = function(user, data) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
Channel.prototype.dequeue = function(position) {
|
Channel.prototype.dequeue = function(position, removeonly) {
|
||||||
if(position < 0 || position >= this.queue.length) {
|
if(position < 0 || position >= this.queue.length) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -1161,6 +1161,9 @@ Channel.prototype.dequeue = function(position) {
|
||||||
});
|
});
|
||||||
this.broadcastPlaylistMeta();
|
this.broadcastPlaylistMeta();
|
||||||
|
|
||||||
|
if(removeonly)
|
||||||
|
return;
|
||||||
|
|
||||||
// If you remove the currently playing video, play the next one
|
// If you remove the currently playing video, play the next one
|
||||||
if(position == this.position) {
|
if(position == this.position) {
|
||||||
this.position--;
|
this.position--;
|
||||||
|
@ -1223,7 +1226,7 @@ Channel.prototype.jumpTo = function(pos) {
|
||||||
|
|
||||||
var old = this.position;
|
var old = this.position;
|
||||||
if(this.media && this.media.temp && old != pos) {
|
if(this.media && this.media.temp && old != pos) {
|
||||||
this.dequeue({pos: old, removeonly: true});
|
this.dequeue(old, true);
|
||||||
if(pos > old && pos > 0) {
|
if(pos > old && pos > 0) {
|
||||||
pos--;
|
pos--;
|
||||||
}
|
}
|
||||||
|
@ -1293,9 +1296,9 @@ Channel.prototype.shufflequeue = function() {
|
||||||
this.queue.splice(i, 1);
|
this.queue.splice(i, 1);
|
||||||
}
|
}
|
||||||
this.queue = n;
|
this.queue = n;
|
||||||
for(var i = 0; i < this.users.length; i++) {
|
this.sendAll("playlist", this.queue);
|
||||||
this.sendPlaylist(this.users[i]);
|
this.sendAll("setPosition", this.position);
|
||||||
}
|
this.sendAll("setPlaylistMeta", this.plmeta);
|
||||||
}
|
}
|
||||||
|
|
||||||
Channel.prototype.tryShufflequeue = function(user) {
|
Channel.prototype.tryShufflequeue = function(user) {
|
||||||
|
@ -1343,13 +1346,16 @@ Channel.prototype.move = function(data, user) {
|
||||||
var media = this.queue[data.from];
|
var media = this.queue[data.from];
|
||||||
var to = data.to > data.from ? data.to + 1 : data.to;
|
var to = data.to > data.from ? data.to + 1 : data.to;
|
||||||
var from = data.to > data.from ? data.from : data.from + 1;
|
var from = data.to > data.from ? data.from : data.from + 1;
|
||||||
|
var moveby = user && user.name ? user.name : null;
|
||||||
|
if(typeof data.moveby !== "undefined")
|
||||||
|
moveby = data.moveby;
|
||||||
|
|
||||||
this.queue.splice(to, 0, media);
|
this.queue.splice(to, 0, media);
|
||||||
this.queue.splice(from, 1);
|
this.queue.splice(from, 1);
|
||||||
this.sendAll("moveVideo", {
|
this.sendAll("moveVideo", {
|
||||||
from: data.from,
|
from: data.from,
|
||||||
to: data.to,
|
to: data.to,
|
||||||
moveby: user ? user.name : ""
|
moveby: moveby
|
||||||
});
|
});
|
||||||
|
|
||||||
// Account for moving things around the active video
|
// Account for moving things around the active video
|
||||||
|
@ -1369,11 +1375,11 @@ Channel.prototype.tryMove = function(user, data) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(data.src == undefined || data.dest == undefined) {
|
if(typeof data.from !== "number" || typeof data.to !== "number") {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
this.move(data);
|
this.move(data, user);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* REGION Polls */
|
/* REGION Polls */
|
||||||
|
|
8
user.js
8
user.js
|
@ -236,13 +236,13 @@ User.prototype.initCallbacks = function() {
|
||||||
}
|
}
|
||||||
}.bind(this));
|
}.bind(this));
|
||||||
|
|
||||||
this.socket.on("clearqueue", function() {
|
this.socket.on("clearPlaylist", function() {
|
||||||
if(this.channel != null) {
|
if(this.channel != null) {
|
||||||
this.channel.tryClearqueue(this);
|
this.channel.tryClearqueue(this);
|
||||||
}
|
}
|
||||||
}.bind(this));
|
}.bind(this));
|
||||||
|
|
||||||
this.socket.on("shufflequeue", function() {
|
this.socket.on("shufflePlaylist", function() {
|
||||||
if(this.channel != null) {
|
if(this.channel != null) {
|
||||||
this.channel.tryShufflequeue(this);
|
this.channel.tryShufflequeue(this);
|
||||||
}
|
}
|
||||||
|
@ -262,7 +262,7 @@ User.prototype.initCallbacks = function() {
|
||||||
|
|
||||||
this.socket.on("searchMedia", function(data) {
|
this.socket.on("searchMedia", function(data) {
|
||||||
if(this.channel != null) {
|
if(this.channel != null) {
|
||||||
if(data.yt) {
|
if(data.source == "yt") {
|
||||||
var callback = function(vids) {
|
var callback = function(vids) {
|
||||||
this.socket.emit("searchResults", {
|
this.socket.emit("searchResults", {
|
||||||
results: vids
|
results: vids
|
||||||
|
@ -373,7 +373,7 @@ User.prototype.initCallbacks = function() {
|
||||||
}
|
}
|
||||||
}.bind(this));
|
}.bind(this));
|
||||||
|
|
||||||
this.socket.on("updateMotd", function(data) {
|
this.socket.on("setMotd", function(data) {
|
||||||
if(this.channel != null) {
|
if(this.channel != null) {
|
||||||
this.channel.tryUpdateMotd(this, data);
|
this.channel.tryUpdateMotd(this, data);
|
||||||
}
|
}
|
||||||
|
|
|
@ -153,7 +153,7 @@ textarea::-webkit-input-placeholder {
|
||||||
/* line 18, ../bootstrap/bootstrap/_sprites.scss */
|
/* line 18, ../bootstrap/bootstrap/_sprites.scss */
|
||||||
[class^="icon-"],
|
[class^="icon-"],
|
||||||
[class*=" icon-"] {
|
[class*=" icon-"] {
|
||||||
background-image: url("../img/glyphicons-halflings.png");
|
background-image: url("../img/glyphicons-halflings-white.png");
|
||||||
}
|
}
|
||||||
|
|
||||||
/* White icons with optional class, or on hover/active states of certain elements */
|
/* White icons with optional class, or on hover/active states of certain elements */
|
||||||
|
@ -946,6 +946,20 @@ select:focus:invalid:focus {
|
||||||
color: #ff9900;
|
color: #ff9900;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#usercountwrap, #currenttitle, #videowrap,
|
||||||
|
#librarytoggle, #userpltoggle, #playlisttoggle {
|
||||||
|
background-color: #2f2f2f;
|
||||||
|
}
|
||||||
|
|
||||||
|
.queue_entry {
|
||||||
|
background-color: #111111;
|
||||||
|
}
|
||||||
|
|
||||||
|
.queue_active {
|
||||||
|
border-color: #ff9900;
|
||||||
|
background-color: #332200;
|
||||||
|
}
|
||||||
|
|
||||||
#plmeta {
|
#plmeta {
|
||||||
background-color: rgba(0, 0, 0, 0.3);
|
background-color: rgba(0, 0, 0, 0.3);
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,37 @@
|
||||||
|
body, #videowrap {
|
||||||
|
background-color: #2f2f2f;
|
||||||
|
}
|
||||||
|
|
||||||
|
.queue_entry {
|
||||||
|
background-color: #111111;
|
||||||
|
}
|
||||||
|
|
||||||
|
.queue_active {
|
||||||
|
border-color: #ff9900;
|
||||||
|
background-color: #332200;
|
||||||
|
}
|
||||||
|
|
||||||
|
#userpltoggle, #librarytoggle, #playlisttoggle {
|
||||||
|
color: #cccccc;
|
||||||
|
background-color: #2f2f2f;
|
||||||
|
}
|
||||||
|
|
||||||
|
#currenttitle {
|
||||||
|
color: #cccccc;
|
||||||
|
}
|
||||||
|
|
||||||
|
.qe_time {
|
||||||
|
color: #cccccc;
|
||||||
|
}
|
||||||
|
|
||||||
|
#userpltoggle i[class^="icon-"], #userpltoggle i[class*=" icon-"],
|
||||||
|
#librarytoggle i[class^="icon-"], #librarytoggle i[class*=" icon-"],
|
||||||
|
#playlisttoggle i[class^="icon-"], #playlisttoggle i[class*=" icon-"] {
|
||||||
|
background-image: url("../img/glyphicons-halflings-white.png");
|
||||||
|
}
|
||||||
|
|
||||||
|
#plmeta {
|
||||||
|
color: #cccccc;
|
||||||
|
background-color: #2f2f2f;
|
||||||
|
background-color: rgba(0, 0, 0, 0.3);
|
||||||
|
}
|
|
@ -101,8 +101,11 @@ html, body {
|
||||||
margin-bottom: 0;
|
margin-bottom: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.queue_entry {
|
.queue_sortable li {
|
||||||
cursor: row-resize;
|
cursor: row-resize;
|
||||||
|
}
|
||||||
|
|
||||||
|
.queue_entry {
|
||||||
background-color: #ffffff;
|
background-color: #ffffff;
|
||||||
margin: 2px 0 0 auto;
|
margin: 2px 0 0 auto;
|
||||||
padding: 2px;
|
padding: 2px;
|
||||||
|
@ -114,6 +117,11 @@ html, body {
|
||||||
background-image: url(../img/stripe-diagonal.png);
|
background-image: url(../img/stripe-diagonal.png);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.queue_active {
|
||||||
|
background-color: #d9edf7;
|
||||||
|
border-color: #bce8f1;
|
||||||
|
}
|
||||||
|
|
||||||
#plmeta {
|
#plmeta {
|
||||||
border: 1px solid #aaaaaa;
|
border: 1px solid #aaaaaa;
|
||||||
border-top: 0;
|
border-top: 0;
|
||||||
|
@ -286,6 +294,17 @@ html, body {
|
||||||
padding: 5px;
|
padding: 5px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.user-dropdown {
|
||||||
|
z-index: 9999;
|
||||||
|
position: absolute;
|
||||||
|
border: 1px solid #aaaaaa;
|
||||||
|
border-radius: 5px;
|
||||||
|
background-color: #ffffff;
|
||||||
|
color: #000000;
|
||||||
|
max-width: 200px;
|
||||||
|
padding: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
.profile-image {
|
.profile-image {
|
||||||
width: 80px;
|
width: 80px;
|
||||||
height: 80px;
|
height: 80px;
|
||||||
|
|
|
@ -502,7 +502,7 @@ Callbacks = {
|
||||||
},
|
},
|
||||||
|
|
||||||
queue: function(data) {
|
queue: function(data) {
|
||||||
var li = makeQueueEntry(data.media);
|
var li = makeQueueEntry(data.media, true);
|
||||||
li.hide();
|
li.hide();
|
||||||
addQueueButtons(li);
|
addQueueButtons(li);
|
||||||
var idx = data.pos;
|
var idx = data.pos;
|
||||||
|
@ -551,17 +551,25 @@ Callbacks = {
|
||||||
|
|
||||||
moveVideo: function(data) {
|
moveVideo: function(data) {
|
||||||
if(data.moveby != CLIENT.name)
|
if(data.moveby != CLIENT.name)
|
||||||
playlistMove(data.src, data.dest);
|
playlistMove(data.from, data.to);
|
||||||
},
|
},
|
||||||
|
|
||||||
setPosition: function(data) {
|
setPosition: function(position) {
|
||||||
$("#queue li").each(function() {
|
$("#queue li").each(function() {
|
||||||
$(this).removeClass("queue_active");
|
$(this).removeClass("queue_active");
|
||||||
});
|
});
|
||||||
if(data.position < 0)
|
if(position < 0)
|
||||||
return;
|
return;
|
||||||
POSITION = data.position;
|
POSITION = position;
|
||||||
var linew = $("#queue").children()[POSITION];
|
var linew = $("#queue").children()[POSITION];
|
||||||
|
// jQuery UI's sortable thingy kinda fucks this up initially
|
||||||
|
// Wait until it's done
|
||||||
|
if(!$(linew).hasClass("queue_entry")) {
|
||||||
|
setTimeout(function() {
|
||||||
|
Callbacks.setPosition(position);
|
||||||
|
}, 100);
|
||||||
|
return;
|
||||||
|
}
|
||||||
$(linew).addClass("queue_active");
|
$(linew).addClass("queue_active");
|
||||||
|
|
||||||
$("#queue").scrollTop(0);
|
$("#queue").scrollTop(0);
|
||||||
|
@ -643,7 +651,7 @@ Callbacks = {
|
||||||
.appendTo($("#messagebuffer"));
|
.appendTo($("#messagebuffer"));
|
||||||
scrollChat();
|
scrollChat();
|
||||||
|
|
||||||
var poll = $("<div/>").addClass("well active").prependTo($("#pollcontainer"));
|
var poll = $("<div/>").addClass("well active").prependTo($("#pollwrap"));
|
||||||
$("<button/>").addClass("close pull-right").html("×")
|
$("<button/>").addClass("close pull-right").html("×")
|
||||||
.appendTo(poll)
|
.appendTo(poll)
|
||||||
.click(function() { poll.remove(); });
|
.click(function() { poll.remove(); });
|
||||||
|
@ -687,8 +695,8 @@ Callbacks = {
|
||||||
},
|
},
|
||||||
|
|
||||||
closePoll: function() {
|
closePoll: function() {
|
||||||
if($("#pollcontainer .active").length != 0) {
|
if($("#pollwrap .active").length != 0) {
|
||||||
var poll = $("#pollcontainer .active");
|
var poll = $("#pollwrap .active");
|
||||||
poll.removeClass("active").addClass("muted");
|
poll.removeClass("active").addClass("muted");
|
||||||
poll.find(".option button").each(function() {
|
poll.find(".option button").each(function() {
|
||||||
$(this).attr("disabled", true);
|
$(this).attr("disabled", true);
|
||||||
|
|
|
@ -51,9 +51,9 @@ function getOrDefault(k, def) {
|
||||||
return true;
|
return true;
|
||||||
if(v === "false")
|
if(v === "false")
|
||||||
return false;
|
return false;
|
||||||
if(v.match(/[0-9]+/))
|
if(v.match(/^[0-9]+$/))
|
||||||
return parseInt(v);
|
return parseInt(v);
|
||||||
if(v.match(/[0-9\.]+/))
|
if(v.match(/^[0-9\.]+$/))
|
||||||
return parseFloat(v);
|
return parseFloat(v);
|
||||||
return v;
|
return v;
|
||||||
}
|
}
|
||||||
|
|
|
@ -157,8 +157,7 @@ $("#userpl_save").click(function() {
|
||||||
|
|
||||||
/* playlist controls */
|
/* playlist controls */
|
||||||
|
|
||||||
$(function() {
|
$("#queue").sortable({
|
||||||
$("#queue").sortable({
|
|
||||||
start: function(ev, ui) {
|
start: function(ev, ui) {
|
||||||
PL_FROM = ui.item.prevAll().length;
|
PL_FROM = ui.item.prevAll().length;
|
||||||
},
|
},
|
||||||
|
@ -171,9 +170,8 @@ $(function() {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
|
||||||
$("#queue").disableSelection();
|
|
||||||
});
|
});
|
||||||
|
$("#queue").disableSelection();
|
||||||
|
|
||||||
function queue(pos) {
|
function queue(pos) {
|
||||||
var links = $("#mediaurl").val().split(",");
|
var links = $("#mediaurl").val().split(",");
|
||||||
|
@ -210,13 +208,13 @@ $("#qlockbtn").click(function() {
|
||||||
|
|
||||||
$("#getplaylist").click(function() {
|
$("#getplaylist").click(function() {
|
||||||
var callback = function(data) {
|
var callback = function(data) {
|
||||||
|
PLAYER.hide();
|
||||||
socket.listeners("playlist").splice(
|
socket.listeners("playlist").splice(
|
||||||
socket.listeners("playlist").indexOf(callback)
|
socket.listeners("playlist").indexOf(callback)
|
||||||
);
|
);
|
||||||
var list = [];
|
var list = [];
|
||||||
for(var i = 0; i < data.pl.length; i++) {
|
for(var i = 0; i < data.length; i++) {
|
||||||
var entry = formatURL(data.pl[i]);
|
var entry = formatURL(data[i]);
|
||||||
// TODO formatURL in util.js
|
|
||||||
list.push(entry);
|
list.push(entry);
|
||||||
}
|
}
|
||||||
var urls = list.join(",");
|
var urls = list.join(",");
|
||||||
|
@ -238,6 +236,7 @@ $("#getplaylist").click(function() {
|
||||||
$("<div/>").addClass("modal-footer").appendTo(modal);
|
$("<div/>").addClass("modal-footer").appendTo(modal);
|
||||||
modal.on("hidden", function() {
|
modal.on("hidden", function() {
|
||||||
modal.remove();
|
modal.remove();
|
||||||
|
PLAYER.unhide();
|
||||||
});
|
});
|
||||||
modal.modal();
|
modal.modal();
|
||||||
}
|
}
|
||||||
|
@ -253,8 +252,8 @@ $("#clearplaylist").click(function() {
|
||||||
});
|
});
|
||||||
|
|
||||||
$("#shuffleplaylist").click(function() {
|
$("#shuffleplaylist").click(function() {
|
||||||
var clear = confirm("Are you sure you want to shuffle the playlist?");
|
var shuffle = confirm("Are you sure you want to shuffle the playlist?");
|
||||||
if(clear) {
|
if(shuffle) {
|
||||||
socket.emit("shufflePlaylist");
|
socket.emit("shufflePlaylist");
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
@ -103,126 +103,73 @@ function getNameColor(rank) {
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
function addUserDropdown(entry, name) {
|
function addUserDropdown(entry, name, aliases) {
|
||||||
// TODO change this
|
entry.find(".user-dropdown").remove();
|
||||||
entry.find(".dropdown").remove();
|
var menu = $("<div/>").addClass("user-dropdown")
|
||||||
entry.unbind();
|
.appendTo(entry);
|
||||||
var div = $("<div />").addClass("dropdown").appendTo(entry);
|
menu.hide();
|
||||||
var ul = $("<ul />").addClass("dropdown-menu").appendTo(div);
|
|
||||||
ul.attr("role", "menu");
|
|
||||||
ul.attr("aria-labelledby", "dropdownMenu");
|
|
||||||
|
|
||||||
var ignore = $("<li />").appendTo(ul);
|
$("<strong/>").text(name).appendTo(menu);
|
||||||
var a = $("<a />").attr("tabindex", "-1").attr("href", "javascript:void(0);").appendTo(ignore);
|
$("<br/>").appendTo(menu);
|
||||||
if(IGNORED.indexOf(name) != -1) {
|
$("<span/>").text("Aliases: " + aliases)
|
||||||
a.text("Unignore User");
|
.appendTo(menu);
|
||||||
}
|
$("<button/>").addClass("btn btn-mini btn-block")
|
||||||
else {
|
.text("Kick")
|
||||||
a.text("Ignore User");
|
.click(function() {
|
||||||
}
|
|
||||||
a.click(function() {
|
|
||||||
if(IGNORED.indexOf(name) != -1) {
|
|
||||||
IGNORED.splice(IGNORED.indexOf(name), 1);
|
|
||||||
this.text("Ignore User");
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
IGNORED.push(name);
|
|
||||||
this.text("Unignore User");
|
|
||||||
}
|
|
||||||
}.bind(a));
|
|
||||||
|
|
||||||
if(hasPermission("kick")) {
|
|
||||||
var kick = $("<li />").appendTo(ul);
|
|
||||||
var a = $("<a />").attr("tabindex", "-1").attr("href", "javascript:void(0);").appendTo(kick);
|
|
||||||
a.text("Kick");
|
|
||||||
a.click(function() {
|
|
||||||
socket.emit("chatMsg", {
|
socket.emit("chatMsg", {
|
||||||
msg: "/kick " + name
|
msg: "/kick " + name
|
||||||
});
|
});
|
||||||
});
|
})
|
||||||
}
|
.appendTo(menu);
|
||||||
|
$("<button/>").addClass("btn btn-mini btn-block")
|
||||||
if(CLIENT.rank >= Rank.Moderator) {
|
.text("Give Leader")
|
||||||
$("<li />").addClass("divider").appendTo(ul);
|
.click(function() {
|
||||||
|
|
||||||
var makeLeader = $("<li />").appendTo(ul);
|
|
||||||
var a = $("<a />").attr("tabindex", "-1").attr("href", "javascript:void(0);").appendTo(makeLeader);
|
|
||||||
a.text("Make Leader");
|
|
||||||
a.click(function() {
|
|
||||||
socket.emit("assignLeader", {
|
socket.emit("assignLeader", {
|
||||||
name: name
|
name: name
|
||||||
});
|
});
|
||||||
});
|
})
|
||||||
|
.appendTo(menu);
|
||||||
var takeLeader = $("<li />").appendTo(ul);
|
$("<button/>").addClass("btn btn-mini btn-block")
|
||||||
var a = $("<a />").attr("tabindex", "-1").attr("href", "javascript:void(0);").appendTo(takeLeader);
|
.text("Take Leader")
|
||||||
a.text("Take Leader");
|
.click(function() {
|
||||||
a.click(function() {
|
|
||||||
socket.emit("assignLeader", {
|
socket.emit("assignLeader", {
|
||||||
name: ""
|
name: ""
|
||||||
});
|
});
|
||||||
});
|
})
|
||||||
|
.appendTo(menu);
|
||||||
var ban = $("<li />").appendTo(ul);
|
$("<button/>").addClass("btn btn-mini btn-block")
|
||||||
var a = $("<a />").attr("tabindex", "-1").attr("href", "javascript:void(0);").appendTo(ban);
|
.text("Name Ban")
|
||||||
a.text("IP Ban");
|
.click(function() {
|
||||||
a.click(function() {
|
|
||||||
socket.emit("chatMsg", {
|
socket.emit("chatMsg", {
|
||||||
msg: "/ban " + name
|
msg: "/ban " + name
|
||||||
});
|
});
|
||||||
|
})
|
||||||
|
.appendTo(menu);
|
||||||
|
$("<button/>").addClass("btn btn-mini btn-block")
|
||||||
|
.text("IP Ban")
|
||||||
|
.click(function() {
|
||||||
|
socket.emit("chatMsg", {
|
||||||
|
msg: "/ipban " + name
|
||||||
});
|
});
|
||||||
|
})
|
||||||
|
.appendTo(menu);
|
||||||
|
|
||||||
var nameban = $("<li />").appendTo(ul);
|
|
||||||
var a = $("<a />").attr("tabindex", "-1").attr("href", "javascript:void(0);").appendTo(nameban);
|
|
||||||
a.text("Name Ban");
|
|
||||||
a.click(function() {
|
|
||||||
socket.emit("banName", {
|
|
||||||
name: name
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
$("<li />").addClass("divider").appendTo(ul);
|
entry.contextmenu(function(ev) {
|
||||||
|
ev.preventDefault();
|
||||||
var promote = $("<li />").appendTo(ul);
|
if(menu.css("display") == "none") {
|
||||||
var a = $("<a />").attr("tabindex", "-1").attr("href", "javascript:void(0);").appendTo(promote);
|
menu.show();
|
||||||
a.text("Promote");
|
|
||||||
a.click(function() {
|
|
||||||
socket.emit("promote", {
|
|
||||||
name: name
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
var demote = $("<li />").appendTo(ul);
|
|
||||||
var a = $("<a />").attr("tabindex", "-1").attr("href", "javascript:void(0);").appendTo(demote);
|
|
||||||
a.text("Demote");
|
|
||||||
a.click(function() {
|
|
||||||
socket.emit("demote", {
|
|
||||||
name: name
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
entry.click(function() {
|
|
||||||
if(ul.css("display") == "none") {
|
|
||||||
// Hide others
|
|
||||||
$("#userlist ul.dropdown-menu").each(function() {
|
|
||||||
if(this != ul) {
|
|
||||||
$(this).css("display", "none");
|
|
||||||
}
|
|
||||||
});
|
|
||||||
ul.css("display", "block");
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
ul.css("display", "none");
|
menu.hide();
|
||||||
}
|
}
|
||||||
|
return false;
|
||||||
});
|
});
|
||||||
|
|
||||||
return ul;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* queue stuff */
|
/* queue stuff */
|
||||||
|
|
||||||
function makeQueueEntry(video) {
|
function makeQueueEntry(video, addbtns) {
|
||||||
var li = $("<li/>");
|
var li = $("<li/>");
|
||||||
li.addClass("queue_entry");
|
li.addClass("queue_entry");
|
||||||
li.data("media", video);
|
li.data("media", video);
|
||||||
|
@ -243,8 +190,8 @@ function makeQueueEntry(video) {
|
||||||
li.addClass("queue_temp");
|
li.addClass("queue_temp");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(addbtns)
|
||||||
addQueueButtons(li);
|
addQueueButtons(li);
|
||||||
|
|
||||||
return li;
|
return li;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -268,8 +215,9 @@ function addQueueButtons(li) {
|
||||||
.click(function() {
|
.click(function() {
|
||||||
var i = $("#queue").children().index(li);
|
var i = $("#queue").children().index(li);
|
||||||
socket.emit("moveMedia", {
|
socket.emit("moveMedia", {
|
||||||
src: i,
|
from: i,
|
||||||
dest: i < POSITION ? POSITION : POSITION + 1
|
to: i < POSITION ? POSITION : POSITION + 1,
|
||||||
|
moveby: null
|
||||||
});
|
});
|
||||||
})
|
})
|
||||||
.appendTo(menu);
|
.appendTo(menu);
|
||||||
|
@ -344,6 +292,7 @@ function showOptionsMenu() {
|
||||||
var themeselect = $("<select/>");
|
var themeselect = $("<select/>");
|
||||||
$("<option/>").attr("value", "default").text("Default").appendTo(themeselect);
|
$("<option/>").attr("value", "default").text("Default").appendTo(themeselect);
|
||||||
$("<option/>").attr("value", "assets/css/darkstrap.css").text("Dark").appendTo(themeselect);
|
$("<option/>").attr("value", "assets/css/darkstrap.css").text("Dark").appendTo(themeselect);
|
||||||
|
$("<option/>").attr("value", "assets/css/semidark.css").text("Semidark").appendTo(themeselect);
|
||||||
themeselect.val(USEROPTS.theme);
|
themeselect.val(USEROPTS.theme);
|
||||||
addOption("Theme", themeselect);
|
addOption("Theme", themeselect);
|
||||||
|
|
||||||
|
@ -421,7 +370,7 @@ function showOptionsMenu() {
|
||||||
.text("Profile has moved to the account page");
|
.text("Profile has moved to the account page");
|
||||||
addOption("Profile", profile);
|
addOption("Profile", profile);
|
||||||
|
|
||||||
if(RANK >= Rank.Moderator) {
|
if(CLIENT.rank >= Rank.Moderator) {
|
||||||
$("<hr>").appendTo(form);
|
$("<hr>").appendTo(form);
|
||||||
var modhatcontainer = $("<label/>").addClass("checkbox")
|
var modhatcontainer = $("<label/>").addClass("checkbox")
|
||||||
.text("Show name color");
|
.text("Show name color");
|
||||||
|
@ -446,7 +395,7 @@ function showOptionsMenu() {
|
||||||
USEROPTS.blink_title = blink.prop("checked");
|
USEROPTS.blink_title = blink.prop("checked");
|
||||||
USEROPTS.chatbtn = sendbtn.prop("checked");
|
USEROPTS.chatbtn = sendbtn.prop("checked");
|
||||||
USEROPTS.altsocket = altsocket.prop("checked");
|
USEROPTS.altsocket = altsocket.prop("checked");
|
||||||
if(RANK >= Rank.Moderator) {
|
if(CLIENT.rank >= Rank.Moderator) {
|
||||||
USEROPTS.modhat = modhat.prop("checked");
|
USEROPTS.modhat = modhat.prop("checked");
|
||||||
}
|
}
|
||||||
saveOpts();
|
saveOpts();
|
||||||
|
@ -543,6 +492,8 @@ function applyOpts() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
applyOpts();
|
||||||
|
|
||||||
function showLoginMenu() {
|
function showLoginMenu() {
|
||||||
PLAYER.hide();
|
PLAYER.hide();
|
||||||
var modal = $("<div/>").addClass("modal hide fade")
|
var modal = $("<div/>").addClass("modal hide fade")
|
||||||
|
@ -678,8 +629,7 @@ function showPollMenu() {
|
||||||
}
|
}
|
||||||
|
|
||||||
function scrollChat() {
|
function scrollChat() {
|
||||||
// TODO add check
|
$("#messagebuffer").scrollTop($("#messagebuffer").prop("scrollHeight"));
|
||||||
$("#messagebuffer").scrollTop($("#messagebuffer").prop("scrollheight"));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function hasPermission(key) {
|
function hasPermission(key) {
|
||||||
|
@ -713,6 +663,15 @@ function handlePermissionChange() {
|
||||||
$("#queue_next").attr("disabled", !hasPermission("playlistnext"));
|
$("#queue_next").attr("disabled", !hasPermission("playlistnext"));
|
||||||
setVisible("#qlockbtn", CLIENT.rank >= 2);
|
setVisible("#qlockbtn", CLIENT.rank >= 2);
|
||||||
|
|
||||||
|
if(hasPermission("playlistmove")) {
|
||||||
|
$("#queue").sortable("enable");
|
||||||
|
$("#queue").addClass("queue_sortable");
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$("#queue").sortable("disable");
|
||||||
|
$("#queue").removeClass("queue_sortable");
|
||||||
|
}
|
||||||
|
|
||||||
setVisible("#getplaylist", hasPermission("playlistgeturl"));
|
setVisible("#getplaylist", hasPermission("playlistgeturl"));
|
||||||
setVisible("#clearplaylist", hasPermission("playlistclear"));
|
setVisible("#clearplaylist", hasPermission("playlistclear"));
|
||||||
setVisible("#shuffleplaylist", hasPermission("playlistshuffle"));
|
setVisible("#shuffleplaylist", hasPermission("playlistshuffle"));
|
||||||
|
@ -764,7 +723,7 @@ function loadSearchPage(page) {
|
||||||
var results = $("#library").data("entries");
|
var results = $("#library").data("entries");
|
||||||
var start = page * 100;
|
var start = page * 100;
|
||||||
for(var i = start; i < start + 100 && i < results.length; i++) {
|
for(var i = start; i < start + 100 && i < results.length; i++) {
|
||||||
var li = makeQueueEntry(results[i]);
|
var li = makeQueueEntry(results[i], false);
|
||||||
if(hasPermission("playlistadd")) {
|
if(hasPermission("playlistadd")) {
|
||||||
if(results[i].thumb) {
|
if(results[i].thumb) {
|
||||||
addLibraryButtons(li, results[i].id, "yt");
|
addLibraryButtons(li, results[i].id, "yt");
|
||||||
|
@ -785,6 +744,7 @@ function loadSearchPage(page) {
|
||||||
|
|
||||||
function addLibraryButtons(li, id, type) {
|
function addLibraryButtons(li, id, type) {
|
||||||
var btns = $("<div/>").addClass("btn-group")
|
var btns = $("<div/>").addClass("btn-group")
|
||||||
|
.addClass("pull-left")
|
||||||
.prependTo(li);
|
.prependTo(li);
|
||||||
|
|
||||||
if(hasPermission("playlistadd")) {
|
if(hasPermission("playlistadd")) {
|
||||||
|
@ -811,6 +771,19 @@ function addLibraryButtons(li, id, type) {
|
||||||
})
|
})
|
||||||
.appendTo(btns);
|
.appendTo(btns);
|
||||||
}
|
}
|
||||||
|
if(CLIENT.rank >= 2) {
|
||||||
|
$("<button/>").addClass("btn btn-mini btn-danger")
|
||||||
|
.html("<i class='icon-trash'></i>")
|
||||||
|
.click(function() {
|
||||||
|
socket.emit("uncache", {
|
||||||
|
id: id
|
||||||
|
});
|
||||||
|
li.hide("blind", function() {
|
||||||
|
li.remove();
|
||||||
|
});
|
||||||
|
})
|
||||||
|
.appendTo(btns);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* queue stuff */
|
/* queue stuff */
|
||||||
|
@ -824,7 +797,7 @@ function playlistMove(from, to) {
|
||||||
|
|
||||||
var old = $(q.children()[from]);
|
var old = $(q.children()[from]);
|
||||||
old.hide("blind", function() {
|
old.hide("blind", function() {
|
||||||
old.remove();
|
old.detach();
|
||||||
if(to >= q.children().length)
|
if(to >= q.children().length)
|
||||||
old.appendTo(q);
|
old.appendTo(q);
|
||||||
else
|
else
|
||||||
|
@ -935,8 +908,60 @@ function parseMediaLink(url) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function sendVideoUpdate() {
|
||||||
|
PLAYER.getTime(function(seconds) {
|
||||||
|
socket.emit("mediaUpdate", {
|
||||||
|
id: PLAYER.id,
|
||||||
|
currentTime: seconds,
|
||||||
|
paused: PLAYER.paused,
|
||||||
|
type: PLAYER.type
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
/* chat */
|
/* chat */
|
||||||
|
|
||||||
|
function formatChatMessage(data) {
|
||||||
|
var skip = data.username == LASTCHATNAME;
|
||||||
|
if(data.msgclass == "drink" || data.msgclass == "shout") {
|
||||||
|
skip = false;
|
||||||
|
}
|
||||||
|
LASTCHATNAME = data.username;
|
||||||
|
LASTCHATTIME = data.time;
|
||||||
|
var div = $("<div/>");
|
||||||
|
if(USEROPTS.show_timestamps) {
|
||||||
|
var time = $("<span/>").addClass("timestamp").appendTo(div);
|
||||||
|
var timestamp = new Date(data.time).toTimeString().split(" ")[0];
|
||||||
|
time.text("["+timestamp+"] ");
|
||||||
|
}
|
||||||
|
var name = $("<span/>");
|
||||||
|
if(!skip) {
|
||||||
|
name.appendTo(div);
|
||||||
|
}
|
||||||
|
$("<strong/>").addClass("username").text(data.username + ": ").appendTo(name);
|
||||||
|
var message = $("<span/>").appendTo(div);
|
||||||
|
message[0].innerHTML = data.msg;
|
||||||
|
if(data.modflair) {
|
||||||
|
name.addClass(getNameColor(data.modflair));
|
||||||
|
}
|
||||||
|
if(data.msgclass == "action") {
|
||||||
|
name.remove();
|
||||||
|
message.addClass("action");
|
||||||
|
message[0].innerHTML = data.username + " " + data.msg;
|
||||||
|
}
|
||||||
|
else if(data.msgclass == "drink") {
|
||||||
|
div.addClass("drink");
|
||||||
|
}
|
||||||
|
else if(data.msgclass == "shout") {
|
||||||
|
message.addClass("shout");
|
||||||
|
name.addClass("shout");
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
message.addClass(data.msgclass);
|
||||||
|
}
|
||||||
|
return div;
|
||||||
|
}
|
||||||
|
|
||||||
function addChatMessage(data) {
|
function addChatMessage(data) {
|
||||||
if(IGNORED.indexOf(data.username) != -1) {
|
if(IGNORED.indexOf(data.username) != -1) {
|
||||||
return;
|
return;
|
||||||
|
@ -985,3 +1010,26 @@ function addChatMessage(data) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* layouts */
|
||||||
|
|
||||||
|
function fluidLayout() {
|
||||||
|
$(".row").each(function() {
|
||||||
|
$(this).removeClass("row").addClass("row-fluid");
|
||||||
|
});
|
||||||
|
$(".container").each(function() {
|
||||||
|
$(this).removeClass("container").addClass("container-fluid");
|
||||||
|
});
|
||||||
|
VWIDTH = $("#ytapiplayer").parent().css("width").replace("px", "");
|
||||||
|
VHEIGHT = ""+parseInt(parseInt(VWIDTH) * 9 / 16);
|
||||||
|
$("#messagebuffer").css("height", (VHEIGHT - 31) + "px");
|
||||||
|
$("#userlist").css("height", (VHEIGHT - 31) + "px");
|
||||||
|
$("#ytapiplayer").attr("width", VWIDTH);
|
||||||
|
$("#ytapiplayer").attr("height", VHEIGHT);
|
||||||
|
$("#chatline").removeClass().addClass("span12");
|
||||||
|
}
|
||||||
|
|
||||||
|
function synchtubeLayout() {
|
||||||
|
$("#videowrap").detach().insertBefore($("#chatwrap"));
|
||||||
|
$("#rightpane-outer").detach().insertBefore($("#leftpane-outer"));
|
||||||
|
}
|
||||||
|
|
|
@ -88,10 +88,10 @@
|
||||||
<!-- left pane - Library + user playlists -->
|
<!-- left pane - Library + user playlists -->
|
||||||
<div class="span5" id="leftpane-outer">
|
<div class="span5" id="leftpane-outer">
|
||||||
<div class="row-fluid" id="leftpane-inner">
|
<div class="row-fluid" id="leftpane-inner">
|
||||||
|
<button class="btn btn-primary btn-small" id="newpollbtn">New Poll</button>
|
||||||
<!-- poll container -->
|
<!-- poll container -->
|
||||||
<div class="span12" id="pollwrap">
|
<div class="span12" id="pollwrap">
|
||||||
<!-- new poll controls -->
|
<!-- new poll controls -->
|
||||||
<button class="btn btn-primary btn-small" id="newpollbtn">New Poll</button>
|
|
||||||
</div>
|
</div>
|
||||||
<!-- library search -->
|
<!-- library search -->
|
||||||
<div class="span12 pointer" id="librarytoggle">
|
<div class="span12 pointer" id="librarytoggle">
|
||||||
|
@ -106,6 +106,8 @@
|
||||||
<button class="btn" id="library_search">Library</button>
|
<button class="btn" id="library_search">Library</button>
|
||||||
<button class="btn" id="youtube_search">YouTube</button>
|
<button class="btn" id="youtube_search">YouTube</button>
|
||||||
</div>
|
</div>
|
||||||
|
<ul class="span12 videolist" id="library">
|
||||||
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<!-- user playlists -->
|
<!-- user playlists -->
|
||||||
<div class="span12 pointer" id="userpltoggle">
|
<div class="span12 pointer" id="userpltoggle">
|
||||||
|
@ -182,12 +184,6 @@
|
||||||
<script src="./assets/js/ui.js"></script>
|
<script src="./assets/js/ui.js"></script>
|
||||||
<script src="./assets/js/callbacks.js"></script>
|
<script src="./assets/js/callbacks.js"></script>
|
||||||
<script src="./assets/js/notwebsocket.js"></script>
|
<script src="./assets/js/notwebsocket.js"></script>
|
||||||
<!--
|
|
||||||
<script src="./assets/js/iourl.js"></script>
|
|
||||||
<script src="./assets/js/functions.js"></script>
|
|
||||||
<script src="./assets/js/client.js"></script>
|
|
||||||
<script src="./assets/js/callbacks.js"></script>
|
|
||||||
-->
|
|
||||||
<!-- APIs -->
|
<!-- APIs -->
|
||||||
<script src="http://api.dmcdn.net/all.js"></script>
|
<script src="http://api.dmcdn.net/all.js"></script>
|
||||||
<script src="http://jwpsrv.com/library/QouFCLBMEeKC+CIACpYGxA.js"></script>
|
<script src="http://jwpsrv.com/library/QouFCLBMEeKC+CIACpYGxA.js"></script>
|
||||||
|
|
Loading…
Reference in New Issue