X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=www%2Fjs%2Fbook.js;h=611678f8f99c52a3e73ea53241e31b88766dd24c;hb=4c5819ccf6f88f4ad0ed870921f8d972a46be8a0;hp=0b1e4372264a7afa77d9cae8dbdf0c5bfbf464e2;hpb=4fa00c4fbfb86465b2d50bb0b5642f00c6b9329b;p=remoteglot-book diff --git a/www/js/book.js b/www/js/book.js index 0b1e437..611678f 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,7 +193,7 @@ var show_lines = function(data, game) { var line = lines[i]; var tr = document.createElement("tr"); - if (line[0] === undefined || line[0] === null) { + if (line[0] === undefined) { $(tr).addClass("totals"); } @@ -188,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); @@ -206,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; @@ -222,7 +251,7 @@ 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(); } @@ -251,8 +280,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