$pgn->quick_parse_game;
my $pos = Position->start_pos($pgn->white, $pgn->black);
my $moves = $pgn->moves;
+ my @uci_moves = ();
for my $move (@$moves) {
my ($from_row, $from_col, $to_row, $to_col, $promo) = $pos->parse_pretty_move($move);
+ push @uci_moves, Board::move_to_uci_notation($from_row, $from_col, $to_row, $to_col, $promo);
$pos = $pos->make_move($from_row, $from_col, $to_row, $to_col, $promo);
}
+ $pos->{'history'} = \@uci_moves;
+ $pos->{'pretty_history'} = $moves;
handle_position($pos);
}
<p id="score">Score:</p>
<p><strong>PV:</strong> <span id="pv"></span></p>
<p id="searchstats"></p>
- <h3>Shallow search of all legal moves (multi-PV)</h3>
+ <h3>History and potential moves (multi-PV)</h3>
<p id="sortbyscoreholder">Sort by: <span id="sortbyscore0"><a href="javascript:resort_refutation_lines(0)">Move</a></span>
<span id="sortbyscore1"><a href="javascript:resort_refutation_lines(1)">Score</a></span>
|
- <span id="linemsg">Click on any move to show it on the board.</span>
+ <span id="history">No history</span>
+ |
+ <span id="linemsg">Click on any move to show it.</span>
<span id="linenav">
<span id="prevmove"><a href="javascript:prev_move();">Previous</a></span>,
<span id="nextmove"><a href="javascript:next_move();">Next</a></span>,
* @param {number} move_num
* @param {!string} toplay
* @param {number=} opt_limit
+ * @param {boolean=} opt_showlast
*/
-var print_pv = function(fen, uci_pv, pretty_pv, move_num, toplay, opt_limit) {
+var print_pv = function(fen, uci_pv, pretty_pv, move_num, toplay, opt_limit, opt_showlast) {
display_lines.push({
start_fen: fen,
uci_pv: uci_pv,
var pv = '';
var i = 0;
- if (toplay == 'B') {
+ if (opt_limit && opt_showlast) {
+ // Truncate the PV at the beginning (instead of at the end).
+ // We assume here that toplay is 'W'.
+ pv = '(…) ';
+ i = pretty_pv.length - opt_limit;
+ if (i % 2 == 1) {
+ ++i;
+ }
+ move_num += i / 2;
+ } else if (toplay == 'B') {
var move = "<a class=\"move\" href=\"javascript:show_line(" + (display_lines.length - 1) + ", " + 0 + ");\">" + pretty_pv[0] + "</a>";
pv = move_num + '. … ' + move;
toplay = 'W';
var move = "<a class=\"move\" href=\"javascript:show_line(" + (display_lines.length - 1) + ", " + i + ");\">" + pretty_pv[i] + "</a>";
if (toplay == 'W') {
- if (i > opt_limit) {
+ if (i > opt_limit && !opt_showlast) {
return pv + ' (…)';
}
if (pv != '') {
}
update_highlight();
+ // Print the history.
+ if (data['position']['history']) {
+ $("#history").html(print_pv('start', data['position']['history'], data['position']['pretty_history'], 1, 'W', 8, true));
+ } else {
+ $("#history").html("No history");
+ }
+
// Print the PV.
$("#pv").html(print_pv(data['position']['fen'], data['pv_uci'], data['pv_pretty'], data['position']['move_num'], data['position']['toplay']));
window['show_line'] = show_line;
var prev_move = function() {
- if (current_display_move > 0) {
+ if (current_display_move > -1) {
--current_display_move;
}
update_displayed_line();