+ // The last move (shown by highlighting the from and to squares).
+ if (data['position'] && data['position']['last_move_uci']) {
+ highlight_from = data['position']['last_move_uci'].substr(0, 2);
+ highlight_to = data['position']['last_move_uci'].substr(2, 2);
+ } else if (current_display_line_is_history && current_display_move >= 0) {
+ // We don't have historic analysis for this position, but we
+ // can reconstruct what the last move was by just replaying
+ // from the start.
+ var hiddenboard = new Chess();
+ for (var i = 0; i <= current_display_move; ++i) {
+ hiddenboard.move(current_display_line.pretty_pv[i]);
+ }
+ var moves = hiddenboard.history({ verbose: true });
+ var last_move = moves.pop();
+ highlight_from = last_move.from;
+ highlight_to = last_move.to;
+ } else {
+ highlight_from = highlight_to = undefined;
+ }
+ update_highlight();
+