From 489ae9d698b452833277f2f93a22a5eea37b8b8b Mon Sep 17 00:00:00 2001 From: Frank Weinberg Date: Mon, 27 Dec 2021 16:14:50 +0100 Subject: [PATCH] Set OS Offset when applicable add rule to disable allow editing in frontend --- .jshintrc | 3 +- html/components/sheets-tab.js | 2 + html/components/sk-sheet.css | 11 ++-- html/components/sk-sheet.js | 50 ++++++++++++++++++- html/components/team-time-tab.js | 2 + .../scoreboard/core/game/JamImpl.java | 2 + .../scoreboard/core/game/ScoringTripImpl.java | 16 ++++++ .../scoreboard/core/interfaces/TeamJam.java | 2 +- .../core/prepared/RulesetsImpl.java | 5 +- .../scoreboard/rules/Rule.java | 6 ++- .../core/game/TeamJamImplTests.java | 23 +++++++++ 11 files changed, 112 insertions(+), 10 deletions(-) diff --git a/.jshintrc b/.jshintrc index 870fab79a..b41e31bc3 100644 --- a/.jshintrc +++ b/.jshintrc @@ -3,7 +3,7 @@ "unused": false, "laxbreak": true, "browser": true, - "devel": true, + "devel": false, "curly": true, "esversion": 5, "shadow": "outer", @@ -22,6 +22,7 @@ "prepareLtSheetTable": true, "preparePltInputTable": true, "prepareTripEditor": true, + "prepareOsOffsetEditor": true, "prepareAnnotationEditor": true, "preparePenaltyEditor": true, "prepareFieldingEditor": true, diff --git a/html/components/sheets-tab.js b/html/components/sheets-tab.js index 085e47fd7..95297947e 100644 --- a/html/components/sheets-tab.js +++ b/html/components/sheets-tab.js @@ -39,6 +39,7 @@ function createSheetsTab(tab, gameId) { var pt2 = $('
').addClass('T2 PTS Sheet Hide').appendTo(tab); $('
').attr('id', 'TripEditor').appendTo(tab); $('
').attr('id', 'skaterSelector').appendTo(tab); + $('
').attr('id', 'osOffsetEditor').appendTo(tab); $('
').attr('id', 'PenaltyEditor').appendTo(tab); var ae1 = $('
').attr('id', 'AnnotationEditor1').appendTo(tab); var ae2 = $('
').attr('id', 'AnnotationEditor2').appendTo(tab); @@ -52,6 +53,7 @@ function createSheetsTab(tab, gameId) { prepareLtSheetTable(lt2, gameId, '2', 'edit'); prepareTripEditor(); prepareSkaterSelector(gameId); + prepareOsOffsetEditor(); preparePenaltyEditor(gameId); prepareAnnotationEditor(ae1, gameId, '1'); prepareAnnotationEditor(ae2, gameId, '2'); diff --git a/html/components/sk-sheet.css b/html/components/sk-sheet.css index dc71ae06e..d400c6bbb 100644 --- a/html/components/sk-sheet.css +++ b/html/components/sk-sheet.css @@ -1,6 +1,6 @@ -.SK, #TripEditor {font-size: 11pt;font-family: -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif; } -table.SK, .SK .table, .SK tr, .SK td, #TripEditor table, #TripEditor tr, #TripEditor td {border-collapse: collapse;border-color:#777; } -body:not(.AllowSelect) .SK {user-select: none;-webkit-user-select: none;-khtml-user-select: none;-moz-user-select: none;-o-user-select: none; } +.SK, #TripEditor { font-size: 11pt; font-family: -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif; } +table.SK, .SK .table, .SK tr, .SK td, #TripEditor table, #TripEditor tr, #TripEditor td { border-collapse: collapse; border-color:#777; } +body:not(.AllowSelect) .SK { user-select: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -o-user-select: none; } .SK tr { color: #333; } .SK .Hide { display: none; } .SK.Period { width: 98%; table-layout:fixed; margin: 1%; } @@ -21,7 +21,7 @@ body:not(.AllowSelect) .SK {user-select: none;-webkit-user-select: none;-khtml-u .SK.Period #head { font-size: 200%; } .SK.Period .Trip, .Period .JamTotal, .Period .GameTotal { width: 9%; } .SK.Period .GameTotal, .SK.Period .JamTotal,.SK.Period .Lost, .SK.Period .Trip2 { border-left-width: 2px; } -.SK.Period .GameTotal { background-color: #d3ecb6; } +.SK.Period tr .GameTotal { background-color: #d3ecb6; } .SK.Period .hasAnnotation { position: relative; } .SK.Period .hasAnnotation::after { position: absolute; right: 2px; top: 2px; height: 5px; width: 5px; background-color: red; content: ""; } @@ -37,5 +37,8 @@ body:not(.AllowSelect) .SK {user-select: none;-webkit-user-select: none;-khtml-u #skaterSelector .Hide { display: none; } +#osOffsetEditor .Offset { width: 40px; } +#osOffsetEditor .Reason { margin: 0px 5px; } + .SK.Period .noTripAlert { position: relative; } .SK.Period .noTripAlert::after { position: absolute; right: 2px; top: 2px; height: 5px; width: 5px; background-color: red; content: ""; } diff --git a/html/components/sk-sheet.js b/html/components/sk-sheet.js index aa04fc913..e26ca8cf7 100644 --- a/html/components/sk-sheet.js +++ b/html/components/sk-sheet.js @@ -46,6 +46,8 @@ function prepareSkSheetTable(element, gameId, teamId, mode) { 'ScoreBoard.Game(' + gameId + ').Period(*).Jam(*).TeamJam(' + teamId + ').NoInitial', 'ScoreBoard.Game(' + gameId + ').Period(*).Jam(*).TeamJam(' + teamId + ').StarPass', 'ScoreBoard.Game(' + gameId + ').Period(*).Jam(*).TeamJam(' + teamId + ').TotalScore', + 'ScoreBoard.Game(' + gameId + ').Period(*).Jam(*).TeamJam(' + teamId + ').OsOffset', + 'ScoreBoard.Game(' + gameId + ').Period(*).Jam(*).TeamJam(' + teamId + ').OsOffsetReason', 'ScoreBoard.Game(' + gameId + ').Period(*).Jam(*).TeamJam(' + teamId + ').Fielding(Jammer).SkaterNumber', 'ScoreBoard.Game(' + gameId + ').Period(*).Jam(*).TeamJam(' + teamId + ').Fielding(Pivot).SkaterNumber', 'ScoreBoard.Game(' + gameId + ').Period(*).Jam(*).TeamJam(' + teamId + ').ScoringTrip(*).AfterSP', @@ -147,6 +149,15 @@ function prepareSkSheetTable(element, gameId, teamId, mode) { } break; + case 'OsOffset': + case 'OsOffsetReason': + if (mode !== 'copyToStatsbook') { + jamRow + .find('.JamTotal') + .toggleClass('hasAnnotation', WS.state[prefix + 'OsOffset'] !== 0 || WS.state[prefix + 'OsOffsetReason'] !== ''); + } + break; + case 'Calloff': case 'Injury': case 'StarPass': @@ -340,7 +351,12 @@ function prepareSkSheetTable(element, gameId, teamId, mode) { .appendTo(jamRow); }); if (mode !== 'copyToStatsbook') { - $('').addClass('JamTotal').appendTo(jamRow); + $('') + .addClass('JamTotal') + .on('click', function () { + showOsOffsetEditor(prefix); + }) + .appendTo(jamRow); $('').addClass('GameTotal').appendTo(jamRow); } @@ -615,4 +631,36 @@ function prepareSkaterSelector(gameId) { WS.Register(['ScoreBoard.Game(' + gameId + ').Period(*).Jam(*).TeamJam(*).Fielding(*).Skater']); } +function showOsOffsetEditor(prefix) { + 'use strict'; + $('#osOffsetEditor .Offset').val(WS.state[prefix + 'OsOffset']); + $('#osOffsetEditor .Reason').val(WS.state[prefix + 'OsOffsetReason']); + $('#osOffsetEditor').data('prefix', prefix).dialog('open'); +} + +function prepareOsOffsetEditor(gameId) { + 'use strict'; + + var osOffsetDialog = $('#osOffsetEditor').dialog({ + modal: true, + closeOnEscape: false, + title: 'OS Offset', + autoOpen: false, + width: '600px', + }); + + osOffsetDialog + .append($('').addClass('Offset')) + .append($('').addClass('Reason')) + .append( + $('