Import vendor version 1.20.0821

merge-requests/31/head
Paul Traina 2020-08-21 17:35:49 -07:00
rodzic 58cb0e42f1
commit 84993ea6ce
13 zmienionych plików z 482 dodań i 440 usunięć

Wyświetl plik

@ -181,7 +181,7 @@
<div id="filterDiv" class="roundBorder" style="position:relative;background-color:#000;border:1px solid cyan;margin:1px;margin-bottom:1px;" title="Map View Control Panel">
<table align="center">
<tr><td colspan=2>Map View</td></tr>
<tr><td colspan=2>Map View Filters</td></tr>
<tr title="Select Band&#10;(Auto tracks WSJT-X)"><td><font color="lightgreen">Band</font></td>
<td >
@ -224,6 +224,35 @@
<option value="Phone">Phone</option>
</select>
</td>
</tr>
<tr title="Select Propagation Mode">
<td><font color="yellow">Prop</font></td>
<td>
<select id="gtPropFilter" onkeypress="return false;" onchange="gtPropFilterChanged(this);">
<option value="mixed">Mixed</option>
<option value="xx" disabled>----------</option>
<option value="">Unknown</option>
<option value="xx" disabled>----------</option>
<option value="AS">Aircraft Scatter</option>
<option value="AUE">Aurora-E</option>
<option value="AUR">Aurora</option>
<option value="BS">Back Scatter</option>
<option value="ECH">EchoLink</option>
<option value="EME">EME</option>
<option value="ES">Sporadic E</option>
<option value="F2">F2 Reflection</option>
<option value="FAI">Field Aligned I</option>
<option value="INTERNET">Inet-assist</option>
<option value="ION">Ionoscatter</option>
<option value="IRL">IRLP</option>
<option value="MS">Meteor Scatter</option>
<option value="RPT">Repeater</option>
<option value="RS">Rain Scatter</option>
<option value="SAT">Satellite</option>
<option value="TEP">Trans-equatorial</option>
<option value="TR">Tropo-ducting</option>
</select>
</td>
</tr>
<tr>
<td><font color="cyan">Data</font></td>
@ -233,7 +262,7 @@
</table>
</div>
<div id="buttonsDiv" style="margin-left:0px;white-space:normal;">
<div id="callRosterButton" style="width:190px;color:yellow;font-weight:bold;border-width:2px;margin-bottom:0px" class="button" onclick="openCallRosterWindow();" title="Open Callalable Roster" >Callable Roster</div>
<div id="callRosterButton" style="color:#EEE;font-weight:bold;border-width:2px;margin:0px;padding-left:2px;padding-right:2px;text-align:center" class="button" onclick="openCallRosterWindow();" title="Open Call Roster" >Call Roster + Award Tracker</div>
<div id="modeModeDiv" onclick="toggleOffline()" class="iconButton" title="Toggle Online/Offline Mode"><img id="offlineImg" src="" class="buttonImg" /></div>
<div id="earthShadow" onclick="toggleEarth()" class="iconButton" title="Toggle Grayline"><img id="earthImg" src="" class="buttonImg" /></div>
<div id="pushPinButton" onclick="togglePushPinMode();" class="iconButton" title="Toggle Push-Pin Mode"><img id="pinImg" src="" class="buttonImg" /></div>

Wyświetl plik

