Add configurable voteskip ratio, show # voteskips to mods

This commit is contained in:
calzoneman 2013-04-20 20:17:38 -05:00
parent 6e6f6217b0
commit 40ad039a06
5 changed files with 42 additions and 5 deletions

View File

@ -43,6 +43,7 @@ var Channel = function(name) {
qopen_allow_playnext: false,
qopen_allow_delete: false,
allow_voteskip: true,
voteskip_ratio: 0.5,
pagetitle: this.name,
customcss: "",
customjs: ""
@ -292,6 +293,7 @@ Channel.prototype.userJoin = function(user) {
user.socket.emit("channelNotRegistered");
}
this.users.push(user);
this.broadcastVoteskipUpdate();
if(user.name != "") {
this.broadcastNewUser(user);
}
@ -342,6 +344,7 @@ Channel.prototype.userLeave = function(user) {
var idx = this.users.indexOf(user);
if(idx >= 0 && idx < this.users.length)
this.users.splice(idx, 1);
this.broadcastVoteskipUpdate();
this.broadcastUsercount();
if(user.name != "") {
this.sendAll("userLeave", {
@ -407,7 +410,8 @@ Channel.prototype.sendUserlist = function(user) {
users.push({
name: this.users[i].name,
rank: this.users[i].rank,
leader: this.users[i] == this.leader
leader: this.users[i] == this.leader,
meta: this.users[i].meta
});
}
}
@ -499,6 +503,20 @@ Channel.prototype.broadcastChatFilters = function() {
}
}
Channel.prototype.broadcastVoteskipUpdate = function() {
var amt = this.voteskip ? this.voteskip.counts[0] : 0;
var need = this.voteskip ? this.users.length * this.opts.voteskip_ratio + 1 : 0;
for(var i = 0; i < this.users.length; i++) {
if(Rank.hasPermission(this.users[i], "seeVoteskip") ||
this.leader == this.users[i]) {
this.users[i].socket.emit("voteskip", {
count: amt,
need: need
});
}
}
}
Channel.prototype.broadcastMotd = function() {
this.sendAll("updateMotd", this.motd);
}
@ -662,6 +680,7 @@ Channel.prototype.playNext = function() {
// Reset voteskip
this.voteskip = false;
this.broadcastVoteskipUpdate();
this.drinks = 0;
this.broadcastDrinks();
@ -708,6 +727,7 @@ Channel.prototype.jumpTo = function(pos) {
// Reset voteskip
this.voteskip = false;
this.broadcastVoteskipUpdate();
this.drinks = 0;
this.broadcastDrinks();
@ -866,7 +886,8 @@ Channel.prototype.tryVoteskip = function(user) {
this.voteskip = new Poll("voteskip", "voteskip", ["yes"]);
}
this.voteskip.vote(user.ip, 0);
if(this.voteskip.counts[0] > this.users.length / 2) {
this.broadcastVoteskipUpdate();
if(this.voteskip.counts[0] > this.users.length * this.opts.voteskip_ratio) {
this.playNext();
}
}

View File

@ -32,6 +32,7 @@ var permissions = {
chatFilter : exports.Moderator,
updateMotd : exports.Moderator,
drink : exports.Moderator,
seeVoteskip : exports.Moderator,
search : exports.Guest,
chat : exports.Guest,
};

View File

@ -75,6 +75,7 @@ function initCallbacks() {
.insertAfter($("link[href='./assets/css/ytsync.css']"));
}
$("#opt_allow_voteskip").prop("checked", opts.allow_voteskip);
$("#opt_voteskip_ratio").val(opts.voteskip_ratio);
if(opts.customjs.trim() != "") {
$.getScript(opts.customjs);
}
@ -100,6 +101,15 @@ function initCallbacks() {
updateBanlist(data.entries);
});
socket.on("voteskip", function(data) {
if(data.count > 0) {
$("#voteskip").text("Voteskip ("+data.count+"/"+data.need+")");
}
else {
$("#voteskip").text("Voteskip");
}
});
/* REGION Rank Stuff */
socket.on("rank", function(data) {

View File

@ -359,12 +359,14 @@ $("#opt_submit").click(function() {
if(ptitle == "")
ptitle = $("#opt_pagetitle").attr("placeholder")
var css = $("#opt_customcss").val();
var ratio = +$("#opt_voteskip_ratio").val() || 0.5;
opts = {
qopen_allow_qnext: $("#opt_qopen_allow_qnext").prop("checked"),
qopen_allow_move: $("#opt_qopen_allow_move").prop("checked"),
qopen_allow_delete: $("#opt_qopen_allow_delete").prop("checked"),
qopen_allow_playnext: $("#opt_qopen_allow_playnext").prop("checked"),
allow_voteskip: $("#opt_allow_voteskip").prop("checked"),
voteskip_ratio: ratio,
pagetitle: ptitle,
customcss: css,
customjs: $("#opt_customjs").val()

View File

@ -22,10 +22,10 @@
<div class="navbar navbar-inverse navbar-fixed-top">
<div class="navbar-inner">
<div class="container">
<a class="brand" href="#">CyTube</a>
<a class="brand" href="index.html">CyTube</a>
<div class="">
<ul class="nav">
<li class="active"><a href="#">Home</a></li>
<li class="active"><a href="index.html">Home</a></li>
<li><a href="help.html">Help</a></li>
</ul>
<div class="navbar-form pull-right" id="loginform">
@ -120,7 +120,6 @@
<div class="span10 offset1">
<form action="javascript:void(0)">
<fieldset>
<legend>Channel Options</legend>
<div class="span4">
<label>When the queue is open:</label>
<label class="checkbox">
@ -157,6 +156,10 @@
<input type="checkbox" id="opt_allow_voteskip">
Allow voteskip
</label>
<br>
<label>Voteskip Ratio
<input type="text" id="opt_voteskip_ratio" class="pull-right">
</label>
</div>
<div class="span10">