Skip to content

Commit

Permalink
Merge pull request #500 from frank-weinberg/feature/finalize-v5-beta
Browse files Browse the repository at this point in the history
Finalize v5 beta
  • Loading branch information
frank-weinberg authored Feb 12, 2022
2 parents b20fbfb + 29d4981 commit 2c1a39c
Show file tree
Hide file tree
Showing 192 changed files with 3,094 additions and 2,441 deletions.
5 changes: 2 additions & 3 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,9 @@ html/stream
html/images/teamlogo
html/images/sponsor_banner
html/images/fullscreen
!html/images/fullscreen/American Flag.jpg
!html/images/fullscreen/overlay.png
!html/images/fullscreen/test-image.png
html/videos/fullscreen
!html/videos/fullscreen/American Flag.webm
!html/videos/fullscreen/test-video.webm
html/game-data
html/custom
!html/custom/view/example.html
Expand Down
4 changes: 2 additions & 2 deletions COPYING
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
Copyright (C) 2008-2012 Mr Temper <MrTemper@CarolinaRollergirls.com>
Copyright (C) 2012-2021 The CRG developers
Copyright (C) 2012-2022 The CRG developers

This file is part of the Carolina Rollergirls (CRG) ScoreBoard.
This file is part of the CRG ScoreBoard.
The CRG ScoreBoard is licensed under either the GNU General Public
License version 3 (or later), or the Apache License 2.0, at your option.

Expand Down
4 changes: 2 additions & 2 deletions LICENSES
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
Copyright (C) 2008-2012 Mr Temper <MrTemper@CarolinaRollergirls.com>
Copyright (C) 2012-2021 The CRG developers
Copyright (C) 2012-2022 The CRG developers

This file is part of the Carolina Rollergirls (CRG) ScoreBoard.
This file is part of the CRG ScoreBoard.
The CRG ScoreBoard is licensed under either the GNU General Public
License version 3 (or later), or the Apache License 2.0, at your option.
See the file COPYING for details.
Expand Down
24 changes: 11 additions & 13 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
The Carolina Roller Derby Scoreboard is a browser-based scoreboard solution that also provides overlays for video production and the ability to track penalties.
The CRG ScoreBoard is a browser-based scoreboard solution that also provides overlays for video production and the ability to track full game data.

