X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=www%2Fjs%2Fbook.js;h=47e540e9a5c23535d90979662d5ca13e943ba6a8;hb=6b457f9f2f73a99fcbba1c1e71682f8b4f52a318;hp=c54fb94e700d9a8e1338f8c9db38ebada169f20e;hpb=7948ff31ce0c53b85cccb9c851dbbf36d46f9c0c;p=remoteglot-book
diff --git a/www/js/book.js b/www/js/book.js
index c54fb94..47e540e 100644
--- a/www/js/book.js
+++ b/www/js/book.js
@@ -1,7 +1,7 @@
(function() {
var board = null;
-var moves = [];
+var history = [];
var move_override = 0;
var entity_map = {
@@ -21,12 +21,26 @@ function escape_html(string) {
var get_game = function() {
var game = new Chess();
for (var i = 0; i < move_override; ++i) {
- game.move(moves[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 == move_override) {
+ text += '' + history[i] + '';
+ } else {
+ text += '' + history[i] + '';
+ }
+ text += " ";
+ }
+ $('#gamehistory').html(text);
+
var game = get_game();
board.position(game.fen());
fetch_analysis();
@@ -97,9 +111,11 @@ var show_lines = function(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");
@@ -177,6 +193,10 @@ var show_lines = function(data, game) {
var line = lines[i];
var tr = document.createElement("tr");
+ if (line[0] === undefined) {
+ $(tr).addClass("totals");
+ }
+
for (var j = 0; j < line.length; ++j) {
if (line[j] === null) {
add_td(tr, "");
@@ -184,6 +204,14 @@ var show_lines = function(data, game) {
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);
@@ -202,9 +230,14 @@ var show_lines = function(data, game) {
}
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;
@@ -218,13 +251,19 @@ var prev_move = function() {
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();
@@ -247,8 +286,13 @@ var onDrop = function(source, target) {
// 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();
};
// update the board position after the piece snap