Game edition ok, and other minor tweaks
This commit is contained in:
@@ -16,7 +16,7 @@ interface PairgothApiHandler: ApiHandler {
|
||||
fun Tournament<*>.dispatchEvent(event: Event, data: Json? = null) {
|
||||
Event.dispatch(event, Json.Object("tournament" to id, "data" to data))
|
||||
// when storage is not in memory, the tournament has to be persisted
|
||||
if (event != Event.tournamentAdded && event != Event.tournamentDeleted && event != Event.gameUpdated)
|
||||
if (event != Event.tournamentAdded && event != Event.tournamentDeleted)
|
||||
Store.replaceTournament(this)
|
||||
}
|
||||
|
||||
|
@@ -71,6 +71,7 @@ object PairingHandler: PairgothApiHandler {
|
||||
val playing = (tournament.games(round).values).filter { it.id != gameId }.flatMap {
|
||||
listOf(it.black, it.white)
|
||||
}.toSet()
|
||||
if (game.result != Game.Result.UNKNOWN) badRequest("Game already has a result");
|
||||
game.black = payload.getID("b") ?: badRequest("missing black player id")
|
||||
game.white = payload.getID("w") ?: badRequest("missing white player id")
|
||||
tournament.recomputeDUDD(round, game.id)
|
||||
|
@@ -202,6 +202,9 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
#pairables {
|
||||
margin-bottom: 1em;
|
||||
}
|
||||
#paired {
|
||||
.listitem {
|
||||
position: relative;
|
||||
|
@@ -120,8 +120,14 @@ Element.prototype.hide = function() {
|
||||
return this;
|
||||
}
|
||||
NodeList.prototype.text = function(txt) {
|
||||
this.item(0).text(txt);
|
||||
if (typeof(txt) === 'undefined') {
|
||||
return this.item(0).text();
|
||||
} else {
|
||||
this.forEach(elem => {
|
||||
elem.text(txt);
|
||||
});
|
||||
return this;
|
||||
}
|
||||
}
|
||||
Element.prototype.text = function(txt) {
|
||||
if (typeof(txt) === 'undefined') {
|
||||
|
@@ -18,6 +18,26 @@ function unpair(games) {
|
||||
});
|
||||
}
|
||||
|
||||
function editGame(game) {
|
||||
let t = game.find('.table');
|
||||
let w = game.find('.white');
|
||||
let b = game.find('.black');
|
||||
let h = game.find('.handicap');
|
||||
|
||||
let form = $('#pairing-form')[0];
|
||||
form.val('id', game.data('id'));
|
||||
form.val('t', t.data('value'));
|
||||
form.val('w', w.data('id'));
|
||||
$('#edit-pairing-white').text(w.text());
|
||||
form.val('b', b.data('id'));
|
||||
$('#edit-pairing-black').text(b.text());
|
||||
form.val('h', h.data('value'));
|
||||
|
||||
$('#update-pairing').addClass('disabled');
|
||||
|
||||
modal('edit-pairing');
|
||||
}
|
||||
|
||||
onLoad(()=>{
|
||||
$('.listitem').on('click', e => {
|
||||
if (e.shiftKey && typeof(focused) !== 'undefined') {
|
||||
@@ -31,13 +51,17 @@ onLoad(()=>{
|
||||
let parent = e.target.closest('.multi-select');
|
||||
let children = parent.childNodes.filter('.listitem');
|
||||
for (let j = from; j <= to; ++j) { new Tablesort($('#players')[0]);
|
||||
|
||||
children.item(j).addClass('selected');
|
||||
children.item(j).attr('draggable', true);
|
||||
}
|
||||
} else {
|
||||
let target = e.target.closest('.listitem');
|
||||
if (e.detail === 1) {
|
||||
focused = target.toggleClass('selected').attr('draggable', target.hasClass('selected'));
|
||||
} else {
|
||||
focused = target.attr('draggable', target.hasClass('selected'));
|
||||
editGame(focused);
|
||||
}
|
||||
}
|
||||
});
|
||||
$('#pair').on('click', e => {
|
||||
@@ -56,4 +80,39 @@ onLoad(()=>{
|
||||
}
|
||||
unpair(games);
|
||||
});
|
||||
$('#pairing-form [name]').on('input', e => {
|
||||
$('#update-pairing').removeClass('disabled');
|
||||
});
|
||||
$('#pairing-exchange').on('click', e => {
|
||||
let form = $('#pairing-form')[0];
|
||||
let w = form.val('w');
|
||||
let b = form.val('b');
|
||||
form.val('w', b);
|
||||
form.val('b', w);
|
||||
let wName = $('#edit-pairing-white').text();
|
||||
let bName = $('#edit-pairing-black').text();
|
||||
$('#edit-pairing-white').text(bName);
|
||||
$('#edit-pairing-black').text(wName);
|
||||
$('#update-pairing').removeClass('disabled');
|
||||
});
|
||||
$('#pairing-form').on('submit', e => {
|
||||
e.preventDefault();
|
||||
return false;
|
||||
});
|
||||
$('#update-pairing').on('click', e => {
|
||||
let form = $('#pairing-form')[0];
|
||||
let game = {
|
||||
id: form.val('id'),
|
||||
t: form.val('t'),
|
||||
w: form.val('w'),
|
||||
b: form.val('b'),
|
||||
h: form.val('h')
|
||||
}
|
||||
api.putJson(`tour/${tour_id}/pair/${activeRound}`, game)
|
||||
.then(game => {
|
||||
if (game !== 'error') {
|
||||
document.location.reload();
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
|
@@ -122,7 +122,6 @@ onLoad(() => {
|
||||
$('#player-form')[0].dispatchEvent(new CustomEvent('submit', {cancelable: true}));
|
||||
});
|
||||
$('#player-form').on('submit', e => {
|
||||
("submitting!!")
|
||||
e.preventDefault();
|
||||
let form = $('#player-form')[0];
|
||||
let player = {
|
||||
|
@@ -9,9 +9,9 @@ function setResult(id, result) {
|
||||
let dispResult = result;
|
||||
switch (result) {
|
||||
case '?': break;
|
||||
case 'w': white.addClass('winner'); black.addClass('looser'); dispResult = 'w+'; break;
|
||||
case 'b': black.addClass('winner'); white.addClass('looser'); dispResult = 'b+'; break;
|
||||
case '=': break;
|
||||
case 'w': white.addClass('winner'); black.addClass('looser'); dispResult = '1-0'; break;
|
||||
case 'b': black.addClass('winner'); white.addClass('looser'); dispResult = '0-1'; break;
|
||||
case '=': dispResult = '½-½'; break;
|
||||
case 'X': break;
|
||||
case '#': white.addClass('winner'); black.addClass('winner'); dispResult = '1-1'; break;
|
||||
case '0': white.addClass('looser'); black.addClass('looser'); dispResult = '0-0'; break;
|
||||
|
@@ -52,11 +52,11 @@
|
||||
#set($white = $pmap[$game.w])
|
||||
#set($black = $pmap[$game.b])
|
||||
<div class="listitem game" data-id="$game.id">
|
||||
<div class="table">#$game.t</div>
|
||||
<div class="white">#if($white)$white.name $white.firstname#{else}BIP#end</div>
|
||||
<div class="table" data-value="$game.t">#$game.t</div>
|
||||
<div class="white" data-id="$game.w">#if($white)$white.name $white.firstname#{else}BIP#end</div>
|
||||
<div class="levels">#if($white)#rank($white.rank)#end / #if($black)#rank($black.rank)#end</div>
|
||||
<div class="black">#if($black)$black.name $black.firstname#{else}BIP#end</div>
|
||||
<div class="handicap">#if($game.h)h$game.h#{else} #end</div>
|
||||
<div class="black" data-id="$game.b">#if($black)$black.name $black.firstname#{else}BIP#end</div>
|
||||
<div class="handicap" data-value="$game.h">#if($game.h)h$game.h#{else} #end</div>
|
||||
</div>
|
||||
#end
|
||||
</div>
|
||||
@@ -64,3 +64,52 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="edit-pairing" class="popup">
|
||||
<div class="popup-body">
|
||||
<form id="pairing-form" class="ui form edit">
|
||||
<input type="hidden" name="id"/>
|
||||
<div class="popup-content">
|
||||
<div class="inline fields">
|
||||
<div class="field">
|
||||
<label>Tbl</label>
|
||||
<span class="nobreak">#<input name="t" type="number"/></span>
|
||||
</div>
|
||||
<div class="field">
|
||||
<label>White</label>
|
||||
<input type="hidden" name="w"/>
|
||||
<div id="edit-pairing-white"></div>
|
||||
</div>
|
||||
<div class="field">
|
||||
<button id="pairing-exchange" type="button" class="ui icon button">
|
||||
<i class="fa fa-exchange"></i>
|
||||
</button>
|
||||
</div>
|
||||
<div class="field">
|
||||
<label>Black</label>
|
||||
<input type="hidden" name="b"/>
|
||||
<div id="edit-pairing-black"></div>
|
||||
</div>
|
||||
<div class="field">
|
||||
<label>Hd</label>
|
||||
<select name="h">
|
||||
#foreach($h in [0..9])
|
||||
<option value="$h">$h</option>
|
||||
#end
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="popup-footer">
|
||||
<button id="cancel-pairing" type="button" class="ui gray right labeled icon floating close button">
|
||||
<i class="times icon"></i>
|
||||
Cancel
|
||||
</button>
|
||||
<button id="update-pairing" type="button" class="ui green right labeled icon floating button">
|
||||
<i class="check icon"></i>
|
||||
Update
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
Reference in New Issue
Block a user