<meta name="viewport" content="width=device-width, initial-scale=1" />
</head>
<body>
+<audio id="ding" preload="none">
+ <source src="ding.opus" type="audio/ogg; codecs=opus" />
+ <source src="ding.mp3" type="audio/mp3" />
+</audio>
<h1 id="headline">Analysis</h1>
<div id="boardcontainer">
<div id="board"></div>
<p><strong>PV:</strong> <span id="pv"></span></p>
<p id="searchstats"></p>
<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>
+ <p id="sortbyscoreholder">
+ Sound:
+ <span id="soundon"><a href="javascript:set_sound(true)">On</a></span>
+ <span id="soundoff"><a href="javascript:set_sound(false)">Off</a></span>
+ |
+ 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="history">No history</span>
Hosting and multi-PV analysis hardware by <a href="http://www.samfundet.no/">Studentersamfundet i Trondhjem</a>.
JavaScript chessboard powered by <a href="http://chessboardjs.com/">chessboard.js</a>
and <a href="https://github.com/jhlywa/chess.js">chess.js</a>.
+ Ding sound by <a href="https://www.freesound.org/people/Aiwha/sounds/196106/">Aiwa</a> (CC-BY-3.0).
7-man Lomonosov tablebase lookup by <a href="http://tb7.chessok.com/">ChessOK</a>.</p>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script>
/** @type {?number} @private */
var unique = null;
+/** @type {boolean} @private */
+var enable_sound = false;
+
/** The current position on the board, represented as a FEN string.
* @type {?string}
* @private
}).done(function(data, textstatus, xhr) {
ims = xhr.getResponseHeader('X-Remoteglot-Last-Modified');
var num_viewers = xhr.getResponseHeader('X-Remoteglot-Num-Viewers');
+ possibly_play_sound(current_analysis_data, data);
current_analysis_data = data;
update_board(current_analysis_data, displayed_analysis_data);
update_num_viewers(num_viewers);
});
}
+var possibly_play_sound = function(old_data, new_data) {
+ if (!enable_sound) {
+ return;
+ }
+ if (old_data === null) {
+ return;
+ }
+ var ding = document.getElementById('ding');
+ if (ding && ding.play !== undefined) {
+ if (old_data['position'] && old_data['position']['fen'] &&
+ new_data['position'] && new_data['position']['fen'] &&
+ (old_data['position']['fen'] !== new_data['position']['fen'] ||
+ old_data['position']['move_num'] !== new_data['position']['move_num'])) {
+ ding.play();
+ }
+ }
+}
+
var clear_arrows = function() {
for (var i = 0; i < arrows.length; ++i) {
if (arrows[i].svg) {
board.position(hiddenboard.fen());
}
+/**
+ * @param {boolean} param_enable_sound
+ */
+var set_sound = function(param_enable_sound) {
+ enable_sound = param_enable_sound;
+ if (enable_sound) {
+ $("#soundon").html("<strong>On</strong>");
+ $("#soundoff").html("<a href=\"javascript:set_sound(false)\">Off</a>");
+ } else {
+ $("#soundon").html("<a href=\"javascript:set_sound(true)\">On</a>");
+ $("#soundoff").html("<strong>Off</strong>");
+ }
+}
+window['set_sound'] = set_sound;
+
var init = function() {
unique = get_unique();
+ set_sound(false);
// Create board.
board = new window.ChessBoard('board', 'start');