Start merging cytube3 account management

This commit is contained in:
calzoneman 2013-12-12 14:48:23 -06:00
parent 8d2587cebd
commit b889f7b4c8
34 changed files with 20908 additions and 1 deletions

1774
www/js/bootstrap.js vendored Normal file

File diff suppressed because it is too large Load diff

11
www/js/bootstrap.min.js vendored Normal file

File diff suppressed because one or more lines are too long

39
www/js/callbacks.js Normal file
View file

@ -0,0 +1,39 @@
var Callbacks = {
/* Connection failed */
error: function (reason) {
if (reason && reason.returnValue === true) {
return;
}
var fail = $('<div/>').addClass('alert alert-error')
.appendTo($('#announcements'));
$('<h3/>').text('Uh-oh!').appendTo(fail);
$('<p/>').html('The socket.io connection failed. Please check that '+
'the connection was not blocked by a firewall or '+
'antivirus software.');
},
/* Connection succeeded */
connect: function () {
socket.emit('join', {
channel: CHANNEL
});
/* if rejoining after the connection failed, resend password */
if (CHANNEL.opts.password) {
socket.once('needPassword', function () {
socket.emit('channelPassword', {
password: CHANNEL.opts.password
});
});
}
/* guest login */
if (NAME && !LOGGEDIN) {
socket.emit('login', {
name: NAME
});
}
},
};

184
www/js/functions.js Normal file
View file

@ -0,0 +1,184 @@
function addVideo(data, position) {
var item = $('<li/>');
item.data('id', data.id);
item.data('temp', data.temp);
var btnstrip = $('<div/>').addClass('btn-group video-buttons')
.appendTo(item);
var title = $('<a/>', {
href: videoLink(data.id),
target: '_blank',
class: 'video-title'
}).text(data.title).appendTo(item);
var duration = $('<span/>').addClass('video-time')
.text(formatTime(data.duration))
.appendTo(item);
if (position === 'first') {
item.prependTo($('#playlist'));
} else if (position === 'last') {
item.appendTo($('#playlist'));
} else {
var prev = findVideo(position);
if (prev.length > 0) {
item.insertAfter(prev);
}
}
addVideoButtons(item);
return item;
}
function addVideoButtons(li) {
var btns = li.find('.video-buttons');
if (btns.length === 0) {
return;
}
if (can('playlistjump')) {
$('<button/>').addClass('btn btn-xs btn-default')
.html('<span class="glyphicon glyphicon-play"></span>')
.click(function () {
SOCKET.emit('playVideo', {
id: li.data('id')
});
})
.appendTo(btns);
}
if (can('playlistmove')) {
$('<button/>').addClass('btn btn-xs btn-default')
.html('<span class="glyphicon glyphicon-share-alt"></span>')
.click(function () {
SOCKET.emit('moveVideo', {
id: li.data('id'),
after: CURRENT.id
});
})
.appendTo(btns);
}
if (can('playlistsettemp')) {
$('<button/>').addClass('btn btn-xs btn-default')
.html('<span class="glyphicon glyphicon-flag"></span>')
.click(function () {
SOCKET.emit('setTemp', {
id: li.data('id'),
temp: !li.data('temp')
});
})
.appendTo(btns);
}
if (can('playlistsettemp')) {
$('<button/>').addClass('btn btn-xs btn-default')
.html('<span class="glyphicon glyphicon-trash"></span>')
.click(function () {
SOCKET.emit('deleteVideo', {
id: li.data('id'),
temp: !li.data('temp')
});
})
.appendTo(btns);
}
}
function videoLink(data) {
data = data.split(':');
var type = data[0];
var id = data[1];
if (type === void 0 || id === void 0) {
return '#';
}
switch(type) {
case 'yt':
return 'http://youtu.be/' + id;
default:
return '#';
}
}
function formatTime(seconds) {
var h = parseInt(seconds / 3600);
var m = parseInt((seconds % 3600) / 60);
var s = seconds % 60;
var time = '';
if (h !== 0) {
h = '' + h;
if (h.length < 2) {
h = '0' + h;
}
time += h + ':';
}
m = '' + m;
if (m.length < 2) {
m = '0' + m;
}
time += m + ':';
s = '' + s;
if (s.lengts < 2) {
s = '0' + s;
}
time += s;
return time;
}
function addChatMessage(data, buffer) {
var last = buffer.data('lastmessagename');
var div = $('<div/>').addClass('chatmsg')
.addClass('chatmsg-' + data.name);
var timestamp = $('<span/>').addClass('chat-timestamp').appendTo(div)
.text('[' + new Date(data.time).toTimeString().split(' ')[0] + '] ');
var username = $('<span/>').addClass('chat-name').appendTo(div);
var message = $('<span/>').appendTo(div).text(data.message);
if (data.msgclass === 'action') {
username.text(data.name + ' ');
} else {
username.text(data.name + ': ');
}
switch(data.msgclass) {
case 'action':
timestamp.addClass('action');
username.addClass('action');
message.addClass('action');
break;
case 'spoiler':
message.addClass('spoiler');
break;
case 'greentext':
message.addClass('greentext');
break;
case 'shout':
timestamp.addClass('shout');
username.addClass('shout');
message.addClass('shout');
break;
case 'drink':
div.addClass('drink');
break;
default:
break;
}
if (!data.msgclass.match(/action|shout|drink/) &&
data.name === last) {
if (!data.message.match(/^\s*<strong>.+?\s*:/)) {
username.remove();
}
}
buffer.data('lastmessagename', data.name);
if (data.flair) {
username.addClass(data.flair);
}
div.appendTo(buffer);
}
function can(what) {
return true;
}

