Merge branch 'upstream' into blanks
This commit is contained in:
commit
d0e8e1e33f
|
@ -582,3 +582,10 @@ span.debug, span.admin {
|
|||
.nowrap {
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.cardnum {
|
||||
position: absolute;
|
||||
right: 10px;
|
||||
bottom: 19px;
|
||||
font-size: 8pt;
|
||||
}
|
||||
|
|
|
@ -95,8 +95,12 @@ HttpSession hSession = request.getSession(true);
|
|||
If this is your first time playing, you may wish to read <a href="/">the changelog and list of
|
||||
known issues</a>.
|
||||
</p>
|
||||
<p tabindex="0">Most recent update: 7 August 2013:</p>
|
||||
<p tabindex="0">Most recent update: 3 September 2013:</p>
|
||||
<ul>
|
||||
<li tabindex="0">The Box Expansion and PAX Prime 2013 cards have been added. <strong>If you have
|
||||
any spares of these card numbers and are willing to part with them, it would be awesome if you'd
|
||||
<a href="mailto:ajanata@socialgamer.net?subject=13PAX+cards">email me</a> and send them to me,
|
||||
as I was unable to acquire them at PAX:</strong> 29, 30, 33, 34, 35, 36, 37</li>
|
||||
<li tabindex="0"><strong>The game list will not automatically update all the time now.</strong>
|
||||
You will need to start using the Refresh Games button. The game list will automatically update
|
||||
for new games, removed games, when games become passworded, or when you leave a game.</li>
|
||||
|
@ -383,13 +387,13 @@ HttpSession hSession = request.getSession(true);
|
|||
<input type="text" id="game_password_template" class="game_password"
|
||||
aria-label="Game password. You must tab outside of the box to apply the password."/>
|
||||
<input type="password" id="game_fake_password_template" class="game_fake_password hide" />
|
||||
You must click outside the box to apply the password.
|
||||
<input type="checkbox" id="game_hide_password_template" class="game_hide_password" />
|
||||
<label id="game_hide_password_template_label" for="game_hide_password_template"
|
||||
aria-label="Hide password from your screen."
|
||||
title="Hides the password from your screen, so people watching your stream can't see it.">
|
||||
Hide password.
|
||||
</label>
|
||||
You must click outside the box to apply the password.
|
||||
</fieldset>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -54,6 +54,12 @@ to, for instance, display the number of connected players.
|
|||
</p>
|
||||
<p>Recent Changes:</p>
|
||||
<ul>
|
||||
<li>5 September 2013:<ul>
|
||||
<li tabindex="0">The Box Expansion and PAX Prime 2013 cards have been added. <strong>If you have
|
||||
any spares of these card numbers and are willing to part with them, it would be awesome if you'd
|
||||
<a href="mailto:ajanata@socialgamer.net?subject=13PAX+cards">email me</a> and send them to me,
|
||||
as I was unable to acquire them at PAX:</strong> 29, 30, 33, 34, 35, 36, 37</li>
|
||||
</ul></li>
|
||||
<li>7 August 2013:<ul>
|
||||
<li tabindex="0"><strong>The game list will not automatically update all the time now.</strong>
|
||||
You will need to start using the Refresh Games button. The game list will automatically update
|
||||
|
|
|
@ -41,6 +41,8 @@ cah.ajax.ErrorHandlers[cah.$.AjaxOperation.REGISTER] = function(data) {
|
|||
$("#nickname").focus();
|
||||
};
|
||||
|
||||
// hacky way to avoid joining a game from the hash if the server told us to join a game.
|
||||
cah.ajax.hasAutojoinedGame_ = false;
|
||||
cah.ajax.SuccessHandlers[cah.$.AjaxOperation.FIRST_LOAD] = function(data) {
|
||||
cah.CardSet.populateCardSets(data[cah.$.AjaxResponse.CARD_SETS]);
|
||||
|
||||
|
@ -55,6 +57,7 @@ cah.ajax.SuccessHandlers[cah.$.AjaxOperation.FIRST_LOAD] = function(data) {
|
|||
case cah.$.ReconnectNextAction.GAME:
|
||||
cah.log.status("Reconnecting to game...");
|
||||
cah.Game.joinGame(data[cah.$.AjaxResponse.GAME_ID]);
|
||||
cah.ajax.hasAutojoinedGame_ = true;
|
||||
break;
|
||||
case cah.$.ReconnectNextAction.NONE:
|
||||
// pass
|
||||
|
@ -77,6 +80,8 @@ cah.ajax.ErrorHandlers[cah.$.AjaxOperation.FIRST_LOAD] = function(data) {
|
|||
}
|
||||
};
|
||||
|
||||
// another hack thing to trigger an auto-join after the first game list refresh
|
||||
cah.ajax.autojoinGameId_ = undefined;
|
||||
/**
|
||||
* This should only be called after we have a valid registration with the server, as we start doing
|
||||
* long polling here.
|
||||
|
@ -92,6 +97,22 @@ cah.ajax.after_registered = function() {
|
|||
cah.longpoll.longPoll();
|
||||
// Dirty that we have to do this here... Oh well.
|
||||
app_resize();
|
||||
|
||||
var hash = window.location.hash.substring(1);
|
||||
if (hash && hash != '') {
|
||||
// TODO find a better place for this if we ever have more than just game=id in the hash.
|
||||
var params = hash.split('&');
|
||||
var options = {};
|
||||
for ( var i in params) {
|
||||
var split = params[i].split('=');
|
||||
var key = split[0];
|
||||
var value = split[1];
|
||||
options[key] = value;
|
||||
}
|
||||
if (options['game']) {
|
||||
cah.ajax.autojoinGameId_ = options['game'];
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
cah.ajax.SuccessHandlers[cah.$.AjaxOperation.CHAT] = function(data) {
|
||||
|
@ -114,6 +135,16 @@ cah.ajax.SuccessHandlers[cah.$.AjaxOperation.NAMES] = function(data) {
|
|||
|
||||
cah.ajax.SuccessHandlers[cah.$.AjaxOperation.GAME_LIST] = function(data) {
|
||||
cah.GameList.instance.processUpdate(data);
|
||||
|
||||
if (cah.ajax.autojoinGameId_ && !cah.ajax.hasAutojoinedGame_) {
|
||||
try {
|
||||
cah.GameList.instance.joinGame(cah.ajax.autojoinGameId_);
|
||||
} catch (e) {
|
||||
cah.log.error(e);
|
||||
cah.updateHash('');
|
||||
}
|
||||
cah.ajax.autojoinGameId_ = undefined;
|
||||
}
|
||||
};
|
||||
|
||||
cah.ajax.SuccessHandlers[cah.$.AjaxOperation.JOIN_GAME] = function(data, req) {
|
||||
|
|
|
@ -185,6 +185,7 @@ function chatsubmit_click(game_id, parent_element) {
|
|||
function logout_click() {
|
||||
if (confirm("Are you sure you wish to log out?")) {
|
||||
cah.Ajax.build(cah.$.AjaxOperation.LOG_OUT).run();
|
||||
cah.updateHash('');
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -309,6 +309,8 @@ cah.Game.joinGame = function(gameId) {
|
|||
var game = new cah.Game(gameId);
|
||||
cah.currentGames[gameId] = game;
|
||||
game.insertIntoDocument();
|
||||
|
||||
cah.updateHash('game=' + gameId);
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -1110,6 +1112,8 @@ cah.Game.prototype.dispose = function() {
|
|||
$("#leave_game").unbind().hide();
|
||||
$("#start_game").unbind().hide();
|
||||
$(window).off("resize.game_" + this.id_);
|
||||
|
||||
cah.updateHash('');
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
|
@ -38,12 +38,12 @@ cah.GameList = function() {
|
|||
this.element_ = $("#game_list")[0];
|
||||
|
||||
/**
|
||||
* Array of all game lobby objects.
|
||||
* Map all game lobby objects, id -> game lobby.
|
||||
*
|
||||
* @type {Array[cah.GameListLobby]}
|
||||
* @type {Object}
|
||||
* @private
|
||||
*/
|
||||
this.games_ = new Array();
|
||||
this.games_ = {};
|
||||
|
||||
$("#create_game").click(cah.bind(this, this.createGameClick_));
|
||||
$("#refresh_games").click(cah.bind(this, this.refreshGamesClick_));
|
||||
|
@ -99,7 +99,7 @@ cah.GameList.prototype.processUpdate = function(gameData) {
|
|||
for ( var key in this.games_) {
|
||||
this.games_[key].dispose();
|
||||
}
|
||||
this.games_ = new Array();
|
||||
this.games_ = {};
|
||||
|
||||
// Sort the games into two lists, passworded and non-passworded.
|
||||
var passworded = new Array();
|
||||
|
@ -118,7 +118,7 @@ cah.GameList.prototype.processUpdate = function(gameData) {
|
|||
for ( var i = 0; i < games.length; i++) {
|
||||
var game = games[i];
|
||||
var lobby = new cah.GameListLobby(this.element_, game);
|
||||
this.games_.push(lobby);
|
||||
this.games_[game[cah.$.GameInfo.ID]] = lobby;
|
||||
}
|
||||
|
||||
if (gameData[cah.$.AjaxResponse.GAMES].length < gameData[cah.$.AjaxResponse.MAX_GAMES]) {
|
||||
|
@ -128,6 +128,21 @@ cah.GameList.prototype.processUpdate = function(gameData) {
|
|||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Join the given game.
|
||||
*
|
||||
* @param {Number}
|
||||
* id The id of the game to join.
|
||||
*/
|
||||
cah.GameList.prototype.joinGame = function(id) {
|
||||
var game = this.games_[Number(id)];
|
||||
if (game) {
|
||||
game.join();
|
||||
} else {
|
||||
throw 'Game ' + id + ' does not exist.';
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Event handler for the clicking the Create Game button.
|
||||
*
|
||||
|
@ -237,6 +252,13 @@ cah.GameListLobby.prototype.joinClick = function() {
|
|||
cah.Ajax.build(cah.$.AjaxOperation.JOIN_GAME).withGameId(this.id_).withPassword(password).run();
|
||||
};
|
||||
|
||||
/**
|
||||
* Join this game, by simulating a click of its join button.
|
||||
*/
|
||||
cah.GameListLobby.prototype.join = function() {
|
||||
$('.gamelist_lobby_join', this.element_).click();
|
||||
};
|
||||
|
||||
/**
|
||||
* Remove the game lobby from the document and free up resources.
|
||||
*/
|
||||
|
|
|
@ -108,3 +108,16 @@ cah.inherits = function(childCtor, parentCtor) {
|
|||
childCtor.prototype = new tempCtor();
|
||||
childCtor.prototype.constructor = childCtor;
|
||||
};
|
||||
|
||||
/**
|
||||
* Updates the hash in the browser's URL for deeplinks.
|
||||
*
|
||||
* TODO: If we ever want more than just game=id here, this will have to deal with a map somehow.
|
||||
*
|
||||
* @param {String}
|
||||
* hash The hash to use in the URL.
|
||||
*/
|
||||
cah.updateHash = function(hash) {
|
||||
window.location.replace(window.location.protocol + '//' + window.location.host
|
||||
+ window.location.pathname.replace(/#$/g, '') + '#' + hash);
|
||||
};
|
||||
|
|
Loading…
Reference in New Issue