mirror of https://github.com/calzoneman/sync.git
Still working on things
This commit is contained in:
parent
0214910d7e
commit
9c3596b04a
|
@ -39,13 +39,6 @@ html, body {
|
|||
overflow-y: scroll;
|
||||
}
|
||||
|
||||
.videolist li {
|
||||
margin: 2px 0 0 auto;
|
||||
padding: 2px;
|
||||
font-size: 8pt;
|
||||
border: 1px solid #aaaaaa; // [](/w21)
|
||||
}
|
||||
|
||||
.qe_btn {
|
||||
height: 20px;
|
||||
font-family: Monospace;
|
||||
|
@ -85,10 +78,6 @@ html, body {
|
|||
font-size: 8pt;
|
||||
}
|
||||
|
||||
#queue {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
#usercountwrap, #currenttitle {
|
||||
border: 1px solid #aaaaaa;
|
||||
border-bottom: none;
|
||||
|
@ -103,10 +92,24 @@ html, body {
|
|||
cursor: pointer;
|
||||
}
|
||||
|
||||
#leftpane-inner div.span12, #rightpane-inner div.span12 {
|
||||
#leftpane-inner div.span12, #rightpane-inner div.span12,
|
||||
#leftpane-inner ul, #rightpane-inner ul {
|
||||
margin-left: 0;
|
||||
}
|
||||
|
||||
#queue {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.queue_entry {
|
||||
cursor: row-resize;
|
||||
background-color: #ffffff;
|
||||
margin: 2px 0 0 auto;
|
||||
padding: 2px;
|
||||
font-size: 8pt;
|
||||
border: 1px solid #aaaaaa; // [](/w21)
|
||||
}
|
||||
|
||||
#plmeta {
|
||||
border: 1px solid #aaaaaa;
|
||||
background-color: #ffffff;
|
||||
|
|
|
@ -11,14 +11,15 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
|
|||
|
||||
Callbacks = {
|
||||
|
||||
/* fired when socket connection completes */
|
||||
connect: function() {
|
||||
socket.emit("joinChannel", {
|
||||
name: CHANNEL
|
||||
name: CHANNEL.name
|
||||
});
|
||||
if(uname && session) {
|
||||
socket.emit("login", {
|
||||
name: uname,
|
||||
session: session
|
||||
name: NAME,
|
||||
session: SESSION
|
||||
});
|
||||
}
|
||||
$("<div/>").addClass("server-msg-reconnect")
|
||||
|
@ -34,7 +35,7 @@ Callbacks = {
|
|||
.addClass("server-msg-disconnect")
|
||||
.text("Disconnected from server. Attempting reconnection...")
|
||||
.appendTo($("#messagebuffer"));
|
||||
$("#messagebuffer").scrollTop($("#messagebuffer").prop("scrollHeight"));
|
||||
scrollChat();
|
||||
},
|
||||
|
||||
errorMsg: function(data) {
|
||||
|
@ -42,15 +43,9 @@ Callbacks = {
|
|||
},
|
||||
|
||||
announcement: function(data) {
|
||||
$("#announcerow").html("");
|
||||
$("#announcerow").css("display", "");
|
||||
var div = $("<div/>").addClass("alert")
|
||||
.appendTo($("#announcerow"));
|
||||
$("<button/>").addClass("close pull-right").text("×")
|
||||
.appendTo(div)
|
||||
.click(function() { div.remove(); });
|
||||
$("<h3/>").text(data.title).appendTo(div);
|
||||
$("<p/>").html(data.text).appendTo(div);
|
||||
$("#announcements").html("");
|
||||
makeAlert(data.title, data.text)
|
||||
.appendTo($("#announcements"));
|
||||
},
|
||||
|
||||
kick: function(data) {
|
||||
|
@ -58,7 +53,7 @@ Callbacks = {
|
|||
$("<div/>").addClass("server-msg-disconnect")
|
||||
.text("Kicked: " + data.reason)
|
||||
.appendTo($("#messagebuffer"));
|
||||
$("#messagebuffer").scrollTop($("#messagebuffer").prop("scrollheight"));
|
||||
scrollChat();
|
||||
},
|
||||
|
||||
noflood: function(data) {
|
||||
|
@ -66,13 +61,14 @@ Callbacks = {
|
|||
.addClass("server-msg-disconnect")
|
||||
.text(data.action + ": " + data.msg)
|
||||
.appendTo($("#messagebuffer"));
|
||||
$("#messagebuffer").scrollTop($("#messagebuffer").prop("scrollHeight"));
|
||||
scrollChat();
|
||||
},
|
||||
|
||||
channelNotRegistered: function() {
|
||||
var div = $("<div/>").addClass("alert alert-info").attr("id", "chregnotice")
|
||||
var div = $("<div/>").addClass("alert alert-info")
|
||||
.attr("id", "chregnotice")
|
||||
.insertBefore($("#main"));
|
||||
$("<button/>").addClass("close pull-right").text("×")
|
||||
$("<button/>").addClass("close pull-right").html("×")
|
||||
.appendTo(div)
|
||||
.click(function() { div.remove(); });
|
||||
$("<h3/>").text("This channel isn't registered").appendTo(div);
|
||||
|
@ -88,7 +84,8 @@ Callbacks = {
|
|||
$("#chregnotice").remove();
|
||||
}
|
||||
else {
|
||||
alert(data.error);
|
||||
makeAlert("Error", data.error, "alert-error")
|
||||
.insertAfter($("#chregnotice"));
|
||||
}
|
||||
},
|
||||
|
||||
|
@ -101,17 +98,15 @@ Callbacks = {
|
|||
}
|
||||
},
|
||||
|
||||
updateMotd: function(data) {
|
||||
$("#motdtext").val(data.motd);
|
||||
setMotd: function(data) {
|
||||
$("#motd").html(data.html);
|
||||
if(data.motd != "")
|
||||
$("#motd").parent().css("display", "");
|
||||
$("#motd").show();
|
||||
else
|
||||
$("#motd").parent().css("display", "none");
|
||||
$("#motd")[0].innerHTML = data.html;
|
||||
$("#motd").hide();
|
||||
},
|
||||
|
||||
chatFilters: function(data) {
|
||||
var entries = data.filters;
|
||||
chatFilters: function(entries) {
|
||||
var tbl = $("#filtereditor table");
|
||||
if(tbl.children().length > 1) {
|
||||
$(tbl.children()[1]).remove();
|
||||
|
@ -179,7 +174,9 @@ Callbacks = {
|
|||
var dummy = new RegExp(re, flags);
|
||||
}
|
||||
catch(e) {
|
||||
alert("Invalid regex: " + e);
|
||||
makeAlert("Invalid regex", e+"", "alert-error")
|
||||
.insertAfter($("#filtereditor table"));
|
||||
return;
|
||||
}
|
||||
socket.emit("chatFilter", {
|
||||
cmd: "update",
|
||||
|
@ -197,6 +194,7 @@ Callbacks = {
|
|||
},
|
||||
|
||||
channelOpts: function(opts) {
|
||||
// TODO update if necessary when HTML admin stuff added
|
||||
$("#opt_pagetitle").attr("placeholder", opts.pagetitle);
|
||||
document.title = opts.pagetitle;
|
||||
PAGETITLE = opts.pagetitle;
|
||||
|
@ -216,21 +214,12 @@ Callbacks = {
|
|||
$("#opt_allow_voteskip").prop("checked", opts.allow_voteskip);
|
||||
$("#opt_voteskip_ratio").val(opts.voteskip_ratio);
|
||||
if(opts.customjs.trim() != "") {
|
||||
if(opts.customjs != CUSTOMJS) {
|
||||
if(opts.customjs != CHANNEL.opts.customjs) {
|
||||
$.getScript(opts.customjs);
|
||||
CUSTOMJS = opts.customjs;
|
||||
}
|
||||
}
|
||||
|
||||
CHANNELOPTS = opts;
|
||||
if(opts.qopen_allow_qnext)
|
||||
$("#queue_next").attr("disabled", false);
|
||||
else if(RANK < Rank.Moderator && !LEADER)
|
||||
$("#queue_next").attr("disabled", true);
|
||||
if(opts.qopen_allow_playnext)
|
||||
$("#play_next").attr("disabled", false);
|
||||
else if(RANK < Rank.Moderator && !LEADER)
|
||||
$("#play_next").attr("disabled", true);
|
||||
CHANNEL.opts = opts;
|
||||
|
||||
if(opts.allow_voteskip)
|
||||
$("#voteskip").attr("disabled", false);
|
||||
|
@ -240,8 +229,9 @@ Callbacks = {
|
|||
},
|
||||
|
||||
setPermissions: function(perms) {
|
||||
CHANPERMS = perms;
|
||||
genPermissionsEditor();
|
||||
CHANNEL.perms = perms;
|
||||
if(CLIENT.rank >= Rank.Admin)
|
||||
genPermissionsEditor();
|
||||
handlePermissionChange();
|
||||
},
|
||||
|
||||
|
@ -267,8 +257,7 @@ Callbacks = {
|
|||
}
|
||||
},
|
||||
|
||||
banlist: function(data) {
|
||||
var entries = data.entries;
|
||||
banlist: function(entries) {
|
||||
var tbl = $("#banlist table");
|
||||
if(tbl.children().length > 1) {
|
||||
$(tbl.children()[1]).remove();
|
||||
|
@ -280,6 +269,7 @@ Callbacks = {
|
|||
$("<i/>").addClass("icon-remove-circle").appendTo(remove);
|
||||
var ip = $("<td/>").text(entries[i].ip).appendTo(tr);
|
||||
var name = $("<td/>").text(entries[i].name).appendTo(tr);
|
||||
var aliases = $("<td/>").text(entries[i].aliases).appendTo(tr);
|
||||
var banner = $("<td/>").text(entries[i].banner).appendTo(tr);
|
||||
|
||||
var callback = (function(id, name) { return function() {
|
||||
|
@ -292,47 +282,8 @@ Callbacks = {
|
|||
}
|
||||
},
|
||||
|
||||
seenlogins: function(data) {
|
||||
var entries = data.entries;
|
||||
var tbl = $("#loginlog table");
|
||||
if(tbl.children().length > 1) {
|
||||
$(tbl.children()[1]).remove();
|
||||
}
|
||||
$("#loginlog_pagination").remove();
|
||||
entries.sort(function(a, b) {
|
||||
var x = a.names.join(",").toLowerCase();
|
||||
var y = b.names.join(",").toLowerCase();
|
||||
// Force blanknames to the bottom
|
||||
if(x == "") {
|
||||
return 1;
|
||||
}
|
||||
if(y == "") {
|
||||
return -1;
|
||||
}
|
||||
return x == y ? 0 : (x < y ? -1 : 1);
|
||||
});
|
||||
$("#loginlog").data("entries", entries);
|
||||
if(entries.length > 20) {
|
||||
var pag = $("<div/>").addClass("pagination span12")
|
||||
.attr("id", "loginlog_pagination")
|
||||
.prependTo($("#loginlog"));
|
||||
var btns = $("<ul/>").appendTo(pag);
|
||||
for(var i = 0; i < entries.length / 20; i++) {
|
||||
var li = $("<li/>").appendTo(btns);
|
||||
(function(i) {
|
||||
$("<a/>").attr("href", "javascript:void(0)")
|
||||
.text(i+1)
|
||||
.click(function() {
|
||||
loadLoginlogPage(i);
|
||||
})
|
||||
.appendTo(li);
|
||||
})(i);
|
||||
}
|
||||
}
|
||||
loadLoginlogPage(0);
|
||||
},
|
||||
|
||||
acl: function(entries) {
|
||||
channelRanks: function(entries) {
|
||||
// TODO Edit if necessary
|
||||
entries.sort(function(a, b) {
|
||||
var x = a.name.toLowerCase();
|
||||
var y = b.name.toLowerCase();
|
||||
|
@ -387,11 +338,12 @@ Callbacks = {
|
|||
|
||||
/* REGION Rank Stuff */
|
||||
|
||||
rank: function(data) {
|
||||
RANK = data.rank;
|
||||
rank: function(r) {
|
||||
CLIENT.rank = r;
|
||||
handlePermissionChange();
|
||||
},
|
||||
|
||||
/* should not be relevant since registration is on account.html */
|
||||
register: function(data) {
|
||||
if(data.error) {
|
||||
alert(data.error);
|
||||
|
@ -405,20 +357,24 @@ Callbacks = {
|
|||
}
|
||||
}
|
||||
else {
|
||||
$("#welcome").text("Logged in as " + uname);
|
||||
$("#welcome").text("Logged in as " + data.name);
|
||||
$("#loginform").css("display", "none");
|
||||
$("#logoutform").css("display", "");
|
||||
$("#loggedin").css("display", "");
|
||||
session = data.session || "";
|
||||
createCookie("sync_uname", uname, 7);
|
||||
createCookie("sync_session", session, 7);
|
||||
SESSION = data.session || "";
|
||||
CLIENT.name = data.name;
|
||||
CLIENT.logged_in = true;
|
||||
if(SESSION) {
|
||||
createCookie("cytube_uname", CLIENT.name, 7);
|
||||
createCookie("cytube_session", SESSION, 7);
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
/* REGION Chat */
|
||||
usercount: function(data) {
|
||||
var text = data.count + " connected user";
|
||||
if(data.count != 1) {
|
||||
usercount: function(count) {
|
||||
var text = count + " connected user";
|
||||
if(count != 1) {
|
||||
text += "s";
|
||||
}
|
||||
$("#usercount").text(text);
|
||||
|
@ -443,12 +399,8 @@ Callbacks = {
|
|||
var div = $("<div/>").attr("class", "userlist_item");
|
||||
var flair = $("<span/>").appendTo(div);
|
||||
var nametag = $("<span/>").text(data.name).appendTo(div);
|
||||
formatUserlistItem(div[0], data);
|
||||
formatUserlistItem(div, data);
|
||||
addUserDropdown(div, data.name);
|
||||
if(data.name == uname) {
|
||||
PROFILE.image = data.profile.image;
|
||||
PROFILE.text = data.profile.text;
|
||||
}
|
||||
var users = $("#userlist").children();
|
||||
for(var i = 0; i < users.length; i++) {
|
||||
var othername = users[i].children[1].innerHTML;
|
||||
|
@ -461,15 +413,15 @@ Callbacks = {
|
|||
},
|
||||
|
||||
updateUser: function(data) {
|
||||
if(data.name == uname) {
|
||||
PROFILE.text = data.profile.text;
|
||||
PROFILE.image = data.profile.image;
|
||||
LEADER = data.leader;
|
||||
RANK = data.rank;
|
||||
if(data.name == CLIENT.name) {
|
||||
CLIENT.leader = data.leader;
|
||||
CLIENT.rank = data.rank;
|
||||
handlePermissionChange();
|
||||
if(LEADER) {
|
||||
if(CLIENT.leader) {
|
||||
// I'm a leader! Set up sync function
|
||||
sendVideoUpdate = function() {
|
||||
if(LEADTMR)
|
||||
clearInterval(LEADTMR);
|
||||
LEADTMR = setInterval(function() {
|
||||
PLAYER.getTime(function(seconds) {
|
||||
socket.emit("mediaUpdate", {
|
||||
id: PLAYER.id,
|
||||
|
@ -478,11 +430,13 @@ Callbacks = {
|
|||
type: PLAYER.type
|
||||
});
|
||||
});
|
||||
};
|
||||
}, 5000);
|
||||
}
|
||||
// I'm not a leader. Don't send syncs to the server
|
||||
else {
|
||||
sendVideoUpdate = function() { }
|
||||
if(LEADTMR)
|
||||
clearInterval(LEADTMR);
|
||||
LEADTMR = false;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -491,7 +445,7 @@ Callbacks = {
|
|||
var name = users[i].children[1].innerHTML;
|
||||
// Reformat user
|
||||
if(name == data.name) {
|
||||
formatUserlistItem(users[i], data);
|
||||
formatUserlistItem($(users[i]), data);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -502,7 +456,10 @@ Callbacks = {
|
|||
for(var i = 0; i < users.length; i++) {
|
||||
var name = users[i].children[1].innerHTML;
|
||||
if(name == data.name) {
|
||||
$("#userlist")[0].removeChild(users[i]);
|
||||
$(users[i]).remove();
|
||||
// Note: no break statement here because allowing
|
||||
// the loop to continue means a free cleanup if something
|
||||
// goes wrong and there's a duplicate name
|
||||
}
|
||||
}
|
||||
},
|
||||
|
@ -524,41 +481,40 @@ Callbacks = {
|
|||
/* REGION Playlist Stuff */
|
||||
playlist: function(data) {
|
||||
// Clear the playlist first
|
||||
var ul = $("#queue")[0];
|
||||
var n = ul.children.length;
|
||||
for(var i = 0; i < n; i++) {
|
||||
ul.removeChild(ul.children[0]);
|
||||
}
|
||||
for(var i = 0; i < data.pl.length; i++) {
|
||||
var li = makeQueueEntry(data.pl[i]);
|
||||
if(RANK >= Rank.Moderator || OPENQUEUE || LEADER)
|
||||
addQueueButtons(li);
|
||||
$(li).attr("title", data.pl[i].queueby
|
||||
? ("Added by: " + data.pl[i].queueby)
|
||||
: "Added by: Unknown");
|
||||
$(li).appendTo(ul);
|
||||
var q = $("#queue");
|
||||
q.html("");
|
||||
|
||||
|
||||
for(var i = 0; i < data.length; i++) {
|
||||
Callbacks.queue({
|
||||
media: data[i],
|
||||
pos: q.children().length
|
||||
});
|
||||
}
|
||||
},
|
||||
|
||||
updatePlaylistMeta: function(data) {
|
||||
$("#plcount").text(data.count + " items");
|
||||
setPlaylistMeta: function(data) {
|
||||
var c = data.count + " item";
|
||||
if(data.count != 1)
|
||||
c += "s";
|
||||
$("#plcount").text(c);
|
||||
$("#pllength").text(data.time);
|
||||
},
|
||||
|
||||
queue: function(data) {
|
||||
var li = makeQueueEntry(data.media);
|
||||
if(RANK >= Rank.Moderator || OPENQUEUE || LEADER)
|
||||
addQueueButtons(li);
|
||||
$(li).css("display", "none");
|
||||
li.hide();
|
||||
addQueueButtons(li);
|
||||
var idx = data.pos;
|
||||
var ul = $("#queue")[0];
|
||||
$(li).attr("title", data.media.queueby
|
||||
var q = $("#queue");
|
||||
li.attr("title", data.media.queueby
|
||||
? ("Added by: " + data.media.queueby)
|
||||
: "Added by: Unknown");
|
||||
$(li).appendTo(ul);
|
||||
if(idx < ul.children.length - 1)
|
||||
moveVideo(ul.children.length - 1, idx);
|
||||
$(li).show("blind");
|
||||
if(idx < q.children().length - 1)
|
||||
li.insertBefore(q.children()[idx])
|
||||
else
|
||||
li.appendTo(q);
|
||||
li.show("blind");
|
||||
},
|
||||
|
||||
queueFail: function(data) {
|
||||
|
@ -566,21 +522,23 @@ Callbacks = {
|
|||
data = "Queue failed. Check your link to make sure it is valid.";
|
||||
}
|
||||
makeAlert("Error", data, "alert-error")
|
||||
.insertAfter($("#playlist_controls"));
|
||||
.insertAfter($("#mediaurl").parent());
|
||||
},
|
||||
|
||||
setTemp: function(data) {
|
||||
// TODO redo this when buttons are decided
|
||||
var li = $("#queue").children()[data.idx];
|
||||
var buttons = $(li).find(".qe_btn");
|
||||
li = $(li);
|
||||
var buttons = li.find(".qe_btn");
|
||||
if(buttons.length == 5) {
|
||||
$(buttons[4]).removeClass("btn-danger btn-success");
|
||||
$(buttons[4]).addClass(data.temp ? "btn-success" : "btn-danger");
|
||||
}
|
||||
if(data.temp) {
|
||||
$(li).addClass("alert alert-error");
|
||||
li.addClass("alert alert-error");
|
||||
}
|
||||
else {
|
||||
$(li).removeClass("alert alert-error");
|
||||
li.removeClass("alert alert-error");
|
||||
}
|
||||
},
|
||||
|
||||
|
@ -590,22 +548,24 @@ Callbacks = {
|
|||
},
|
||||
|
||||
moveVideo: function(data) {
|
||||
// Not recursive
|
||||
moveVideo(data.src, data.dest);
|
||||
playlistMove(data.src, data.dest);
|
||||
},
|
||||
|
||||
updatePlaylistIdx: function(data) {
|
||||
if(data.old != undefined) {
|
||||
var liold = $("#queue").children()[data.old];
|
||||
$(liold).removeClass("alert alert-info");
|
||||
}
|
||||
var linew = $("#queue").children()[data.idx];
|
||||
$(linew).addClass("alert alert-info");
|
||||
setPosition: function(data) {
|
||||
$("#queue li").each(function() {
|
||||
$(this).removeClass("queue_active");
|
||||
});
|
||||
if(data.position < 0)
|
||||
return;
|
||||
POSITION = data.position;
|
||||
var linew = $("#queue").children()[POSITION];
|
||||
$(linew).addClass("queue_active");
|
||||
|
||||
$("#queue").scrollTop(0);
|
||||
var scroll = $(linew).position().top - $("#queue").position().top;
|
||||
$("#queue").scrollTop(scroll);
|
||||
POSITION = data.idx;
|
||||
if(CHANNELOPTS.allow_voteskip)
|
||||
|
||||
if(CHANNEL.opts.allow_voteskip)
|
||||
$("#voteskip").attr("disabled", false);
|
||||
},
|
||||
|
||||
|
@ -616,12 +576,12 @@ Callbacks = {
|
|||
fixSoundcloudShit();
|
||||
if(data.type != "jw" && PLAYER.type == "jw") {
|
||||
// Is it so hard to not mess up my DOM?
|
||||
var wtf = $("<div/>").attr("id", "ytapiplayer")
|
||||
$("<div/>").attr("id", "ytapiplayer")
|
||||
.insertBefore($("#ytapiplayer_wrapper"));
|
||||
$("#ytapiplayer_wrapper").remove();
|
||||
}
|
||||
if(data.type != PLAYER.type) {
|
||||
PLAYER = new Media(data);
|
||||
PLAYER = new Player(data);
|
||||
}
|
||||
if(PLAYER.update) {
|
||||
PLAYER.update(data);
|
||||
|
@ -634,9 +594,10 @@ Callbacks = {
|
|||
}
|
||||
},
|
||||
|
||||
queueLock: function(data) {
|
||||
OPENQUEUE = !data.locked;
|
||||
if(OPENQUEUE) {
|
||||
setPlaylistLocked: function(data) {
|
||||
CHANNEL.openqueue = !data.locked;
|
||||
// TODO handlePermissionsChange?
|
||||
if(CHANNEL.openqueue) {
|
||||
$("#playlist_controls").css("display", "");
|
||||
if(RANK < Rank.Moderator) {
|
||||
$("#qlockbtn").css("display", "none");
|
||||
|
@ -651,19 +612,19 @@ Callbacks = {
|
|||
$("#playlist_controls").css("display", "none");
|
||||
rebuildPlaylist();
|
||||
}
|
||||
if(OPENQUEUE) {
|
||||
if(CHANNEL.openqueue) {
|
||||
$("#qlockbtn").removeClass("btn-danger")
|
||||
.addClass("btn-success")
|
||||
.text("Lock Queue");
|
||||
.text("Lock Playlist");
|
||||
}
|
||||
else {
|
||||
$("#qlockbtn").removeClass("btn-success")
|
||||
.addClass("btn-danger")
|
||||
.text("Unlock Queue");
|
||||
.text("Unlock Playlist");
|
||||
}
|
||||
},
|
||||
|
||||
librarySearchResults: function(data) {
|
||||
searchResults: function(data) {
|
||||
clearSearchResults();
|
||||
$("#library").data("entries", data.results);
|
||||
if(data.results.length > 100) {
|
||||
|
@ -688,13 +649,14 @@ Callbacks = {
|
|||
|
||||
/* REGION Polls */
|
||||
newPoll: function(data) {
|
||||
closePoll();
|
||||
Callbacks.closePoll();
|
||||
var pollMsg = $("<div/>").addClass("poll-notify")
|
||||
.text(data.initiator + " opened a poll: \"" + data.title + "\"")
|
||||
.appendTo($("#messagebuffer"));
|
||||
$("#messagebuffer").scrollTop($("#messagebuffer").prop("scrollHeight"));
|
||||
scrollChat();
|
||||
|
||||
var poll = $("<div/>").addClass("well active").prependTo($("#pollcontainer"));
|
||||
$("<button/>").addClass("close pull-right").text("×")
|
||||
$("<button/>").addClass("close pull-right").html("×")
|
||||
.appendTo(poll)
|
||||
.click(function() { poll.remove(); });
|
||||
if(hasPermission("pollctl")) {
|
||||
|
@ -707,18 +669,20 @@ Callbacks = {
|
|||
|
||||
$("<h3/>").text(data.title).appendTo(poll);
|
||||
for(var i = 0; i < data.options.length; i++) {
|
||||
var callback = (function(i) { return function() {
|
||||
(function(i) {
|
||||
var callback = function() {
|
||||
socket.emit("vote", {
|
||||
option: i
|
||||
});
|
||||
poll.find(".option button").each(function() {
|
||||
$(this).attr("disabled", "disabled");
|
||||
});
|
||||
} })(i);
|
||||
}
|
||||
$("<button/>").addClass("btn").text(data.counts[i])
|
||||
.prependTo($("<div/>").addClass("option").text(data.options[i])
|
||||
.appendTo(poll))
|
||||
.click(callback);
|
||||
})(i);
|
||||
|
||||
}
|
||||
|
||||
|
@ -735,8 +699,16 @@ Callbacks = {
|
|||
},
|
||||
|
||||
closePoll: function() {
|
||||
// Not recursive
|
||||
closePoll();
|
||||
if($("#pollcontainer .active").length != 0) {
|
||||
var poll = $("#pollcontainer .active");
|
||||
poll.removeClass("active").addClass("muted");
|
||||
poll.find(".option button").each(function() {
|
||||
$(this).attr("disabled", true);
|
||||
});
|
||||
poll.find(".btn-danger").each(function() {
|
||||
$(this).remove()
|
||||
});
|
||||
}
|
||||
},
|
||||
|
||||
savePlaylist: function(data) {
|
||||
|
@ -744,8 +716,9 @@ Callbacks = {
|
|||
makeAlert("Success", "Playlist saved.", "alert-success");
|
||||
}
|
||||
else {
|
||||
alert("DBG error " + data.error);
|
||||
makeAlert("Error", data.error, "alert-error");
|
||||
makeAlert("Error", data.error, "alert-error")
|
||||
.addClass("span12")
|
||||
.insertBefore($("#userpl_list"));
|
||||
}
|
||||
},
|
||||
|
||||
|
@ -753,8 +726,7 @@ Callbacks = {
|
|||
if(data.error) {
|
||||
makeAlert("Error", data.error, "alert-error")
|
||||
.addClass("span12")
|
||||
.css("margin-left", "0")
|
||||
.insertBefore($("#userpl_name").parent());
|
||||
.insertBefore($("#userpl_list"));
|
||||
}
|
||||
else {
|
||||
var pls = data.pllist;
|
||||
|
@ -827,6 +799,7 @@ Callbacks = {
|
|||
}
|
||||
}
|
||||
|
||||
/*
|
||||
$.getScript(IO_URL+"/socket.io/socket.io.js", function() {
|
||||
try {
|
||||
socket = io.connect(IO_URL);
|
||||
|
@ -838,9 +811,14 @@ $.getScript(IO_URL+"/socket.io/socket.io.js", function() {
|
|||
Callbacks.disconnect();
|
||||
}
|
||||
});
|
||||
*/
|
||||
|
||||
window.setupNewSocket = function() {
|
||||
setupCallbacks = function() {
|
||||
for(var key in Callbacks) {
|
||||
socket.on(key, Callbacks[key]);
|
||||
(function(key) {
|
||||
socket.on(key, function() {
|
||||
Callbacks[key]();
|
||||
});
|
||||
})(key);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
var CLIENT = {
|
||||
rank: -1,
|
||||
leader: false,
|
||||
name: "",
|
||||
logged_in: false,
|
||||
profile: {
|
||||
|
@ -12,6 +13,7 @@ var CHANNEL = {
|
|||
opts: {},
|
||||
openqueue: false,
|
||||
perms: {},
|
||||
name: false // TODO load name from URL
|
||||
};
|
||||
|
||||
var PLAYER = false;
|
||||
|
@ -31,6 +33,7 @@ var TITLE_BLINK;
|
|||
var KICKED = false;
|
||||
var NAME = readCookie("cytube_uname");
|
||||
var SESSION = readCookie("cytube_session");
|
||||
var LEADTMR = false;
|
||||
|
||||
function getOrDefault(k, def) {
|
||||
var v = localStorage.getItem(k);
|
||||
|
@ -95,3 +98,6 @@ function readCookie(name) {
|
|||
function eraseCookie(name) {
|
||||
createCookie(name,"",-1);
|
||||
}
|
||||
|
||||
/* to be implemented in callbacks.js */
|
||||
function setupCallbacks() { }
|
||||
|
|
|
@ -2,11 +2,13 @@
|
|||
function generateToggle(chevron, div) {
|
||||
$(chevron).click(function() {
|
||||
if($(div).css("display") == "none") {
|
||||
$(chevron).html($(chevron).html().replace(/Show/, "Hide"));
|
||||
$(div).show();
|
||||
$(chevron+" i").removeClass("icon-chevron-down")
|
||||
.addClass("icon-chevron-up");
|
||||
}
|
||||
else {
|
||||
$(chevron).html($(chevron).html().replace(/Hide/, "Show"));
|
||||
$(div).hide();
|
||||
$(chevron+" i").removeClass("icon-chevron-up")
|
||||
.addClass("icon-chevron-down");
|
||||
|
@ -43,7 +45,7 @@ $("#logout").click(function() {
|
|||
});
|
||||
|
||||
/* chatbox */
|
||||
$("#chatline").keyDown(function(ev) {
|
||||
$("#chatline").keydown(function(ev) {
|
||||
if(ev.keyCode == 13) {
|
||||
var msg = $("#chatline").val();
|
||||
if(msg.trim()) {
|
||||
|
@ -155,6 +157,11 @@ $("#userpl_save").click(function() {
|
|||
|
||||
/* playlist controls */
|
||||
|
||||
$(function() {
|
||||
$("#queue").sortable();
|
||||
$("#queue").disableSelection();
|
||||
});
|
||||
|
||||
function queue(pos) {
|
||||
var links = $("#mediaurl").val().split(",");
|
||||
if(pos == "next") {
|
||||
|
|
|
@ -10,6 +10,7 @@
|
|||
<link href="./assets/css/bootstrap.css" rel="stylesheet">
|
||||
<link href="./assets/css/bootstrap-responsive.css" rel="stylesheet">
|
||||
<link href="./assets/css/ytsync.css" rel="stylesheet" id="defaultcss">
|
||||
<link href="http://code.jquery.com/ui/1.10.3/themes/smoothness/jquery-ui.css" rel="stylesheet">
|
||||
<style>
|
||||
body {
|
||||
padding-top: 60px;
|
||||
|
@ -53,7 +54,7 @@
|
|||
</div>
|
||||
</div>
|
||||
<!-- announcement area -->
|
||||
<div class="row-fluid" id="announcements" style="display: none">
|
||||
<div class="row-fluid" id="announcements">
|
||||
</div>
|
||||
<!-- main row -->
|
||||
<div class="row" id="main">
|
||||
|
@ -168,9 +169,12 @@
|
|||
</div>
|
||||
|
||||
<script src="./assets/js/jquery.js"></script>
|
||||
<script src="http://code.jquery.com/ui/1.10.3/jquery-ui.js"></script>
|
||||
<!-- My Javascript -->
|
||||
<script src="./assets/js/data.js"></script>
|
||||
<script src="./assets/js/util.js"></script>
|
||||
<script src="./assets/js/ui.js"></script>
|
||||
<script src="./assets/js/callbacks.js"></script>
|
||||
<!--
|
||||
<script src="./assets/js/iourl.js"></script>
|
||||
<script src="./assets/js/notwebsocket.js"></script>
|
||||
|
@ -178,7 +182,9 @@
|
|||
<script src="./assets/js/functions.js"></script>
|
||||
<script src="./assets/js/client.js"></script>
|
||||
<script src="./assets/js/callbacks.js"></script>
|
||||
-->
|
||||
<!-- APIs -->
|
||||
<!--
|
||||
<script src="http://api.dmcdn.net/all.js"></script>
|
||||
<script src="http://jwpsrv.com/library/QouFCLBMEeKC+CIACpYGxA.js"></script>
|
||||
<script src="./assets/js/sc.js"></script>
|
||||
|
|
Loading…
Reference in New Issue