diff --git a/view-webapp/src/main/kotlin/org/jeudego/pairgoth/view/PairgothTool.kt b/view-webapp/src/main/kotlin/org/jeudego/pairgoth/view/PairgothTool.kt index 39c426d..18ebe20 100644 --- a/view-webapp/src/main/kotlin/org/jeudego/pairgoth/view/PairgothTool.kt +++ b/view-webapp/src/main/kotlin/org/jeudego/pairgoth/view/PairgothTool.kt @@ -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 diff --git a/view-webapp/src/main/sass/main.scss b/view-webapp/src/main/sass/main.scss index 7859971..53b3511 100644 --- a/view-webapp/src/main/sass/main.scss +++ b/view-webapp/src/main/sass/main.scss @@ -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; } } diff --git a/view-webapp/src/main/sass/tour.scss b/view-webapp/src/main/sass/tour.scss index 590ba9c..7d7d6d6 100644 --- a/view-webapp/src/main/sass/tour.scss +++ b/view-webapp/src/main/sass/tour.scss @@ -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 { diff --git a/view-webapp/src/main/webapp/WEB-INF/translations/fr b/view-webapp/src/main/webapp/WEB-INF/translations/fr index bef15cd..5802fc6 100644 --- a/view-webapp/src/main/webapp/WEB-INF/translations/fr +++ b/view-webapp/src/main/webapp/WEB-INF/translations/fr @@ -146,3 +146,4 @@ to à unpairable players joueurs non disponibles version 0.1 supports the version 0.1 supporte le système d’appariement white vs. black blanc vs. Noir +confirmed. confirmé(s). \ No newline at end of file diff --git a/view-webapp/src/main/webapp/js/main.js b/view-webapp/src/main/webapp/js/main.js index 8a17e8c..d0881b7 100644 --- a/view-webapp/src/main/webapp/js/main.js +++ b/view-webapp/src/main/webapp/js/main.js @@ -161,6 +161,7 @@ function modal(id) { function close_modal() { $('body').removeClass('dimmed'); $(`.popup`).removeClass('shown'); + store('addingPlayers', false); } function downloadFile(blob, filename) { diff --git a/view-webapp/src/main/webapp/js/tour-registration.inc.js b/view-webapp/src/main/webapp/js/tour-registration.inc.js index f8eaa06..64394fd 100644 --- a/view-webapp/src/main/webapp/js/tour-registration.inc.js +++ b/view-webapp/src/main/webapp/js/tour-registration.inc.js @@ -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(); + } }); diff --git a/view-webapp/src/main/webapp/tour-registration.inc.html b/view-webapp/src/main/webapp/tour-registration.inc.html index e9c278a..067d86f 100644 --- a/view-webapp/src/main/webapp/tour-registration.inc.html +++ b/view-webapp/src/main/webapp/tour-registration.inc.html @@ -1,15 +1,18 @@ +#set($parts = $api.get("tour/${params.id}/part")) +#set($pmap = $utils.toMap($parts))
-
+
+
+ $parts.size() participants, $utils.countFinals($parts) confirmed. +
-#set($parts = $api.get("tour/${params.id}/part")) -#set($pmap = $utils.toMap($parts)) @@ -175,7 +178,7 @@
Reg