signalk-race-control 0.1.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -7,6 +7,21 @@ and a live projected finishing order — during and after the race.
7
7
  - **Named, plannable races** — create races ahead of time, optionally with a
8
8
  scheduled start; switch between past and upcoming races from a dropdown to
9
9
  review results later. Nothing gets overwritten by starting the next race.
10
+ - **Overnight / multi-day races** — most races are same-day, so this is off by
11
+ default; a normal finish-time entry (like `21:14:07`) already rolls over to the
12
+ next calendar day on its own if it's earlier than the start, so an ordinary race
13
+ finishing just after midnight needs nothing special. Check **Overnight / multi-day
14
+ race** when creating one instead (fixed for that race, not changeable afterward)
15
+ only once a single automatic day-rollover isn't enough — a multi-day distance
16
+ race, say — and finish/start times are then entered with a full date, not just a
17
+ time-of-day. Elapsed/corrected time already display past 24 hours either way (e.g.
18
+ `30:00:00`).
19
+ - **Individual start times** — override the race's single start time for one boat at
20
+ a time (in its own **Start time** column, right next to Finish time): for a
21
+ staggered/pursuit start, or to correct a boat that didn't actually get away with
22
+ the fleet. Left blank, a boat just uses the race's own start time as before.
23
+ Starting or resetting the race clears every boat's override along with its finish
24
+ time, ready for a clean re-run.
10
25
  - **Add/remove boats explicitly** — type a name (autocompletes against the VET
11
26
  register, the cross-race boat registry, and any live AIS/self vessel — matching
12
27
  anywhere in the name, not just the start) and click **Add Boat**. Boats aren't
@@ -38,6 +53,23 @@ and a live projected finishing order — during and after the race.
38
53
  from a live AIS/self vessel with a matching name), it's remembered in a small
39
54
  cross-race registry: add a boat with the same name in a later race and its MMSI
40
55
  fills in on its own.
56
+ - **Import a whole fleet from Manage2Sail** — off by default (`raceImportEnabled` in
57
+ the plugin's settings, alongside `vetEnabled`); once turned on, an **Import boats
58
+ from Manage2Sail** section lets you paste a Manage2Sail event URL, pick one or more
59
+ of its classes, and add every entry in them as a boat in the current race. Since a
60
+ class's published handicap number isn't always a directly-usable Time-on-Time
61
+ factor — Yardstick numbers, for instance, run the opposite direction (lower number
62
+ = faster boat) and need `TCF = 100 / number` (or `1000 /` for the RYA scale) rather
63
+ than being used as-is — the plugin converts it automatically once it recognizes the
64
+ system. If a class's numbers don't clearly match a known system's scale, you're
65
+ asked to pick which one applies (e.g. Yardstick vs. Portsmouth Yardstick) before
66
+ anything is imported for it; anything else unrecognized (ORC, IRC, ...) is used
67
+ as-is, same as before. Re-importing updates TCF on boats it already added (matched
68
+ by name) instead of duplicating them. Not every entry has a named boat — where
69
+ Manage2Sail has no boat name, the sail number is used as the identifier instead of
70
+ falling back to the skipper's name, and every imported boat's sail number is also
71
+ set in its own **Sail #** column (editable directly, like MMSI) whether or not it
72
+ ended up as the name.
41
73
  - **Editable finish times** — click **Now** to record a finish as it happens, type a
42
74
  specific `HH:MM:SS` into the finish-time field to correct a mistimed click, or
43
75
  **Clear** to undo. Handles races that cross midnight.
@@ -70,11 +102,26 @@ and a live projected finishing order — during and after the race.
70
102
  countdown to the moment self would tie them on corrected time if that boat has
71
103
  already finished (going negative, in red, once self can no longer catch up even by
72
104
  finishing instantly), or the current corrected-time gap if both are still racing or
73
- both have finished.
105
+ both have finished. With no boat marked self, the column instead compares everyone
106
+ against the current **leader** (tagged accordingly), so it's never just blank.
74
107
  - **Export to Excel** — a genuine `.xlsx` snapshot of the current standings (same
75
- ranking, same rows as the on-screen table: rank, boat, MMSI, TCF, elapsed,
76
- corrected, finish time, status), with the finish-time column rendered in your
77
- browser's own timezone rather than the server's.
108
+ ranking, same rows as the on-screen table: rank, boat, sail number, MMSI, TCF,
109
+ start time, elapsed, corrected, finish time, status), with the time columns
110
+ rendered in your browser's own timezone rather than the server's (and with the
111
+ date included, for a multi-day race).
112
+ - **Download Offline Timer** — a single self-contained `.html` file, seeded with the
113
+ current race's boats, TCF, and multi-day setting, that runs the core of race timing
114
+ (start/stop/resume/reset, add/remove boats, edit TCF, individual start times,
115
+ record finishes, DNF, self-comparison) with no server and no internet connection at
116
+ all — including its own editable **Race start** field (Now/Clear, right under the
117
+ Start/Stop/Resume/Reset buttons) for backdating or correcting the race's start time
118
+ directly, without needing to click Start Race and lose already-recorded progress —
119
+ a backup for keeping a race running if
120
+ this plugin's server becomes unreachable mid-event. It saves everything to that
121
+ browser's own local storage, so closing and reopening the same downloaded file picks
122
+ up right where you left off. AIS boat names/positions, VET-tall lookup, and the
123
+ course/chart all need the live server and aren't included; TCF is entered by hand
124
+ instead. Also has its own "Download results as CSV" button.
78
125
 
