Skip to content

Instantly share code, notes, and snippets.

@bobthemighty
Created December 10, 2014 17:19
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save bobthemighty/984b5cb142c2377bd938 to your computer and use it in GitHub Desktop.
Save bobthemighty/984b5cb142c2377bd938 to your computer and use it in GitHub Desktop.
<!doctype html>
<html lang="en_GB" ng-app="ogs">
<head>
<title>The best place to play go online!</title>
<base href="/">
<!-- Common Head -->
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<!--[if lte IE 9]>
<meta http-equiv="refresh" content="0;url=/old_browser.mako" />
<![endif]-->
<!-- zoom in mobile devices. Maximum scale is so stupid iPhone resets the zoom
level when it rotates back from landscape mode. We should probably make that
conditional, if it's iPhone lock it in, if it's a non-suck browser, let the
user/browser do what it wants. -->
<meta name="viewport" id="viewport" content="initial-scale=1.0, width=device-width, user-scalable=yes" />
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="format-detection" content="telephone=no">
<meta property="og:site_name" content="online-go.com" />
<meta property="og:locale" content="en_GB" />
<meta property="og:locale:alternate" content="en pl de pt ro" />
<meta property="og:type" content="website" />
<meta property="og:url" content="http://online-go.com/support" />
<link rel="shortcut icon" href="https://a00ce0086bda2213e89f-570db0116da8eb5fdc3ce95006e46d28.ssl.cf1.rackcdn.com/4.1/img/novaicon.ico">
<link rel="apple-touch-icon" href="https://a00ce0086bda2213e89f-570db0116da8eb5fdc3ce95006e46d28.ssl.cf1.rackcdn.com/4.1/img/novaicon.png">
<style>
/* These styles need to remain in the html document so that our loading
screen works as expected, otherwise we'll see loading junk while the
css is being fetched. */
@-webkit-keyframes loadingrotation {
from {-webkit-transform: rotate(0deg);}
to {-webkit-transform: rotate(359deg);}
}
@-moz-keyframes loadingrotation {
from {-moz-transform: rotate(0deg);}
to {-moz-transform: rotate(359deg);}
}
@-o-keyframes loadingrotation {
from {-o-transform: rotate(0deg);}
to {-o-transform: rotate(359deg);}
}
@keyframes loadingrotation {
from {transform: rotate(0deg);}
to {transform: rotate(359deg);}
}
html, body {
width: 100%;
}
#loading-screen {
display: none;
}
body.loading {
overflow: hidden !important;
}
body.loading #loading-screen {
box-sizing: border-box;
text-shadow: none!important;
display: block !important;
position: fixed;
background-color: #fff;
color: #333;
top: 0;
left: 0;
bottom: 0;
right: 0;
z-index: 100000;
padding: 0;
margin: 0;
padding-top: 100px;
text-align: center;
}
body.loading #loading-screen h3 {
margin: 0;
padding: 0;
padding-top: 20px;
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif !important;
font-size: 32px !important;
font-weight: bold !important;
}
.loading .loading-spinner {
display: inline-block !important;
height:0px;
width:0px;
margin:0px 0px;
padding:0px 0px;
position: relative;
-webkit-animation: loadingrotation 1.5s infinite linear;
-moz-animation: loadingrotation 1.5s infinite linear;
-o-animation: loadingrotation 1.5s infinite linear;
animation: loadingrotation 1.5s infinite linear;
border-left:50px solid #D6D6D6;
border-top:50px solid #D6D6D6;
border-right:50px solid #000000;
border-bottom:50px solid #000000;
border-radius:100%;
}
#main-div.loading {
-webkit-transition: all 1s ease;
-moz-transition: all 1s ease;
-o-transition: all 1s ease;
transition: all 1s ease;
}
#main-div {
position: relative;
}
#main-div #loading-view-screen {
display: none;
}
#main-div.loading #loading-view-screen {
display: block !important;
position: fixed;
background-color: #fff;
color: #333;
top: 0;
left: 0;
bottom: 0;
right: 0;
z-index: 980;
height: 100%;
width: 100%;
padding-top: 20%;
text-align: center;
}
#main-div.loading.sidr-open #loading-view-screen {
padding-left: 260px;
}
#em10 {
position: absolute;
top: -1px;
height: 1px;
width: 10em;
display: inline block;
}
</style>
</head>
<body ng-controller='main' class='loading' >
<!-- special measurement div we use in various places -->
<div id='em10'></div>
<div id='loading-screen'>
<div class="loading-spinner"></div>
<h3>Connecting to <span style='white-space: nowrap;'>online-go.com</span></h3>
</div>
<div id='banner-notification-container'></div>
<kb-shortcut kb-shortcut='`' kb-action='toggleNav()'></kb-shortcut>
<kb-shortcut kb-shortcut="§" kb-action='toggleNav()'></kb-shortcut>
<kb-shortcut kb-shortcut="german-pound" kb-action='toggleNav()'></kb-shortcut>
<!-- Top bar -->
<nav id='main-navbar' class="navbar navbar-default navbar-fixed-top" role="navigation" style='text-align: center;'>
<!-- Brand and toggle get grouped for better mobile display -->
<a id='main-nav-toggle'>
<i class='fa fa-bars'></i>
</a>
<a ng-href='{{global_user ? "/overview" : "/landing-page"}}' class='pull-left' style='margin-left: 3.0em;'>
<img alt='OGS' id='ogs-logo'
>
</a>
<span id='navbar-title'></span>
<a ng-if='altnav_enabled' id='altnav-toggle' class='pull-right' onClick='sdispatch("altnav-toggle")()'>
<span style='font-weight: bold'>MENU</span>
<i class='fa fa-bars'></i>
</a>
<span id='notification-indicators-container'>
<div id='turn-notification-indicator'></div>
<div id='notification-indicator'></div>
</span>
</nav>
<!-- Nav Bar -->
<ogs-on-ui-push event='update-leftnav' action='updateLeftNav()'></ogs-on-ui-push>
<nav id="main-nav-left" class='nav-menu'>
<div style='text-align: center;'>{{online_count}}</div>
<ul>
<li>
<div ng-if='global_user'><a href='/overview'><i class='fa fa-home'></i> My Games</a></div>
<div ng-if='anonymous_user'><a href='/landing-page'><i class='fa fa-home'></i> Sign In</a></div>
<div ng-if='global_user'><a href='' ng-click='challenge(null);'><i class='fontnova-goban'></i> New Game</a></div>
<div><a href='/chat'><i class='fa fa-comments'></i> Game Lobby &amp; Chat</a></div>
<div><a href='/observe-games'><i class='fa fa-eye'></i> Observe Games</a></div>
<div ng-if='global_user'><a href='/mail'><i class='fa fa-envelope'></i> Mail
<ogs-on-ui-push event='mail-update' action='mail_unread_count = $data["unread-count"]'></ogs-on-ui-push>
<span ng-if='mail_unread_count > 0' style='font-weight: bold; display: inline;'> ({{mail_unread_count}})</span>
</a></div>
<div ng-if='global_user'><a ng-href='/user/view/{{global_user.id}}'><i class='fa fa-user'></i> Profile</a></div>
<div ng-if='global_user'><a ng-href='/user/settings'><i class='fa fa-gear'></i> Settings</a></div>
<div ng-if='global_user'><a ng-href='/user/supporter'><i class='fa fa-star'></i> Support OGS</a></div>
</li>
<li>
<div><a href='/learn-to-play-go'><i class='fa fa-graduation-cap'></i> Learn to play Go</a></div>
<div><a href='/puzzles'><i class='fa fa-puzzle-piece' style='padding-right: 0.1em;'></i> Puzzles</a></div>
<div><a ng-href='/library'><i class='fa fa-university'></i> Server Library</a></div>
<div ng-if='global_user'><a ng-href='/library/{{global_user.id}}'><i class='fa fa-book'></i> My Library</a></div>
<div ng-if='global_user'><a ng-href='/library/game-history'><i class='fa fa-archive'></i> Game History</a></div>
<div><a href='http://forums.online-go.com/' target='_blank'><i class='fa fa-th-list'></i> Forums</a></div>
</li>
<li>
<div>
<i ng-if='global_user' class='pull-right fa' ng-class='{"fa-plus-square": collapsed.tournaments, "fa-minus-square": !collapsed.tournaments}' ng-click='toggleCollapsed("tournaments")'></i>
<a href='/tournaments'><i class='fa fa-trophy'></i> Tournaments</a>
</div>
<div ng-repeat='ti in tournament_invites' class='invite'>
<img ng-src='{{ti.icon}}' height='15' width='15'>
<i class='fa fa-check accept clickable' ng-click='acceptTournamentInvite(ti.id);'></i>
<i class='fa fa-times reject clickable' ng-click='rejectTournamentInvite(ti.id);'></i>
<a href='/tournament/{{ti.tournament_id}}/' title='{{ti.message}}'> {{ti.name}}</a>
</div>
<div ng-if='!collapsed.tournaments' ng-repeat='tournament in tournaments' class='group'>
<a href='/tournament/{{tournament.id}}/'><img ng-src='{{tournament.icon}}' height='15' width='15'> {{tournament.name}}</a>
</div>
</li>
<li>
<div>
<i ng-if='global_user' class='pull-right fa' ng-class='{"fa-plus-square": collapsed.ladders, "fa-minus-square": !collapsed.ladders}' ng-click='toggleCollapsed("ladders")'></i>
<a href='/ladders'><i class='fa fa-list-ol'></i> Ladders</a>
</div>
<div ng-if='!collapsed.ladders' ng-repeat='ladder in ladders' class='group'>
<a href='/ladder/{{ladder.id}}/'><img ng-src='{{ladder.icon}}' height='15' width='15'> {{_(ladder.name)}}</a>
</div>
</li>
<li>
<div>
<i ng-if='global_user' class='pull-right fa' ng-class='{"fa-plus-square": collapsed.groups, "fa-minus-square": !collapsed.groups}' ng-click='toggleCollapsed("groups")'></i>
<a href='/groups'><i class='fa fa-group'></i> Groups</a>
</div>
<div ng-repeat='gi in group_invites' class='invite'>
<img ng-src='{{gi.icon}}' height='15' width='15'>
<i class='fa fa-check accept clickable' ng-click='acceptGroupInvite(gi.id);'></i>
<i class='fa fa-times reject clickable' ng-click='rejectGroupInvite(gi.id);'></i>
<a href='/group/{{gi.group_id}}/'> {{gi.name}}</a>
</div>
<div ng-if='!collapsed.groups' ng-repeat='group in groups' class='group'>
<a href='/group/{{group.id}}/'><img ng-src='{{group.icon}}' height='15' width='15'> {{group.name}}</a>
</div>
</li>
<li>
<div>
<i ng-if='global_user' class='pull-right fa' ng-class='{"fa-plus-square": collapsed.friends, "fa-minus-square": !collapsed.friends}' ng-click='toggleCollapsed("friends")'></i>
<a href='/user/list'><i class='fa fa-group'></i> Players</a>
</div>
<div ng-repeat='fr in friend_requests' class='invite'>
<ogs-player-icon player-id='fr.player.id' icon-size='15'></ogs-player-icon>
<i class='fa fa-check accept clickable' ng-click='acceptFriendRequest(fr.player.id);'></i>
<i class='fa fa-times reject clickable' ng-click='rejectFriendRequest(fr.player.id);'></i>
<ogs-player json='fr.player'></ogs-player>
</div>
<ogs-friend-list ng-if="!collapsed.friends"></ogs-friend-list>
</li>
<li ng-if='global_user'>
<div><a href='/logout' target='_self'><i class='fa fa-sign-out'></i> Logout</a></div>
</li>
<li>
<div id='leftnav-extra-links' >
<a href='/docs/team'>Meet the Team</a>
<a ng-if='global_user.id' href='/developer'>Developers</a>
<a href='http://forums.online-go.com/category/faq' target='_blank'>F.A.Q.</a>
<a href='/docs/tournament-information'>Tournament Information</a>
<a href='/docs/about'>About</a>
<a href='/docs/go-rules-comparison-matrix'>Rules Matrix</a>
<a href='/docs/changelog'>Changelog</a>
<!--
<a href='/old_forums'>Old Forums</a>
-->
<a href='/docs/privacy-policy'>Privacy Policy</a>
<a href='/docs/terms-of-service'>Terms of Service</a>
<a href='/docs/refund-policy'>Refund Policy</a>
<a href='/docs/contact-information'>Contact Information</a>
<a ng-if='global_user.id' href='/user/transaction-history'>Transaction History</a>
<div>
<a class='admin-link' ng-if='global_user.is_moderator' href='/moderator'>Moderator Center</a>
</div>
<div style='margin-top: 1em;'>
&copy; 2014 online-go.com. All rights reserved.<br/>
4.1-279
</div>
</div>
</li>
</ul>
</nav>
<!-- <div id='main-div' class='view-animate-container' ng-swipe-disable-mouse='true' ng-swipe-left='hideLeftNav();' ng-swipe-right='showLeftNav();'> -->
<div id='main-div' class='view-animate-container'>
<!-- <div id='main-div' class='view-animate-container'> -->
<!--
<div id='main-view' ng-view></div>
-->
<ng-view class='view-animate' autoscroll="true"></ng-view>
<div id='loading-view-screen'>
<div class="loading-spinner"></div>
</div>
<div id='loading-view-error404'>
<h3>Page not found</h3>
</div>
</div>
<link rel="stylesheet" type="text/css" href="https://a00ce0086bda2213e89f-570db0116da8eb5fdc3ce95006e46d28.ssl.cf1.rackcdn.com/4.1/ogs-default.4.1-279-g5637d17.css">
<script type="text/ng-template" id="/overview/overview.mako">
<!-- Main content (listed first so it's on top for mobile devices) -->
<div class="container-fluid" id='overview-content' style='text-align: center;'>
<div class='row' style='margin-top: 0.0em;'>
<div class='col-sm-6'>
<div style='position: relative'>
<canvas id='overview-seek-graph' ogs-seek-graph on-update='updateChallengeList($challenges);'></canvas>
<span id='open-challenges-title'>Open Challenges</span>
</div>
</div>
<div class='col-sm-6' id='challenge-list-container'><!-- {{{ -->
<div id='challenge-list'>
<div class='challenge-row'>
<span class='cell break' style='text-align: right;'>Short</span>
<span class='cell break' style='text-align: left;'>Games</span>
<span class='cell break'></span>
<span class='cell break'></span>
<span class='cell break'></span>
<span class='cell break'></span>
<span class='cell break'></span>
</div>
<div class='challenge-row'>
<span class='head'></span>
<span class='head'>Player</span>
<span class='head'>Size</span>
<span class='head'>Time</span>
<span class='head'>Ranked</span>
<span class='head'>Handicap</span>
<span class='head' style='text-align: left;'>Name</span>
</div>
<div ng-repeat='C in liveChallenges' class='challenge-row'>
<span class='cell' style='text-align: center;'>
<button ng-if='C.eligible' ng-click='acceptOpenChallenge(C.challenge_id, $event)' class='btn btn-success btn-xs'>Accept</button>
<span ng-if='!C.eligible && !C.user_challenge' class='ineligible' title='{{C.ineligible_reason}}'>Can't accept</span>
<button ng-if='C.user_challenge' ng-click='cancelOpenChallenge(C.challenge_id, $event)' class='btn btn-danger btn-xs'>Remove</button>
</span>
<span class='cell' style='text-align: left; max-width: 10em; overflow: hidden;'>
<ogs-player json='C'></ogs-player>
</span>
<span class='cell {{(C.width != C.height || (C.width != 9 && C.width != 13 && C.width != 19)) ? "bold" : ""}}'>
{{C.width}}x{{C.height}}
</span>
<span class='cell {{(C.time_per_move > 3600 || C.time_per_move == 0) ? "bold" : ""}}'>
{{shortShortTimeControl(C.time_control_parameters)}}
</span>
<span class='cell' style='text-align: center;'>
{{C.ranked_text}}
</span>
<span class='cell' style='text-align: center;'>
{{C.handicap_text}}
</span>
<span class='cell' style='text-align: left;'>
{{C.name}}
</span>
</div>
<div class='challenge-row'>
<span class='cell break' style='text-align: right;'>Long</span>
<span class='cell break' style='text-align: left;'>Games</span>
<span class='cell break'></span>
<span class='cell break'></span>
<span class='cell break'></span>
<span class='cell break'></span>
<span class='cell break'></span>
</div>
<div ng-repeat='C in corrChallenges' class='challenge-row'>
<span class='cell' style='text-align: center;'>
<button ng-if='C.eligible' ng-click='acceptOpenChallenge(C.challenge_id, $event)' class='btn btn-success btn-xs'>Accept</button>
<span ng-if='!C.eligible && !C.user_challenge' class='ineligible' title='{{C.ineligible_reason}}'>Can't accept</span>
<button ng-if='C.user_challenge' ng-click='cancelOpenChallenge(C.challenge_id, $event)' class='btn btn-danger btn-xs'>Remove</button>
</span>
<span class='cell' style='text-align: left; max-width: 10em; overflow: hidden;'>
<ogs-player json='C'></ogs-player>
</span>
<span class='cell {{(C.width != C.height || (C.width != 9 && C.width != 13 && C.width != 19)) ? "bold" : ""}}'>
{{C.width}}x{{C.height}}
</span>
<span class='cell'>
{{shortShortTimeControl(C.time_control_parameters)}}
</span>
<span class='cell' style='text-align: center;'>
{{C.ranked_text}}
</span>
<span class='cell' style='text-align: center;'>
{{C.handicap_text}}
</span>
<span class='cell' style='text-align: left;'>
{{C.name}}
</span>
</div>
</div>
</div><!-- }}} -->
</div>
<div ng-if='challenges.length'><!-- Challenges {{{ -->
<h5>Challenges</h5>
<div id='overview-challenges'>
<div ng-repeat='challenge in challenges' class='challenge-card'>
<div class='inner-card'>
<div class='buttons'>
<span>
<button ng-if='challenge.challenged && challenge.challenged.id == global_user.id' class='btn btn-success'
ng-click='acceptDirectChallenge(challenge.id, $event)'>Accept</button>
<button ng-if='challenge.challenged && challenge.challenged.id == global_user.id' class='btn btn-danger'
ng-click='cancelDirectChallenge(challenge.id, $event)'>Reject</button>
<button ng-if='challenge.challenged && challenge.challenger.id == global_user.id' class='btn btn-danger'
ng-click='cancelDirectChallenge(challenge.id, $event)'>Cancel</button>
<button ng-if='!challenge.challenged' class='btn btn-danger'
ng-click='cancelOpenChallenge(challenge.id, $event)'>Remove</button>
</span>
</div>
<span class='pull-left'>
<ogs-player-icon player-id='challenge.challenger.id == global_user.id ? (challenge.challenger ? challenge.challenger.id : 0 ) : challenge.challenged.id'>
</ogs-player-icon>
</span>
<div>{{challenge.game.name | profanity}}</div>
<div ng-if='(challenge.challenger && challenge.challenger.id != global_user.id) || challenge.challenged'>
vs.
<ogs-player json='challenge.challenger.id == global_user.id ? challenge.challenged : challenge.challenger'></ogs-player>
</div>
<div ng-if='!challenge.challenged'>
Open Challenge
</div>
<div class='description'>
{{challenge_text_description(challenge)}}
</div>
</div>
</div>
</div>
</div><!-- }}} -->
<h5>Your Games</h5>
<ogs-game-list list="active_games"></ogs-game-list>
<div ng-if='recent_games.length'>
<h5>Recent Games</h5>
<table id='recent_game_list'>
<thead>
<tr>
<th>Move</th>
<!-- <th style='text-align: right;'>ID</th> -->
<th>Game</th>
<th>Opponent</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
</div>
<div ng-if='favorite_games.length'>
<h5>Started Games</h5>
<table id='favorite_game_list'>
<thead>
<tr>
<th>Move</th>
<!-- <th style='text-align: right;'>ID</th> -->
<th>Game</th>
<th>Black</th>
<th>White</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
</div>
</div>
</script>
<script type="text/ng-template" id="/goban/game.mako">
<!-- TODO: FIXME: Need to add back in the og:url and og:image meta property for g+/fb link stuff -->
<!--
TODO:
Tournament icon somewhere
-->
<ogs-on-ui-push event='review-added' channel='game-{{game.id}}' action='reviewAdded($data)'></ogs-on-ui-push>
<kb-shortcut kb-shortcut='up' kb-action='nav_up()'></kb-shortcut>
<kb-shortcut kb-shortcut='down' kb-action='nav_down()'></kb-shortcut>
<kb-shortcut kb-shortcut='left' kb-action='nav_prev()'></kb-shortcut>
<kb-shortcut kb-shortcut='right' kb-action='nav_next()'></kb-shortcut>
<kb-shortcut kb-shortcut='page-up' kb-action='nav_prev_10()'></kb-shortcut>
<kb-shortcut kb-shortcut='page-down' kb-action='nav_next_10()'></kb-shortcut>
<kb-shortcut kb-shortcut='home' kb-action='nav_first()'></kb-shortcut>
<kb-shortcut kb-shortcut='end' kb-action='nav_last()'></kb-shortcut>
<kb-shortcut ng-if='!goban.engine.original_sgf' kb-shortcut='escape' kb-action='handleEscapeKey()'></kb-shortcut>
<kb-shortcut kb-shortcut='f1' kb-action='setAnalyzeTool("stone", null);'></kb-shortcut>
<kb-shortcut kb-shortcut='f2' kb-action='setAnalyzeTool("stone", "black");'></kb-shortcut>
<kb-shortcut kb-shortcut='f3' kb-action='console.log("Should be entering scoring mode");'></kb-shortcut>
<kb-shortcut kb-shortcut='f4' kb-action='setAnalyzeTool("label", "triangle");'></kb-shortcut>
<kb-shortcut kb-shortcut='f5' kb-action='setAnalyzeTool("label", "square");'></kb-shortcut>
<kb-shortcut kb-shortcut='f6' kb-action='setAnalyzeTool("label", "circle");'></kb-shortcut>
<kb-shortcut kb-shortcut='f7' kb-action='setAnalyzeTool("label", "letters");'></kb-shortcut>
<kb-shortcut kb-shortcut='f8' kb-action='setAnalyzeTool("label", "numbers");'></kb-shortcut>
<kb-shortcut kb-shortcut='f9' kb-action='setAnalyzeTool("draw", goban_analyze_pencil_color);'></kb-shortcut>
<kb-shortcut ng-if="goban.mode == 'analyze'" kb-shortcut='f10' kb-action='goban.syncReviewMove({"clearpen": true}); goban.clearAnalysisDrawing();'></kb-shortcut>
<kb-shortcut kb-shortcut='del' kb-action='goban.deleteBranch();'></kb-shortcut>
<span id='game-title'>
<!-- goban.mode == play -->
<span ng-if='goban.mode == "play" && goban.engine.phase == "play"'>
<span ng-if='goban.engine.undo_requested == goban.engine.getMoveNumber() || (goban.submit_move != null && goban.engine.undo_requested == goban.engine.getMoveNumber()-1)'>
Undo Requested
</span>
<span ng-if='goban.engine.undo_requested != goban.engine.getMoveNumber() && !(goban.submit_move != null && goban.engine.undo_requested == goban.engine.getMoveNumber()-1)'>
<span ng-if='!goban.submit_move || goban.engine.playerToMove() != global_user.id'>{{goban.title}} </span>
</span>
</span>
<span ng-if='goban.mode == "play" && goban.engine.phase == "stone removal"'>
Stone Removal Phase
</span>
<!-- goban.mode == analyze -->
<span ng-if='goban.mode == "analyze"'>
Analyze Mode
</span>
<!-- goban.mode == conditional -->
<span ng-if='goban.mode == "conditional"'>
Conditional Move Planner
</span>
<span ng-if='goban.mode == "score estimation"'>
<span ng-if='goban.score_estimate.winner'>
{{goban.score_estimate.winner}} by {{goban.score_estimate.amount}}
</span>
<span ng-if='!goban.score_estimate.winner'>
Estimating...
</span>
</span>
<span ng-if='goban.mode == "play" && goban.engine.phase == "finished"'>
{{goban.engine.winner ? (interpolate(pgettext("Game winner", "%s by %s"), [ (goban.engine.winner == goban.engine.black_player_id || goban.engine.winner == "black" ? _("Black") : _("White")), pgettext("Game outcome", goban.engine.outcome)])) : (interpolate(pgettext("Game winner", "Tie by %s"), [ pgettext("Game outcome", goban.engine.outcome)]))}}
</span>
</span>
<div id='game-main-container' class='noselect'>
<div ng-show='game.started' id='game-controls'>
<div id='game-controls-nav-bar-alt-position'></div>
<div id='game-action-buttons-position-thin'></div>
<div id='game-players'><!-- {{{ -->
<div id='game-black-player' class='player-container'>
<div ng-if='game.players.black' class='player-icon-container pull-left'>
<ogs-player-icon icon-size='64' player-id='game.players.black.id'></ogs-player-icon>
</div>
<div ng-if='goban.engine.players.black && goban.engine.players.black.rank != -1' id='game-black-name' class='player-name-container'>
<ogs-player json='goban.engine.players.black'></ogs-player>
</div>
<i ng-if='game.players.black' id='game-black-online-indicator' class='online-status-indicator fa fa-circle' title="Offline"></i>
<span ng-if='!goban.engine.players.black' id='black-name' class='player-name-plain'>Black</span>
<div id='black_score_container' ng-mouseenter='popupScores("black")' ng-mouseleave='hideScores("black")'>
<div ng-if='goban.engine.phase == "finished" || goban.engine.phase == "stone removal"'>
<div class='points'>{{score.black.total}} points</div>
</div>
<div ng-if='goban.engine.phase != "finished" && goban.engine.phase != "stone removal"'>
<div ng-if='score.black.komi != 0'class='komi'>{{score.black.komi}} komi</div>
<div class='captures'>{{score.black.prisoners}} captures</div>
</div>
<div id='black-score-details'>&nbsp;</div>
</div>
<div class='clock-container'><div id='game-black-clock' class='clock'></div></div>
<div ng-if="game.players.black" class='player-flag'><ogs-flag country="game.players.black.country"></ogs-flag></div>
</div>
<div id='game-white-player' class='player-container'>
<div ng-if='game.players.white' class='player-icon-container pull-left'>
<ogs-player-icon icon-size='64' player-id='game.players.white.id'></ogs-player-icon>
</div>
<div ng-if='goban.engine.players.white && goban.engine.players.white.rank != -1' id='game-white-name' class='player-name-container'>
<ogs-player json='goban.engine.players.white'></ogs-player>
</div>
<i ng-if='game.players.white' id='game-white-online-indicator' class='online-indicator online-status-indicator fa fa-circle' title="Offline"></i>
<span ng-if='!goban.engine.players.white' id='white-name' class='player-name-plain'>White</span>
<div id='white_score_container' ng-mouseenter='popupScores("white")' ng-mouseleave='hideScores("white")'>
<div ng-if='goban.engine.phase == "finished" || goban.engine.phase == "stone removal"'>
<div class='points'>{{score.white.total}} points</div>
</div>
<div ng-if='goban.engine.phase != "finished" && goban.engine.phase != "stone removal"'>
<div ng-if='score.white.komi != 0' class='komi'>{{score.white.komi}} komi</div>
<div class='captures'>{{score.white.prisoners}} captures</div>
</div>
<div id='white-score-details'>&nbsp;</div>
</div>
<div class='clock-container'><div id='game-white-clock' class='clock'></div></div>
<div ng-if="game.players.white" class='player-flag'><ogs-flag country="game.players.white.country"></ogs-flag></div>
</div>
</div><!-- }}} -->
<div id='game-controls-action-bar-alt-position'></div>
<div id='game-controls-action-buttons-alt-position'></div>
<div id='game-action-buttons-position-wide'>
<div id='game-action-buttons'><!-- {{{ -->
<!-- goban.mode == play -->
<span ng-if='goban.mode == "play" && goban.engine.phase == "play" && goban.engine.cur_move.move_number >= goban.engine.last_official_move.move_number'>
<span ng-if='goban.engine.undo_requested == goban.engine.getMoveNumber() || (goban.submit_move != null && goban.engine.undo_requested == goban.engine.getMoveNumber()-1)'>
<button ng-if='goban.engine.playerToMove() == global_user.id || (goban.submit_move != null && goban.engine.playerNotToMove() == global_user.id)'
class='btn btn-sm btn-primary bold' ng-click='goban.acceptUndo();'>Accept</button>
</span>
<span>
<button ng-if='goban.submit_move == null && goban.engine.playerToMove() == global_user.id'
id='game-pass' class='btn btn-sm btn-primary bold' ng-click='pass();'>Pass</button>
<button ng-if='goban.submit_move != null && goban.engine.undo_requested != goban.engine.getMoveNumber()'
class='btn btn-sm btn-primary bold' id='game-submit-move' ng-click='goban.submit_move();'>Submit Move</button>
</span>
<div ng-if='goban.engine.getMoveNumber() >= 1 && goban.engine.playerNotToMove() == global_user.id && !(goban.engine.undo_requested >= goban.engine.getMoveNumber()) && goban.submit_move == null' style='text-align: left; padding-left: 0.5em;'>
<button class='btn btn-sm btn-default bold' onClick='sdispatch("game-undo-move")();'>Undo</button>
</div>
</span>
<!-- goban.mode == analyze -->
<span ng-if='goban.mode == "analyze" && !goban.engine.original_sgf'>
<button class='btn btn-sm btn-primary bold' ng-click='goban.setModeDeferred("play");'>Back to Game</button>
</span>
<span ng-if='goban.mode == "score estimation"'>
<button class="btn btn-sm btn-primary bold" onclick='sdispatch("game-stop-estimating-score")()' >Back to Game</button>
</span>
</div><!-- }}} -->
</div>
<div ng-if='goban.engine.phase == "finished"'><!-- {{{ -->
<div ng-if='review_list.length > 0'>
Reviews
<div ng-repeat='review in review_list'>
<ogs-player json='review.owner' with-icon='true'></ogs-player></a> - <a href='/review/{{review.id}}'>view</a>
</div>
</div>
</div><!-- }}} -->
<div ng-if='goban.engine.phase == "stone removal"' id='game-stone-removal-block'><!-- {{{ -->
<p> <!-- {{{ -->
<div style='display: inline-block; max-width: 18.8em; text-align: center;'>
Both players now select and agree upon which groups should be considered 'dead' for the purposes of scoring.
</div>
<i id='scoring-help' class='fa fa-question-circle'
popover='Mark dead stones by clicking them. Mark dame by clicking the empty intersection. Holding down shift while selecting an intersection or stone will toggle only that selection.'
popover-title='Stone Removal'
popover-trigger="mouseenter"
popover-placement="left"
></i>
</p>
<p ng-if='goban.engine.rules == "japanese" || goban.engine.rules == "korean"'>
<div>
<i id='strict-scoring-help' class='fa fa-question-circle'
popover="Official Japanese and Korean rules do not count territory in seki, which means players need to fill out or mark dame for most territory to be counted correctly. Most of the time this rule doesn&#39;t affect the game and is just a nuisance, but you can enable being strict about this rule if it makes a difference in your game."
popover-title='Strict Scoring'
popover-trigger="mouseenter"
popover-placement="left"
></i>
<label style='display:inline-block;' for='strict-seki-mode'>Strict Scoring</label>
<input style='margin-top: -0.2em;' id='strict-seki-mode' name='strict-seki-mode' type='checkbox'
ng-model="strict_seki_mode"
ng-disabled='!is_player'
ng-change='goban.setStrictSekiMode(strict_seki_mode)'
></input>
</div>
</p><!-- }}} -->
<div>
<button ng-show='is_player' id='game-stone-removal-accept' class='ctrl-button btn btn-primary' ng-click='onStoneRemovalAccept();'>Accept removed stones</button>
</div>
<br/>
<div style='text-align: center;'>
<div style='text-align: left; display: inline-block;'>
<div>
<i ng-if='black_accepted' class='fa fa-check' style='color: green; width: 1.5em;'></i>
<i ng-if='!black_accepted' class='fa fa-times' style='color: red; width: 1.5em;'></i>
{{goban.engine.players.black.username}}
</div>
<div>
<i ng-if='white_accepted' class='fa fa-check' style='color: green; width: 1.5em;'></i>
<i ng-if='!white_accepted' class='fa fa-times' style='color: red; width: 1.5em;'></i>
{{goban.engine.players.white.username}}
</div>
</div>
</div>
<br/>
<div style='text-align: center;'>
<button ng-show='is_player' id='game-stone-removal-auto-score' class='ctrl-button btn btn-default' ng-click='onStoneRemovalAutoScore();'>Auto-score</button>
</div>
<div style='text-align: center;'>
<button ng-show='is_player' id='game-stone-removal-cancel' class='ctrl-button btn btn-default' ng-click='onStoneRemovalCancel();'>Cancel and resume game</button>
</div>
</div><!-- }}} -->
<div ng-if='goban.mode == "score estimation"'><!-- {{{ -->
Score estimation confidence: {{goban.score_estimate.amount_fractional}}
</div><!-- }}} -->
<div ng-if='goban.mode == "conditional"'><!-- {{{ -->
<div>
<button class='ctrl-button btn btn-default' onClick='goban.setMode("play"); return false;'>Cancel</button>
</div>
<div>
<button class='ctrl-button btn btn-primary' onClick='goban.saveConditionalMoves(); goban.setMode("play"); return false;'>Accept Conditional moves</button>
</div>
<div id='ctrl-conditional-tree'>
<hr/>
<span class='game-conditional-move-current' onClick='goban.jumpToLastOfficialMove()'>Current Move</span>
<div id='game-conditional-move-tree'></div>
</div>
</div><!-- }}} -->
<div ng-if='goban.engine.pause_control.paused'><!-- {{{ -->
<h4>Game Paused</h4>
<button ng-show='global_user && (goban.engine.black_player_id == global_user.id || goban.engine.white_player_id == global_user.id)'
class='btn btn-danger' onclick='goban.resumeGame();'>Resume</button>
<div>{{goban.engine.pause_control.paused.pauses_left}} pauses left for {{goban.engine.black_player_id == goban.engine.pause_control.paused.pausing_player_id ? _('Black') : _('White')}}</div>
</div><!-- }}} -->
<div ng-if='goban.mode == "analyze"'><!-- {{{ -->
<div id='game-analyze-button-bar'>
<i ng-if='review' id='review-sync' class='fa fa-refresh {{goban.engine.cur_move.id != goban.engine.cur_review_move.id ? "need-sync" : ""}}'
ng-click='syncToCurrentReviewMove();' title='Sync to where the reviewer is at'></i>
<div class="btn-toolbar">
<div class="btn-group">
<div class="btn-group">
<button id='game-analyze-stone-tool' class="btn btn-default" data-toggle="dropdown"
ng-click='setAnalyzeTool("stone", null);' >
<img alt='alternate' id='game-analyze-stone-icon' class='game-stone-color-icon' src='https://a00ce0086bda2213e89f-570db0116da8eb5fdc3ce95006e46d28.ssl.cf1.rackcdn.com/4.1/img/black-white.png'/>
</button>
<ul id='stone-menu' class="dropdown-menu" aria-labeledby='game-analyze-stone-tool' style='text-align: left;'>
<li id='li-white-black' ><span class='a' ng-click='setAnalyzeTool("stone", "alternate");'>
<img alt='alternate' class='game-stone-color-icon' src='https://a00ce0086bda2213e89f-570db0116da8eb5fdc3ce95006e46d28.ssl.cf1.rackcdn.com/4.1/img/black-white.png'/> Alternate
</span></li>
<li><span class='a' ng-click='setAnalyzeTool("stone", "black");'>
<img alt='black' class='game-stone-color-icon' src='https://a00ce0086bda2213e89f-570db0116da8eb5fdc3ce95006e46d28.ssl.cf1.rackcdn.com/4.1/img/black.png'/> Black
</span></li>
<li><span class='a' ng-click='setAnalyzeTool("stone", "white");'>
<img alt='white' class='game-stone-color-icon' src='https://a00ce0086bda2213e89f-570db0116da8eb5fdc3ce95006e46d28.ssl.cf1.rackcdn.com/4.1/img/white.png'/> White
</span></li>
</ul>
</div>
<div class="btn-group">
<button id='game-analyze-label-tool' class="btn btn-default" data-toggle="dropdown"
ng-click='setAnalyzeTool("label", "letters");' >
<i class='fa fa-font'></i>
</button>
<ul id='label-menu' class="dropdown-menu" aria-labeledby='game-analyze-label-tool' style='text-align: left;'>
<li id='li-label-letter' >
<span ng-click='setAnalyzeTool("label", "letters");' class='a'>
<i class='fa fa-font'></i> Letters
</span>
</li>
<li id='li-label-number' >
<span ng-click='setAnalyzeTool("label", "numbers");' class='a'>
<i class='fontnova-label-number' ></i>Numbers
</span></li>
<li><span ng-click='setAnalyzeTool("label", "triangle");' class='a'>
<i class='fontnova-label-triangle'></i>
</span></li>
<li><span ng-click='setAnalyzeTool("label", "square");' class='a'>
<i class='fontnova-label-square'></i>
</span></li>
<li><span ng-click='setAnalyzeTool("label", "circle");' class='a'>
<i class='fontnova-label-circle'></i>
</span></li>
<li><span ng-click='setAnalyzeTool("label", "cross");' class='a'>
<i class='fontnova-label-x'></i>
</span></li>
</ul>
</div>
<button id='game-analyze-draw-tool' class="btn btn-default"
colorpicker type="button" colorpicker-position="bottom"
ng-model="goban_analyze_pencil_color"
ng-change='setPencilColor(goban_analyze_pencil_color)'
ng-click='createColorpickerModal(); setAnalyzeTool("draw");'>
<i class='fa fa-pencil'></i>
<span style='background-color: {{goban_analyze_pencil_color}}; border-radius: 1em; border: 1.0px solid {{colorShade(goban_analyze_pencil_color, -20.0)}}; width: 0.6em; height: 0.6em; margin-left: -0.3em; vertical-align: text-bottom; display: inline-block;'></span>
</button>
<button id='game-analyze-clear-drawing-tool' class="btn btn-default"
ng-click='goban.syncReviewMove({"clearpen": true}); goban.clearAnalysisDrawing();'>
<i class='fa fa-eraser'></i>
</button>
<button id='game-analyze-remove-branch' class="btn btn-default"
ng-click='goban.deleteBranch();'>
<i class='fontnova-label-x'></i>
</button>
</div>
</div>
</div>
<div id='game-move-tree-container' ogs-resize='sync();'>
<canvas id='game-move-tree-canvas' class='noselect'></canvas>
</div>
<div style='padding: 0.5em;'>
<div class='input-group'>
<input type='text' class='form-control' placeholder='Variation name...' ng-model="variation_name"/>
<span class='input-group-btn'>
<button ng-show='tab!="malkovich"' class='btn btn-default' type="button" ng-click='shareAnalysis(variation_name)'>Share</button>
<button ng-show='tab=="malkovich"' class='btn btn-default' type="button" ng-click='shareAnalysis(variation_name)'>Record</button>
</span>
</div>
</div>
</div><!-- }}} -->
<div ng-if='goban.engine.original_sgf' style='padding-left: 0.5em; padding-right: 0.5em;'><!-- {{{ -->
<textarea id='game-move-node-text' placeholder='Move comments...'
rows='5'
class='form-control'
disabled='disabled'></textarea>
</div><!-- }}} -->
<div id='game-chat-container' class='fill-height'><!-- {{{ -->
<div id='game-chat-icons'>
<i id='game-chat-tab-discussion' class='active-chat-tab fa fa-comment' title='Discussion'></i>
<i ng-if='game.type == "game"' id='game-chat-tab-discussion-spectator' class='active-chat-tab fa fa-comments' title='Spectator Chat'></i>
<i id='game-chat-tab-malkovich' class='fa fa-book' title='Malkovich Log'></i>
<span id='game-chat-tab-users'><i id='game-channel-users-count' class='fa fa-group' title='Users'></i></span>
<!--
<i id='game-voice-chat' class='fa fa-microphone' style='cursor: pointer;'><span id='game-voice-chat-user-count'></span></i>
-->
</div>
<div id='game-chat-text-container' class='chat clearnoselect'>
<div id='game-channel-users'></div>
<div id='game-chat-text-malkovich' class='game-chat-text hidden'>
<div class='chat_system_message'>
Malkovich logs are not visible to opponents until the game has finished.
</div>
</div>
<div id='game-chat-text-discussion' class='game-chat-text'></div>
</div>
<input id='game-chat-input' class='form-control' type='text' tabindex="1" placeholder='Chat ...'>
</div><!-- }}} -->
<span class='docked'><!-- {{{ -->
<a class='hide768' ng-click='toggleFullscreen();'><i class='fa fa-expand'></i> Full Screen</a>
<a ng-click='showGameInfo()'><i class='fa fa-info'></i> Game information</a>
<a onClick='sdispatch("game-analyze")();'><i class='fa fa-sitemap'></i> Analyze game</a>
<a ng-if='current_goban_auth && goban.engine.phase != "finished"' onClick='sdispatch("game-conditional-moves")();'><i class='fa fa-exchange'></i> Plan conditional moves</a>
<a ng-if='current_goban_auth && goban.engine.phase != "finished"' onClick='sdispatch("game-pause")();'><i class='fa fa-pause'></i> Pause game</a>
<a ng-if='goban.engine.phase == "finished"' ng-click='startReview()'><i class='fa fa-refresh'></i> Review this game</a>
<a onClick='sdispatch("game-estimate-score")();'><i class='fa fa-tachometer'></i> Estimate score</a>
<a ng-click='fork()'><i class='fa fa-code-fork'></i> Fork game</a>
<a ng-click='showLinkModal()'><i class='fa fa-share-alt'></i> Link to game</a>
<a ng-click='downloadSGF()'><i class='fa fa-download'></i> Download SGF</a>
<hr ng-if='current_goban_auth && goban.engine.phase != "finished"'/>
<a ng-if='current_goban_auth && goban.engine.phase != "finished"' ng-click='cancelOrResign()'><i class='fa fa-sign-out'></i> {{resign_text}}</a>
<div ng-if='global_user.is_moderator && goban.engine.phase != "finished"'>
<hr/>
<a ng-click='decide("black")'><i class='fa fa-gavel'></i> Black Wins</a>
<a ng-click='decide("white")'><i class='fa fa-gavel'></i> White Wins</a>
<a ng-click='decide("tie")'><i class='fa fa-gavel'></i> Tie</a>
</div>
</span><!-- }}} -->
</div>
<div ng-hide='game.started' id='game-controls'>
<h4 style='padding-top: 2em;'>
Waiting for game to begin
</h4>
</div>
<div id='game-goban-container'><!-- {{{ -->
<div id='game-goban' class='Goban'> </div>
<div id='game-action-bar' style='padding-right: 5em;'>
<!-- Trophy icon -->
<span class='pull-left' style='width: 3em;'>
<a class='plain' ng-if="goban.engine.tournament_id" ng-href="/tournament/{{goban.engine.tournament_id}}"><i class='fa fa-trophy' title='This is a tournament game'></i></a>
<a class='plain' ng-if="goban.engine.ladder" ng-href="/ladder/{{goban.engine.ladder}}"><i class='fa fa-trophy' title='This is a ladder game'></i></a>
&nbsp;
</span>
<!-- Move counter -->
<span class='pull-right' style='width: 5em; margin-right: -5em;'>
<span id='game-move-number'>Move {{goban.engine.getMoveNumber()}}</span>
</span>
<!-- Forward/back buttons -->
<span ng-click='nav_first()' class='move-control'><i class="fa fa-fast-backward"></i></span>
<span ng-click='nav_prev_10()' class='move-control'><i class="fa fa-backward"></i></span>
<span ng-click='nav_prev()' class='move-control'><i class="fa fa-step-backward"></i></span>
<span ng-click='nav_play_pause()' class='move-control'><i class="fa {{autoplaying ? 'fa-pause' : 'fa-play'}}"></i></span>
<span ng-click='nav_next()' class='move-control'><i class="fa fa-step-forward"></i></span>
<span ng-click='nav_next_10()' class='move-control'><i class="fa fa-forward"></i></span>
<span ng-click='nav_last()' class='move-control'><i class="fa fa-fast-forward"></i></span>
</div>
</div><!-- }}} -->
</div><!-- game-main-container -->
<div id="game-info-modal" class="modal fade" tabindex="-1" role="dialog" aria-labelledby="modal-theme-label" aria-hidden="true"><!-- {{{ -->
<div class='modal-dialog'>
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
<h3 ng-if='game.players.black'>
<ogs-player json='game.players.black'></ogs-player> vs <ogs-player json='game.players.white'></ogs-player>
</h3>
</div>
<div class="modal-body">
<div class='challenge form-inline'>
<fieldset>
<div class='form-horizontal' role="form">
<div class='form-group' style='display: block'>
<label class='control-label col-sm-4'>Game</label>
<div class='col-sm-8'><p class="form-control-static">{{game.name}}</p></div>
</div>
</div>
<div class='form-horizontal' role="form">
<div class='form-group' style='display: block'>
<label class='control-label col-sm-4'>Rules</label>
<div class='col-sm-8'><p class="form-control-static">{{game.rules_text}}</p></div>
</div>
</div>
<div class='form-horizontal' role="form">
<div class='form-group' style='display: block'>
<label class='control-label col-sm-4'>Ranked</label>
<div class='col-sm-8'><p class="form-control-static">{{game.ranked_text}}</p></div>
</div>
</div>
<div ng-if='game.ranked' class='form-horizontal' role="form">
<div class='form-group' style='display: block'>
<label class='control-label col-sm-4'>Annulled</label>
<div class='col-sm-8'><p class="form-control-static"><span ng-if='game.annulled'>Yes</span><span ng-if='!game.annulled'>No</span></p></div>
</div>
</div>
<div class='form-horizontal' role="form">
<div class='form-group' style='display: block'>
<label class='control-label col-sm-4'>Board Size</label>
<div class='col-sm-8'><p class="form-control-static">{{game.width}}x{{game.height}}</p></div>
</div>
</div>
<div class='form-horizontal' role="form">
<div class='form-group' style='display: block'>
<label class='control-label col-sm-4'>Handicap</label>
<div class='col-sm-8'><p class="form-control-static">{{game.handicap_text}}</p></div>
</div>
</div>
<div class='form-horizontal' role="form">
<div class='form-group' style='display: block'>
<label class='control-label col-sm-4'>Komi</label>
<div class='col-sm-8'><p class="form-control-static">{{game.komi_text}}</p></div>
</div>
</div>
<div class='form-horizontal' role="form">
<div class='form-group' style='display: block'>
<label class='control-label col-sm-4'>Analysis</label>
<div class='col-sm-8'><p class="form-control-static">{{game.analysis_text}}</p></div>
</div>
</div>
<div class='form-horizontal' role="form">
<div class='form-group' style='display: block'>
<label class='control-label col-sm-4'>Time Control</label>
<div class='col-sm-8'><p class="form-control-static" ng-bind-html='game.time_control_text'></p></div>
</div>
</div>
</fieldset>
</div>
</div>
</div><!-- /.modal-content -->
</div><!-- /.modal-dialog -->
</div><!-- /.modal --><!-- }}} -->
<div id="game-link-modal" class="modal fade" tabindex="-1" role="dialog" aria-labelledby="modal-theme-label" aria-hidden="true"><!-- {{{ -->
<div class='modal-dialog'>
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
<h3 ng-if='game.players.black'>
<ogs-player json='game.players.black'></ogs-player> vs <ogs-player json='game.players.white'></ogs-player>
</h3>
</div>
<div class="modal-body">
<div class='challenge form-inline'>
<h3 style='text-align: center;'>
<a id='game-link-href' href='{{url}}'>{{url}}</a>
</h3>
</div>
<div class='challenge form-inline'>
<h4 style='text-align: center;'>
SGF: <a href='{{sgfurl}}'>{{sgfurl}}</a>
</h4>
</div>
</div>
</div><!-- /.modal-content -->
</div><!-- /.modal-dialog -->
</div><!-- /.modal --><!-- }}} -->
</script>
<script type="text/ng-template" id="/challenge-modal.mako">
<div id="challenge-modal" class="modal fade" tabindex="-1" role="dialog" aria-labelledby="modal-theme-label" aria-hidden="true">
<div class='modal-dialog'>
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
<h3>
<div class='dropdown pull-left'>
<button class='btn btn-default dropdown-toggle' type='button' data-toggle='dropdown'>
<i ng-if="conf.mode=='open'" class='fa fa-globe'></i>
<i ng-if="conf.mode=='computer'" class='fa fa-laptop'></i>
<i ng-if="conf.mode=='player'" class='fa fa-user'></i>
<i ng-if="conf.mode=='demo'" class='fa fa-sitemap'></i>
<span class='caret'></span>
</button>
<ul class='dropdown-menu' role='menu'>
<li ng-if='!challenge_goban_obj' role='presentation'><span class='a' role='menuitem' tabindex='-1' href='#' ng-click='conf.mode="open"'> <i class='fa fa-globe'></i> Open Challenge</span></li>
<li role='presentation'><span class='a' role='menuitem' tabindex='-1' href='#' ng-click='conf.mode="computer"'> <i class='fa fa-laptop'></i> Computer</span></li>
<li role='presentation'><span class='a' role='menuitem' tabindex='-1' href='#' ng-click='conf.mode="player"'> <i class='fa fa-user'></i> Challenge User</span></li>
<li ng-if='!challenge_goban_obj' role='presentation'><span class='a' role='menuitem' tabindex='-1' href='#' ng-click='conf.mode="demo"'> <i class='fa fa-sitemap'></i> Demo Board</span></li>
</ul>
</div>
<span ng-if='conf.mode == "open"' style='padding-left: 0.2em; padding-top: 0.2em; display: inline-block;'>Open Challenge</span>
<span ng-if='conf.mode == "demo"' style='padding-left: 0.2em; padding-top: 0.2em; display: inline-block;'>Demo Board</span>
</h3>
<span ng-if='conf.mode=="player"'>
<input id='challenge-player-name' ng-model='conf.username' placeholder="Player name" type='text' class='form-control' ogs-player-autocomplete></input>
</span>
<span ng-if='conf.mode=="computer"'>
<select id='challenge-ai' ng-model='conf.bot_id' required="true" class='form-control' style='display: inline-block; width: 20em;'>
<option ng-repeat='bot in bots' value='{{bot.id}}' ng-selected='$index == 0'>{{bot.username}} ({{rankString(bot.ranking)}})</option>
</select>
</span>
</div>
<div class="modal-body">
<!--
<div class='player-select hidden'>
<div class='form-horizontal'>
<div class='form-group'>
<label class="control-label" for="challenge-fork-player-name">Player</label>
<div class='controls'>
<input id='challenge-fork-player-name' type='text' placeholder='Name' class='user-autocomplete form-control'>
</div>
</div>
<div class='form-group'>
<label class="control-label" for="challenge-fork-game">Board State</label>
<div class='controls'>
<div id='challenge-fork-game' class='miniboards'>
</div>
</div>
</div>
<div class='form-group'>
<div class='controls'>
<button id='challenge-fork-next' onclick='challenge_fork_next();' class='btn btn-primary pull-right'>Next &rarr;</button>
</div>
</div>
</div>
</div>
<div class='results hidden'>
Results!
</div>
-->
<div class='challenge form-inline'>
<fieldset>
<div id='challenge-basic-settings' class='challenge-left-pane form-horizontal' role="form">
<!--
<div class='form-group'>
<label class='control-label' for='challenge-speed'>Opponent</label>
<div class='controls'>
<div class='checkbox'>
<select ng-model='conf.mode' class='form-control' style='width: 10em;'>
<option value='open'>Open Challenge</option>
<option value='computer' selected='selected'>Computer</option>
<option value='player'>Specific Player</option>
<option value='demo'>None (Demo board)</option>
</select>
</div>
</div>
</div>
-->
<div class='form-group'>
<label class='control-label' for='challenge_game_name'>Game Name</label>
<div class='controls' style='width: 20em;'>
<div class='checkbox'>
<input type='text' ng-model='challenge.game.name' class="form-control" id='challenge-game-name' placeholder='Game Name'>
</div>
</div>
</div>
<div ng-if='conf.mode == "open" || conf.mode == "player"' class='form-group'>
<label class='control-label' for='challenge-speed'>Game Speed</label>
<div class='controls'>
<div class='checkbox'>
<select id='challenge-speed' ng-model='conf.speed' ng-change='setSpeedBracket(conf.speed)' class='form-control' style='width: 10em;'>
<option value='blitz'>Blitz</option>
<option value='live' selected='selected'>Live</option>
<option value='correspondence'>Correspondence</option>
</select>
</div>
</div>
</div>
</div>
<div ng-repeat='config in challenge_goban_obj' id='challenge-basic-settings' class='challenge-right-pane form-horizontal' role="form">
<ogs-goban id='challenge-goban' config='config' no-link='true'></ogs-goban>
</div>
<div ng-if='!challenge_goban_obj' id='challenge-basic-settings' class='challenge-right-pane form-horizontal' role="form"><!-- {{{ -->
<div ng-if='conf.mode != "demo"'>
<div class='form-group'>
<label class='control-label' for='challenge.game.handicap-enabled' id='challenge.game.handicap-enabled-label'>Enable Handicaps</label>
<div class='controls'>
<div class='checkbox'>
<input type='checkbox' ng-model='conf.handicap_enabled'
ng-change='challenge.game.handicap = conf.handicap_enabled ? (challenge.game.handicap == 0 ? -1 : challenge.game.handicap) : 0'>
</div>
</div>
</div>
<div class='form-group'>
<label class='control-label' for='challenge.game.ranked'>Ranked</label>
<div class='controls'>
<div class='checkbox'>
<input type='checkbox' ng-model='challenge.game.ranked' ng-change='setRanked(challenge.game.ranked);'>
</div>
</div>
</div>
</div>
<div ng-if='conf.mode == "demo"'>
<div class='form-group' id='challenge.game.rules-group'>
<label class="control-label" for="rules">Rules</label>
<div class='controls'>
<div class='checkbox'>
<select ng-model='demo.rules' class='challenge-dropdown form-control'>
<option value='aga'>AGA</option>
<option value='chinese'>Chinese</option>
<option value='ing'>Ing SST</option>
<option value='japanese'>Japanese</option>
<option value='korean'>Korean</option>
<option value='nz'>New Zealand</option>
</select>
</div>
</div>
</div>
</div>
<div class='form-group' id='challenge-board-size-group'>
<label class="control-label" for="challenge-board-size">Board Size</label>
<div class='controls'>
<div class='checkbox'>
<select id='challenge-board-size' ng-model='conf.selected_board_size' class='challenge-dropdown form-control' ng-change='syncBoardSize()'>
<optgroup label="Normal Sizes">
<option value='19x19'>19x19</option>
<option value='13x13'>13x13</option>
<option value='9x9'>9x9</option>
</optgroup>
<optgroup label="Extreme Sizes">
<option value='25x25'>25x25</option>
<option value='21x21'>21x21</option>
<option value='5x5'>5x5</option>
</optgroup>
<optgroup label="Non-Square">
<option value='19x9'>19x9</option>
<option value='5x13'>5x13</option>
</optgroup>
<optgroup label="Custom">
<option value='custom'>Custom Size</option>
</optgroup>
</select>
</div>
</div>
</div>
<div ng-if='conf.selected_board_size == "custom"' class='form-group'>
<label class="control-label" for="challenge-board-size-custom"></label>
<div class='controls'>
<div class='checkbox'>
<input type="number" ng-model='challenge.game.width' id='challenge-goban-width' class='form-control' style='width: 2em;' min="1" max="25"></input>
x
<input type="number" ng-model='challenge.game.height' id='challenge-goban-height' class='form-control' style='width: 2em;' min="1" max="25"></input>
</div>
</div>
</div>
</div><!-- }}} -->
<!--
<div id='challenge-advanced-toggle' onclick='challenge_toggle_advanced();'>
<div class='content'>
Advanced <i id='challenge-advanced-fields-i' class='fa fa-caret-square-o-up'></i>
</div>
</div>
-->
<div ng-if='conf.mode != "demo"'><!-- {{{ -->
<hr/>
<div id='challenge-advanced-fields' style='margin-top: 1em;' class='form-inline'>
<div class='challenge-left-pane pane form-horizontal'>
<div ng-if='conf.mode != "computer"'>
<div class='form-group' id='challenge.game.rules-group'>
<label class="control-label" for="rules">Rules</label>
<div class='controls'>
<div class='checkbox'>
<select ng-model='challenge.game.rules' id='challenge.game.rules' class='challenge-dropdown form-control'>
<option value='aga'>AGA</option>
<option value='chinese'>Chinese</option>
<option value='ing'>Ing SST</option>
<option value='japanese'>Japanese</option>
<option value='korean'>Korean</option>
<option value='nz'>New Zealand</option>
</select>
</div>
</div>
</div>
<div class='form-group'>
<label class="control-label" for="challenge-time-control">Time Control</label>
<div class='controls'>
<div class='checkbox'>
<select ng-model='time_control.time_control' ng-change='syncTimeControl()' id='challenge-time-control' class='challenge-dropdown form-control'>
<option value='fischer' selected='selected'>Fischer</option>
<option value='simple'>Simple</option>
<option value='byoyomi'>Byo-Yomi</option>
<option value='canadian'>Canadian</option>
<option value='absolute'>Absolute</option>
<option value='none'>None</option>
</select>
</div>
</div>
</div>
<div ng-if='time_control.time_control == "fischer"' id='challenge-initial-time-group' class='form-group challenge-time-group'>
<label id='challenge-initial-time-label' class=" control-label" for="challenge-initial-time">Initial Time</label>
<div class='controls'>
<div class='checkbox'>
<input type='text'id='challenge-initial-time' class='form-control time-spinner'
ogs-time-spinner on-spin='syncTimeControl()' ng-model='time_control.initial_time'>
</div>
</div>
</div>
<div ng-if='time_control.time_control == "fischer"' id='challenge-inc-time-group' class='form-group challenge-time-group'>
<label id='challenge-inc-time-label' class=" control-label" for="challenge-inc-time">Time Increment</label>
<div class='controls'>
<div class='checkbox'>
<input type='text' id='challenge-inc-time' class='form-control'
ogs-time-spinner on-spin='syncTimeControl()' ng-model='time_control.time_increment'>
</div>
</div>
</div>
<div ng-if='time_control.time_control == "fischer"' id='challenge-max-time-group' class='form-group challenge-time-group'>
<label class=" control-label" for="challenge-max-time">Max Time</label>
<div class='controls'>
<div class='checkbox'>
<input type='text' id='challenge-max-time' class='form-control'
ogs-time-spinner on-spin='syncTimeControl()' ng-model='time_control.max_time'>
</div>
</div>
</div>
<div ng-if='time_control.time_control == "simple"' id='challenge-per-move-time-group' class='form-group challenge-time-group'>
<label id='challenge-per-move-time-label' class=" control-label" for="challenge-per-move-time">Time per Move</label>
<div class='controls'>
<div class='checkbox'>
<input type='text' id='challenge-per-move-time' class='form-control'
ogs-time-spinner on-spin='syncTimeControl()' ng-model='time_control.per_move'>
</div>
</div>
</div>
<div ng-if='time_control.time_control == "canadian"' class='form-group challenge-time-group'>
<label id='challenge-main-time-label' class=" control-label" for="challenge-main-time">Main Time</label>
<div class='controls'>
<div class='checkbox'>
<input type='text' id='challenge-main-time' class='form-control'
ogs-time-spinner on-spin='syncTimeControl()' ng-model='time_control.canadian_main_time'>
</div>
</div>
</div>
<div ng-if='time_control.time_control == "byoyomi" ' class='form-group challenge-time-group'>
<label id='challenge-main-time-label' class=" control-label" for="challenge-main-time">Main Time</label>
<div class='controls'>
<div class='checkbox'>
<input type='text' id='challenge-main-time' class='form-control'
ogs-time-spinner on-spin='syncTimeControl()' ng-model='time_control.byoyomi_main_time'>
</div>
</div>
</div>
<div ng-if='time_control.time_control == "byoyomi"' id='challenge-per-period-time-group' class='form-group challenge-time-group'>
<label id='challenge-per-period-time-label' class=" control-label" for="challenge-per-period-time">Time per Period</label>
<div class='controls'>
<div class='checkbox'>
<input type='text' id='challenge-per-period-time' class='form-control'
ogs-time-spinner on-spin='syncTimeControl()' ng-model='time_control.byoyomi_period_time'>
</div>
</div>
</div>
<div ng-if='time_control.time_control == "byoyomi"' id='challenge-periods-group' class='form-group challenge-time-group'>
<label id='challenge-periods-label' class=" control-label" for="challenge-periods">Periods</label>
<div class='controls'>
<div class='checkbox'>
<input type='number' id='challenge-periods' min='1' max='600' class='challenge-dropdown form-control'
ogs-spinner on-spin='syncTimeControl()' ng-model='time_control.periods'>
</div>
</div>
</div>
<div ng-if='time_control.time_control == "canadian"' id='challenge-per-canadian-period-time-group' class='form-group challenge-time-group'>
<label id='challenge-per-canadian-period-time-label' class=" control-label" for="challenge-per-canadian-period-time">Time per Period</label>
<div class='controls'>
<div class='checkbox'>
<input type='text' id='challenge-per-canadian-period-time' class='form-control'
ogs-time-spinner on-spin='syncTimeControl()' ng-model='time_control.canadian_period_time'>
</div>
</div>
</div>
<div ng-if='time_control.time_control == "canadian"' id='challenge-canadian-stones-group' class='form-group challenge-time-group'>
<label id='challenge-canadian-stones-label' class=" control-label" for="challenge-canadian-stones">Stones per Period</label>
<div class='controls'>
<div class='checkbox'>
<input type='number' id='challenge-canadian-stones' min='1' max='50' class='challenge-dropdown form-control'
ogs-spinner on-spin='syncTimeControl()' ng-model='time_control.stones_per_period'>
</div>
</div>
</div>
<div ng-if='time_control.time_control == "absolute"' id='challenge-total-time-group' class='form-group challenge-time-group'>
<label id='challenge-total-time-label' class=" control-label" for="challenge-total-time">Total Time</label>
<div class='controls'>
<div class='checkbox'>
<input type='text' id='challenge-total-time' class='form-control'
ogs-time-spinner on-spin='syncTimeControl()' ng-model='time_control.total_time'>
</div>
</div>
</div>
</div><!-- conf.mode != computer -->
<div ng-if='conf.speed == "correspondence"' id='challenge-pause-on-weekends-div' class='form-group' style='position: relative;'>
<label class="control-label" for="challenge-pause-on-weekends">Pause on Weekends</label>
<div class='controls'>
<div class='checkbox'>
<input ng-model='challenge.game.pause_on_weekends' id="challenge-pause-on-weekends" type="checkbox">
</div>
</div>
</div>
</div>
<div class='challenge-right-pane pane form-horizontal'>
<div class='form-group' id='challenge.game.handicap-group'>
<label class='control-label'>Handicap</label>
<div class='controls'>
<div class='checkbox'>
<select ng-model='challenge.game.handicap' class='challenge-dropdown form-control'>
<option value='-1'
ng-disabled='!conf.handicap_enabled'
ng-selected='challenge.game.handicap == -1'>Automatic</option>
<option value='0'
ng-selected='challenge.game.handicap == 0'>None</option>
<option ng-repeat='n in handicapRanges' value='{{n}}'
ng-disabled='!conf.handicap_enabled || n > 9 && challenge.game.ranked'
ng-selected='challenge.game.handicap == n'
>{{n}}</option>
</select>
</div>
</div>
</div>
<div class='form-group'>
<label class='control-label'>Komi</label>
<div class='controls'>
<div class='checkbox'>
<select ng-model='challenge.game.komi_auto' class='challenge-dropdown form-control'>
<option value='automatic'>Automatic</option>
<option value='custom' ng-disabled="challenge.game.ranked">Custom</option>
</select>
</div>
</div>
</div>
<div class='form-group' ng-if='challenge.game.komi_auto == "custom"'>
<label class='control-label'></label>
<div class='controls'>
<div class='checkbox'>
<input type="number" ng-model='challenge.game.komi' class='form-control' style='width: 4em;' step="0.5"></input>
</div>
</div>
</div>
<div class='form-group'>
<label class="control-label" for="color">Your Color</label>
<div class='controls'>
<div class='checkbox'>
<select ng-model='challenge.challenger_color' id='challenge-color' class='challenge-dropdown form-control'>
<option value='automatic'>Automatic</option>
<option value='black'>Black</option>
<option value='white'>White</option>
<option value='random'>Random</option>
</select>
</div>
</div>
</div>
<div ng-if='conf.mode != "computer"'>
<div class='form-group' style='position: relative;'>
<label class="control-label" for="disable_analysis">Disable Analysis</label>
<div class='controls'>
<div class='checkbox'>
<input ng-model='challenge.game.disable_analysis' id="challenge-disable-analysis" type="checkbox"> *
</div>
</div>
</div>
<div ng-if='conf.mode == "open"'>
<div class='form-group' id='challenge-restrict-rank-group'>
<label class="control-label" for="disable_analysis">Restrict Rank</label>
<div class='controls'>
<div class='checkbox'>
<input ng-model='conf.restrict_rank' id="challenge-restrict-rank" type="checkbox">
</div>
</div>
</div>
<div ng-if='conf.restrict_rank'>
<div class='form-group' id='challenge-min-rank-group'>
<label class="control-label" for="minimum_ranking">Minimum Ranking</label>
<div class='controls'>
<div class='checkbox'>
<select ng-model='challenge.min_ranking' id='challenge-min-rank' class='challenge-dropdown form-control'
ng-options='r.rank as r.label for r in (challenge.game.ranked ? ranked_ranks : ranks.slice(5,100))'></select>
</div>
</div>
</div>
<div class='form-group' id='challenge-max-rank-group'>
<label class="control-label" for="maximum_ranking">Maximum Ranking</label>
<div class='controls'>
<div class='checkbox'>
<select ng-model='challenge.max_ranking' id='challenge-max-rank' class='challenge-dropdown form-control'
ng-options='r.rank as r.label for r in (challenge.game.ranked ? ranked_ranks : ranks.slice(5,100))'></select>
</div>
</div>
</div>
</div>
</div>
<div style='margin-top: 1.0em; text-align: right; font-size: 0.8em;'>* Also disables conditional moves</div>
</div>
</div>
</div>
</div><!-- }}} -->
<div ng-if='conf.mode == "demo"'><!-- {{{ -->
<hr/>
<div id='challenge-advanced-fields' style='margin-top: 1em;' class='form-inline'>
<div class='challenge-left-pane pane form-horizontal'>
<div class='form-group'>
<label class='control-label' for='demo-black-name'>Black Player</label>
<div class='controls'>
<div class='checkbox'>
<input type='text' class='form-control' ng-model='demo.black_name'>
</div>
</div>
</div>
<div class='form-group'>
<label class='control-label' for='demo-black-name'>Rank</label>
<div class='controls'>
<div class='checkbox'>
<select ng-model='demo.black_ranking' class='challenge-dropdown form-control' ng-options='r.rank as r.label for r in demo_ranks'></select>
</div>
</div>
</div>
</div>
<div class='challenge-right-pane pane form-horizontal'>
<div class='form-group'>
<label class='control-label' for='demo-black-name'>White Player</label>
<div class='controls'>
<div class='checkbox'>
<input type='text' class='form-control' ng-model='demo.white_name'>
</div>
</div>
</div>
<div class='form-group'>
<label class='control-label' for='demo-black-name'>Rank</label>
<div class='controls'>
<div class='checkbox'>
<select ng-model='demo.white_ranking' class='challenge-dropdown form-control' ng-options='r.rank as r.label for r in demo_ranks'></select>
</div>
</div>
</div>
</div>
</div>
</div><!-- }}} -->
</fieldset>
</div>
</div>
<div class="modal-footer">
<button class="btn btn-default pull-left" data-dismiss="modal" aria-hidden="true">Close</button>
<button ng-if='conf.mode == "demo"' type='button' id='challenge-button' ng-click='createDemo();' class='btn btn-primary pull-right'>Create</button>
<button ng-if='conf.mode != "demo"' type='button' id='challenge-button' ng-click='createChallenge();' class='btn btn-primary pull-right'>Challenge</button>
</div>
</div><!-- /.modal-content -->
</div><!-- /.modal-dialog -->
</div><!-- /.modal -->
</script>
<script type="text/ng-template" id="/accept-modal.mako">
<div id="accept-open-challenge-modal" class="modal fade" tabindex="-1" role="dialog" aria-labelledby="modal-theme-label" aria-hidden="true">
<div class='modal-dialog'>
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
<h4>{{game.name}}</h4>
</div>
<div ng-show='loading' class="modal-body">
<h1>Loading...</h1>
</div>
<div ng-if='!loading' class="modal-body">
<table style='width: 100%;'>
<tr><th class='big'>Opponent</th><td class='big'><b><ogs-player json='challenger'></ogs-player></b></td></tr>
<tr><td></td><td>&nbsp;</th></tr>
<tr><th class='big'>Clock</th><td class='big'><b>{{time_control_description}}</b></td></tr>
<tr><td colspan='2'><hr></td></tr>
<tr><th>Your color</th><td>{{player_color}}</td></tr>
<tr><th>Ranked</th><td>{{game.ranked ? _("Yes") : _("No")}}</td></tr>
<tr><th>Handicap</th><td>{{handicap_text}}</td></tr>
<tr><th>Komi</th><td>{{komi}}</td></tr>
<tr><th>Board Size</th><td>{{game.witdh}}x{{game.height}}</td></tr>
<tr><th>In-game analysis</th><td>{{analysis}}</td></tr>
<tr>
<th ng-show='game.time_per_move &gt; 3600'>Pause on weekends</th>
<td ng-show='game.time_per_move &gt; 3600'>{{pause_on_weekends}}</td>
</tr>
</table>
</div>
<div class="modal-footer">
<button class="btn btn-default pull-left" data-dismiss="modal" aria-hidden="true">Close</button>
<button type='button' id='accept-open-challenge-button' ng-click='acceptGame();' class='btn btn-success pull-right'>Accept Challenge</button>
</div>
</div><!-- /.modal-content -->
</div><!-- /.modal-dialog -->
</div><!-- /.modal -->
</script>
<script type="text/ng-template" id="/moderation-modal.mako">
<div id="moderation-modal" class="modal fade" tabindex="-1" role="dialog" aria-labelledby="modal-theme-label" aria-hidden="true">
<div class='modal-dialog'>
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
<h3 id='challenge-title'>Moderate User</h3>
</div>
<div class="modal-body">
<div>
<fieldset>
<div class='form-horizontal' role='form'>
<div class='form-group'>
<label class="col-sm-8 control-label" for="moderation-ignore-chats">Ignore chats and private messages</label>
<div class='col-sm-4'>
<div class='checkbox'>
<input type='checkbox' id='moderation-ignore-chats' ng-model='ignore' ng-change='setIgnore(ignore)'>
</div>
</div>
</div>
</div>
</fieldset>
</div>
</div>
<div class="modal-footer">
<button class="btn btn-default" data-dismiss="modal" aria-hidden="true">Close</button>
</div>
</div>
</div>
</div>
</script>
<script type="text/ng-template" id="/announcements.mako">
<ogs-on-ui-push event='retract' channel='announcements' action='retractAnnouncement($data)'></ogs-on-ui-push>
<ogs-on-ui-push event='announcement' channel='announcements' action='handleAnnouncement($data)'></ogs-on-ui-push>
<div id='announcements' style='display: none;' class='{{scrolling_messages.length ? "visible" : ""}}'>
<div id='announcements-scroller'>
<div ng-repeat='announcement in scrolling_messages' class='announcement'>
<i class='fa fa-times-circle' ng-click='clearAnnouncement(announcement.id)'></i>
<a ng-if='announcement.link' href='{{announcement.link}}' target='_blank'>{{announcement.text}}</a>
<span ng-if='!announcement.link'>{{announcement.text}}</span>
<i class='fa fa-times-circle' ng-click='clearAnnouncement(announcement.id)'></i>
</div>
</div>
</div>
</script>
<div ng-repeat='inc in deferred_includes' ng-include='inc.src' ng-controller='inc.ctrl'></div>
<script>
/* Setup {{{ */
window['_console'] = console;
window['console'] = _console ? _console : {log:function(){}};
window['csrf_token'] = "Tme3A9TaAvAQRmPbHIbhUApDX1nWeab4";
var _config = {"cdn_release": "https:\/\/a00ce0086bda2213e89f-570db0116da8eb5fdc3ce95006e46d28.ssl.cf1.rackcdn.com\/4.1", "lang": "en_GB", "global_user": {"username": "pathogenix", "ranking": 24, "tournament_admin": false, "pro": false, "is_moderator": true, "is_tournament_moderator": false, "supporter": false, "hide_recently_finished_games": false, "setup_rank_set": true, "country": "_GoT_Stark", "id": 914, "is_superuser": false, "auto_advance_after_submit": false, "ui_class": "moderator", "provisional": 0}, "notification_auth": "833928520b0e322ebc6d6901c34b804e", "ggs_ssl": true, "server_name": "online-go.com", "cdn": "https:\/\/a00ce0086bda2213e89f-570db0116da8eb5fdc3ce95006e46d28.ssl.cf1.rackcdn.com", "google_buy_js": "https:\/\/wallet.google.com\/inapp\/lib\/buy.js", "anonymous_user": null, "ggs_host": "ggs.online-go.com", "braintree_cse": "MIIBCgKCAQEA2yDcZ8p0DhE282B0nekyPRdIVXNBMeRw8ZNzRo21o8eThP3KRLNAYFlMWS\/7b\/zKhkZlMMu5ISWP547QjtXSAgJS9UW2uqgtvDEBrb8hEerWml1PyAsq1Zu3oE9w4uE\/4aM5XGm0ocEjJkDNHOAAFQpQ0YbMj8EPOiZJfyOf8ltspPXP4\/WrB7RyYZGZP3fRqV5ZgRkMYEFDte0fbx3mHarTdCZr+59+BEd8QWKZPCiXuaJpB0mjAz3PzOGOeVQNBaUSElDQ6\/9mBEYbqbQ6XmW3E8LFUArjK7OBwcDPT1IEF7HNo3YAhr76YyhlSrhQfonOUkkWMlow4GH+qt7QiQIDAQAB", "cdn_host": "a00ce0086bda2213e89f-570db0116da8eb5fdc3ce95006e46d28.ssl.cf1.rackcdn.com", "version": "4.1-279-g5637d17", "ogs": {"channels": [{"country": "us", "id": "global-english", "name": "English"}, {"country": "un", "id": "global-help", "name": "Help"}, {"country": "un", "id": "global-offtopic", "name": "Off Topic"}, {"country": "jp", "id": "global-japanese", "name": "\u65e5\u672c\u8a9e "}, {"country": "cn", "id": "global-chinese", "name": "\u4e2d\u6587"}, {"country": "kr", "id": "global-korean", "name": "\ud55c\uad6d\uc5b4"}, {"country": "ru", "id": "global-russian", "name": "\u0420\u0443\u0441\u0441\u043a\u0438\u0439"}, {"country": "pl", "id": "global-polish", "name": "Polski"}, {"country": "_Arab_League", "rtl": true, "id": "global-arabic", "name": "\u0627\u0644\u0639\u064e\u0631\u064e\u0628\u0650\u064a\u064e\u0651\u0629\u064f"}, {"country": "bg", "id": "global-bulgarian", "name": "\u0411\u044a\u043b\u0433\u0430\u0440\u0441\u043a\u0438"}, {"country": "es", "id": "global-catalan", "name": "Catal\u00e0"}, {"country": "cz", "id": "global-czech", "name": "\u010ce\u0161tina"}, {"country": "_Esperanto", "id": "global-esperanto", "name": "Esperanto"}, {"country": "de", "id": "global-german", "name": "Deutsch"}, {"country": "es", "id": "global-spanish", "name": "Espa\u00f1ol"}, {"country": "fr", "id": "global-french", "name": "Fran\u00e7ais"}, {"country": "ph", "id": "global-filipino", "name": "Filipino"}, {"country": "id", "id": "global-indonesian", "name": "Indonesian"}, {"country": "il", "rtl": true, "id": "global-hebrew", "name": "\u05e2\u05b4\u05d1\u05b0\u05e8\u05b4\u05d9\u05ea"}, {"country": "in", "id": "global-hindi", "name": "\u0939\u093f\u0928\u094d\u0926\u0940"}, {"country": "lt", "id": "global-lithuanian", "name": "Lietuvi\u0173"}, {"country": "hu", "id": "global-hungarian", "name": "Magyar"}, {"country": "nl", "id": "global-dutch", "name": "Nederlands"}, {"country": "no", "id": "global-norwegian", "name": "Norsk"}, {"country": "it", "id": "global-italian", "name": "Italiano"}, {"country": "pt", "id": "global-portuguese", "name": "Portugu\u00eas"}, {"country": "ro", "id": "global-romanian", "name": "Rom\u00e2n\u0103"}, {"country": "se", "id": "global-swedish", "name": "Svenska"}, {"country": "fi", "id": "global-finnish", "name": "Suomi"}, {"country": "tr", "id": "global-turkish", "name": "T\u00fcrk\u00e7e"}, {"country": "ua", "id": "global-ukrainian", "name": "\u0423\u043a\u0440\u0430\u0457\u043d\u0441\u044c\u043a\u0430"}], "preferences": {"show_game_list_view": false}}, "ignores": {}, "release": "4.1", "profanity_filter": false, "chat_auth": "99a1c69c98042ecb7abd072295dac130"};
for (var k in _config) {
window[k] = _config[k];
}
/* }}} */
/* Loading {{{ */
window['load_start'] = new Date();
function queueStyle(body) {
var elt = document.createElement('style');
elt.setAttribute('type', 'text/css');
if(body) {
if (elt.styleSheet) { // IE
elt.styleSheet.cssText = body;
} else { // everyone else
elt.appendChild(document.createTextNode(body));
}
}
document.body.appendChild(elt);
}
function queueCSS(src, body) {
var elt = document.createElement('link');
elt.id = 'theme-css';
elt.rel = "stylesheet";
elt.href = src;
var loaded = false;
elt.onload = elt.onreadystatechange = function() {
var rs = this.readyState;
if (loaded || rs && rs != 'complete' && rs != 'loaded') return;
loaded = true;
console.log("Loaded ", src, (new Date()-window.load_start), "ms");
try { Typekit.load(config); } catch (e) {}
};
document.head.appendChild(elt);
console.log("Loading ", src);
}
function queueJS(src) {
var elt = document.createElement('script');
elt.src = src;
elt.async = false;
var loaded = false;
elt.onload = elt.onreadystatechange = function() {
var rs = this.readyState;
if (loaded || rs && rs != 'complete' && rs != 'loaded') return;
loaded = true;
console.log("Loaded ", src, (new Date()-window.load_start), "ms");
try { Typekit.load(config); } catch (e) {}
};
document.head.appendChild(elt);
console.log("Loading ", src);
}
function queueTypekit(kitId) {
var config = {
kitId: kitId
};
var d = false;
var tk = document.createElement('script');
tk.src = '//use.typekit.net/' + config.kitId + '.js';
tk.type = 'text/javascript';
tk.async = 'true';
tk.onload = tk.onreadystatechange = function() {
var rs = this.readyState;
if (d || rs && rs != 'complete' && rs != 'loaded') return;
d = true;
try { Typekit.load(config); } catch (e) {}
};
document.head.appendChild(tk);
console.log("Loading typekit ", kitId);
}
function downloadCssAndJsOnload() {
try {
window.load_queue_time = new Date();
console.log("Starting download at", (window.load_queue_time - window.load_start), "ms");
} catch(e) {}
/*
queueCSS("https://a00ce0086bda2213e89f-570db0116da8eb5fdc3ce95006e46d28.ssl.cf1.rackcdn.com/4.1/ogs-default.4.1-279-g5637d17.css");
*/
/* Patch our user font stuff after our base theme has been processed */
var font_css = "html, body, textarea, .navbar-search .search-query, input, button, select, textarea, .sidr { ";
font_css += 'font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;';
font_css += "}"
queueStyle(font_css);
/* Load our javascript */
/*
queueJS("/locale.js");
queueJS("https://a00ce0086bda2213e89f-570db0116da8eb5fdc3ce95006e46d28.ssl.cf1.rackcdn.com/4.1/locale/countries_en.js");
queueJS("https://a00ce0086bda2213e89f-570db0116da8eb5fdc3ce95006e46d28.ssl.cf1.rackcdn.com/4.1/ogs.4.1-279-g5637d17.min.js");
*/
document.getElementById("ogs-logo").src="https://a00ce0086bda2213e89f-570db0116da8eb5fdc3ce95006e46d28.ssl.cf1.rackcdn.com/4.1/img/ogslogo-default.png"
/* Load typekit fonts if necessary */
}
if (window.addEventListener) {
window.addEventListener("load", downloadCssAndJsOnload, false);
} else if (window.attachEvent) {
window.attachEvent("onload", downloadCssAndJsOnload);
} else {
window.onload = downloadCssAndJsOnload;
}
//setTimeout(downloadCssAndJsOnload,1);
/* }}} */
</script>
<script src='/locale.js'></script>
<script src="https://a00ce0086bda2213e89f-570db0116da8eb5fdc3ce95006e46d28.ssl.cf1.rackcdn.com/4.1/locale/countries_en.js"></script>
<script src='https://a00ce0086bda2213e89f-570db0116da8eb5fdc3ce95006e46d28.ssl.cf1.rackcdn.com/4.1/ogs.4.1-279-g5637d17.min.js'></script>
<script>
/* Google analytics {{{ */
if (/online-(go|baduk|weiqi|covay|igo).(com|net)$/.test(document.location.host) && !(/beta/.test(document.location.host))) {
window['production_site'] = true;
console.log("Welcome to OGS");
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-37743954-2', 'online-go.com');
ga('send', 'pageview');
} else {
window['production_site'] = false;
console.log("Dev system detected, disabling google analytics");
}
/* }}} */
</script>
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment