X-Git-Url: https://git.sesse.net/?p=remoteglot;a=blobdiff_plain;f=www%2Fjs%2Fremoteglot.js;fp=www%2Fjs%2Fremoteglot.js;h=2e66c82fb03fb406a0ec8180762593501134e836;hp=cf5fba704f23f826dc4601a27ad68483295d36bc;hb=79966cb518085499da9ea884d9d99dd74d2f9514;hpb=a4adf36837b43e693b288cc700fcd72bbba78cb3 diff --git a/www/js/remoteglot.js b/www/js/remoteglot.js index cf5fba7..2e66c82 100644 --- a/www/js/remoteglot.js +++ b/www/js/remoteglot.js @@ -733,35 +733,14 @@ function print_pv(line_num, splicepos, opt_limit, opt_showlast) { let pv = display_line.pv; let move_num = find_move_num(display_line.start_fen); let toplay = find_toplay(display_line.start_fen); - - // Truncate PV at the start if needed. - let start_display_move_num = display_line.start_display_move_num; - if (start_display_move_num > 0) { - pv = pv.slice(start_display_move_num); - let to_add = start_display_move_num; - if (toplay === 'b') { - ++move_num; - toplay = 'w'; - --to_add; - } - if (to_add % 2 == 1) { - toplay = 'b'; - --to_add; - } - move_num += to_add / 2; - if (splicepos !== null && splicepos > 0) { - --splicepos; - } - } + let halfmove_num = move_num * 2 + (toplay === 'w' ? 0 : 1); // From two, for simplicity. let ret = document.createDocumentFragment(); - let in_tb = false; - let i = 0; - if (opt_limit && opt_showlast && pv.length > opt_limit) { - // Truncate the PV at the beginning (instead of at the end). - // We assume here that toplay is 'w'. We also assume that if - // opt_showlast is set, then it is the history, and thus, - // the UI should be to expand the history. + + // Truncate PV at the start if needed. + let to_skip = display_line.start_display_move_num; + if (opt_limit && opt_showlast && pv.length - to_skip > opt_limit) { + // Explicit (UI-visible) truncation from the start, for the history. ret.appendChild(document.createTextNode('(')); let link = document.createElement('a'); link.className = 'move'; @@ -769,25 +748,37 @@ function print_pv(line_num, splicepos, opt_limit, opt_showlast) { link.textContent = '…'; ret.appendChild(link); ret.appendChild(document.createTextNode(') ')); - i = pv.length - opt_limit; - if (i % 2 == 1) { - ++i; + to_skip = pv.length - opt_limit; + to_skip += to_skip % 2; // Make sure it starts on a white move. + } + if (to_skip > 0) { + pv = pv.slice(to_skip); + halfmove_num += to_skip; + if (splicepos !== null) { + splicepos -= to_skip; + if (splicepos < 0) { + splicepos = 0; + } } - move_num += i / 2; - } else if (toplay == 'b' && pv.length > 0) { - ret.appendChild(document.createTextNode(move_num + '. … ')); } - for (; i < pv.length; ++i) { + + // The initial move number needs to go before any (TB: …) marker. + if (halfmove_num % 2 == 1) { + // Black move. + ret.appendChild(document.createTextNode((halfmove_num - 1) / 2 + '. … ')); + } else { + // White move. + ret.appendChild(document.createTextNode(halfmove_num / 2 + '. ')); + } + let in_tb = false; + for (let i = 0; i < pv.length; ++i, ++halfmove_num) { let prefix = ''; if (splicepos === i) { - prefix = '(TB: '; + prefix = '(TB:'; in_tb = true; } - if (toplay == 'b' && i == 0) { - ++move_num; - toplay = 'w'; - } else if (toplay == 'w') { + if (halfmove_num % 2 == 0 && i != 0) { if (i > opt_limit && !opt_showlast) { if (in_tb) { prefix += ')'; @@ -795,12 +786,9 @@ function print_pv(line_num, splicepos, opt_limit, opt_showlast) { ret.appendChild(document.createTextNode(prefix + ' (…)')); return ret; } - prefix += ' ' + move_num + '. '; - ++move_num; - toplay = 'b'; + prefix += ' ' + (halfmove_num / 2) + '. '; } else { prefix += ' '; - toplay = 'w'; } ret.appendChild(document.createTextNode(prefix));