The topics on the [Scoreboard Wiki Main Page](https://github.com/rollerderby/scoreboard/wiki/) are the primary documentation for the scoreboard. In addition to the wiki topics, the [Derby Scoreboard Facebook group](https://www.facebook.com/groups/derbyscoreboard/) is very active and currently the best way to reach other users and developers.

Expand All @@ -10,29 +10,27 @@ These are instructions for getting the software installed and running on a stand

## Hardware Requirements

Most Apple or Windows computers that have been manufactured in the last ten years should be able to handle the scoreboard well on a standalone setup. In general, a machine with at least a dual-core 64-bit processor and 2 gigabytes of RAM should be sufficient. Using the scoreboard to provide video overlays or in a networked setup that includes a scoreboard assistant or penalty tracker typically requires more computing power.
Most Apple or Windows computers that have been manufactured in the last ten years should be able to handle the scoreboard well on a standalone setup. In general, a machine with at least a dual-core 64-bit processor and 2 gigabytes of RAM should be sufficient. Using the scoreboard to provide video overlays or in a networked setup that includes penalty or lineup tracking typically requires more computing power.

Chromebooks that have been modified to run Linux distributions have been used to host the scoreboard but hardware limitations (lack of a suitable display output or low-powered CPUs) may cause issues.

There are experimental versions of the scoreboard available that will run on Android devices. Contact the developers for more information.

## Software Requirements

The scoreboard should be unzipped into a folder on the local machine. The user running the software requires write access to this folder. Do not put the scoreboard in a folder that requires administrator privileges to write to unless you intend to run the software as an administrator.

### Web Browser

[Google Chrome](https://www.google.com/chrome/) and [Microsoft Edge]( https://www.microsoft.com/edge/) (as well as their open-source parent [Chromium](http://www.chromium.org/) are recommended for running the software. Some known issues may occur when using Mozilla Firefox or Apple Safari. Microsoft Internet Explorer is not recommended.
[Google Chrome](https://www.google.com/chrome/) and [Microsoft Edge](https://www.microsoft.com/edge/) (as well as their open-source parent [Chromium](http://www.chromium.org/) or other borwsers derived from it) are recommended for running the software. Some known issues may occur when using Mozilla Firefox or Apple Safari. Microsoft Internet Explorer is not recommended.

### Java

Java is required for providing a Java Runtime Environment (JRE) version 1.7.0 or newer. Installing the latest version of Oracle's Java is recommended.
Java is required for providing a Java Runtime Environment (JRE) version 1.8.0 or newer. Installing the latest version of Oracle's Java is recommended.

* Windows users can install the standard Java for Windows package that is available when clicking on Free Java Download from [Oracle’s Java site](https://java.com/).
- Windows users can install the standard Java for Windows package that is available when clicking on Free Java Download from [Oracle’s Java site](https://java.com/).

* Apple users must install the complete [Java Platform (JDK)](http://www.oracle.com/technetwork/java/javase/downloads/index.html), which includes the JRE, to run the scoreboard properly.
- Apple users must install the complete [Java Platform (JDK)](http://www.oracle.com/technetwork/java/javase/downloads/index.html), which includes the JRE, to run the scoreboard properly.

* Linux users may already have a JRE from the OpenJDK project installed, if not, OpenJDK can be obtained from [their repositories](http://openjdk.java.net/install/).
- Linux users may already have a JRE from the OpenJDK project installed, if not, OpenJDK can be obtained from [their repositories](http://openjdk.java.net/install/).

## Downloading the Scoreboard

Expand All @@ -44,11 +42,11 @@ Please note that an older version of the project is still hosted on SourceForge

Once Chrome and Java are installed, use your file manager to navigate to the scoreboard folder and run the scoreboard background script by double-clicking on it.

* Windows users: Run scoreboard-Windows.exe to start the script.
- Windows users: Run scoreboard-Windows.exe to start the script.

* Apple users: Run scoreboard.sh to start the script. (If clicking doesn't work, try pressing command+i (or right click on the file and select "Get info"). In the new info dialog in section "open with" select Terminal.app. (If it's not listed, choose other and navigate to /Applications/Utilities/Terminal.app.)
- Apple users: Run scoreboard.sh to start the script. (If clicking doesn't work, try pressing command+i (or right click on the file and select "Get info"). In the new info dialog in section "open with" select Terminal.app. (If it's not listed, choose other and navigate to /Applications/Utilities/Terminal.app.)

* Linux users: Run scoreboard.sh to start the script. If you are unable to start it, you may have to allow script files to be executable as programs.
- Linux users: Run scoreboard.sh to start the script. If you are unable to start it, you may have to allow script files to be executable as programs.

Once it starts successfully, the scoreboard script will open a new window and display a series of status messages. You must keep this script running in order for the scoreboard to function, so do not close the window. You may minimize the window without effect.

Expand All @@ -58,4 +56,4 @@ Assuming that your scoreboard computer is set up with a monitor/laptop screen as

When the control panel displays, it will ask you for an operator name. Enter your name and click Login. This operator name is used to store your personalized settings such as key controls.

Now you can go to the tab with the documentation and either go to the Quick Start Guide or dive in deep right away and proceed with the section on the Team/Time page.
Now you can go to the tab with the documentation and either go to the Quick Start Guide or dive in deep right away and proceed with the section on the Controls page.
4 changes: 2 additions & 2 deletions build.xml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<?xml version="1.0"?>

<project name="Carolina Rollergirls Scoreboard" default="test">
<project name="CRG ScoreBoard" default="test">
<property name="ant.build.javac.source" value="1.8"/>
<property name="ant.build.javac.target" value="1.8"/>

Expand Down Expand Up @@ -48,7 +48,7 @@

<!-- Show help (the different options for this build.xml) -->
<target name="help">
<echo message="Buildfile for Carolina Rollergirls Scoreboard"/>
<echo message="Buildfile for CRG ScoreBoard"/>
<echo message=""/>
<echo message="Targets:"/>
<echo message=""/>
Expand Down
Binary file removed html/Carolina.png
Binary file not shown.
2 changes: 1 addition & 1 deletion html/components/data-tab.js
Original file line number Diff line number Diff line change
Expand Up @@ -234,7 +234,7 @@ function createDataTab(tab) {
WS.Set('ScoreBoard.PreparedTeam(' + $(this).attr('id') + ')', null);
});
rulesets.find(rulesetsSelector).each(function () {
WS.Set('ScoreBoard.Rulsets.Ruleset(' + $(this).attr('id') + ')', null);
WS.Set('ScoreBoard.Rulesets.Ruleset(' + $(this).attr('id') + ')', null);
});
div.dialog('close');
},
Expand Down
13 changes: 10 additions & 3 deletions html/components/igrf-tab.css
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,18 @@

#Igrf .Hide { display: none; }

#Igrf tr.Name > td { background: #ccc; border-radius: 12px 12px 0px 0px; font-size: 200%; font-weight: bold; }
#Igrf tr.Name > td > button { font-size: 50%; margin-left: 5px; }
#Igrf tr.Name > td { background: #ccc; border-radius: 12px 12px 0px 0px; }
#Igrf tr.Name > td > span.Name { font-size: 200%; font-weight: bold; }
#Igrf tr.Name > td > button { margin-left: 5px; }
#Igrf .Variables { width: 100%; }
#Igrf .Variables td:first-of-type { text-align: right; }
#Igrf .Variables td { text-align: left; width: 50%; }
#Igrf tr.Files > td { background: #ddd; }
#Igrf tr.Files .ui-button { margin: 1px 5px; }

#Igrf .Expulsions th { font-size: 150%; }
#Igrf .Expulsions table { width: 100%; }

#Igrf table.Officials { width: 100%; border-spacing: 0px; }
#Igrf table.Officials.Empty tr:last-of-type > th:first-of-type { border-radius: 0px 0px 0px 12px; }
#Igrf table.Officials.Empty tr:last-of-type > th:last-of-type { border-radius: 0px 0px 12px 0px; }
Expand All @@ -27,7 +34,7 @@
#Igrf table.Officials button.AddOfficial > span { padding-top: 0em; padding-bottom: 0em; }
#Igrf table.Officials button.RemoveOfficial > span { padding-top: 0em; padding-bottom: 0em; }
#Igrf table.Officials button.Swap { font-size: 80%; padding: 0.4em; }
#Igrf table.Officials button.Active { background: #3f3; }
#Igrf button.Active { background: #3f3; }

/* Official Remove Dialog */
div.OfficialRemoveDialog { text-align: center; }
Expand Down
69 changes: 64 additions & 5 deletions html/components/igrf-tab.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,13 +10,42 @@ function createIgrfTab(tab, gameId) {
.append($('<tr><td colspan="2"/><td/></tr>').addClass('Event'))
.append($('<tr><td colspan="3"/></tr>').addClass('Host'))
.append($('<tr><td/><td/><td/></tr>').addClass('Time'))
.append($('<tr><td colspan="3"><hr/></td/></tr>').addClass('Separator Abort'))
.append($('<tr><td colspan="3"><hr/></td></tr>').addClass('Separator Abort'))
.append($('<tr><td colspan="3"/></tr>').addClass('Abort Info'))
.append($('<tr><td colspan="3"><hr/></td/></tr>').addClass('Separator'))
.append($('<tr><td colspan="3"><hr/></td></tr>').addClass('Separator Expulsions Hide'))
.append($('<tr><td colspan="3"><table><tr><th colspan="3">Expulsions</th></tr></table></td></tr>').addClass('Expulsions Hide'))
.append($('<tr><td colspan="3"><hr/></td></tr>').addClass('Separator'))
.append($('<tr><td colspan="3"/></tr>').addClass('NSOs'))
.append($('<tr><td colspan="3"><hr/></td/></tr>').addClass('Separator'))
.append($('<tr><td colspan="3"><hr/></td></tr>').addClass('Separator'))
.append($('<tr><td colspan="3"/></tr>').addClass('Refs'));
var gameName = $('<span>').appendTo(table.find('tr.Name>td'));
var gameName = $('<span>')
.addClass('Name')
.appendTo(table.find('tr.Name>td'))
.on('click', function () {
gameName.addClass('Hide');
$('.NameFormat').removeClass('Hide');
nameFormat.focus();
});
$('<span>').addClass('NameFormat Hide').text('Name Format: ').appendTo(table.find('tr.Name>td'));
var nameFormat = WSControl(gamePrefix + '.NameFormat', $('<input type="text" size="30">'))
.addClass('NameFormat Hide')
.appendTo(table.find('tr.Name>td'))
.on('focusout', function () {
$('.NameFormat').addClass('Hide');
gameName.removeClass('Hide');
});
$('<table>')
.addClass('NameFormat Variables Hide')
.append($('<tr>').append($('<th colspan="2">').text('Supported Variables:')))
.append($('<tr>').append($('<td>').text('%g:')).append($('<td>').text('Game Number')))
.append($('<tr>').append($('<td>').text('%G:')).append($('<td>').text('"Game <Game Number>: " if game number is set, empty otherwise')))
.append($('<tr>').append($('<td>').text('%d:')).append($('<td>').text('Date of Game')))
.append($('<tr>').append($('<td>').text('%t:')).append($('<td>').text('Start Time')))
.append($('<tr>').append($('<td>').text('%1:')).append($('<td>').text('Team 1 Name')))
.append($('<tr>').append($('<td>').text('%2:')).append($('<td>').text('Team 2 Name')))
.append($('<tr>').append($('<td>').text('%s:')).append($('<td>').text('Game State')))
.append($('<tr>').append($('<td>').text('%S:')).append($('<td>').text('"<Team 1 Score> - <Team 2 Score>"')))
.appendTo(table.find('tr.Name>td'));
var endButton = $('<button>')
.text('End Game')
.on('click', function () {
Expand Down Expand Up @@ -103,6 +132,34 @@ function createIgrfTab(tab, gameId) {
}
);

function createExpulsionRow(id) {
$('.Expulsions').removeClass('Hide');
return $('<tr>')
.attr('penalty', id)
.append($('<td>').addClass('Info'))
.append($('<td>').append(WSControl(gamePrefix + '.Expulsion(' + id + ').ExtraInfo', $('<input type="text" size="50">'))))
.append(
$('<td>').append(
WSActiveButton(gamePrefix + '.Expulsion(' + id + ').Suspension', $('<button>').text('Suspension Recommended').button())
)
)
.appendTo('.Expulsions table');
}

WS.Register(gamePrefix + '.Expulsion(*).Info', function (k, v) {
var row = $('.Expulsions tr[penalty=' + k.Expulsion + ']');
if (v == null) {
row.remove();
if ($('.Expulsions tr').length === 1) {
$('.Expulsions').addClass('Hide');
}
return;
} else if (row.length === 0) {
row = createExpulsionRow(k.Expulsion);
}
row.children('.Info').text(v);
});

var createOfficialsTable = function (title) {
return $('<table>')
.addClass('Officials Empty')
Expand Down Expand Up @@ -238,7 +295,9 @@ function createIgrfTab(tab, gameId) {
otherRoleInput.show();
} else if (prefix != null) {
WS.Set(prefix + '.Role', $(this).val());
if (['Penalty Lineup Tracker', 'Scorekeeper', 'Lineup Tracker', 'Jammer Referee'].indexOf($(this).val()) > 0) {
if (
['Penalty Lineup Tracker', 'Scorekeeper', 'Lineup Tracker', 'Jammer Referee', 'Penalty Box Timer'].indexOf($(this).val()) > -1
) {
teamSelection.show();
}
}
Expand Down
16 changes: 8 additions & 8 deletions html/components/lt-sheet.js
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,6 @@ function prepareLtSheetTable(element, gameId, teamId, mode) {
return;
}
if (v == null && k == 'ScoreBoard.Game(' + gameId + ').Period(' + k.Period + ').Number') {
element.children('#head[nr=' + k.Period + ']').remove();
element.children('table.Period[nr=' + k.Period + ']').remove();
delete periodElements[k.Period];
delete jamElements[k.Period];
Expand Down Expand Up @@ -193,12 +192,15 @@ function prepareLtSheetTable(element, gameId, teamId, mode) {
table.appendTo(element).addClass('Forewards');
}
if (mode !== 'plt') {
$('<div class="LT">')
.html('<span class ="Team">' + teamName + '</span> P' + nr)
.prop('id', 'head')
.attr('nr', nr)
.insertBefore(table);
var header = $('<thead>').appendTo(table);
$('<tr>')
.append(
$('<td colspan="' + (mode === 'copyToStatsbook' ? '20' : '12') + '">')
.html('<span class ="Team">' + teamName + '</span> P' + nr)
.prop('id', 'head')
.attr('nr', nr)
)
.appendTo(header);
var row = $('<tr>').appendTo(header);
if (mode !== 'copyToStatsbook') {
$('<td>').addClass('JamNumber').text('Jam').appendTo(row);
Expand Down Expand Up @@ -617,5 +619,3 @@ function prepareFieldingEditor(elem, gameId, teamId) {
}
}
}

//# sourceURL=controls\lt\lt-sheet.js
2 changes: 1 addition & 1 deletion html/components/plt-input.css
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
table.PLT, .PLT table, .PLT tr, .PLT td, #PenaltyEditor table, #PenaltyEditor tr, #PenaltyEditor td, .GameAdvance {border-collapse: collapse;border-color:#777; }
body:not(.AllowSelect) .PLT {user-select: none;-webkit-user-select: none;-khtml-user-select: none;-moz-user-select: none;-o-user-select: none; }

.GameAdvance { background-color: #ff9010; width: 99%; text-align: center; padding: 0px, 5px; margin-bottom: 2px; font-size: 22pt; font-weight: bold; }
.GameAdvance { background-color: #ff9010; width: 99%; text-align: center; padding: 0px, 5px; margin-bottom: 2px; font-size: 200%; font-weight: bold; }

.GameAdvance.Hide { display: none; }

Expand Down
9 changes: 3 additions & 6 deletions html/components/plt-input.js
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ function preparePltInputTable(element, gameId, teamId, mode, statsbookPeriod, al
WS.Register(
[
'ScoreBoard.Game(' + gameId + ').Team(' + teamId + ').Name',
'ScoreBoard.Game(' + gameId + ').Team(' + teamId + ').UNiformColor',
'ScoreBoard.Game(' + gameId + ').Team(' + teamId + ').UniformColor',
'ScoreBoard.Game(' + gameId + ').Team(' + teamId + ').AlternateName(' + alternateName + ')',
],
teamNameUpdate
Expand Down Expand Up @@ -108,9 +108,7 @@ function preparePltInputTable(element, gameId, teamId, mode, statsbookPeriod, al
if (mode === 'plt' || mode === 'lt') {
prepareUseLTDialog();
WS.Register(['ScoreBoard.Settings.Setting(ScoreBoard.Penalties.UseLT)'], function (k, v) {
if (!isTrue(v)) {
useLTDialog.dialog('open');
}
useLTDialog.dialog(isTrue(v) ? 'close' : 'open');
});
} else {
WS.Register(['ScoreBoard.Settings.Setting(ScoreBoard.Penalties.UseLT)']);
Expand Down Expand Up @@ -722,7 +720,7 @@ function preparePenaltyEditor(gameId) {
var div = $('#PenaltyEditor .Codes .' + type + '[code="' + code + '"]');

if (verbalCues == null) {
div.detach();
div.remove();
return;
} else if (div.length > 0) {
div.find('.Description').empty();
Expand Down Expand Up @@ -1117,4 +1115,3 @@ function setupGameAdvance(element, gameId, auto) {
}
});
}
//# sourceURL=controls\plt\plt-input.js
2 changes: 0 additions & 2 deletions html/components/roster-sheet.js
Original file line number Diff line number Diff line change
Expand Up @@ -81,5 +81,3 @@ function prepareRosterSheetTable(element, gameId, teamId, mode, statsbookPeriod)
.text(String(WS.state[prefix + '.RosterNumber']) + (flags === 'ALT' || flags === 'BC' || flags === 'B' ? '*' : ''));
}
}

//# sourceURL=views\roster-sheet.js
6 changes: 6 additions & 0 deletions html/components/rulesets-tab.js
Original file line number Diff line number Diff line change
Expand Up @@ -230,6 +230,12 @@ function createRulesetsTab(tab, id, isGame) {
definitionsDiv.find('.EditNote').hide();
}
});

if (isGame) {
WS.Register('ScoreBoard.Game(' + id + ').State', function (k, v) {
tab.find('#select').prop('disabled', v !== 'Prepared');
});
}
}

function markEffectiveRulesets() {
Expand Down
Loading

0 comments on commit 2c1a39c

Please sign in to comment.