(function() {
var board = null;
-var moves = [];
+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) {
- game.move(moves[i]);
+ for (var i = 0; i < move_override - moves_to_drop; ++i) {
+ game.move(history[i]);
}
return game;
}
var update = function() {
+ var text = "";
+ for (var i = 0; i < history.length; ++i) {
+ if (i % 2 == 0) {
+ text += (i/2 + 1) + ". ";
+ }
+ if (i + 1 == move_override) {
+ text += '<strong>' + history[i] + '</strong>';
+ } else {
+ text += '<a href="javascript:set_move(' + (i + 1) + ')">' + history[i] + '</a>';
+ }
+ text += " ";
+ }
+ $('#gamehistory').html(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 total_num = 0;
for (var i = 0; i < moves.length; ++i) {
var move = moves[i];
- total_num += parseInt(move['white']);
- total_num += parseInt(move['draw']);
- total_num += parseInt(move['black']);
+ if (move['move']) {
+ total_num += parseInt(move['white']);
+ total_num += parseInt(move['draw']);
+ total_num += parseInt(move['black']);
+ }
}
var headings_tr = $("#headings");
var line = lines[i];
var tr = document.createElement("tr");
- if (line[0] === undefined || line[0] === null) {
+ if (line[0] === undefined) {
$(tr).addClass("totals");
}
var td = document.createElement("td");
tr.appendChild(td);
$(td).addClass("move");
+ if (line[j] !== undefined) {
+ if (move_override % 2 == 0) {
+ $(td).text(((move_override / 2) + 1) + ". ");
+ } else {
+ $(td).text(((move_override / 2) + 0.5) + "…");
+ }
+ }
+
var move_a = document.createElement("a");
move_a.href = "javascript:make_move('" + line[j] + "')";
td.appendChild(move_a);
}
}
+var set_includetransp = function(value) {
+ includetransp = value;
+ update();
+}
+window['set_includetransp'] = set_includetransp;
+
var make_move = function(move) {
- moves.length = move_override;
- moves.push(move);
- move_override = moves.length;
+ 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;
+ }
update();
}
window['make_move'] = make_move;
window['prev_move'] = prev_move;
var next_move = function() {
- if (move_override < moves.length) {
+ if (move_override < history.length) {
++move_override;
update();
}
}
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';
- moves = game.history({ verbose: true });
- move_override = moves.length;
+ 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;
};
// update the board position after the piece snap
var onSnapEnd = function() {
var game = get_game();
board.position(game.fen());
- fetch_analysis();
+ update();
};
var init = function() {