X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=www%2Fjs%2Fbook.js;h=d95b6e8acdd6e3f1040b76d78ac80b05ed55c274;hb=ef20c7b10b72bf9dbad4e2507e994b19229701ea;hp=8bf4756cb0eb8a9c93f0d0f15f829ee47a9c9f5c;hpb=bb291d75977a8e35abd16597ce50b5127959bed9;p=remoteglot-book diff --git a/www/js/book.js b/www/js/book.js index 8bf4756..d95b6e8 100644 --- a/www/js/book.js +++ b/www/js/book.js @@ -1,13 +1,27 @@ (function() { var board = null; -var moves = []; +var history = []; var move_override = 0; +var entity_map = { + "&": "&", + "<": "<", + ">": ">", + '"': '"', + "'": ''', +}; + +function escape_html(string) { + return String(string).replace(/[&<>"']/g, function (s) { + return entity_map[s]; + }); +} + 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; } @@ -56,10 +70,30 @@ var headings = [ [ "AWin%", TYPE_RATIO ], ]; var sort_by = 1; +var direction = 1; var show_lines = function(data, game) { var moves = data['moves']; $('#numviewers').text(data['opening']); + + if (data['root_game']) { + var text = escape_html(data['root_game']['white']); + if (data['root_game']['white_elo']) { + text += " (" + escape_html(data['root_game']['white_elo']) + ")"; + } + text += " – " + escape_html(data['root_game']['black']); + if (data['root_game']['black_elo']) { + text += " (" + escape_html(data['root_game']['black_elo']) + ")"; + } + text += "  " + escape_html(data['root_game']['result']).replace(/-/, "–") + "
"; + if (data['root_game']['eco']) { + text += "[" + escape_html(data['root_game']['eco']) + "] "; + } + text += "(" + data['root_game']['moves'] + ") "; + text += escape_html(data['root_game']['event']) + "  " + escape_html(data['root_game']['date']); + $('#gamesummary').html(text); + } + var total_num = 0; for (var i = 0; i < moves.length; ++i) { var move = moves[i]; @@ -76,7 +110,12 @@ var show_lines = function(data, game) { $(th).text(headings[i][0]); (function(new_sort_by) { $(th).click(function() { - sort_by = new_sort_by; + if (sort_by == new_sort_by) { + direction = -direction; + } else { + sort_by = new_sort_by; + direction = 1; + } show_lines(data, game); }); })(i); @@ -129,7 +168,7 @@ var show_lines = function(data, game) { lines.push(line); } - lines.sort(function(a, b) { return b[sort_by] - a[sort_by]; }); + lines.sort(function(a, b) { return direction * ( b[sort_by] - a[sort_by]); }); var tbl = $("#lines"); tbl.empty(); @@ -138,6 +177,10 @@ var show_lines = function(data, game) { var line = lines[i]; var tr = document.createElement("tr"); + if (line[0] === undefined || line[0] === null) { + $(tr).addClass("totals"); + } + for (var j = 0; j < line.length; ++j) { if (line[j] === null) { add_td(tr, ""); @@ -163,9 +206,9 @@ var show_lines = function(data, game) { } var make_move = function(move) { - moves.length = move_override; - moves.push(move); - move_override = moves.length; + history.length = move_override; + history.push(move); + move_override = history.length; update(); } window['make_move'] = make_move; @@ -179,7 +222,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(); } @@ -208,8 +251,8 @@ var onDrop = function(source, target) { // illegal move if (move === null) return 'snapback'; - moves = game.history({ verbose: true }); - move_override = moves.length; + history = game.history({ verbose: true }); + move_override = history.length; }; // update the board position after the piece snap