@ -7511,7 +7511,7 @@
},
"ARRL": {
"compiledBy": "N0TTL",
"sponsor": "Amatuer Radio Relay League",
"sponsor": "Amateur Radio Relay League",
"website": "https://arrl.org/",
"qsl_req": "confirmed",
"mixed" : [ "160m", "80m", "40m", "30m", "20m", "17m", "15m", "12m", "10m", "6m", "2m", "1.5m", "70cm" , "23cm"],
@ -7654,7 +7654,7 @@
291
],
"endorse": [
"160m", "6m", "2m", "1.5m", "70cm", "23cm"
"Mixed"
],
"mode": [
"Mixed",

Wyświetl plik

@ -1,6 +1,6 @@
<html xmlns="http://www.w3.org/1999/xhtml" style="height:100%;width:100%">
<head >
<title>GridTracker : Callable Roster</title>
<title>GridTracker : Call Roster</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link rel="stylesheet" href="./lib/style.css">
<link id="roster" rel="stylesheet" href="./lib/style_roster.css">
@ -11,7 +11,7 @@
<body onload="init();" onresize="resize();">
<div id="main" style="margin:0px;top:0;left:0;width:100%;background-color:black;position:absolute;white-space:nowrap;overflow:auto;" >
<div id="mainCallRoster" >
<div id="rosterHead" style="width:100%">
<div id="rosterHead" style="width:100%;padding:0;margin:0">
<div id="viewDiv" class="controlItem" style="border:1px solid #006;vertical-align:middle;">
<table style="text-align:center;border-collapse:collapse;">
<tr><td colspan=3 >
@ -88,24 +88,24 @@
<tr style="padding:0;margin:0"><td colspan=2 style="padding:0;margin:0"><div id="scriptIcon" style="display:none;padding:0;margin:0"></div></td></tr>
</table>
</div>
<div id="awardWantedDiv" class="controlItem" style="border:none;overflow:auto;overflow-x:hidden;" ></div>
<div id="huntingMatrixDiv" class="controlItem" style="border:1px solid #066;margin:0:padding:0">
<table style="border-collapse:collapse;" >
<div id="awardWantedDiv" class="controlItem" style="border:none;overflow:auto;overflow-x:hidden" ></div>
<div id="huntingMatrixDiv" class="controlItem" style="border:1px solid #066">
<table style="border-collapse:collapse;" title="Wanted" >
<tr><th colspan=2>Wanted</th></tr>
<tr>
<td colspan=1 ><label><input type="checkbox" id="huntCallsign" onchange="wantedChanged(this);">Callsign</label></td><td colspan=1 ><label><input type="checkbox" id="huntCQz" onchange="wantedChanged(this);">CQ Zone</label></td>
<td colspan=1 ><label><input type="checkbox" id="huntCallsign" onchange="wantedChanged(this);">Callsign</label></td><td colspan=1 ><label><input type="checkbox" id="huntCQz" onchange="wantedChanged(this);">CQz</label></td>
</tr>
<tr>
<td colspan=1 ><input type="checkbox" id="huntGrid" onchange="wantedChanged(this);">Grid</td> <td colspan=1 ><input type="checkbox" id="huntITUz" onchange="wantedChanged(this);">ITU Zone</td>
<td colspan=1 ><input type="checkbox" id="huntGrid" onchange="wantedChanged(this);">Grid</td> <td colspan=1 ><input type="checkbox" id="huntITUz" onchange="wantedChanged(this);">ITUz</td>
</tr>
<tr>
<td colspan=1 ><input type="checkbox" id="huntDXCC" onchange="wantedChanged(this);">DXCC</td> <td colspan=1 ><input type="checkbox" id="huntState" onchange="wantedChanged(this);">US State</td>
<td colspan=1 ><input type="checkbox" id="huntDXCC" onchange="wantedChanged(this);">DXCC</td> <td colspan=1 ><input type="checkbox" id="huntState" onchange="wantedChanged(this);">State</td>
</tr>
<tr>
<td colspan=1 title='Stations calling *you*'><input type="checkbox" id="huntQRZ" onchange="wantedChanged(this);">QRZ</td><td colspan=1 ><input type="checkbox" id="huntCounty" onchange="wantedChanged(this);">US County</td>
<td colspan=1 title='Stations calling *you*'><input type="checkbox" id="huntQRZ" onchange="wantedChanged(this);">QRZ</td><td colspan=1 ><input type="checkbox" id="huntCounty" onchange="wantedChanged(this);">County</td>
</tr>
<tr>
<td colspan=1 ><input type="checkbox" id="huntPX" onchange="wantedChanged(this);">WPX</td><td colspan=1 ><input type="checkbox" id="huntCont" onchange="wantedChanged(this);">Continent</td>
<td colspan=1 ><input type="checkbox" id="huntPX" onchange="wantedChanged(this);">WPX</td><td colspan=1 ><input type="checkbox" id="huntCont" onchange="wantedChanged(this);">Cont</td>
</tr>
<tr>
<td colspan=1 title='Off-Air Message Service Users'><input type="checkbox" id="huntOAMS" onchange="wantedChanged(this);">OAMS</td>
@ -113,7 +113,7 @@
</table>
</div>
<div id="exceptionDiv" class="controlItem" style="border:1px solid #622;" >
<table style="border-collapse:collapse" title="Exceptions">
<table style="border-collapse:collapse;margin:0;padding:0;" title="Exceptions">
<tr>
<td>
<table style="border-collapse:collapse;" >
@ -121,7 +121,7 @@
<td colspan=2 ><label><input type="checkbox" id="cqOnly" onchange="valuesChanged();">CQ Only</label></td>
</tr>
<tr>
<td colspan=2 ><label><input type="checkbox" id="wantGrid" onchange="valuesChanged();">Require Grid</label></td>
<td colspan=2 ><label><input type="checkbox" id="wantGrid" onchange="valuesChanged();">Has Grid</label></td>
</tr>
<tr>
<td ><input type="checkbox" id="wantMinDB" onchange="valuesChanged();"/>Min dB</td>

Wyświetl plik

@ -1,71 +1,79 @@
<center>
<!--center>
<img style=" display: inline-block;" src="./img/award-medal.svg" width="75px">
<div style=" display: inline-block;font-size:36px;font-weight:bold;vertical-align:top;padding-top:15px;">
Award Tracker is here! &nbsp;
</div>
<img style=" display: inline-block;" src="./img/award-trophy.svg" width="75px">
</center>
</center-->
<pre>
[v1.20.0819] August 19th, 2020
[v1.20.0821] August 21st, 2020
Callable Roster:
GridTracker Main Window:
Update:
"Map View" renamed "Map View Filters"
"Callable Roster" renamed "Call Roster + Award Tracker"
Minimum width now 200 pixels (you can hide the map now)
New:
"Window Always On Top" option in Settings -> "Call Roster"
default disabled
"Prop" added to "Map View Filters"
Propagation Mode for filtering Logbook data *only*
Live data view is unaffected
Award Tracker!
Click on "Logbook" and select "Award Tracker"
Click "Add Awards" and select your sponsor and award name
Hover over the award indicator to get quick-stats
quick-stats is a place holder until I get the stats tab built
Award Tracking is 'best guess'. confirm with your award sponsor the
validity of your logbooks, GridTracker will try its best but could
be wrong
Award tally may be incorrect or incomplete, we are working on it
Not every award is available yet for tracking
Special thanks to NR0Q and KB2YSI for compiling awards definitions
At this time IOTA is processed but not a trackable field (yet)
US County (Wanted , Column, Right-Click Menu)
If US callsign database is enabled, best guess on stations county
Continent (Wanted , Column, Right-Click Menu)
Why did I not have this sooner?!
Changed "No Round-up and "Only Round-up" to "No" and "Only" Decode Message
If "No" or "Only" are checked, then the decoded message is checked
You can enter any thing you want (Grid, Callsign, CQ target)
The fields also support regex, but not required
Compact Mode - Great for Contesting!!!
Right-click menu, "Compact Mode" only shows callsigns
The order is the order of the last column sorted in "Roster Mode"
I *will* be improving this in future releases!
Text Sizing
Ctrl-0(zero) resets text size to default value
Update:
"Reference" renamed "Logbook" with "Logbook Reference" tooltip
Added Spot report to tooltip in Spot column
Logbook Reference:
Removed "FFMA" and "GMA" award layers and replaced with "US48" layer
To view your Fred Fish Memorial "FFMA" Award:
Select "US48" hotkey (8) then;
Set your Band filter to "6m"
To view your AMSAT GridMaster "GMA" Award:
Select "US48" hotkey (8) then;
Set your Band & Mode filters to "Mixed"
Set your Prop filter to "Satellite"
Call Roster:
Update:
Callable Roster renamed to "Call Roster"
Fixed:
Turkey Region 1 now in Europe
Award Tracking:
"Wanted" box remains as it's needed
Fix bad filtering flags
When enabling "Wanted" entities; right-click menu now tracks correctly
Issue with New/Unconfirmed callsigns not showing up at all
Return of the "strikeout" on callsigns that have been confirmed
by popular demand
Compact Mode:
Sorted by "Age" for now
(Will add a right-click menu to select sort type later on)
Added "DXCC" under "Callsign"
Tooltip(mouse-over) added with decode details
(Will add Worked/Confirmed status by band/mode later on)
PSK-Spots:
Fixed:
Memory issue when 1500 spots in 24 hours
Thanks to mister "I get out" NR0Q for finding this one
Logging:
Local Files(s)
Details:
Filename now has a tooltip with the full file path
Lookups:
Update:
Display previous worked and confirmed by band
Legend:
Update:
Button moved from map settings back to the button panel
Thank you for reading the entire update!
@ -79,10 +87,14 @@ Thank you for reading the entire update!
Mention "phone-sofa" in any forum I read and I'll send you a GridTracker token
to the address associated with your callsign lookup
Please don't mention this easter-egg to anyone. I want to see who reads the update
</pre>
To the 21 of you out of 650-ish, who downloaded and read the update in v1.20.0819:
I salute you! And I'll be shipping out tokens when I get a chance! Thank you!
</pre>
<center><img class="button" src="./img/tokens.jpg" width="400px"></center>

Wyświetl plik

@ -1,46 +1,23 @@
<?xml version="1.0" encoding="iso-8859-1"?>
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
<rect x="337.582" y="77.363" style="fill:#FEDC3D;" width="56.264" height="56.264"/>
<rect x="61.89" y="77.363" style="fill:#FFF1B1;" width="298.198" height="56.264"/>
<path style="fill:#4D4D4D;" d="M393.846,0h-33.758v88.615h33.758c9.284,0,16.879-7.596,16.879-16.879V16.879
C410.725,7.596,403.13,0,393.846,0z"/>
<path style="fill:#737373;" d="M376.967,16.879v54.857c0,9.284-7.596,16.879-16.879,16.879H61.89
c-9.284,0-16.879-7.596-16.879-16.879V16.879C45.011,7.596,52.607,0,61.89,0h298.198C369.371,0,376.967,7.596,376.967,16.879z"/>
<line style="fill:none;stroke:#4D4D4D;stroke-width:15;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;" x1="78.769" y1="33.758" x2="228.431" y2="33.758"/>
<circle style="fill:#4D4D4D;" cx="262.189" cy="33.758" r="8.44"/>
<rect x="337.582" y="199.736" style="fill:#FEDC3D;" width="56.264" height="56.264"/>
<rect x="61.89" y="199.736" style="fill:#FFF1B1;" width="298.198" height="56.264"/>
<path style="fill:#4D4D4D;" d="M393.846,122.374h-33.758v88.615h33.758c9.284,0,16.879-7.596,16.879-16.879v-54.857
C410.725,129.969,403.13,122.374,393.846,122.374z"/>
<path style="fill:#737373;" d="M376.967,139.253v54.857c0,9.284-7.596,16.879-16.879,16.879H61.89
c-9.284,0-16.879-7.596-16.879-16.879v-54.857c0-9.284,7.596-16.879,16.879-16.879h298.198
C369.371,122.374,376.967,129.969,376.967,139.253z"/>
<line style="fill:none;stroke:#4D4D4D;stroke-width:15;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;" x1="78.769" y1="156.132" x2="228.431" y2="156.132"/>
<circle style="fill:#4D4D4D;" cx="262.189" cy="156.132" r="8.44"/>
<rect x="337.582" y="322.11" style="fill:#FEDC3D;" width="56.264" height="56.264"/>
<rect x="61.89" y="322.11" style="fill:#FFF1B1;" width="298.198" height="56.264"/>
<path style="fill:#4D4D4D;" d="M393.846,244.747h-33.758v88.615h33.758c9.284,0,16.879-7.596,16.879-16.879v-54.857
C410.725,252.343,403.13,244.747,393.846,244.747z"/>
<path style="fill:#737373;" d="M376.967,261.626v54.857c0,9.284-7.596,16.879-16.879,16.879H61.89
c-9.284,0-16.879-7.596-16.879-16.879v-54.857c0-9.284,7.596-16.879,16.879-16.879h298.198
C369.371,244.747,376.967,252.343,376.967,261.626z"/>
<line style="fill:none;stroke:#4D4D4D;stroke-width:15;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;" x1="78.769" y1="278.505" x2="228.431" y2="278.505"/>
viewBox="0 0 483 483" style="enable-background:new 0 0 483 483;" xml:space="preserve">
<g>
<circle style="fill:#4D4D4D;" cx="262.189" cy="278.505" r="8.44"/>
<path style="fill:#4D4D4D;" d="M393.846,367.12h-33.758v88.615h33.758c9.284,0,16.879-7.596,16.879-16.879v-54.857
C410.725,374.715,403.13,367.12,393.846,367.12z"/>
<rect x="132.669" style="fill:#D8D7DA;" width="123.232" height="38"/>
<rect x="194.285" y="38" style="fill:#787680;" width="160" height="80"/>
<path style="fill:#ACABB1;" d="M194.285,288.025c22.186-43.793,67.643-73.884,120-73.884c4.602,0,9.15,0.234,13.635,0.687
L334.245,118h-139.96V288.025z"/>
<path style="fill:#ACABB1;" d="M194.285,443h24.42c-9.795-9.913-18.063-21.335-24.42-33.884V443z"/>
<path style="fill:#C6C5CA;" d="M179.856,348.57c0-21.767,5.206-42.339,14.429-60.545V118H54.325l21.23,325h118.73v-33.884
C185.062,390.909,179.856,370.337,179.856,348.57z"/>
<rect x="34.285" y="38" style="fill:#898890;" width="160" height="80"/>
<path style="fill:#FFDA44;" d="M314.285,376.855l-29.427,29.427l-28.284-28.284l29.427-29.427l-29.427-29.427l28.284-28.284
l29.427,29.427V214.141c-52.357,0-97.814,30.091-120,73.884c-9.223,18.207-14.429,38.778-14.429,60.545
c0,21.767,5.206,42.339,14.429,60.546c6.357,12.549,14.626,23.971,24.42,33.884c24.386,24.68,58.225,40,95.58,40V376.855z"/>
<path style="fill:#FFCD00;" d="M327.92,214.828c-4.484-0.454-9.033-0.687-13.635-0.687v106.145c0,0,29.427-29.427,29.427-29.427
l28.284,28.284l-29.427,29.427l29.427,29.427l-28.284,28.284l-29.427-29.427c0,0,0,106.145,0,106.145
c74.125,0,134.429-60.305,134.429-134.43C448.715,279.048,395.665,221.684,327.92,214.828z"/>
<polygon style="fill:#2488FF;" points="256.574,319.144 286.001,348.571 256.574,377.998 284.859,406.282 314.286,376.855
343.713,406.282 371.997,377.998 342.57,348.571 371.997,319.144 343.713,290.859 314.286,320.286 284.859,290.859 "/>
</g>
<path style="fill:#737373;" d="M376.967,383.999v54.857c0,9.284-7.596,16.879-16.879,16.879H61.89
c-9.284,0-16.879-7.596-16.879-16.879v-54.857c0-9.284,7.596-16.879,16.879-16.879h298.198
C369.371,367.12,376.967,374.715,376.967,383.999z"/>
<line style="fill:none;stroke:#4D4D4D;stroke-width:15;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;" x1="78.769" y1="400.879" x2="208.176" y2="400.879"/>
<path style="fill:#FE5F1A;" d="M354.462,286.945V512c62.149,0,112.527-50.379,112.527-112.527S416.611,286.945,354.462,286.945z"/>
<path style="fill:#FE834D;" d="M354.462,286.945c43.503,0,78.769,50.379,78.769,112.527S397.965,512,354.462,512
c-62.149,0-112.527-50.379-112.527-112.527S292.313,286.945,354.462,286.945z"/>
<path style="fill:#FFFFFF;" d="M406.181,427.322l-27.849-27.849l27.849-27.849c6.592-6.592,6.592-17.279,0-23.87
c-6.592-6.592-17.279-6.592-23.87,0l-27.849,27.849l-27.849-27.849c-6.592-6.592-17.279-6.592-23.87,0s-6.592,17.279,0,23.87
l27.849,27.849l-27.849,27.849c-6.592,6.592-6.592,17.279,0,23.87c6.592,6.592,17.279,6.592,23.87,0l27.849-27.849l27.849,27.849
c6.592,6.592,17.279,6.592,23.87,0C412.773,444.601,412.773,433.914,406.181,427.322z"/>
</svg>

Przed

Szerokość:  |  Wysokość:  |  Rozmiar: 4.0 KiB

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 1.9 KiB

Plik binarny nie jest wyświetlany.

Przed

Szerokość:  |  Wysokość:  |  Rozmiar: 819 B

Plik binarny nie jest wyświetlany.

Przed

Szerokość:  |  Wysokość:  |  Rozmiar: 839 B

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 815 B

Wyświetl plik

@ -1177,7 +1177,7 @@ function setAdifStartup(checkbox)
worker += "<table class='darkTable'>";
for ( var i in g_startupLogs )
{
worker += "<tr><td>"+ g_startupLogs[i].name + "</td><td onclick='removeStartupLog("+i+")'><img src='/img/trash_24x48.png' style='height:17px;margin:-1px;margin-bottom:-3px;padding:0px;cursor:pointer'></td></tr>";
worker += "<tr title='"+g_startupLogs[i].file+"'><td>"+ g_startupLogs[i].name + "</td><td onclick='removeStartupLog("+i+")'><img src='/img/trash_24x48.png' style='height:17px;margin:-1px;margin-bottom:-3px;padding:0px;cursor:pointer'></td></tr>";
}
worker += "</table>";
}

