973 lines
35 KiB
HTML
973 lines
35 KiB
HTML
|
<!DOCTYPE HTML>
|
||
|
<html>
|
||
|
|
||
|
<!--
|
||
|
pgn4web javascript chessboard
|
||
|
copyright (C) 2009-2013 Paolo Casaschi
|
||
|
see README file and http://pgn4web.casaschi.net
|
||
|
for credits, license and more details
|
||
|
-->
|
||
|
|
||
|
<head>
|
||
|
|
||
|
<title>pgn4web live results</title>
|
||
|
|
||
|
<link rel="shortcut icon" href="pawn.ico" />
|
||
|
<link rel="apple-touch-icon" href="pawn.png" />
|
||
|
|
||
|
<style type="text/css">
|
||
|
|
||
|
html,
|
||
|
body {
|
||
|
margin: 0px;
|
||
|
padding: 0px;
|
||
|
}
|
||
|
|
||
|
body {
|
||
|
padding: 40px; /* defined as body.padding */
|
||
|
font-family: sans-serif;
|
||
|
font-size: 16px; /* defined as body.fontSize */
|
||
|
color: black;
|
||
|
overflow-x: hidden;
|
||
|
overflow-y: scroll;
|
||
|
}
|
||
|
|
||
|
a {
|
||
|
color: black;
|
||
|
text-decoration: none;
|
||
|
}
|
||
|
|
||
|
.pageHeader {
|
||
|
color: red;
|
||
|
text-decoration: none;
|
||
|
}
|
||
|
|
||
|
h1.pageHeader {
|
||
|
margin-top: 0px;
|
||
|
margin-bottom: 0px;
|
||
|
padding-top: 0px;
|
||
|
padding-bottom: 10px; /* = 1/4 * body.padding */
|
||
|
white-space: nowrap;
|
||
|
}
|
||
|
|
||
|
.gamesAnchor {
|
||
|
display: inline-block;
|
||
|
height: 40px; /* = body.padding */
|
||
|
width: 99%;
|
||
|
}
|
||
|
|
||
|
.event, .round, .match, .firstTeam, .secondTeam, .score, .player, .firstPlayer, .secondPlayer, .result, .newMoves, .noNewMoves {
|
||
|
white-space: nowrap;
|
||
|
display: inline-block;
|
||
|
overflow: hidden;
|
||
|
vertical-align: bottom;
|
||
|
}
|
||
|
|
||
|
.eventRound, .matchScore, .game {
|
||
|
white-space: nowrap;
|
||
|
}
|
||
|
|
||
|
.team, .firstTeam, .secondTeam, .firstTeamScore, .secondTeamScore, .firstPlayer, .secondPlayer, .firstTeamPlayer, .secondTeamPlayer {
|
||
|
white-space: nowrap;
|
||
|
}
|
||
|
|
||
|
.eventRound, .event, .match, .firstTeam, .game, .firstPlayer, .secondPlayer, .firstTeamPlayer, .secondTeamPlayer {
|
||
|
margin-left: 0px;
|
||
|
}
|
||
|
|
||
|
.player {
|
||
|
width: 180px; /* defined as player.width */
|
||
|
margin-right: 20px; /* defined as player.marginRight */
|
||
|
}
|
||
|
|
||
|
.event, .firstTeam, .secondTeam, .firstPlayer, .secondPlayer {
|
||
|
padding-left: 5px; /* defined as player.paddingLeft */
|
||
|
padding-right: 5px; /* = player.paddingLeft */
|
||
|
}
|
||
|
|
||
|
.round, .secondTeam, .score, .newMoves, .noNewMoves {
|
||
|
margin-left: 20px; /* defined as player.marginRight */
|
||
|
}
|
||
|
|
||
|
.event {
|
||
|
width: 370px; /* = 2 * player.width + 2 * player.paddingLeft */
|
||
|
}
|
||
|
|
||
|
.round {
|
||
|
width: 100px; /* defined as round.width */
|
||
|
}
|
||
|
|
||
|
.match {
|
||
|
width: 380px; /* = 2 * player.width + 4 * player.paddingLeft */
|
||
|
}
|
||
|
|
||
|
.score {
|
||
|
width: 70px; /* = defined as score.width < round.width */
|
||
|
}
|
||
|
|
||
|
.result {
|
||
|
width: 70px; /* = score.width */
|
||
|
}
|
||
|
|
||
|
.eventRound {
|
||
|
font-size: 20px; /* = 5/4 * body.fontSize */
|
||
|
font-weight: normal;
|
||
|
margin-top: 48px; /* = 3 * body.fontSize */
|
||
|
margin-bottom: 12px; /* = 3/4 * body.fontSize */
|
||
|
}
|
||
|
|
||
|
.matchScore {
|
||
|
font-size: 16px; /* = body.fontSize */
|
||
|
font-weight: bold;
|
||
|
margin-top: 24px; /* = 3/2 * body.fontSize */
|
||
|
margin-bottom: 12px; /* = 3/4 * body.fontSize */
|
||
|
}
|
||
|
|
||
|
.game {
|
||
|
font-size: 14px; /* defined as game.fontSize */
|
||
|
font-weight: normal;
|
||
|
margin-top: 0px;
|
||
|
margin-bottom: 0px;
|
||
|
}
|
||
|
|
||
|
.secondTeam, .secondTeamPlayer {
|
||
|
background-color: #F4F4F4;
|
||
|
border-radius: 3px; /* = 1/4 * game.fontSize */
|
||
|
}
|
||
|
|
||
|
.score, .result {
|
||
|
text-align: center;
|
||
|
}
|
||
|
|
||
|
.newMoves, .noNewMoves {
|
||
|
color: gray;
|
||
|
font-weight: bold;
|
||
|
}
|
||
|
|
||
|
.noNewMoves {
|
||
|
visibility: hidden;
|
||
|
}
|
||
|
|
||
|
.gameLiveStatus2 {
|
||
|
display: inline-block;
|
||
|
margin-top: 48px; /* = 3 * body.fontSize */
|
||
|
padding-left: 5px; /* = player.paddingLeft */
|
||
|
font-size: 14px; /* defined as game.fontSize */
|
||
|
color: gray;
|
||
|
}
|
||
|
|
||
|
.gameFloatingContainer {
|
||
|
position: fixed;
|
||
|
right: 30px; /* defined as gameFloatingContainer.right */
|
||
|
top: 30px; /* = gameFloatingContainer.right */
|
||
|
white-space: nowrap;
|
||
|
background-color: white;
|
||
|
}
|
||
|
|
||
|
.gameAnalysisContainer {
|
||
|
padding-top: 97px; /* = gameBoardContainer.paddingTop + 2 * (header.fontSize * header.lineHeight + header.paddingBottom) + boardTable.borderWidth = (20 + 2 * (11 * 1.4 + 22) + 2) */
|
||
|
overflow: hidden;
|
||
|
width: 40px; /* defined as gameAnalysisContainer.width.closed = body.padding */
|
||
|
transition: width 1s linear;
|
||
|
-moz-transition: width 1s linear;
|
||
|
-webkit-transition: width 1s linear;
|
||
|
-o-transition: width 1s linear;
|
||
|
opacity: 0.8;
|
||
|
}
|
||
|
|
||
|
.gameAnalysisButtons {
|
||
|
height: 14px; /* = engine.html squareSize / 2 */
|
||
|
width: 224px; /* = gameAnalysisFrame.width */
|
||
|
margin-left: 40px; /* = body.padding */
|
||
|
margin-bottom: 14px; /* = engine.html squareSize / 2 */
|
||
|
}
|
||
|
|
||
|
.gameAnalysisFrame {
|
||
|
width: 224px; /* defined as gameAnalysisFrame.width = engine.html width */
|
||
|
height: 280px; /* = engine.html height */
|
||
|
margin-left: 40px; /* defined as gameAnalysisFrame.marginLeft = body.padding */
|
||
|
}
|
||
|
|
||
|
.gameBoardContainer {
|
||
|
width: 324px;
|
||
|
padding: 10px; /* defined as gameBoardContainer.padding = body.padding - gameFloatingContainer.right */
|
||
|
padding-top: 20px; /* defined as gameBoardContainer.paddingTop = 2 * gameBoardContainer.padding */
|
||
|
padding-left: 0px;
|
||
|
margin-bottom: 16px; /* = body.fontSize */
|
||
|
}
|
||
|
|
||
|
.whiteSquare,
|
||
|
.blackSquare,
|
||
|
.highlightWhiteSquare,
|
||
|
.highlightBlackSquare {
|
||
|
width: 38px; /* defined as whiteSquare.bareWidth */
|
||
|
height: 38px; /* = whiteSquare.bareWidth */
|
||
|
border-style: solid;
|
||
|
border-width: 1px; /* defined as whiteSquare.borderWidth */
|
||
|
/* whiteSquare.width = whiteSquare.bareWidth + 2 * whiteSquare.borderWidth */
|
||
|
}
|
||
|
|
||
|
.boardTable {
|
||
|
border-style: solid;
|
||
|
border-color: #818780;
|
||
|
border-width: 2px; /* defined as boardTable.borderWidth */
|
||
|
box-shadow: 0px 0px 20px #B0B8AE;
|
||
|
width: 324px; /* = 8 * whiteSquare.width + 2 * boardTable.borderWidth */
|
||
|
height: 324px; /* = 8 * whiteSquare.width + 2 * boardTable.borderWidth */
|
||
|
background-color: #FFFFFF;
|
||
|
}
|
||
|
|
||
|
.pieceImage {
|
||
|
width: 32px; /* defined as pieceImage.width < whiteSquare.bareWidth */
|
||
|
height: 32px; /* = pieceImage.width */
|
||
|
}
|
||
|
|
||
|
.whiteSquare,
|
||
|
.highlightWhiteSquare {
|
||
|
background: #EFF4EC;
|
||
|
border-color: #EFF4EC;
|
||
|
}
|
||
|
|
||
|
.blackSquare,
|
||
|
.highlightBlackSquare {
|
||
|
background: #C6CEC3;
|
||
|
border-color: #C6CEC3;
|
||
|
}
|
||
|
|
||
|
.highlightWhiteSquare,
|
||
|
.highlightBlackSquare {
|
||
|
border-color: #818780;
|
||
|
}
|
||
|
|
||
|
.selectControl {
|
||
|
/* a "width" attribute here must use the !important flag to override default settings */
|
||
|
font-size: 16px; /* = body.fontSize */
|
||
|
}
|
||
|
|
||
|
.optionSelectControl {
|
||
|
}
|
||
|
|
||
|
.buttonControlPlay,
|
||
|
.buttonControlStop,
|
||
|
.buttonControl {
|
||
|
/* a "width" attribute here must use the !important flag to override default settings */
|
||
|
font-size: 16px; /* = body.fontSize */
|
||
|
border-style: none;
|
||
|
background-color: transparent;
|
||
|
}
|
||
|
|
||
|
.buttonControlSpace {
|
||
|
/* a "width" attribute here must use the !important flag to override default settings */
|
||
|
font-size: 16px; /* = body.fontSize */
|
||
|
}
|
||
|
|
||
|
.searchPgnButton {
|
||
|
/* a "width" attribute here must use the !important flag to override default settings */
|
||
|
font-size: 16px; /* = body.fontSize */
|
||
|
}
|
||
|
|
||
|
.searchPgnExpression {
|
||
|
/* a "width" attribute here must use the !important flag to override default settings */
|
||
|
font-size: 16px; /* = body.fontSize */
|
||
|
}
|
||
|
|
||
|
.move,
|
||
|
.variation {
|
||
|
text-decoration: none;
|
||
|
}
|
||
|
|
||
|
.move {
|
||
|
color: black;
|
||
|
}
|
||
|
|
||
|
.comment,
|
||
|
.variation {
|
||
|
color: gray !important;
|
||
|
}
|
||
|
|
||
|
a.variation {
|
||
|
color: gray !important;
|
||
|
}
|
||
|
|
||
|
.moveOn,
|
||
|
.variationOn {
|
||
|
background: #DAF4D7;
|
||
|
}
|
||
|
|
||
|
.header, .footer {
|
||
|
font-size: 11px; /* defined as header.fontSize */
|
||
|
line-height: 1.4em; /* defined as header.lineHeight */
|
||
|
white-space: nowrap;
|
||
|
margin-left: 2px; /* = boardTable.borderWidth */
|
||
|
margin-right: 2px; /* = boardTable.borderWidth */
|
||
|
width: 320px; /* = 8 * whiteSquare.width */
|
||
|
}
|
||
|
|
||
|
.header {
|
||
|
margin-bottom: 22px; /* defined as header.marginBottom = 2 * header.fontSize */
|
||
|
}
|
||
|
|
||
|
.footer {
|
||
|
margin-top: 22px; /* = 2 * header.fontSize */
|
||
|
}
|
||
|
|
||
|
.gameEvent, .gameLiveStatus, .gameWhite, .gameWhiteClock, .gameBlackClock, .gameBlack {
|
||
|
display: inline-block;
|
||
|
overflow: hidden;
|
||
|
}
|
||
|
|
||
|
.gameEvent {
|
||
|
width: 220px; /* = 5.5 * whiteSquare.width */
|
||
|
margin-right: 20px; /* = 1/2 * whiteSquare.width */
|
||
|
text-align: left;
|
||
|
color: gray;
|
||
|
}
|
||
|
|
||
|
.gameLiveStatus {
|
||
|
width: 80px; /* = 2 * whiteSquare.width */
|
||
|
text-align: right;
|
||
|
text-decoration: none;
|
||
|
color: gray;
|
||
|
}
|
||
|
|
||
|
.gameWhite, .gameBlack {
|
||
|
width: 80px; /* = 2 * whiteSquare.width */
|
||
|
text-decoration: none;
|
||
|
color: black;
|
||
|
}
|
||
|
|
||
|
.gameWhiteClock, .gameBlackClock {
|
||
|
width: 50px; /* defined as gameWhiteClock.width */
|
||
|
margin-left: 15px; /* = 1/2 * (2 * whiteSquare.width - gameWhiteClock.width) */
|
||
|
margin-right: 15px; /* = 1/2 * (2 * whiteSquare.width - gameWhiteClock.width) */
|
||
|
}
|
||
|
|
||
|
.gameWhite, .gameBlackClock {
|
||
|
text-align: left;
|
||
|
}
|
||
|
|
||
|
.gameWhiteClock, .gameBlack {
|
||
|
text-align: right;
|
||
|
}
|
||
|
|
||
|
.gameSideToMove, .gameText, .gameResult {
|
||
|
white-space: nowrap;
|
||
|
display: inline-block;
|
||
|
overflow-x: hidden;
|
||
|
}
|
||
|
|
||
|
.gameSideToMove, .gameResult {
|
||
|
width: 50px; /* = gameWhiteClock.width */
|
||
|
}
|
||
|
|
||
|
.gameText {
|
||
|
width: 220px; /* = 8 * whiteSquare.width - 2 * gameWhiteClock.width */
|
||
|
text-align: center;
|
||
|
}
|
||
|
|
||
|
.gameResult {
|
||
|
text-align: right;
|
||
|
}
|
||
|
|
||
|
.sideToMove {
|
||
|
height: 1ex;
|
||
|
width: 1ex;
|
||
|
border-style: solid;
|
||
|
border-color: black;
|
||
|
border-width: 1px;
|
||
|
margin-bottom: 1px;
|
||
|
}
|
||
|
|
||
|
.sideToMoveHidden {
|
||
|
visibility: hidden;
|
||
|
}
|
||
|
|
||
|
</style>
|
||
|
|
||
|
<script src="pgn4web.js" type="text/javascript"></script>
|
||
|
<script src="engine.js" type="text/javascript"></script>
|
||
|
|
||
|
<script src="fide-lookup.js" type="text/javascript"></script>
|
||
|
|
||
|
<script src="crc32.js" type="text/javascript"></script>
|
||
|
|
||
|
<script type="text/javascript">
|
||
|
"use strict";
|
||
|
|
||
|
var pgn4web_engineWindowUrlParameters = "lch=FFFFFF&dch=E4E4E4&hch=BCDEB4&ctch=888888&ss=28&ps=24&fms=11&fcs=19&fpr=0";
|
||
|
var pgn4web_engineWindowTarget = "pgn4webAnalysisBoardForLiveResultsViewer";
|
||
|
var pgn4web_engineWindowHeight = "";
|
||
|
var pgn4web_engineWindowWidth = "";
|
||
|
|
||
|
var pgnFile;
|
||
|
var pgnFile_default = detectBaseLocation() ?
|
||
|
location.protocol + "//" + location.hostname + location.pathname.replace(/\/[^\/]*$/, "/live/live.pgn") :
|
||
|
"live/live.pgn";
|
||
|
// accepts pgnData as alias for pgnFile for consistency with board.html
|
||
|
if ((pgnFile = gup("pgnData")) === "") {
|
||
|
if ((pgnFile = gup("pgnFile")) === "") {
|
||
|
pgnFile = pgnFile_default;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
var demoFlag = false;
|
||
|
var alertFlag = false;
|
||
|
if ((gup("demo") == "true") || (gup("demo") == "t") ||
|
||
|
(gup("refreshDemo") == "true") || (gup("refreshDemo") == "t")) {
|
||
|
demoFlag = true; alertFlag = true;
|
||
|
}
|
||
|
|
||
|
var refreshMinutes;
|
||
|
if ((refreshMinutes = gup("refreshMinutes")) === "") {
|
||
|
refreshMinutes = 1;
|
||
|
} else {
|
||
|
var testMinutes = refreshMinutes + "";
|
||
|
if ((testMinutes.match(/[^0-9\.]/)) || (refreshMinutes === 0)) {
|
||
|
if (alertFlag) {
|
||
|
alert("ERROR: refreshMinutes parameter must be a positive number.\n" +
|
||
|
"Supplied " + testMinutes + "; defaulting to 1.");
|
||
|
}
|
||
|
refreshMinutes = 1;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
var iniGame;
|
||
|
var delayIniGame = false;
|
||
|
if ((iniGame = gup("initialGame")) === "") {iniGame = 1; }
|
||
|
if (!(isNaN(parseInt(iniGame, 10)))) {
|
||
|
iniGame = parseInt(iniGame, 10);
|
||
|
delayIniGame = (iniGame > 0);
|
||
|
}
|
||
|
|
||
|
var showBoard = true;
|
||
|
if ((gup("showBoard") == "false") || (gup("showBoard") == "f")) { showBoard = false; }
|
||
|
|
||
|
var showEvent = true;
|
||
|
if ((gup("showEvent") == "false") || (gup("showEvent") == "f")) { showEvent = false; }
|
||
|
|
||
|
var showTeams = true;
|
||
|
if ((gup("showTeams") == "false") || (gup("showTeams") == "f")) { showTeams = false; }
|
||
|
|
||
|
var showPlayersInfo = true;
|
||
|
if ((gup("showPlayersInfo") == "false") || (gup("showPlayersInfo") == "f")) { showPlayersInfo = false; }
|
||
|
|
||
|
var autoHighlightNewmoves = true;
|
||
|
if ((gup("autoHighlightNewmoves") == "false") || (gup("autoHighlightNewmoves") == "f")) { autoHighlightNewmoves = false; }
|
||
|
|
||
|
var autoSwitchNewgames = false;
|
||
|
if ((gup("autoSwitchNewgames") == "true") || (gup("autoSwitchNewgames") == "t")) { autoSwitchNewgames = true; }
|
||
|
|
||
|
var showAnalysis = false; // does not fit the design to allow this as URL parameter
|
||
|
|
||
|
var disableEngine = true; // does not fit the design to allow this as URL parameter; preset as true to preload the analysis board
|
||
|
|
||
|
var autoUpdateAnalysis = false;
|
||
|
if ((gup("autoUpdateAnalysis") == "true") || (gup("autoUpdateAnalysis") == "t")) { autoUpdateAnalysis = true; }
|
||
|
|
||
|
var headlessPage = false;
|
||
|
if ((gup("headlessPage") == "true") || (gup("headlessPage") == "t")) { headlessPage = true; }
|
||
|
|
||
|
if ((gup("help") == "true") || (gup("help") == "t")) {
|
||
|
document.write("<pre style='font-size:11px;'>" +
|
||
|
"pgn4web live-results.html parameters" + "\n\n" +
|
||
|
" - pgnData = " + pgnFile + "; PGN file to load (default " + pgnFile_default + ")" + "\n" +
|
||
|
" - refreshMinutes = " + refreshMinutes + "; refresh interval in minutes, decimals allowed (default 1)" + "\n" +
|
||
|
" - refreshDemo = " + demoFlag + "; sets live demo mode (default false)" + "\n" +
|
||
|
" - initialGame = " + iniGame + "; initial game to load, a number or first, last, random or a search string (default 1)" + "\n" +
|
||
|
" - showBoard = " + showBoard + "; shows the chessboard (default true)" + "\n" +
|
||
|
" - showEvent = " + showEvent + "; shows event information (default true)" + "\n" +
|
||
|
" - showTeams = " + showTeams + "; shows teams information (default true)" + "\n" +
|
||
|
" - autoHighlightNewmoves = " + autoHighlightNewmoves + "; automatically highlights new moves (default true)" + "\n" +
|
||
|
" - autoSwitchNewgames = " + autoSwitchNewgames + "; automatically switches to games with new moves (default false)" + "\n" +
|
||
|
" - autoUpdateAnalysis = " + autoUpdateAnalysis + "; automatically updates analysis board from main board (default false)" + "\n" +
|
||
|
" - showPlayersInfo = " + showPlayersInfo + "; shows title/elo players information (default true)" + "\n" +
|
||
|
" - headlessPage = " + headlessPage + "; displays a page without heading (default false)" + "\n" +
|
||
|
" - help = true" + "\n\n" +
|
||
|
"</pre>");
|
||
|
}
|
||
|
|
||
|
SetPgnUrl(pgnFile);
|
||
|
SetImagePath ("images/alpha/32");
|
||
|
SetImageType("png");
|
||
|
SetHighlightOption(false);
|
||
|
SetCommentsIntoMoveText(false);
|
||
|
SetCommentsOnSeparateLines(false);
|
||
|
SetAutoplayDelay(1000);
|
||
|
SetAutostartAutoplay(false);
|
||
|
SetAutoplayNextGame(false);
|
||
|
SetInitialHalfmove("end", true);
|
||
|
SetInitialVariation(0);
|
||
|
SetInitialGame(delayIniGame ? "first" : iniGame);
|
||
|
SetShortcutKeysEnabled(showBoard);
|
||
|
SetLiveBroadcast(refreshMinutes, alertFlag, demoFlag, true);
|
||
|
|
||
|
function customFunctionOnCheckLiveBroadcastStatus() {
|
||
|
var theObj, theObjFrom, theObjTo;
|
||
|
if ((theObjFrom = document.getElementById("GameLiveStatus")) && (theObjTo = document.getElementById("GameLiveStatus2"))) {
|
||
|
theObjTo.innerHTML = theObjFrom.innerHTML;
|
||
|
theObjTo.title = theObjFrom.title;
|
||
|
}
|
||
|
for (var gg in gameId) {
|
||
|
if (theObj = document.getElementById("newMoves_" + gameId[gg])) {
|
||
|
theObj.className = "noNewMoves";
|
||
|
}
|
||
|
}
|
||
|
gameNewMoves = new Array();
|
||
|
SetHighlight(false);
|
||
|
}
|
||
|
|
||
|
var gameId;
|
||
|
var gameWhiteTeam;
|
||
|
var gameBlackTeam;
|
||
|
var gameWhiteTitle;
|
||
|
var gameBlackTitle;
|
||
|
var gameWhiteElo;
|
||
|
var gameBlackElo;
|
||
|
var gameMatch;
|
||
|
var gameBoard;
|
||
|
var newGameLengthFromCrc = new Array();
|
||
|
var gameLengthFromCrc = new Array();
|
||
|
var gameNewMoves;
|
||
|
var firstCustomFunctionOnPgnTextLoad = true;
|
||
|
function customFunctionOnPgnTextLoad() {
|
||
|
var theObj;
|
||
|
|
||
|
gameId = new Array();
|
||
|
|
||
|
gameWhiteTeam = new Array();
|
||
|
gameBlackTeam = new Array();
|
||
|
gameWhiteTitle = new Array();
|
||
|
gameBlackTitle = new Array();
|
||
|
gameWhiteElo = new Array();
|
||
|
gameBlackElo = new Array();
|
||
|
gameMatch = new Array();
|
||
|
gameBoard = new Array();
|
||
|
gameNewMoves = new Array();
|
||
|
for (var gg = 0; gg < numberOfGames; gg++) {
|
||
|
gameId[gg] = gg;
|
||
|
gameWhiteTeam[gg] = customPgnHeaderTag("WhiteTeam", null, gg);
|
||
|
gameBlackTeam[gg] = customPgnHeaderTag("BlackTeam", null, gg);
|
||
|
gameWhiteTitle[gg] = customPgnHeaderTag("WhiteTitle", null, gg);
|
||
|
gameBlackTitle[gg] = customPgnHeaderTag("BlackTitle", null, gg);
|
||
|
gameWhiteElo[gg] = customPgnHeaderTag("WhiteElo", null, gg);
|
||
|
gameBlackElo[gg] = customPgnHeaderTag("BlackElo", null, gg);
|
||
|
gameMatch[gg] = crc32(gameWhiteTeam[gg]) + crc32(gameBlackTeam[gg]);
|
||
|
gameBoard[gg] = customPgnHeaderTag("Board", null, gg);
|
||
|
var thisCrc = (typeof(pgnHeader[gg]) == "string") ? (crc32(pgnHeader[gg].replace(/(^\s*|\s*$)/g, "")) % 65535) + 65535 : 0;
|
||
|
newGameLengthFromCrc[thisCrc] = LiveBroadcastDemo ? gameDemoMaxPly[gg] : pgnGame[gg].replace(/(^\s*|\s*$)/g, "").length;
|
||
|
gameNewMoves[gg] = ((newGameLengthFromCrc[thisCrc] !== gameLengthFromCrc[thisCrc]) && (!LiveBroadcastEnded));
|
||
|
}
|
||
|
gameLengthFromCrc = newGameLengthFromCrc.splice(0, newGameLengthFromCrc.length);
|
||
|
gameId.sort(sortGameId);
|
||
|
|
||
|
printGames();
|
||
|
if (autoHighlightNewmoves) {
|
||
|
SetHighlight((typeof(gameNewMoves) != "undefined") && (typeof(gameNewMoves[currentGame]) != "undefined") && (gameNewMoves[currentGame]));
|
||
|
}
|
||
|
|
||
|
if ((LiveBroadcastTicker < 2) && delayIniGame) {
|
||
|
Init(typeof(gameId[iniGame - 1]) != "undefined" ? gameId[iniGame - 1] : "0");
|
||
|
}
|
||
|
|
||
|
if (autoSwitchNewgames && ((typeof(gameNewMoves) == "undefined") || (!gameNewMoves[currentGame]))) { searchGameWithNewMoves(false); }
|
||
|
|
||
|
if (firstCustomFunctionOnPgnTextLoad) {
|
||
|
firstCustomFunctionOnPgnTextLoad = false;
|
||
|
if (theObj = document.getElementById("SideToMove")) { theObj.className = "sideToMove"; }
|
||
|
showEngineAnalysisBoard(disableEngine, true); // prepare analysis frame with an idle board
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function myCompare(AA, ZZ) {
|
||
|
if (!AA && !ZZ) { return 0; }
|
||
|
if (AA && !ZZ) { return -1; }
|
||
|
if (!AA && ZZ) { return 1; }
|
||
|
if (AA > ZZ) { return 1; }
|
||
|
if (AA < ZZ) { return -1; }
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
function myCompareRound(AA, ZZ) {
|
||
|
try {
|
||
|
if (!AA && !ZZ) { return 0; }
|
||
|
if (AA && !ZZ) { return -1; }
|
||
|
if (!AA && ZZ) { return 1; }
|
||
|
if (AA.match(/[^0-9.]/) || ZZ.match(/[^0-9.]/)) { return myCompare(AA, ZZ); }
|
||
|
var AA_A = AA.split(".");
|
||
|
var ZZ_Z = ZZ.split(".");
|
||
|
var jm = Math.max(AA_A.length, ZZ_Z.length);
|
||
|
for (var jj = 0; jj < jm; jj++) {
|
||
|
if (AA_A[jj] && !ZZ_Z[jj]) { return -1; }
|
||
|
if (!AA_A[jj] && ZZ_Z[jj]) { return 1; }
|
||
|
AA_A[jj] = parseInt(AA_A[jj], 10);
|
||
|
ZZ_Z[jj] = parseInt(ZZ_Z[jj], 10);
|
||
|
if (AA_A[jj] > ZZ_Z[jj]) { return 1; }
|
||
|
if (AA_A[jj] < ZZ_Z[jj]) { return -1; }
|
||
|
}
|
||
|
return 0;
|
||
|
} catch(e) {
|
||
|
myAlert("warming: myCompareRound failed with AA=" + AA + "; ZZ=" + ZZ + ";", false);
|
||
|
return myCompare(AA, ZZ);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function sortGameId(aa, zz) {
|
||
|
var res;
|
||
|
|
||
|
res = myCompare(gameEvent[aa], gameEvent[zz]);
|
||
|
if (res !== 0) { return res; }
|
||
|
|
||
|
res = myCompareRound(fixRound(gameRound[aa]), fixRound(gameRound[zz]));
|
||
|
if (res !== 0) { return res; }
|
||
|
|
||
|
res = myCompare(gameMatch[aa], gameMatch[zz]);
|
||
|
if (res !== 0) { return res; }
|
||
|
|
||
|
res = myCompareRound(gameRound[aa], gameRound[zz]);
|
||
|
if (res !== 0) { return res; }
|
||
|
|
||
|
res = myCompare(gameBoard[aa], gameBoard[zz]);
|
||
|
if (res !== 0) { return res; }
|
||
|
|
||
|
if (aa > zz) { return 1; }
|
||
|
if (aa < zz) { return -1; }
|
||
|
|
||
|
return 0;
|
||
|
|
||
|
}
|
||
|
|
||
|
function fixRound(thisRound) {
|
||
|
return thisRound.replace(/\..*$/, ""); // only use the first number of rounds like 1.2.3
|
||
|
}
|
||
|
|
||
|
function printGames() {
|
||
|
var firstRow = true;
|
||
|
var lastEventRound = "";
|
||
|
var lastMatch = 0;
|
||
|
var theObj = document.getElementById("results");
|
||
|
if (theObj) {
|
||
|
var resultTable = "";
|
||
|
var ggId, fixedRound, currentEventRound, whitePlayer, whiteTitle, whiteElo, blackPlayer, blackTitle, blackElo;
|
||
|
for (var gg in gameId) {
|
||
|
ggId = gameId[gg];
|
||
|
fixedRound = fixRound(gameRound[ggId]);
|
||
|
currentEventRound = gameEvent[ggId] + fixedRound;
|
||
|
if (showEvent && currentEventRound && (currentEventRound !== lastEventRound)) {
|
||
|
resultTable += '<div class="eventRound"' + (firstRow ? ' style="margin-top:0px;"' : '') + '><span class="event" title="' + gameEvent[ggId] + '">' + gameEvent[ggId] + '</span><span class="round" title="' + 'round ' + fixedRound + '">' + (fixedRound !== '' ? 'round ' + fixedRound : '') + '</span></div>';
|
||
|
if (firstRow) { firstRow = false; }
|
||
|
lastEventRound = currentEventRound;
|
||
|
lastMatch = 0;
|
||
|
}
|
||
|
if (showTeams && gameMatch[ggId] && (gameMatch[ggId] !== lastMatch)) {
|
||
|
resultTable += matchRow(gameEvent[ggId], gameRound[ggId], gameMatch[ggId], firstRow);
|
||
|
if (firstRow) { firstRow = false; }
|
||
|
lastMatch = gameMatch[ggId];
|
||
|
}
|
||
|
whiteTitle = gameWhiteTitle[ggId];
|
||
|
whiteElo = gameWhiteElo[ggId];
|
||
|
whitePlayer = gameWhite[ggId] + (showPlayersInfo ? (whiteTitle ? " " + whiteTitle : "") + (whiteElo ? " " + whiteElo : "") : "");
|
||
|
blackTitle = gameBlackTitle[ggId];
|
||
|
blackElo = gameBlackElo[ggId];
|
||
|
blackPlayer = gameBlack[ggId] + (showPlayersInfo ? (blackTitle ? " " + blackTitle : "") + (blackElo ? " " + blackElo : "") : "");
|
||
|
resultTable += '<div class="game" id="gameRow_' + ggId + '" onclick="selectGame(' + ggId + ');" style="' + ((showBoard && (ggId === oldSelectedGame)) ? 'font-weight:bold;' : '') + (firstRow ? 'margin-top:0px;' : '') + '"><span class="player"><span class="firstPlayer' + ((firstTeam && gameWhiteTeam[ggId] === firstTeam) ? ' firstTeamPlayer' : '') + ((secondTeam && gameWhiteTeam[ggId] === secondTeam) ? ' secondTeamPlayer' : '') + '" title="' + whitePlayer.replace(/ /, ' ') + '">' + whitePlayer + '</span></span><span class="player"><span class="secondPlayer' + ((firstTeam && gameWhiteTeam[ggId] === firstTeam) ? ' firstTeamPlayer' : '') + ((secondTeam && gameBlackTeam[ggId] === secondTeam) ? ' secondTeamPlayer' : '') + '" title="' + blackPlayer.replace(/ /, ' ') + '">' + blackPlayer + '</span></span><span class="result" title="' + gameResult[ggId] + '">' + gameResult[ggId] + '</span><span id="newMoves_' + ggId + '" class="' + (gameNewMoves[ggId] ? 'newMoves' : 'noNewMoves') + '" title="new moves received">*</span></div>';
|
||
|
if (firstRow) { firstRow = false; }
|
||
|
}
|
||
|
theObj.innerHTML = resultTable;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
var firstTeam = "";
|
||
|
var secondTeam = "";
|
||
|
function matchRow(eventStr, roundStr, matchId, firstRow) {
|
||
|
firstTeam = "";
|
||
|
secondTeam = "";
|
||
|
if (matchId === 0) { return ""; }
|
||
|
var firstTeamScore = 0;
|
||
|
var secondTeamScore = 0;
|
||
|
for (var ii in gameId) {
|
||
|
if ((gameEvent[gameId[ii]] === eventStr) && (fixRound(gameRound[gameId[ii]]) === fixRound(roundStr)) && (gameMatch[gameId[ii]] === matchId)) {
|
||
|
if (!firstTeam || !secondTeam) {
|
||
|
firstTeam = gameWhiteTeam[gameId[ii]];
|
||
|
secondTeam = gameBlackTeam[gameId[ii]];
|
||
|
}
|
||
|
switch (gameResult[gameId[ii]]) {
|
||
|
case "1-0":
|
||
|
if (firstTeam == gameWhiteTeam[gameId[ii]]) { firstTeamScore += 1; }
|
||
|
else if (secondTeam == gameWhiteTeam[gameId[ii]]) { secondTeamScore += 1; }
|
||
|
break;
|
||
|
case "0-1":
|
||
|
if (firstTeam == gameBlackTeam[gameId[ii]]) { firstTeamScore += 1; }
|
||
|
else if (secondTeam == gameBlackTeam[gameId[ii]]) { secondTeamScore += 1; }
|
||
|
break;
|
||
|
case "1/2-1/2":
|
||
|
firstTeamScore += 0.5;
|
||
|
secondTeamScore += 0.5;
|
||
|
break;
|
||
|
default:
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
return '<div class="matchScore"' + (firstRow? ' style="margin-top:0px;"' : '') + '><span class="match" title="' + firstTeam + ' - ' + secondTeam + '"><span class="team"><span class="firstTeam">' + firstTeam + '</span></span><span class="team"><span class="secondTeam">' + secondTeam + '</span></span></span><span class="score" title="' + firstTeamScore + '-' + secondTeamScore + '">' + firstTeamScore + '-' + secondTeamScore + '</span></div>';
|
||
|
}
|
||
|
|
||
|
var oldSelectedGame = -1;
|
||
|
function selectGame(gameNum) {
|
||
|
if (!showBoard) { return; }
|
||
|
Init(gameNum);
|
||
|
highlightGame(gameNum);
|
||
|
}
|
||
|
|
||
|
function highlightGame(gameNum) {
|
||
|
var theObj;
|
||
|
if (!showBoard) { return; }
|
||
|
if (theObj = document.getElementById("gameRow_" + oldSelectedGame)) {
|
||
|
if (oldSelectedGame !== gameNum) {
|
||
|
theObj.style.fontWeight = "";
|
||
|
}
|
||
|
}
|
||
|
if (theObj = document.getElementById("gameRow_" + gameNum)) {
|
||
|
theObj.style.fontWeight = "bold";
|
||
|
}
|
||
|
oldSelectedGame = gameNum;
|
||
|
}
|
||
|
|
||
|
function customFunctionOnPgnGameLoad() {
|
||
|
var theObj;
|
||
|
|
||
|
highlightGame(currentGame);
|
||
|
|
||
|
if (theObj = document.getElementById("GameWhite")) {
|
||
|
var whiteTitle = customPgnHeaderTag("WhiteTitle");
|
||
|
var whiteElo = customPgnHeaderTag("WhiteElo");
|
||
|
theObj.title = simpleHtmlentitiesDecode("white player: " + gameWhite[currentGame] + (showPlayersInfo ? (whiteTitle ? " " + whiteTitle : "") + (whiteElo ? " " + whiteElo : "") : ""));
|
||
|
if (theObj.innerHTML === "") { theObj.innerHTML = " "; }
|
||
|
}
|
||
|
if (theObj = document.getElementById("GameBlack")) {
|
||
|
var blackTitle = customPgnHeaderTag("BlackTitle");
|
||
|
var blackElo = customPgnHeaderTag("BlackElo");
|
||
|
theObj.title = simpleHtmlentitiesDecode("black player: " + gameBlack[currentGame] + (showPlayersInfo ? (blackTitle ? " " + blackTitle : "") + (blackElo ? " " + blackElo : "") : ""));
|
||
|
if (theObj.innerHTML === "") { theObj.innerHTML = " "; }
|
||
|
}
|
||
|
|
||
|
if (theObj = document.getElementById("GameEvent")) {
|
||
|
theObj.title = simpleHtmlentitiesDecode("event: " + gameEvent[currentGame] + (gameRound[currentGame] ? " round: " + gameRound[currentGame] : "") + (gameDate[currentGame] ? " date: " + gameDate[currentGame] : "") + (gameSite[currentGame] ? " site: " + gameSite[currentGame] : ""));
|
||
|
}
|
||
|
|
||
|
if (autoHighlightNewmoves) {
|
||
|
SetHighlight((typeof(gameNewMoves) != "undefined") && (typeof(gameNewMoves[currentGame]) != "undefined") && (gameNewMoves[currentGame]));
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function customFunctionOnMove() {
|
||
|
var extraMoves = 2;
|
||
|
|
||
|
document.getElementById("GamePrevMoves").innerHTML = "";
|
||
|
document.getElementById("GameCurrMove").innerHTML = "";
|
||
|
document.getElementById("GameNextMoves").innerHTML = "";
|
||
|
var theObj = document.getElementById("GamePrevMoves");
|
||
|
var thisPly = Math.max(CurrentPly - extraMoves - 1, StartPly);
|
||
|
if (thisPly > StartPly) { theObj.innerHTML += "... "; }
|
||
|
for (; thisPly < Math.min(CurrentPly + extraMoves, StartPly + PlyNumber); thisPly++) {
|
||
|
if (thisPly == CurrentPly) {
|
||
|
theObj = document.getElementById("GameNextMoves");
|
||
|
}
|
||
|
if (thisPly % 2 === 0) { theObj.innerHTML += Math.floor(1 + thisPly / 2) + ". "; }
|
||
|
if (thisPly == CurrentPly - 1) {
|
||
|
theObj = document.getElementById("GameCurrMove");
|
||
|
}
|
||
|
theObj.innerHTML += Moves[thisPly] + " ";
|
||
|
}
|
||
|
if (thisPly < StartPly + PlyNumber) { theObj.innerHTML += "..."; }
|
||
|
|
||
|
if (theObj = document.getElementById("SideToMove")) {
|
||
|
theObj.style.backgroundColor = CurrentPly % 2 ? "black" : "white";
|
||
|
}
|
||
|
|
||
|
if (showBoard && showAnalysis && autoUpdateAnalysis) {
|
||
|
showAnalysisBoard(disableEngine);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function searchGameWithNewMoves(backward) {
|
||
|
if (typeof(gameId) == "undefined") { return; }
|
||
|
if (typeof(gameNewMoves) == "undefined") { return; }
|
||
|
|
||
|
for (var thisGameIndex = 0; thisGameIndex < gameId.length; thisGameIndex++) {
|
||
|
if (gameId[thisGameIndex] == currentGame) { break; }
|
||
|
}
|
||
|
if (thisGameIndex === gameId.length) { return; }
|
||
|
|
||
|
var indexIncrement = backward ? -1 : 1;
|
||
|
for (var thisIndex = (thisGameIndex + indexIncrement + gameId.length) % gameId.length; thisIndex !== thisGameIndex; thisIndex = (thisIndex + indexIncrement + gameId.length) % gameId.length) {
|
||
|
if (gameNewMoves[gameId[thisIndex]]) { break; }
|
||
|
}
|
||
|
if (thisIndex !== thisGameIndex) { Init(gameId[thisIndex]); }
|
||
|
}
|
||
|
|
||
|
function customDebugInfo() {
|
||
|
return "showEvent=" + showEvent + " showTeams=" + showTeams + " showPlayersInfo=" + showPlayersInfo + " showBoard=" + showBoard + " autoHighlightNewmoves=" + autoHighlightNewmoves + " autoSwitchNewgames=" + autoSwitchNewgames + " showAnalysis=" + showAnalysis;
|
||
|
}
|
||
|
|
||
|
// customShortcutKey_Shift_1 defined by fide-lookup.js
|
||
|
// customShortcutKey_Shift_2 defined by fide-lookup.js
|
||
|
|
||
|
function customShortcutKey_Shift_3() { searchGameWithNewMoves(true); }
|
||
|
function customShortcutKey_Shift_4() { searchGameWithNewMoves(false); }
|
||
|
function customShortcutKey_Shift_5() { autoHighlightNewmoves = !autoHighlightNewmoves; }
|
||
|
function customShortcutKey_Shift_6() { autoSwitchNewgames = !autoSwitchNewgames; }
|
||
|
function customShortcutKey_Shift_7() { toggleShowBoard(); }
|
||
|
|
||
|
// overwriting engine.js definitions of customShortcutKey_Shift_8 9 0
|
||
|
function customShortcutKey_Shift_8() { showAnalysisBoard(true); }
|
||
|
function customShortcutKey_Shift_9() { showAnalysisBoard(false); }
|
||
|
function customShortcutKey_Shift_0() { if (showAnalysis) { hideAnalysisBoard(); } else { showAnalysisBoard(disableEngine); } }
|
||
|
|
||
|
boardShortcut("F5", "toggle event information", function(t,e){ toggleShowEvent(); });
|
||
|
boardShortcut("G5", "toggle teams information", function(t,e){ toggleShowTeams(); });
|
||
|
boardShortcut("H5", "toggle title/elo players information", function(t,e){ toggleShowPlayersInfo(); });
|
||
|
|
||
|
boardShortcut("B7", "search previous game with new moves", function(t,e){ searchGameWithNewMoves(true); });
|
||
|
boardShortcut("C7", "search next game with new moves", function(t,e){ searchGameWithNewMoves(false); });
|
||
|
boardShortcut("F7", "toggle autohighlight new moves", function(t,e){ autoHighlightNewmoves = !autoHighlightNewmoves && !e.shiftKey; });
|
||
|
boardShortcut("G7", "toggle autoswitch to games with new moves", function(t,e){ autoSwitchNewgames = !autoSwitchNewgames && !e.shiftKey; });
|
||
|
|
||
|
boardShortcut("F8", "close/pause analysis board", function(t,e){ if (!e.shiftKey) { hideAnalysisBoard(); } });
|
||
|
boardShortcut("E8", "open/update analysis board", function(t,e){ showAnalysisBoard(e.shiftKey); }, true);
|
||
|
|
||
|
|
||
|
function toggleShowEvent() {
|
||
|
showEvent = !showEvent;
|
||
|
printGames();
|
||
|
}
|
||
|
|
||
|
function toggleShowTeams() {
|
||
|
showTeams = !showTeams;
|
||
|
printGames();
|
||
|
}
|
||
|
|
||
|
function toggleShowPlayersInfo() {
|
||
|
showPlayersInfo = !showPlayersInfo;
|
||
|
printGames();
|
||
|
customFunctionOnPgnGameLoad();
|
||
|
}
|
||
|
|
||
|
function toggleShowBoard() {
|
||
|
var theObj;
|
||
|
showBoard = !showBoard;
|
||
|
if (theObj = document.getElementById("GameFloatingContainer")) {
|
||
|
theObj.style.display = showBoard ? "" : "none";
|
||
|
}
|
||
|
if (theObj = document.getElementById("GameLiveStatus2")) {
|
||
|
theObj.style.display = showBoard ? "none" : "";
|
||
|
}
|
||
|
if (showBoard) { Init(currentGame); }
|
||
|
printGames();
|
||
|
}
|
||
|
|
||
|
var thisEngineWin;
|
||
|
function showAnalysisBoard(de) {
|
||
|
var theObj;
|
||
|
if (!showBoard) { return; }
|
||
|
thisEngineWin = showEngineAnalysisBoard(de);
|
||
|
if (thisEngineWin) {
|
||
|
disableEngine = de;
|
||
|
if (theObj = document.getElementById('GameAnalysisContainer')) {
|
||
|
theObj.style.width = "304px"; // defined as gameAnalysisContainer.width.open = gameAnalysisFrame.width + gameAnalysisFrame.marginLeft + body.padding
|
||
|
}
|
||
|
showAnalysis = true;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function hideAnalysisBoard() {
|
||
|
var theObj;
|
||
|
if (theObj = document.getElementById('GameAnalysisContainer')) {
|
||
|
theObj.style.width = "40px"; // = gameAnalysisContainer.width.closed
|
||
|
}
|
||
|
if (typeof(thisEngineWin) != "undefined") {
|
||
|
if (typeof(thisEngineWin.StopBackgroundEngine) == "function") { thisEngineWin.StopBackgroundEngine(); }
|
||
|
if (typeof(thisEngineWin.autoUpdate) != "undefined") { thisEngineWin.autoUpdate = false; }
|
||
|
}
|
||
|
showAnalysis = false;
|
||
|
}
|
||
|
|
||
|
function gup(name) {
|
||
|
|
||
|
name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
|
||
|
var regexS = "[\\?&]"+name+"=([^&#]*)";
|
||
|
// commented below to match first occurrence (to avoid users overruling setting)
|
||
|
// regexS = regexS+"(?!.*"+regexS+")"; // matches the LAST occurrence
|
||
|
var regex = new RegExp( regexS, "i" );
|
||
|
var results = regex.exec( window.location.href );
|
||
|
if (results !== null) { return decodeURIComponent(results[1]); }
|
||
|
|
||
|
// allows for short version of the URL parameters, for instance sC matches squareColor
|
||
|
var compact_name = name.charAt(0);
|
||
|
for (var i=1; i<name.length; i++) {
|
||
|
if (name.charAt(i).match(/[A-Z]/)) { compact_name = compact_name + name.charAt(i).toLowerCase(); }
|
||
|
}
|
||
|
name = compact_name;
|
||
|
|
||
|
name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
|
||
|
regexS = "[\\?&]"+name+"=([^&#]*)";
|
||
|
// commented below to match first occurrence (to avoid users overruling setting)
|
||
|
// regexS = regexS+"(?!.*"+regexS+")"; // matches the LAST occurrence
|
||
|
regex = new RegExp( regexS, "i" );
|
||
|
|
||
|
results = regex.exec( window.location.href );
|
||
|
if (results !== null) { return decodeURIComponent(results[1]); }
|
||
|
|
||
|
return "";
|
||
|
}
|
||
|
|
||
|
</script>
|
||
|
|
||
|
</head>
|
||
|
|
||
|
<body>
|
||
|
|
||
|
<h1 class="pageHeader" id="pageHeader">pgn4web <a class="pageHeader" href="#games">live chess broadcast</a></h1>
|
||
|
|
||
|
<table class="gameFloatingContainer" id="GameFloatingContainer" cellspacing="0" cellpadding="0" border="0"><tr valign="top"><td align="leftt">
|
||
|
<div class="gameAnalysisContainer" id="GameAnalysisContainer">
|
||
|
<div class="gameAnalysisButtons" id="GameAnalysisButtons" title="analysis board: try moves clicking from/to squares" onclick="hideAnalysisBoard();"></div>
|
||
|
<iframe class="gameAnalysisFrame" id="GameAnalysisFrame" name="pgn4webAnalysisBoardForLiveResultsViewer" src="./blank.html" frameborder="0" scrolling="no" marginheight="0" marginwidth="0">your web browser and/or your host do not support iframes as required</iframe>
|
||
|
</div>
|
||
|
</td><td align="left">
|
||
|
<div class="gameBoardContainer" id="GameBoardContainer">
|
||
|
<div class="header"><span class="gameEvent" id="GameEvent"> </span><a class="gameLiveStatus" id="GameLiveStatus" href="javascript:void(0);" onclick="refreshPgnSource(); this.blur();"> </a></div>
|
||
|
<div class="header"><a class="gameWhite" id="GameWhite" title="white player" href="javascript:void(0);" onclick="openFidePlayerUrl(this.innerHTML, customPgnHeaderTag('WhiteFideId')); this.blur();"></a><span class="gameWhiteClock" id="GameWhiteClock" title="white clock"></span><span class="gameBlackClock" id="GameBlackClock" title="black clock"></span><a class="gameBlack" id="GameBlack" title="black player" href="javascript:void(0);" onclick="openFidePlayerUrl(this.innerHTML, customPgnHeaderTag('BlackFideId')); this.blur();"></a></div>
|
||
|
<div id="GameBoard"></div>
|
||
|
<div class="footer"><span class="gameSideToMove"><img class="sideToMove sideToMoveHidden" id="SideToMove" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoEAYAAADcbmQuAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAZiS0dEAMAAwADAGp0HVAAAAAlwSFlzAAAASAAAAEgARslrPgAAAAl2cEFnAAAAKAAAACgAo3CU+AAAACNJREFUaN7twQENAAAAwqD3T20PBxQAAAAAAAAAAAAAAAAPBjIoAAFxtd2pAAAAAElFTkSuQmCC" title="side to move"/> </span><span class="gameText"> <a id="GamePrevMoves" href="javascript:void(0);" onclick="GoToMove(CurrentPly - 1); this.blur();" title="previous moves"></a><a href="javascript:void(0);" onclick="SetHighlight(!highlightOption); this.blur();" style="font-weight: bold;" id="GameCurrMove" title="current move as shown on chessboard"></a><a id="GameNextMoves" href="javascript:void(0);" onclick="GoToMove(CurrentPly + 1); this.blur();" title="next moves"></a><span style="font-weight: bold;"> </span></span><a class="gameResult" id="GameResult" href="javascript:void(0);" onclick="GoToMove(StartPlyVar[0] + PlyNumberVar[0], 0); this.blur();" title="go to game end"></a></div>
|
||
|
</div>
|
||
|
</td></tr></table>
|
||
|
|
||
|
<a name="games" class="gamesAnchor" id="gamesAnchor"></a>
|
||
|
|
||
|
<div id="results"></div>
|
||
|
<a class="gameLiveStatus2" id="GameLiveStatus2" href="javascript:void(0);" onclick="refreshPgnSource(); this.blur();"></a>
|
||
|
|
||
|
<script type="text/javascript">
|
||
|
"use strict";
|
||
|
|
||
|
var theObj;
|
||
|
|
||
|
if (theObj = document.getElementById("GameFloatingContainer")) {
|
||
|
theObj.style.display = showBoard ? "" : "none";
|
||
|
}
|
||
|
if (theObj = document.getElementById("GameLiveStatus2")) {
|
||
|
theObj.style.display = showBoard ? "none" : "";
|
||
|
}
|
||
|
if (theObj = document.getElementById("pageHeader")) {
|
||
|
theObj.style.display = headlessPage ? "none" : "";
|
||
|
}
|
||
|
if (theObj = document.getElementById("gamesAnchor")) {
|
||
|
theObj.style.display = headlessPage ? "none" : "";
|
||
|
}
|
||
|
|
||
|
</script>
|
||
|
|
||
|
</body>
|
||
|
|
||
|
</html>
|