var board = null;
var history = [];
var move_override = 0;
+var includetransp = true;
var entity_map = {
"&": "&",
});
}
-var get_game = function() {
+var get_game = function(skip_last_move) {
+ var moves_to_drop = 0;
+ if (skip_last_move === true) {
+ moves_to_drop = 1;
+ }
+
var game = new Chess();
- for (var i = 0; i < move_override; ++i) {
+ for (var i = 0; i < move_override - moves_to_drop; ++i) {
game.move(history[i]);
}
return game;
if (i % 2 == 0) {
text += (i/2 + 1) + ". ";
}
- if (i == move_override) {
+ if (i + 1 == move_override) {
text += '<strong>' + history[i] + '</strong>';
} else {
- text += history[i];
+ text += '<a href="javascript:set_move(' + (i + 1) + ')">' + history[i] + '</a>';
}
text += " ";
}
var game = get_game();
board.position(game.fen());
+
+ var all_moves = game.history({ verbose: true });
+ if (all_moves.length > 0) {
+ var last_move = all_moves.pop();
+ var highlight_from = last_move.from;
+ var highlight_to = last_move.to;
+ $("#board").find('.square-55d63').removeClass('nonuglyhighlight');
+ $("#board").find('.square-' + highlight_from).addClass('nonuglyhighlight');
+ $("#board").find('.square-' + highlight_to).addClass('nonuglyhighlight');
+ }
+
fetch_analysis();
}
var fetch_analysis = function() {
var game = get_game();
+ var fen = game.fen();
$.ajax({
- url: "/opening-stats.pl?fen=" + encodeURIComponent(game.fen())
+ url: "/opening-stats.pl?fen=" + encodeURIComponent(fen) +
+ ";includetransp=" + (includetransp ? 1 : 0)
}).done(function(data, textstatus, xhr) {
show_lines(data, game);
});
}
var lines = [];
+ var transpose_only = [];
for (var i = 0; i < moves.length; ++i) {
var move = moves[i];
var line = [];
var black = parseInt(move['black']);
line.push(move['move']); // Move.
+ transpose_only.push(move['transpose_only']);
var num = white + draw + black;
line.push(num); // N.
line.push(num / total_num); // %.
if (line[0] === undefined) {
$(tr).addClass("totals");
+ } else if (transpose_only[i]) {
+ $(tr).addClass("transponly");
}
for (var j = 0; j < line.length; ++j) {
if (move_override % 2 == 0) {
$(td).text(((move_override / 2) + 1) + ". ");
} else {
- $(td).text(((move_override / 2) + 0.5) + ". …");
+ $(td).text(((move_override / 2) + 0.5) + "…");
}
}
}
}
+var set_includetransp = function(value) {
+ includetransp = value;
+ update();
+}
+window['set_includetransp'] = set_includetransp;
+
var make_move = function(move) {
if (move_override < history.length && history[move_override] == move) {
// User effectively only moved forward in history.
++move_override;
} else {
+ history.length = move_override;
history.push(move);
move_override = history.length;
}
}
window['next_move'] = next_move;
+var set_move = function(n) {
+ move_override = n;
+ update();
+}
+window['set_move'] = set_move;
+
// almost all of this stuff comes from the chessboard.js example page
var onDragStart = function(source, piece, position, orientation) {
var game = get_game();
// illegal move
if (move === null) return 'snapback';
- history = game.history({ verbose: true });
+ var new_history = game.history({ verbose: true });
+ history = [];
+ for (var i = 0; i < new_history.length; ++i) {
+ history.push(new_history[i].san);
+ }
move_override = history.length;
};
var onSnapEnd = function() {
var game = get_game();
board.position(game.fen());
- fetch_analysis();
+ update();
};
var init = function() {