79
126
  ## Install
80
127
 
@@ -93,8 +140,11 @@ Then restart the SignalK server, enable "Race Control" under
93
140
 
94
141
  ## Using it
95
142
 
96
- 1. Click **+ New Race**, give it a name (e.g. "Onsdagsseilas 3"). It becomes the
97
- active race, shared across every open browser tab/device.
143
+ 1. Click **+ New Race**, give it a name (e.g. "Onsdagsseilas 3"), and check
144
+ **Overnight / multi-day race** only if a single automatic day-rollover on finish
145
+ times won't be enough (can't be changed after creating the race) — leave it
146
+ unchecked for the usual same-day race, even one that finishes after midnight. It
147
+ becomes the active race, shared across every open browser tab/device.
98
148
  2. Add boats by name. Each gets a default TCF of 1.0 — edit it directly, or use the
99
149
  VET-alternatives dropdown once a matching register entry is found. Set an MMSI per
100
150
  boat if you want its AIS position tracked for the chart/estimate.
@@ -102,8 +152,15 @@ Then restart the SignalK server, enable "Race Control" under
102
152
  order — reorder with ↑/↓), and finish line, then **Save Course**.
103
153
  4. Either click **Start Race** now, or set a date/time and click **Schedule Start** —
104
154
  the race starts itself automatically at that moment (even across a server restart).
105
- 5. As boats finish, click **Now** to stamp the current time, or type the exact
106
- `HH:MM:SS` into the finish-time field. **Clear** undoes a finish.
155
+ Clicked it a little late? Fix the recorded moment directly in the **Race start**
156
+ field next to the clock (Now/Clear) unlike Reset, it never touches any boat's
157
+ finish time, DNF, or individual start override. If a particular boat actually
158
+ started at a different moment (a staggered/pursuit start, or a correction), set
159
+ its own time in the **Start time** column instead of leaving it to follow the
160
+ race's start.
161
+ 5. As boats finish, click **Now** to stamp the current time, or type the exact time
162
+ (plus date, for a multi-day race) into the finish-time field. **Clear** undoes a
163
+ finish.
107
164
  6. **Stop** calls the race off now (freezes the clock, DNFs whoever hasn't finished);
108
165
  **Schedule Call-off** does the same at a future time instead. **Resume** discards
109
166
  a stop and un-DNFs whoever it DNF'd. **Reset** (click once to arm, again to
@@ -112,7 +169,9 @@ Then restart the SignalK server, enable "Race Control" under
112
169
  7. Click a boat's ☆ to mark it **self** and see the **vs Self** column fill in for
113
170
  every other boat.
114
171
  8. **Export to Excel** downloads the current standings as a `.xlsx` file at any time
115
- — before, during, or after the race.
172
+ — before, during, or after the race. **Download Offline Timer** grabs a standalone
173
+ backup copy of the race instead — worth doing before the start if you want a safety
174
+ net in case the server drops out mid-race.
116
175
  9. Switch races anytime via the dropdown at the top to review an earlier race's
117
176
  results, or plan the next one. **Delete Race** (arm-then-confirm) removes one.
118
177