Merge pull request #299 from YaYana/rank-formats

/rank format targeting
This commit is contained in:
Guangcong Luo
2015-01-09 20:57:22 -08:00
2 changed files with 46 additions and 4 deletions

View File

@@ -607,18 +607,35 @@
case 'rating':
case 'ladder':
if (!target) target = app.user.get('userid');
var targets = target.split(',');
var formatTargeting = false;
var formats = {};
for (var i = 1, len = targets.length; i < len; i++) {
formats[toId(targets[i])] = 1;
formatTargeting = true;
}
var self = this;
$.get(app.user.getActionPHP() + '?act=ladderget&user='+encodeURIComponent(target), Tools.safeJSON(function(data) {
$.get(app.user.getActionPHP() + '?act=ladderget&user='+encodeURIComponent(targets[0]), Tools.safeJSON(function(data) {
try {
var buffer = '<div class="ladder"><table>';
buffer += '<tr><td colspan="8">User: <strong>'+target+'</strong></td></tr>';
buffer += '<tr><td colspan="8">User: <strong>'+targets[0]+'</strong></td></tr>';
if (!data.length) {
buffer += '<tr><td colspan="8"><em>This user has not played any ladder games yet.</em></td></tr>';
} else {
buffer += '<tr><th>Format</th><th><abbr title="Elo rating">Elo</abbr></th><th><abbr title="user\'s percentage chance of winning a random battle (aka GLIXARE)">GXE</abbr></th><th><abbr title="Glicko-1 rating: rating±deviation">Glicko-1</abbr></th><th>COIL</th><th>W</th><th>L</th><th>T</th></tr>';
for (var i=0; i<data.length; i++) {
var hiddenFormats = [];
var formatLength = data.length;
for (var i=0; i<formatLength; i++) {
var row = data[i];
buffer += '<tr><td>'+row.formatid+'</td><td><strong>'+Math.round(row.acre)+'</strong></td><td>'+Math.round(row.gxe,1)+'</td><td>';
if (!formatTargeting || formats[row.formatid]) {
buffer += '<tr>';
} else {
buffer += '<tr class="hidden">';
hiddenFormats.push(row.formatid);
}
buffer += '<td>'+row.formatid+'</td><td><strong>'+Math.round(row.acre)+'</strong></td><td>'+Math.round(row.gxe,1)+'</td><td>';
if (row.rprd > 100) {
buffer += '<span><em>'+Math.round(row.rpr)+'<small> &#177; '+Math.round(row.rprd)+'</small></em> <small>(provisional)</small></span>';
} else {
@@ -641,6 +658,13 @@
buffer += '</td><td>'+row.w+'</td><td>'+row.l+'</td><td>'+row.t+'</td></tr>';
}
}
if (hiddenFormats.length) {
if (hiddenFormats.length === formatLength) {
buffer += '<tr class="no-matches"><td colspan="8"><em>This user has not played any ladder games that match the format targeting.</em></td></tr>';
}
buffer += '<tr><td colspan="8"><button name="showOtherFormats">' + hiddenFormats.slice(0, 3).join(', ') + (hiddenFormats.length > 3 ? ' and ' + (hiddenFormats.length - 3) + ' other formats' : '') + ' not shown</button></td></tr>';
}
buffer += '</table></div>';
self.add('|raw|'+buffer);
} catch(e) {}
@@ -751,6 +775,20 @@
var name = data.name || this.challengeData.userid;
if (/^[a-z0-9]/i.test(name)) name = ' ' + name;
app.rooms[''].challenge(name, this.challengeData.format, this.challengeData.team);
},
showOtherFormats: function (d, target) {
var autoscroll = (this.$chatFrame.scrollTop() + 60 >= this.$chat.height() - this.$chatFrame.height());
var $target = $(target);
var $table = $target.closest('table');
$table.find('tr.hidden').show();
$table.find('tr.no-matches').remove();
$target.closest('tr').remove();
if (autoscroll) {
this.$chatFrame.scrollTop(this.$chat.height());
}
}
});

View File

@@ -828,6 +828,10 @@ p.or:after {
color: gray;
}
.hidden {
display: none;
}
.roomlist {
text-align: left;
}