152
www/js/init.js Normal file
View file

@ -0,0 +1,152 @@
/* Local client data */
var RANK = -1;
var LEADER = false;
var LEADTIMER = false;
var PL_DRAGFROM = false;
var PL_DRAGTO = false;
var PL_CURRENT
var NAME = false;
var LOGGEDIN = false;
var SUPERADMIN = false;
/* Channel data */
var CHANNEL = {
opts: {},
openqueue: false,
perms: {},
css: '',
js: '',
motd: '',
motd_text: '',
name: false,
usercount: 0
};
/* Video player data */
var PLAYER = false;
/* Chat data */
var IGNORED = [];
var CHATHIST = [];
var CHATTHROTTLE = false;
var SCROLLCHAT = true;
var LASTCHATNAME = false;
var LASTCHATTIME = 0;
var CHATSOUND = new Audio('/sounds/boop.wav');
/* Page data */
var FOCUSED = true;
var PAGETITLE = 'CyTube';
var TITLE_BLINK = false;
/* Playlist data */
var PLAYLIST = {
from: false,
to: false,
current: false,
waitScroll: false
};
/* Check if localStorage is available */
var NOSTORAGE = typeof localStorage === 'undefined' || localStorage === null;
/**
* Retrieve an option from localStorage, or from a cookie
* if localStorage is not available
*/
function getOpt(k) {
return NOSTORAGE ? readCookie(k) : localStorage.getItem(k);
}
/**
* Save an option to localStorage, or to a cookie
* if localStorage is not available
*/
function setOpt(k, v) {
if (NOSTORAGE) {
setCookie(k, v, 1000)
} else {
localStorage.setItem(k, v);
}
}
/**
* Retrieve a stored value, or return the default if the stored value
* is null. Also handles parsing of values stored as strings.
*/
function getOrDefault(k, def) {
var v = getOpt(k);
if (v == null) {
return def;
} else if (v === 'true') {
return true;
} else if (v === 'false') {
return false;
} else if (v.match(/^\d+$/)) {
return parseInt(v);
} else if (v.match(/^[\d\.]+$/)) {
return parseFloat(v);
} else {
return v;
}
}
/* User options */
var USEROPTS = {
theme : getOrDefault("theme", "default"),
css : getOrDefault("css", ""),
layout : getOrDefault("layout", "default"),
synch : getOrDefault("synch", true),
hidevid : getOrDefault("hidevid", false),
show_timestamps : getOrDefault("show_timestamps", true),
modhat : getOrDefault("modhat", false),
blink_title : getOrDefault("blink_title", false),
sync_accuracy : getOrDefault("sync_accuracy", 2),
wmode_transparent : getOrDefault("wmode_transparent", true),
chatbtn : getOrDefault("chatbtn", false),
altsocket : getOrDefault("altsocket", false),
joinmessage : getOrDefault("joinmessage", true),
qbtn_hide : getOrDefault("qbtn_hide", false),
qbtn_idontlikechange : getOrDefault("qbtn_idontlikechange", false),
first_visit : getOrDefault("first_visit", true),
ignore_channelcss : getOrDefault("ignore_channelcss", false),
ignore_channeljs : getOrDefault("ignore_channeljs", false),
sort_rank : getOrDefault("sort_rank", false),
sort_afk : getOrDefault("sort_afk", false),
default_quality : getOrDefault("default_quality", "#quality_auto"),
boop : getOrDefault("boop", false),
secure_connection : getOrDefault("secure_connection", false)
};
/**
* Set a cookie with the provided name, value, and expiration time
*/
function setCookie(name,value,days) {
if (days) {
var date = new Date();
date.setTime(date.getTime()+(days*24*60*60*1000));
var expires = "; expires="+date.toGMTString();
}
else var expires = "";
document.cookie = name+"="+value+expires+"; path=/";
}
/**
* Read a cookie with the provided name
*/
function readCookie(name) {
var nameEQ = name + "=";
var ca = document.cookie.split(";");
for(var i=0;i < ca.length;i++) {
var c = ca[i];
while (c.charAt(0)==" ") c = c.substring(1,c.length);
if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
}
return null;
}
/**
* Erase a cookie
*/
function eraseCookie(name) {
createCookie(name,"",-1);
}

9789
www/js/jquery.js vendored Normal file

File diff suppressed because it is too large Load diff