Wyświetl plik

@ -7,9 +7,11 @@ var validSettings =
"alertSettings",
"appSettings",
"audioSettings",
"awardTracker",
"bandActivity",
"blockedCQ",
"blockedCalls",
"blockedDxcc",
"blockedCQ",
"callsignLookups",
"classicAlerts",
"classicAlertsVersion",
@ -19,15 +21,12 @@ var validSettings =
"mapMemory",
"mapSettings",
"msgSettings",
"receptionReports",
"receptionSettings",
"rosterSettings",
"savedAlerts",
"speechSettings",
"startupLogs",
"trustedQslSettings",
"bandActivity",
"awardTracker"
];
var def_appSettings =
@ -46,6 +45,7 @@ var def_appSettings =
"gtBandFilter" : "auto",
"gtFlagImgSrc" : 0,
"gtModeFilter" : "auto",
"gtPropFilter" : "mixed",
"gtMsgEnable" : true,
"gtShareEnable" : true,
"heatEnabled" : 0,
@ -185,6 +185,7 @@ var def_msgSettings =
"msgAwayText" : "I am away from the shack at the moment"
};
var def_receptionSettings =
{
"lastSequenceNumber" : "0", // Treat as a string, it's friggin big
@ -240,11 +241,11 @@ var def_trustedQslSettings =
};
var def_callsignLookups =
{
"lotwUseEnable" : false,
"lotwWeeklyEnable" : false,
"lotwUseEnable" : true,
"lotwWeeklyEnable" : true,
"lotwLastUpdate" : 0,
"eqslUseEnable" : false,
"eqslWeeklyEnable" : false,
"eqslUseEnable" : true,
"eqslWeeklyEnable" : true,
"eqslLastUpdate" : 0,
"ulsUseEnable" : true,
"ulsWeeklyEnable" : true,

Wyświetl plik

@ -1,8 +1,8 @@
// GridTracker ©2020 N0TTL
var gtComment1 = "GridTracker is not open source, you may not change, modify or 'borrow' code for your needs that is redistributed in any form without first asking and receiving permission from N0TTL *and* N2VFL";
var gtComment2 = "Third party libraries and functions used are seperated to third-party.js or their respective lib .js files, the GT close-source directive does not apply to these files of course";
var gtVersion = 1200819;
var gtBeta = "r4";
var gtVersion = 1200821;
var gtBeta = "";
var g_startVersion = 0;
@ -95,8 +95,6 @@ function loadAllSettings()
g_callsignLookups = loadDefaultsAndMerge("callsignLookups", def_callsignLookups);
g_bandActivity = loadDefaultsAndMerge("bandActivity", def_bandActivity);
g_receptionReports = loadObjectIfExists("receptionReports");
g_startupLogs = loadArrayIfExists("startupLogs");
g_mapMemory = loadArrayIfExists("mapMemory");
@ -111,7 +109,7 @@ function loadAllSettings()
}
g_appSettings.mapMemory = JSON.stringify(g_mapMemory);
}
}
loadAllSettings();
@ -205,6 +203,8 @@ function saveAndCloseApp()
{
g_closing = true;
saveReceptionReports();
try
{
var data = {};
@ -218,6 +218,8 @@ function saveAndCloseApp()
data.version = gtVersion;
fs.writeFileSync(g_jsonDir + "internal_qso.json", JSON.stringify(data) );
}
catch (e)
{
@ -280,11 +282,12 @@ function clearAndReload() {
{
win.hide();
win.setMinimumSize(400, 600);
win.on('close', function () {
saveAndCloseApp();
});
win.show();
win.setMinimumSize(200, 600);
}
@ -431,8 +434,8 @@ var g_countyData = {};
var g_zipToCounty = {};
var g_stateToCounty = {};
var g_cntyToCounty = {};
var g_ffmaData = {};
var g_gmaaData = {};
var g_us48Data = {};
var g_startupFunctions = Array();
@ -531,19 +534,19 @@ g_trophyImageArray[3] = "./img/wac_trophy.png";
g_trophyImageArray[4] = "./img/was_trophy.png";
g_trophyImageArray[5] = "./img/dxcc_trophy.png";
g_trophyImageArray[6] = "./img/usc_trophy.png";
g_trophyImageArray[7] = "./img/ffma_trophy.png";
g_trophyImageArray[8] = "./img/gma_trophy.png";
g_trophyImageArray[7] = "./img/us48_trophy.png";
var g_viewInfo = {};
g_viewInfo[0] = ["g_qsoGrids","Grids",0,0,0];
g_viewInfo[1] = ["g_cqZones","CQ Zones",0,0,40];
g_viewInfo[2] = ["g_ituZones","ITU Zones",0,0,90];
g_viewInfo[3] = ["g_wacZones","Continents",0,0,7];
g_viewInfo[4] = ["g_wasZones","U.S. States",0,0,50];
g_viewInfo[4] = ["g_wasZones","US States",0,0,50];
g_viewInfo[5] = ["g_worldGeoData","DXCCs",0,0,340];
g_viewInfo[6] = ["g_countyData", "U.S. Counties",0,0,3220];
g_viewInfo[7] = ["g_ffmaData", "Fred Fish Memorial Award",0,0,488];
g_viewInfo[8] = ["g_gmaaData", " AMSAT GridMaster Award",0,0,488];
g_viewInfo[6] = ["g_countyData", "US Counties",0,0,3220];
g_viewInfo[7] = ["g_us48Data", "US Continental Grids",0,0,488];
var g_spotImageArray = Array();
g_spotImageArray[0] = "./img/psk_spots_off.png";
@ -580,6 +583,13 @@ function gtModeFilterChanged(selector) {
redrawSpots();
}
function gtPropFilterChanged(selector) {
g_appSettings.gtPropFilter = selector.value;
redrawGrids();
redrawSpots();
}
function setBandAndModeToAuto() {
g_appSettings.gtModeFilter = g_appSettings.gtBandFilter = gtBandFilter.value = gtModeFilter.value = "auto";
@ -1206,7 +1216,7 @@ function addDeDx(finalGrid, finalDXcall, cq, cqdx, locked, finalDEcall, finalRST
if (
(g_appSettings.gtBandFilter.length == 0 || (g_appSettings.gtBandFilter == 'auto' ? myBand ==
band : g_appSettings.gtBandFilter == band)) &&
(validateMapMode(mode))) {
(validateMapMode(mode)) && validatePropMode(finalPropMode)) {
details.rect = qthToQsoBox(finalGrid, hash, cq, cqdx, locked, finalDEcall, worked, didConfirm, band,
wspr);
}
@ -1618,9 +1628,9 @@ function createSpotTipTable(toolElement) {
var now = timeNowSec();
var myTooltip = document.getElementById("myTooltip");
var worker = "";
if (toolElement.spot in g_receptionReports) {
if (toolElement.spot in g_receptionReports.spots) {
g_layerSources["psk-hop"].clear();
var report = g_receptionReports[toolElement.spot];
var report = g_receptionReports.spots[toolElement.spot];
var LL = squareToLatLongAll(myRawGrid);
var Lat = LL.la2 - ((LL.la2 - LL.la1) / 2);
@ -2289,7 +2299,7 @@ function registerHotKeys() {
registerHotKey("KeyG", toggleGtMap);
registerHotKey("KeyH", toggleHeatSpots);
registerHotKey("KeyI", showRootInfoBox);
registerHotKey("KeyJ", setTrophyOverlay, 8);
//registerHotKey("KeyJ", setTrophyOverlay, 8);
registerHotKey("KeyK", makeScreenshots);
registerHotKey("KeyL", adifLoadDialog);
registerHotKey("KeyM", toggleAlertMute);
@ -2381,7 +2391,7 @@ var g_currentOverlay = 0;
function cycleTrophyOverlay() {
g_currentOverlay++;
g_currentOverlay %= 9;
g_currentOverlay %= 8;
setTrophyOverlay(g_currentOverlay);
}
@ -2593,7 +2603,7 @@ function setTrophyOverlay(which) {
}
}
if (which == 7) {
for (key in g_ffmaData)
for (key in g_us48Data)
{
var LL = squareToLatLong(key);
var bounds = [
@ -2604,48 +2614,22 @@ function setTrophyOverlay(which) {
var boxColor = "#FF000015"
var borderColor = "#0000FFFF";
var borderWeight = 0.1;
if (g_ffmaData[key].confirmed)
if (g_us48Data[key].confirmed)
{
boxColor = '#00FF0066';
borderWeight = 0.2;
}
else if (g_ffmaData[key].worked)
else if (g_us48Data[key].worked)
{
boxColor = '#FFFF0066';
borderWeight = 0.2;
}
g_currentShapes[key] = gridFeature(key, rectangle(bounds), "ffma", boxColor, borderColor, borderWeight);
g_currentShapes[key] = gridFeature(key, rectangle(bounds), "us48", boxColor, borderColor, borderWeight);
g_layerSources["award"].addFeature(g_currentShapes[key]);
}
}
if (which == 8) {
for (key in g_gmaaData)
{
var LL = squareToLatLong(key);
var bounds = [
[LL.lo1, LL.la1],
[LL.lo2, LL.la2]
];
var boxColor = "#FF000020"
var borderColor = "#0000FFFF";
var borderWeight = 0.1;
if (g_gmaaData[key].confirmed)
{
boxColor = '#00FF0066';
borderWeight = 0.2;
}
else if (g_gmaaData[key].worked)
{
boxColor = '#FFFF0066';
borderWeight = 0.2;
}
g_currentShapes[key] = gridFeature(key, rectangle(bounds), "gmaa", boxColor, borderColor, borderWeight);
g_layerSources["award"].addFeature(g_currentShapes[key]);
}
}
updateSpotView(true);
}
@ -2763,28 +2747,9 @@ function trophyOver(feature) {
infoObject = g_countyData[name];
name = infoObject.geo.properties.n + ", " + infoObject.geo.properties.st;
}
if (key == "ffma") {
trophy = "Fred Fish Memorial Award";
infoObject = g_ffmaData[feature.get('grid')];
name = feature.get('grid');
if (name in g_gridToState) {
zone = "";
for (var x = 0; x < g_gridToDXCC[name].length; x++) {
if (name in g_gridToState) {
for (var y = 0; y < g_gridToState[name].length; y++) {
if (g_gridToDXCC[name][x] == g_StateData[g_gridToState[name][y]].dxcc && g_gridToDXCC[name][x] == 291) {
zone += g_StateData[g_gridToState[name][y]].name + ", ";
}
}
}
}
zone = zone.substr(0,zone.length-2);7
}
}
if (key == "gmaa") {
trophy = "AMSAT GridMaster Award";
infoObject = g_gmaaData[feature.get('grid')];
if (key == "us48") {
trophy = "US Continental Grids";
infoObject = g_us48Data[feature.get('grid')];
name = feature.get('grid');
if (name in g_gridToState) {
@ -2802,6 +2767,7 @@ function trophyOver(feature) {
}
}
var worker = "<table>";
worker += "<tr><th colspan=2 >" + trophy + "</th></tr>";
@ -3031,7 +2997,7 @@ function mouseOverDataItem(mouseEvent, fromHover) {
var top = 0;
var noRoomLeft = false;
var noRoomRight = false;
if (typeof mouseEvent.spot != "undefined" && g_receptionReports[mouseEvent.spot].bearing > 180)
if (typeof mouseEvent.spot != "undefined" && g_receptionReports.spots[mouseEvent.spot].bearing > 180)
noRoomRight = true;
myTooltip.style.left = (getMouseX() + 15) + 'px';
top = parseInt((getMouseY() - 20 - ((callListLength / 2) * 25)));
@ -3061,7 +3027,7 @@ function mouseMoveDataItem(mouseEvent) {
var top = 0;
var noRoomLeft = false;
var noRoomRight = false;
if (typeof mouseEvent.spot != "undefined" && g_receptionReports[mouseEvent.spot].bearing > 180)
if (typeof mouseEvent.spot != "undefined" && g_receptionReports.spots[mouseEvent.spot].bearing > 180)
noRoomRight = true;
myTooltip.style.left = (getMouseX() + 15) + 'px';
top = Number(myTooltip.style.top);
@ -4010,22 +3976,15 @@ function clearQsoGrids() {
g_countyData[key].worked_modes = {};
g_countyData[key].confirmed_modes = {};
}
for (var key in g_ffmaData) {
g_ffmaData[key].worked = false;
g_ffmaData[key].confirmed = false;
g_ffmaData[key].worked_bands = {};
g_ffmaData[key].confirmed_bands = {};
g_ffmaData[key].worked_modes = {};
g_ffmaData[key].confirmed_modes = {};
}
for (var key in g_gmaaData) {
g_gmaaData[key].worked = false;
g_gmaaData[key].confirmed = false;
g_gmaaData[key].worked_bands = {};
g_gmaaData[key].confirmed_bands = {};
g_gmaaData[key].worked_modes = {};
g_gmaaData[key].confirmed_modes = {};
for (var key in g_us48Data) {
g_us48Data[key].worked = false;
g_us48Data[key].confirmed = false;
g_us48Data[key].worked_bands = {};
g_us48Data[key].confirmed_bands = {};
g_us48Data[key].worked_modes = {};
g_us48Data[key].confirmed_modes = {};
}
}
function clearCalls() {
@ -5179,10 +5138,10 @@ function initiateQso(thisCall) {
function spotLookupAndSetCall( spot )
{
var call = g_receptionReports[spot].call;
var grid = g_receptionReports[spot].grid;
var band = g_receptionReports[spot].band;
var mode = g_receptionReports[spot].mode;
var call = g_receptionReports.spots[spot].call;
var grid = g_receptionReports.spots[spot].grid;
var band = g_receptionReports.spots[spot].band;
var mode = g_receptionReports.spots[spot].mode;
for ( var instance in g_instances )
{
if ( g_instances[instance].valid && g_instances[instance].status.Band == band && g_instances[instance].status.MO == mode )
@ -8601,6 +8560,14 @@ function createStatTable(title, infoObject, awardName)
return wc1Table;
}
function validatePropMode( propMode )
{
if ( g_appSettings.gtPropFilter == "mixed" )
return true;
return (g_appSettings.gtPropFilter == propMode);
}
function validateMapMode( mode )
{
if ( g_appSettings.gtModeFilter.length == 0 )
@ -8649,118 +8616,10 @@ function redrawGrids() {
if ( didConfirm )
g_QSLcount++;
if (finalGrid.length > 0 )
{
var gridCheck = finalGrid.substr(0, 4);
if ( band == "6m" )
{
if ( gridCheck in g_ffmaData )
{
if ( g_ffmaData[gridCheck].worked == false )
{
g_ffmaData[gridCheck].worked = worked;
}
if (worked)
{
g_ffmaData[gridCheck].worked_bands["6m"] = ~~g_ffmaData[gridCheck].worked_bands["6m"] + 1;
g_ffmaData[gridCheck].worked_modes[mode] = ~~g_ffmaData[gridCheck].worked_modes[mode] + 1;
}
if ( g_ffmaData[gridCheck].confirmed == false )
{
g_ffmaData[gridCheck].confirmed = didConfirm;
}
if (didConfirm)
{
g_ffmaData[gridCheck].confirmed_bands["6m"] = ~~g_ffmaData[gridCheck].confirmed_bands["6m"] + 1;
g_ffmaData[gridCheck].confirmed_modes[mode] = ~~g_ffmaData[gridCheck].confirmed_modes[mode] + 1;
}
}
for ( var key in g_QSOhash[i].vucc_grids )
{
var grid = g_QSOhash[i].vucc_grids[key].substr(0, 4);
if ( grid in g_ffmaData )
{
if ( g_ffmaData[grid].worked == false )
{
g_ffmaData[grid].worked = worked;
}
if (worked)
{
g_ffmaData[grid].worked_bands["6m"] = ~~g_ffmaData[grid].worked_bands["6m"] + 1;
g_ffmaData[grid].worked_modes[mode] = ~~g_ffmaData[grid].worked_modes[mode] + 1;
}
if ( g_ffmaData[grid].confirmed == false )
{
g_ffmaData[grid].confirmed = didConfirm;
}
if (didConfirm)
{
g_ffmaData[grid].confirmed_bands["6m"] = ~~g_ffmaData[grid].confirmed_bands["6m"] + 1;
g_ffmaData[grid].confirmed_modes[mode] = ~~g_ffmaData[grid].confirmed_modes[mode] + 1;
}
}
}
}
if ( g_QSOhash[i].propMode == "SAT" )
{
if ( gridCheck in g_gmaaData )
{
if ( g_gmaaData[gridCheck].worked == false )
{
g_gmaaData[gridCheck].worked = worked;
}
if (worked)
{
g_gmaaData[gridCheck].worked_bands[band] = ~~g_gmaaData[gridCheck].worked_bands[band] + 1;
g_gmaaData[gridCheck].worked_modes[mode] = ~~g_gmaaData[gridCheck].worked_modes[mode] + 1;
}
if ( g_gmaaData[gridCheck].confirmed == false )
{
g_gmaaData[gridCheck].confirmed = didConfirm;
}
if (didConfirm)
{
g_gmaaData[gridCheck].confirmed_bands[band] = ~~g_gmaaData[gridCheck].confirmed_bands[band] + 1;
g_gmaaData[gridCheck].confirmed_modes[mode] = ~~g_gmaaData[gridCheck].confirmed_modes[mode] + 1;
}
}
for ( var key in g_QSOhash[i].vucc_grids )
{
var grid = g_QSOhash[i].vucc_grids[key].substr(0, 4);
if ( grid in g_gmaaData )
{
if ( g_gmaaData[grid].worked == false )
{
g_gmaaData[grid].worked = worked;
}
if (worked)
{
g_gmaaData[grid].worked_bands[band] = ~~g_gmaaData[grid].worked_bands[band] + 1;
g_gmaaData[grid].worked_modes[mode] = ~~g_gmaaData[grid].worked_modes[mode] + 1;
}
if ( g_gmaaData[grid].confirmed == false )
{
g_gmaaData[grid].confirmed = didConfirm;
}
if (didConfirm)
{
g_gmaaData[grid].confirmed_bands[band] = ~~g_gmaaData[grid].confirmed_bands[band] + 1;
g_gmaaData[grid].confirmed_modes[mode] = ~~g_gmaaData[grid].confirmed_modes[mode] + 1;
}
}
}
}
}
if ((g_appSettings.gtBandFilter.length == 0 || (g_appSettings.gtBandFilter == 'auto' ? myBand ==
g_QSOhash[i].band : g_appSettings.gtBandFilter == g_QSOhash[i].band)) &&
validateMapMode(g_QSOhash[i].mode) )
validateMapMode(g_QSOhash[i].mode) && validatePropMode(g_QSOhash[i].propMode))
{
@ -8871,6 +8730,29 @@ function redrawGrids() {
{
var gridCheck = finalGrid.substr(0, 4);
if ( finalDxcc == 291 && gridCheck in g_us48Data )
{
if ( g_us48Data[gridCheck].worked == false )
{
g_us48Data[gridCheck].worked = worked;
}
if (worked)
{
g_us48Data[gridCheck].worked_bands[band] = ~~g_us48Data[gridCheck].worked_bands[band] + 1;
g_us48Data[gridCheck].worked_modes[mode] = ~~g_us48Data[gridCheck].worked_modes[mode] + 1;
}
if ( g_us48Data[gridCheck].confirmed == false )
{
g_us48Data[gridCheck].confirmed = didConfirm;
}
if (didConfirm)
{
g_us48Data[gridCheck].confirmed_bands[band] = ~~g_us48Data[gridCheck].confirmed_bands[band] + 1;
g_us48Data[gridCheck].confirmed_modes[mode] = ~~g_us48Data[gridCheck].confirmed_modes[mode] + 1;
}
}
if (cqz.length > 0) {
if (g_cqZones[cqz].worked == false) {
@ -8942,6 +8824,36 @@ function redrawGrids() {
}
}
}
if ( finalDxcc == 291 )
{
for ( var key in g_QSOhash[i].vucc_grids )
{
var grid = g_QSOhash[i].vucc_grids[key].substr(0, 4);
if ( grid in g_us48Data )
{
if ( g_us48Data[grid].worked == false )
{
g_us48Data[grid].worked = worked;
}
if (worked)
{
g_us48Data[grid].worked_bands[band] = ~~g_us48Data[grid].worked_bands[band] + 1;
g_us48Data[grid].worked_modes[mode] = ~~g_us48Data[grid].worked_modes[mode] + 1;
}
if ( g_us48Data[grid].confirmed == false )
{
g_us48Data[grid].confirmed = didConfirm;
}
if (didConfirm)
{
g_us48Data[grid].confirmed_bands[band] = ~~g_us48Data[grid].confirmed_bands[band] + 1;
g_us48Data[grid].confirmed_modes[mode] = ~~g_us48Data[grid].confirmed_modes[mode] + 1;
}
}
}
}
}
}
@ -10034,23 +9946,14 @@ function loadMaidenHeadData() {
{
var sqr = g_worldGeoData[key].mh[mh];
g_ffmaData[sqr] = {};
g_ffmaData[sqr].name = sqr;
g_ffmaData[sqr].worked = false;
g_ffmaData[sqr].confirmed = false;
g_ffmaData[sqr].worked_bands = {};
g_ffmaData[sqr].confirmed_bands = {};
g_ffmaData[sqr].worked_modes = {};
g_ffmaData[sqr].confirmed_modes = {};
g_gmaaData[sqr] = {};
g_gmaaData[sqr].name = sqr;
g_gmaaData[sqr].worked = false;
g_gmaaData[sqr].confirmed = false;
g_gmaaData[sqr].worked_bands = {};
g_gmaaData[sqr].confirmed_bands = {};
g_gmaaData[sqr].worked_modes = {};
g_gmaaData[sqr].confirmed_modes = {};
g_us48Data[sqr] = {};
g_us48Data[sqr].name = sqr;
g_us48Data[sqr].worked = false;
g_us48Data[sqr].confirmed = false;
g_us48Data[sqr].worked_bands = {};
g_us48Data[sqr].confirmed_bands = {};
g_us48Data[sqr].worked_modes = {};
g_us48Data[sqr].confirmed_modes = {};
}
}
@ -10846,6 +10749,7 @@ function setPins() {
function loadViewSettings() {
gtBandFilter.value = g_appSettings.gtBandFilter;
gtModeFilter.value = g_appSettings.gtModeFilter;
gtPropFilter.value = g_appSettings.gtPropFilter;
distanceUnit.value = g_appSettings.distanceUnit;
N1MMIpInput.value = g_N1MMSettings.ip;
N1MMPortInput.value = g_N1MMSettings.port;
@ -11204,11 +11108,11 @@ function init()
documentsDiv.style.display = "none";
startupDiv.style.display = "block";
startupStatusDiv.innerHTML = "Starting...";
setTimeout(startupEngine, 50);
openStatsWindow(false);
openLookupWindow(false);
openBaWindow(false);
openCallRosterWindow(false);
setTimeout(startupEngine, 10);
}
}
@ -11218,7 +11122,7 @@ function startupEngine()
var funcInfo = g_startupTable.shift();
funcInfo[0]();
startupStatusDiv.innerHTML = funcInfo[1];
setTimeout(startupEngine, 50);
setTimeout(startupEngine, 10);
} else {
startupStatusDiv.innerHTML = "Completed";
startupAdifLoadCheck();
@ -12778,10 +12682,12 @@ function mediaCheck() {
delete data;
fs.unlinkSync(g_jsonDir + "internal_qso.json");
}
loadReceptionReports();
}
catch (e)
{
}
return true;
}
@ -12800,6 +12706,49 @@ function setRosterSpot( enabled )
g_rosterSpot = enabled;
}
function saveReceptionReports()
{
try {
fs.writeFileSync(g_jsonDir + "spots.json", JSON.stringify(g_receptionReports) );
}
catch (e)
{
}
}
function loadReceptionReports()
{
try {
var clear = true;
if (fs.existsSync(g_jsonDir + "spots.json") )
{
g_receptionReports = JSON.parse(fs.readFileSync(g_jsonDir + "spots.json"));
if ( timeNowSec() - g_receptionReports.lastDownloadTimeSec <= 86400 )
clear = false;
}
if ( clear == true )
{
g_receptionReports =
{
"lastDownloadTimeSec" : 0,
"lastSequenceNumber" : "0",
"spots" : {}
};
}
}
catch (e)
{
g_receptionReports =
{
"lastDownloadTimeSec" : 0,
"lastSequenceNumber" : "0",
"spots" : {}
};
}
}
function pskSpotCheck(timeSec) {
if (g_mapSettings.offlineMode == true)
return;
@ -12807,28 +12756,27 @@ function pskSpotCheck(timeSec) {
if (myDEcall == null || myDEcall == "NOCALL" || myDEcall == "")
return;
if (timeSec - g_receptionSettings.lastDownloadTimeSec > 120 && (g_spotsEnabled || g_rosterSpot) ) {
g_receptionSettings.lastDownloadTimeSec = timeSec;
if (timeSec - g_receptionReports.lastDownloadTimeSec > 120 && (g_spotsEnabled || g_rosterSpot) ) {
g_receptionReports.lastDownloadTimeSec = timeSec;
localStorage.receptionSettings = JSON.stringify(g_receptionSettings);
spotRefreshDiv.innerHTML = "..refreshing..";
getBuffer("https://retrieve.pskreporter.info/query?rronly=1&lastseqno=" + g_receptionSettings.lastSequenceNumber + "&senderCallsign=" + encodeURIComponent(myRawCall) + "&appcontact=" + encodeURIComponent("tag.loomis@gmail.com"),
getBuffer("https://retrieve.pskreporter.info/query?rronly=1&lastseqno=" + g_receptionReports.lastSequenceNumber + "&senderCallsign=" + encodeURIComponent(myRawCall) + "&appcontact=" + encodeURIComponent("tag.loomis@gmail.com"),
pskSpotResults, null, "https", 443);
} else if (g_spotsEnabled) {
spotRefreshDiv.innerHTML = "Refresh: " + Number(120 - (timeSec - g_receptionSettings.lastDownloadTimeSec)).toDHMS();
spotRefreshDiv.innerHTML = "Refresh: " + Number(120 - (timeSec - g_receptionReports.lastDownloadTimeSec)).toDHMS();
}
}
function pskSpotResults(buffer, flag) {
var shouldSave = false;
var oParser = new DOMParser();
var oDOM = oParser.parseFromString(buffer, "text/xml");
var result = "";
if (oDOM != null) {
var json = XML2jsobj(oDOM.documentElement);
if (typeof json.lastSequenceNumber != "undefined") {
g_receptionSettings.lastSequenceNumber = json.lastSequenceNumber.value;
g_receptionReports.lastSequenceNumber = json.lastSequenceNumber.value;
if (typeof json.receptionReport != "undefined") {
for (var key in json.receptionReport) {
@ -12840,20 +12788,20 @@ function pskSpotResults(buffer, flag) {
var band = Number(parseInt(json.receptionReport[key].frequency) / 1000000).formatBand();
var hash = call + mode + band + grid.substr(0,4);
if (hash in g_receptionReports) {
report = g_receptionReports[hash];
if (hash in g_receptionReports.spots) {
report = g_receptionReports.spots[hash];
if (parseInt(json.receptionReport[key].flowStartSeconds) < report.when)
continue;
} else {
report = g_receptionReports[hash] = {};
report = g_receptionReports.spots[hash] = {};
report.call = call;
report.band = band;
report.grid = grid;
report.mode = mode;
}
if (typeof json.receptionReport[key].receiverDXCCCode != "undefined")
report.dxcc = callsignToDxcc(json.receptionReport[key].receiverDXCCCode);
if (typeof json.receptionReport[key].receiverCallsign != "undefined")
report.dxcc = callsignToDxcc(json.receptionReport[key].receiverCallsign);
else
report.dxcc = -1;
report.when = parseInt(json.receptionReport[key].flowStartSeconds);
@ -12867,7 +12815,7 @@ function pskSpotResults(buffer, flag) {
SNR = 0;
report.color = SNR;
shouldSave = true;
}
}
}
@ -12875,12 +12823,10 @@ function pskSpotResults(buffer, flag) {
}
}
g_receptionSettings.lastDownloadTimeSec = timeNowSec();
g_receptionReports.lastDownloadTimeSec = timeNowSec();
localStorage.receptionSettings = JSON.stringify(g_receptionSettings);
if (shouldSave) {
localStorage.receptionReports = JSON.stringify(g_receptionReports);
}
redrawSpots();
if ( g_rosterSpot )
goProcessRoster();
@ -12909,11 +12855,11 @@ function redrawSpots() {
g_layerSources["psk-heat"].addFeature(spot);
}
for (var key in g_receptionReports) {
report = g_receptionReports[key];
for (var key in g_receptionReports.spots) {
report = g_receptionReports.spots[key];
if (now - report.when > 86400) {
delete g_receptionReports[key];
delete g_receptionReports.spots[key];
shouldSave = true;
continue;
}
@ -12988,7 +12934,7 @@ function redrawSpots() {
}
}
if (shouldSave) {
localStorage.receptionReports = JSON.stringify(g_receptionReports);
saveReceptionReports();
}
spotCountDiv.innerHTML = "Spots: " + count;
}
@ -13187,9 +13133,9 @@ function setRosterTimeView() {
function getSpotTime( hash )
{
if (hash in g_receptionReports)
if (hash in g_receptionReports.spots)
{
return g_receptionReports[hash];
return g_receptionReports.spots[hash];
}
else
return null;

Wyświetl plik

@ -22,6 +22,7 @@ var g_menu = null;
var g_callMenu = null;
var g_ageMenu = null;
var g_callingMenu = null;
var g_compactMenu = null;
var g_targetHash = "";
var g_clearIgnores = null;
var g_clearIgnoresCall = null;
@ -434,7 +435,7 @@ function viewRoster()
if ( referenceNeed.value == 6 )
{
callMode = "all";
onlyHits = true;
onlyHits = false;
isAwardTracker = true;
g_rosterSettings.huntNeed = "confirmed";
}
@ -487,6 +488,7 @@ function viewRoster()
for ( callHash in callRoster )
{
var call = callRoster[callHash].DEcall;
callRoster[callHash].tx = true;
callRoster[callHash].callObj.shouldAlert = false;
callRoster[callHash].callObj.reason = Array();
@ -851,7 +853,7 @@ function viewRoster()
if ( g_awardTracker[award].enable )
{
tx = testAward(award, callRoster[callHash].callObj, baseHash );
if ( tx )
if ( tx )
break;
}
@ -873,6 +875,8 @@ function viewRoster()
var unconf = "background-clip:content-box;box-shadow: 0 0 8px 3px inset ";
for (var callHash in callRoster)
{
// Special case check for called station
if ( callRoster[callHash].callObj.qrz == true && callRoster[callHash].tx == false )
{
@ -927,6 +931,11 @@ function viewRoster()
didWork = true;
callConf = unconf + callsign + inversionAlpha + ";";
if ( testHash in g_confirmed.call )
{
callPointer = "text-decoration: line-through; ";
callConf = "";
}
}
@ -952,13 +961,13 @@ function viewRoster()
if ( g_rosterSettings.huntNeed == "worked" && didWork )
{
callRoster[testHash].callObj.reason.push("call");
callRoster[callHash].callObj.reason.push("call");
callConf = unconf + callsign + inversionAlpha + ";";
}
if ( didWork && (g_rosterSettings.huntNeed == "confirmed" && !(testHash in g_confirmed.call) ) )
{
shouldAlert = true;
callRoster[testHash].callObj.reason.push("call");
callRoster[callHash].callObj.reason.push("call");
callConf = unconf + callsign + inversionAlpha + ";";
}
else if ( didWork && (g_rosterSettings.huntNeed == "confirmed" && (testHash in g_confirmed.call) ) )
@ -1221,10 +1230,18 @@ function viewRoster()
}
}
newCallList.sort(r_sortFunction[g_rosterSettings.lastSortIndex]);
if ( g_rosterSettings.lastSortReverse == 1 )
if ( g_rosterSettings.compact == false )
{
newCallList.reverse();
newCallList.sort(r_sortFunction[g_rosterSettings.lastSortIndex]);
if ( g_rosterSettings.lastSortReverse == 1 )
{
newCallList.reverse();
}
}
else
{
// Age sort for now... make this happen Tag
newCallList.sort(r_sortFunction[6]).reverse();
}
@ -1331,7 +1348,7 @@ function viewRoster()
var ituzone = (grid in window.opener.g_gridToITUZone ? window.opener.g_gridToITUZone[grid].join(", ") : "-");
var thisCall = newCallList[x].DEcall;
var thisClass = "";
if ( thisCall.match("^[A-Z][0-9][A-Z](\/\w+)?$") )
newCallList[x].style.callsign = "class='oneByOne'";
if ( thisCall == window.opener.g_instances[newCallList[x].instance].status.DXcall )
@ -1353,7 +1370,7 @@ function viewRoster()
worker += "<tr id='" + thisCall + newCallList[x].band+newCallList[x].mode + "'>";
worker += "<td "+thisClass+" title='Callsign' align=left " +newCallList[x].style.callsign + " onClick='initiateQso(\"" +
worker += "<td name='Callsign' align=left " +newCallList[x].style.callsign + " onClick='initiateQso(\"" +
thisCall + newCallList[x].band+newCallList[x].mode + "\")'>" + thisCall.formatCallsign() + "</td>";
if ( showBands )
@ -1371,14 +1388,14 @@ function viewRoster()
worker += "<td "+newCallList[x].style.grid+" onClick='centerOn(\"" + grid + "\")' >" + grid + "</td>";
if ( g_rosterSettings.columns.Calling )
{
var lookString = (newCallList[x].CQ?"title='CQ'":"title='Calling'");
var lookString = (newCallList[x].CQ?"name='CQ'":"name='Calling'");
worker += "<td "+newCallList[x].style.calling+" "+lookString+">"+newCallList[x].DXcall.formatCallsign() + "</td>";
}
if ( g_rosterSettings.columns.Msg )
worker += "<td>"+newCallList[x].msg+ "</td>";
if ( g_rosterSettings.columns.DXCC )
worker += "<td title='DXCC ("+newCallList[x].dxcc+")' "+newCallList[x].style.dxcc+">" + window.opener.g_dxccToAltName[newCallList[x].dxcc] +
worker += "<td name='DXCC ("+newCallList[x].dxcc+")' "+newCallList[x].style.dxcc+">" + window.opener.g_dxccToAltName[newCallList[x].dxcc] +
" (" + window.opener.g_worldGeoData[window.opener.g_dxccToGeoData[newCallList[x].dxcc]].pp + ")</td>";
if ( g_rosterSettings.columns.Flag )
worker += "<td align='center' style='margin:0;padding:0'><img style='padding-top:3px' src='./img/flags/16/" + geo.flag + "'></td>";
@ -1462,9 +1479,13 @@ function viewRoster()
}
else
{
worker += "<div class='compact' id='" + thisCall + newCallList[x].band+newCallList[x].mode + "'>";
worker += "<div "+thisClass+" title='Callsign' " +newCallList[x].style.callsign + " onClick='initiateQso(\"" +
thisCall + newCallList[x].band+newCallList[x].mode + "\")'>" + thisCall.formatCallsign() + "</div></div>";
var tt = newCallList[x].RSTsent + "&#13256;, " + parseInt(newCallList[x].dt*100) +"ms, " + newCallList[x].delta + "hz" + (newCallList[x].grid.length? ", " + newCallList[x].grid:"") +", " + (timeNowSec() - newCallList[x].age).toDHMS();
worker += "<div class='compact' onClick='initiateQso(\"" + thisCall + newCallList[x].band+newCallList[x].mode + "\")' "
worker += "id='" + thisCall + newCallList[x].band+newCallList[x].mode + "' title='"+tt+"'>";
worker += "<div class='compactCallsign' name='Callsign' " +newCallList[x].style.callsign + " >"+ thisCall.formatCallsign() +"</div>";
worker += "<div class='compactDXCC' name='DXCC ("+newCallList[x].dxcc+")' "+newCallList[x].style.dxcc+">" + window.opener.g_dxccToAltName[newCallList[x].dxcc] + "</div>";
worker += "</div>";
}
if ( g_rosterSettings.realtime == false )
@ -1870,7 +1891,7 @@ function updateAwardList( target = null )
var allEndorse = false;
var tooltip = g_awards[award.sponsor].awards[award.name].tooltip+ " (" + g_awards[award.sponsor].sponsor + ")\n";
tooltip += toTitleCase(award.test.look) + " QSO\n";
tooltip += toTitleCase(award.test.qsl_req) + " QSO\n";
for ( var mode in award.comp.counts )
{
tooltip += mode + "\n";
@ -1910,7 +1931,7 @@ function updateAwardList( target = null )
if ( baseCount > 0 && endorseCount == endorseTotal )
allEndorse = true;
var cell = createCellHtml(row, "<p style='font-size:smaller;'>" + g_awards[award.sponsor].awards[award.name].tooltip +" - "+award.sponsor );
var cell = createCellHtml(row, "<p style='font-size:smaller;'>" + award.name +" - "+award.sponsor );
cell.style.textAlign = "left";
cell.style.color = "lightblue";
@ -2044,9 +2065,9 @@ function setVisual()
huntingTr.style.display = "none";
callsignsTr.style.display = "none";
huntingMatrixDiv.style.display = "none";
awardHunterTr.style.display = "";
awardWantedDiv.style.display = "";
huntingMatrixDiv.style.display = "";
updateAwardList();
}
else
@ -2199,6 +2220,12 @@ function wantedChanged(element)
if ( t in g_rosterSettings.columns )
{
g_rosterSettings.columns[t] = true;
for (var i = 0; i < g_menu.items.length; ++i) {
if ( typeof g_menu.items[i].checked != "undefined" && g_menu.items[i].label == t )
g_menu.items[i].checked = true;
}
}
}
@ -2643,6 +2670,8 @@ function init()
g_menu = new nw.Menu();
g_compactMenu = new nw.Menu();
// Bind a callback to item
var item = new nw.MenuItem({
type: "normal",
@ -2665,27 +2694,31 @@ function init()
}
});
g_menu.append(item);
g_compactMenu.append(item);
item = new nw.MenuItem({
type: "normal",
label: g_rosterSettings.compact? "Roster Mode":"Compact Mode",
label: "Compact Mode",
click: function() {
if ( this.label == "Compact Mode" )
{
this.label = "Roster Mode";
g_rosterSettings.compact = true;
}
else
{
this.label = "Compact Mode";
g_rosterSettings.compact = false;
}
localStorage.rosterSettings = JSON.stringify(g_rosterSettings);
resize();
}
});
g_menu.append(item);
item = new nw.MenuItem({
type: "normal",
label: "Roster Mode",
click: function() {
g_rosterSettings.compact = false;
localStorage.rosterSettings = JSON.stringify(g_rosterSettings);
resize();
}
});
g_compactMenu.append(item);
rosterHead.style.display = g_rosterSettings.controls?"block":"none";
@ -2756,6 +2789,7 @@ function init()
item = new nw.MenuItem({ type: 'separator' });
g_menu.append(item);
g_compactMenu.append(item);
item = new nw.MenuItem({
type: "checkbox",
@ -2808,6 +2842,7 @@ function init()
}
});
g_menu.append(g_clearIgnores);
g_compactMenu.append(g_clearIgnores);
g_clearIgnoresCall = new nw.MenuItem({
type: "normal",
@ -2861,6 +2896,7 @@ function init()
}
});
g_menu.append(g_clearCQIgnoreMainMenu);
g_compactMenu.append(g_clearCQIgnoreMainMenu);
g_clearCQIgnore = new nw.MenuItem({
type: "normal",
@ -2913,6 +2949,7 @@ function init()
}
});
g_menu.append(g_clearDxccIgnoreMainMenu);
g_compactMenu.append(g_clearDxccIgnoreMainMenu);
g_clearDxccIgnore = new nw.MenuItem({
type: "normal",
@ -2935,6 +2972,7 @@ function init()
}
});
g_menu.append(item);
g_compactMenu.append(item);
item = new nw.MenuItem({
@ -3006,35 +3044,60 @@ function init()
g_clearCQIgnore.label = "Clear Ignore";
g_clearCQIgnore.enabled = false;
}
if ( typeof ev.target != 'undefined' && typeof ev.target.title != 'undefined' && ev.target.title == "Callsign" )
{
g_targetHash = ev.target.parentNode.id;
g_callMenu.popup(ev.x, ev.y);
}
else if ( typeof ev.target != 'undefined' && typeof ev.target.title != 'undefined' && ev.target.title == "Calling" )
{
g_targetHash = ev.target.parentNode.id;
g_callingMenu.popup(ev.x, ev.y);
}
else if ( typeof ev.target != 'undefined' && typeof ev.target.title != 'undefined' && ev.target.title == "CQ" )
{
if ( callRoster[ev.target.parentNode.id].DXcall != "CQ" )
if ( typeof ev.target != 'undefined' )
{
var name = ev.target.getAttribute("name");
if ( name == "Callsign" )
{
g_targetCQ = ev.target.parentNode.id;
g_CQMenu.popup(ev.x, ev.y);
g_targetHash = ev.target.parentNode.id;
g_callMenu.popup(ev.x, ev.y);
}
else if ( name == "Calling" )
{
g_targetHash = ev.target.parentNode.id;
g_callingMenu.popup(ev.x, ev.y);
}
else if ( name == "CQ" )
{
if ( callRoster[ev.target.parentNode.id].DXcall != "CQ" )
{
g_targetCQ = ev.target.parentNode.id;
g_CQMenu.popup(ev.x, ev.y);
}
}
else if ( name && name.startsWith("DXCC") )
{
var dxcca = name.split("(");
var dxcc = parseInt(dxcca[1]);
g_targetDxcc = dxcc;
g_dxccMenu.popup(ev.x, ev.y);
}
else
{
if ( g_rosterSettings.compact == false )
{
g_menu.popup(ev.x, ev.y);
}
else
{
g_compactMenu.popup(ev.x, ev.y);
}
}
}
else if ( typeof ev.target != 'undefined' && typeof ev.target.title != 'undefined' && ev.target.title.startsWith("DXCC") )
{
var dxcca = ev.target.title.split("(");
var dxcc = parseInt(dxcca[1]);
g_targetDxcc = dxcc;
g_dxccMenu.popup(ev.x, ev.y);
}
else
{
g_menu.popup(ev.x, ev.y);
if ( g_rosterSettings.compact == false )
{
g_menu.popup(ev.x, ev.y);
}
else
{
g_compactMenu.popup(ev.x, ev.y);
}
}
return false;
});
@ -3103,37 +3166,31 @@ function getTypeFromMode(mode)
}
function testAward( awardName, obj, baseHash )
{
var rule = g_awardTracker[awardName].rule;
var test = g_awardTracker[awardName].test;
if ( obj.dxcc < 1 )
return false;
if ( test.dxcc && rule.dxcc.indexOf(obj.dxcc) == -1 )
{
if ( g_awardTracker[awardName].test.dxcc && g_awardTracker[awardName].rule.dxcc.indexOf(obj.dxcc) == -1 )
return false;
if ( test.mode && rule.mode.indexOf(obj.mode) == -1 )
if ( g_awardTracker[awardName].test.mode && g_awardTracker[awardName].rule.mode.indexOf(obj.mode) == -1 )
return false;
if ( test.band && rule.band.indexOf(obj.band) == -1 )
if ( g_awardTracker[awardName].test.band && g_awardTracker[awardName].rule.band.indexOf(obj.band) == -1 )
return false;
if ( test.DEcall && rule.call.indexOf(obj.DEcall) == -1 )
if ( g_awardTracker[awardName].test.DEcall && g_awardTracker[awardName].rule.call.indexOf(obj.DEcall) == -1 )
return false;
if ( test.cont && rule.cont.indexOf(obj.cont) == -1 )
if ( g_awardTracker[awardName].test.cont && g_awardTracker[awardName].rule.cont.indexOf(obj.cont) == -1 )
return false;
if ( test.prop && rule.propMode != obj.propMode )
if ( g_awardTracker[awardName].test.prop && g_awardTracker[awardName].rule.propMode != obj.propMode )
return false;
if ( test.sat && rule.satName.indexOf(obj.satName) == -1)
if ( g_awardTracker[awardName].test.sat && g_awardTracker[awardName].rule.satName.indexOf(obj.satName) == -1)
return false;
return g_awardTypes[rule.type].test(g_awardTracker[awardName], obj, baseHash);
return g_awardTypes[g_awardTracker[awardName].rule.type].test(g_awardTracker[awardName], obj, baseHash);
}
function processAward( awardName )
{
var award = g_awards[g_awardTracker[awardName].sponsor].awards[g_awardTracker[awardName].name];
@ -3159,7 +3216,9 @@ function processAward( awardName )
g_awards[g_awardTracker[awardName].sponsor].awards[g_awardTracker[awardName].name].rule.qsl_req == "confirmed" :
g_awards[g_awardTracker[awardName].sponsor].qsl_req == "confirmed");
test.look = ( ("qsl_req" in g_awards[g_awardTracker[awardName].sponsor].awards[g_awardTracker[awardName].name].rule)?
test.look = "confirmed";
test.qsl_req = ( ("qsl_req" in g_awards[g_awardTracker[awardName].sponsor].awards[g_awardTracker[awardName].name].rule)?
g_awards[g_awardTracker[awardName].sponsor].awards[g_awardTracker[awardName].name].rule.qsl_req :
g_awards[g_awardTracker[awardName].sponsor].qsl_req );

Wyświetl plik

@ -103,8 +103,11 @@ option:disabled
.controlItem
{
-webkit-appearance: none;
margin:2px;
padding:2px;
margin:0;
padding:0;
padding-top:1px;
margin-top:1px;
margin-bottom:1px;
border-width:1px;
border-color:#AAA;
border-style:inset;
@ -179,11 +182,11 @@ table.darkTable thead th:first-child {
}
.dxCaller {
background-clip:content-box;box-shadow: 0 0 8px 3px inset lightgreen;background-color:#000;color:#FF0;
background-clip:content-box;box-shadow: 0 0 4px 4px inset #0F0;background-color:#000;color:#FF0;
}
.dxCalling {
background-clip:content-box;box-shadow: 0 0 8px 3px inset #F00;background-color:#000;color:#FF0;
background-clip:content-box;box-shadow: 0 0 4px 4px inset #F00;background-color:#000;color:#FF0;
}
@ -192,16 +195,17 @@ table.darkTable thead th:first-child {
cursor:pointer;
margin:0px;
padding:0px;
margin-right:1px;
margin-bottom:1px;
border-width:1px;
margin-right:2px;
margin-bottom:2px;
border-width:2px;
border-color:#999;
border-style:outset;
min-width: 5.5em;
min-width: 9em;
min-height: 2em;
display:inline-block;
color:#EEE;
-webkit-transition: border-style;
-webkit-border-radius:4px;
}
.compact:active
@ -211,4 +215,18 @@ table.darkTable thead th:first-child {
.compact:hover {
border-color:#FFF;
}
.compactCallsign {
padding:3px;
overflow: hidden;
white-space: nowrap;
}
.compactDXCC {
padding:3px;
max-width: 9em;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}