Persistent dialog state and recap for registration, some fixes for printing pairing

This commit is contained in:
Claude Brisson
2024-01-21 16:37:19 +01:00
parent 8c719d2fc7
commit fdf39612ff
7 changed files with 75 additions and 24 deletions

View File

@@ -9,6 +9,8 @@ import com.republicate.kson.Json
class PairgothTool {
fun toMap(array: Json.Array) = array.map { ser -> ser as Json.Object }.associateBy { it.getLong("id")!! }
fun countFinals(array: Json.Array) = array.map { ser -> ser as Json.Object }.count { it.getBoolean("final") ?: false }
fun getCriteria() = mapOf(
"NONE" to "No tie break", // No ranking / tie-break

View File

@@ -210,6 +210,24 @@
text-align: center;
}
.ui.form .field :invalid {
color: #9f3a38;
background: #fff6f6;
background-image: initial;
background-position-x: initial;
background-position-y: initial;
background-size: initial;
background-repeat-x: initial;
background-repeat-y: initial;
background-attachment: initial;
background-origin: initial;
background-clip: initial;
}
.ui.striped.table>tbody>tr:nth-child(2n),.ui.striped.table>tr:nth-child(2n) {
background-color: rgba(0,0,50,.1)
}
.form-actions {
position: sticky;
bottom: 1em;
@@ -385,11 +403,11 @@
}
#title {
font-size: 1rem;
margin-top: 0;
font-size: 1rem !important;
margin-top: 0.1em !important;
}
#logo, #lang, .steps, #filter-box, #footer, #pairing-left, #pairing-buttons, button, #standings-params {
#logo, #lang, .steps, #filter-box, #footer, #pairing-left, #pairing-buttons, button, #standings-params, #logout {
display: none !important;
}
@@ -397,8 +415,16 @@
transform: scale(0.7);
}
#pairing-right {
max-width: unset !important;
}
#paired {
max-height: unset;
max-height: unset !important;
max-width: unset !important;
font-size: 1rem !important;
line-height: 1.1rem !important;
min-width: 60vw;
}
}

View File

@@ -54,6 +54,13 @@
/* registration section */
#list-header {
display: flex;
flex-flow: row wrap;
justify-content: space-between;
margin: 0 1em;
}
#players-list {
max-width: 95vw;
overflow-x: auto;
@@ -229,6 +236,9 @@
background-color: rgba(100,200,255,200);
cursor: grab;
}
&:not(.selected):nth-child(2n) {
background-color: rgba(0,0,50,.1)
}
}
}
#pairables {

View File

@@ -146,3 +146,4 @@ to à
unpairable players joueurs non disponibles
version 0.1 supports the version 0.1 supporte le système dappariement
white vs. black blanc vs. Noir
confirmed. confirmé(s).

View File

@@ -161,6 +161,7 @@ function modal(id) {
function close_modal() {
$('body').removeClass('dimmed');
$(`.popup`).removeClass('shown');
store('addingPlayers', false);
}
function downloadFile(blob, filename) {

View File

@@ -84,6 +84,26 @@ function fillPlayer(player) {
$('#register').focus();
}
function addPlayers() {
let form = $('#player-form')[0];
form.addClass('add');
// keep preliminary/final status
let status = form.val('final') || false;
form.reset();
// initial search checkboxes position
['countryFilter', 'aga', 'egf', 'ffg'].forEach(id => {
let value = store(id);
if (value !== null && typeof(value) !== 'undefined') {
$(`#${id}`)[0].checked = value;
}
});
form.val('final', status);
$('#player').removeClass('edit').addClass('create');
modal('player');
$('#needle').focus();
store('addingPlayers', true);
}
let tableSort;
onLoad(() => {
@@ -125,22 +145,7 @@ onLoad(() => {
});
$('#add').on('click', e => {
let form = $('#player-form')[0];
form.addClass('add');
// keep preliminary/final status
let status = form.val('final') || false;
form.reset();
// initial search checkboxes position
['countryFilter', 'aga', 'egf', 'ffg'].forEach(id => {
let value = store(id);
if (value !== null && typeof(value) !== 'undefined') {
$(`#${id}`)[0].checked = value;
}
});
form.val('final', status);
$('#player').removeClass('edit').addClass('create');
modal('player');
$('#needle').focus();
addPlayers();
});
$('#cancel-register').on('click', e => {
e.preventDefault();
@@ -309,4 +314,7 @@ onLoad(() => {
$('#filter')[0].value = '';
$('tbody > tr').removeClass('hidden');
});
if (store('addingPlayers')) {
addPlayers();
}
});

View File

@@ -1,15 +1,18 @@
#set($parts = $api.get("tour/${params.id}/part"))
#set($pmap = $utils.toMap($parts))
<div class="tab-content" id="registration-tab">
<div id="reg-view">
<div>
<div id="list-header">
<div id="filter-box" class="ui icon input">
<input type="text" id="filter" placeholder="Search..."/>
<i class="circular times link icon"></i>
</div>
<div>
$parts.size() participants, $utils.countFinals($parts) confirmed.
</div>
</div>
<div id="players-list" class="roundbox">
#set($parts = $api.get("tour/${params.id}/part"))
#set($pmap = $utils.toMap($parts))
<table id="players" class="ui celled selectable striped table">
<thead>
<th>Reg</th>
@@ -175,7 +178,7 @@
<button id="cancel-register" type="button" class="ui gray right labeled icon floating close button">
<i class="times icon"></i>
<span class="edition">Close</span>
<span class="creation">Cancel</span>
<span class="creation">Close</span>
</button>
<button id="unregister" type="button" class="ui red right labeled icon floating button">
<i class="trash icon"></i>