kopia lustrzana https://gitlab.com/gridtracker.org/gridtracker
Merge branch 'remove-strikes-fix-chat' into 'release_february_23'
Remove strikes See merge request gridtracker.org/gridtracker!266 If this is changing anything in the UI or operational behavior, please prepare to update the wiki!merge-requests/237/merge
commit
3e26708e90
|
@ -13,7 +13,7 @@ module.exports = {
|
|||
SharedArrayBuffer: "readonly"
|
||||
},
|
||||
parserOptions: {
|
||||
ecmaVersion: 2018
|
||||
ecmaVersion: 2021
|
||||
},
|
||||
rules: {
|
||||
/* See https://eslint.org/docs/rules/ */
|
||||
|
|
|
@ -1,3 +1,17 @@
|
|||
gridtracker (1.23.0131) unstable; urgency=low
|
||||
- Bugfix for Turkey zone 1 decodes
|
||||
- Heatmap part of “Spots” button, Hotkey H removed
|
||||
- GT flags button follow “Map View Filters”
|
||||
- OAMS chat messages word wrap correctly
|
||||
- Mutli-Rig settings moved to Settings → General
|
||||
- Call Roster Settings moved to Call Roster, right-click in Roster or press Ctrl-S
|
||||
- Call Roster Compact Mode displays Band if multi-band
|
||||
- Call Roster Compact Mode entity selection in Call Roster Settings, default “DXCC”
|
||||
- Added Call Roster Window Filters in Call Roster Settings, Ctrl-R to reset filters
|
||||
- Call Roster POTA column can now sort
|
||||
- Added OAMS based band activity
|
||||
-- Tag Loomis <n0ttl@gridtracker.org> Tue, 31 Jan 2023 00:00:00 -0000
|
||||
|
||||
gridtracker (1.23.0110) unstable; urgency=high
|
||||
- Emergency LoTW fix
|
||||
-- Tag Loomis <n0ttl@gridtracker.org> Tue, 10 Jan 2023 00:00:00 -0000
|
||||
|
|
|
@ -40,6 +40,19 @@ DESTDIR=${RPM_BUILD_ROOT} make clean
|
|||
%license %{_docdir}/%{name}/
|
||||
|
||||
%changelog
|
||||
* Tue Jan 31 2023 Tag Loomis <n0ttl@gridtracker.org> - 1.23.0131-1
|
||||
- Removed lightning strike detection
|
||||
- Bugfix for Turkey zone 1 decodes
|
||||
- Heatmap part of “Spots” button, Hotkey H removed
|
||||
- GT flags button follow “Map View Filters”
|
||||
- OAMS chat messages word wrap correctly
|
||||
- Mutli-Rig settings moved to Settings → General
|
||||
- Call Roster Settings moved to Call Roster, right-click in Roster or press Ctrl-S
|
||||
- Call Roster Compact Mode displays Band if multi-band
|
||||
- Call Roster Compact Mode entity selection in Call Roster Settings, default “DXCC”
|
||||
- Added Call Roster Window Filters in Call Roster Settings, Ctrl-R to reset filters
|
||||
- Call Roster POTA column can now sort
|
||||
- Added OAMS based band activity
|
||||
* Tue Jan 10 2023 Tag Loomis <n0ttl@gridtracker.org> - 1.23.0110-1
|
||||
- Emergency LoTW fix
|
||||
* Mon Dec 26 2022 Tag Loomis <n0ttl@gridtracker.org> - 1.22.1226-1
|
||||
|
|
|
@ -42,6 +42,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
<script src="./lib/screens.js" type="text/javascript"></script>
|
||||
<script src="./lib/alerts.js" type="text/javascript"></script>
|
||||
<script src="./lib/third-party.js" type="text/javascript"></script>
|
||||
<script src="./lib/grid-math.js" type="text/javascript"></script>
|
||||
<script src="./lib/adif.js" type="text/javascript"></script>
|
||||
<script src="./lib/ol.js" type="text/javascript"></script>
|
||||
<script src="./lib/arc.js" type="text/javascript"></script>
|
||||
|
@ -95,7 +96,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
<input id="documentDirectoryInput" type="file" nwdirectory onchange="directoryInput(this)" />
|
||||
</div>
|
||||
</div>
|
||||
<div id="main" style="display: none">
|
||||
<div id="main" style="display: none;">
|
||||
<div id="mapDiv" class="mapDivEnd"></div>
|
||||
<div id="mouseTrackDiv" style="display: none" class="mouseTrack"></div>
|
||||
<div id="LegendDiv" style="display: none" class="legendDivEnd">
|
||||
|
@ -304,7 +305,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<div id="pskReporterBandActivityDiv" class="roundBorder" style="
|
||||
<div id="bandActivityDiv" class="roundBorder" style="
|
||||
position: relative;
|
||||
background-color: #000;
|
||||
border: 1px solid purple;
|
||||
|
@ -312,7 +313,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
height: 49px;
|
||||
margin-bottom: 1px;
|
||||
padding: 0px;
|
||||
" title="PSK-Reporter Band Activity" oncontextmenu="toggleBaWindow(event)">
|
||||
" title="Band Activity" oncontextmenu="toggleBaWindow(event)">
|
||||
<div data-i18n="sidebarNoDataYet" id="graphDiv" style="bottom: 0; position: absolute; width: 100%; padding: 0px; margin-bottom: 2px">
|
||||
...no data yet...
|
||||
</div>
|
||||
|
@ -528,15 +529,15 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
<div id="trophyButton" onclick="cycleTrophyOverlay();" class="iconButton" title="Cycle Award Overlays">
|
||||
<img id="trophyImg" src="./img/blank_trophy.png" class="buttonImg" />
|
||||
</div>
|
||||
<div id="buttonStrikesDiv" onclick="toggleStrikesValue()" class="iconButton" title="Toggle Lightning Strikes">
|
||||
<img id="strikesImg" src="./img/lw.png" class="buttonImg" />
|
||||
</div>
|
||||
<div id="lunaButton" onclick="toggleMoon();" class="iconButton" title="Toggle Moon">
|
||||
<img id="lunaButonImg" src="./img/luna.png" class="buttonImg" />
|
||||
</div>
|
||||
<div id="gridModeDiv" onclick="toggleGridMode()" class="iconButton" title="Toggle Maidenhead Width">
|
||||
<img id="modeImg" src="" class="buttonImg" />
|
||||
</div>
|
||||
<div id="alterMuteDiv" onclick="toggleAlertMute()" class="iconButton" title="Toggle Audio Mute">
|
||||
<img id="alertMuteImg" src="" class="buttonImg" />
|
||||
</div>
|
||||
<div id="settingsButton" onclick="showSettingsBox();" class="iconButton" title="Settings">
|
||||
<img src="./img/settings-button.png" class="buttonImg" />
|
||||
</div>
|
||||
|
@ -550,11 +551,17 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
<img style="-webkit-filter: brightness(50%); filter: brightness(50%)" src="./img/donate.png"
|
||||
class="buttonImg" />
|
||||
</div>
|
||||
<div id="alterMuteDiv" onclick="toggleAlertMute()" class="iconButton" title="Toggle Audio Mute">
|
||||
<img id="alertMuteImg" src="" class="buttonImg" />
|
||||
<div id="timezoneButton" onclick="toggleTimezones()" class="iconButton" title="Toggle Timezone Layer">
|
||||
<img id="timezoneImg" src="./img/timezone-button.png" class="buttonImg" />
|
||||
</div>
|
||||
<div id="buttonPSKSpotsBoxDiv" onClick="togglePskSpots();" class="iconButton" title="View Spot Reports">
|
||||
<img id="pskSpotsImg" src="./img/spots.png" class="buttonImg" />
|
||||
<div id="radarButton" onclick="toggleNexrad()" class="iconButton" title="Toggle US Nexrad">
|
||||
<img id="radarImg" src="./img/radar-button.png" class="buttonImg" />
|
||||
</div>
|
||||
<div id="gridOverlayButton" onclick="toggleAllGrids()" class="iconButton" title="Toggle All Grid Overlay">
|
||||
<img id="gridOverlayImg" src="./img/grid-overlay.png" class="buttonImg" />
|
||||
</div>
|
||||
<div id="buttonSpotsBoxDiv" onClick="cycleSpotsView();" class="iconButton" title="View Spot Reports">
|
||||
<img id="spotsButtonImg" src="./img/spots.png" class="buttonImg" />
|
||||
</div>
|
||||
<div id="buttonPsk24CheckBoxDiv" onclick="grabPsk24()" class="iconButton" title="Your PSK 24hour report">
|
||||
<img id="pskImg" src="./img/psk_24_32.png" class="buttonImg" />
|
||||
|
@ -577,14 +584,8 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
title="Reload Local ADIF Files">
|
||||
<img src="./img/log_local.png" class="buttonImg" />
|
||||
</div>
|
||||
<div id="timezoneButton" onclick="toggleTimezones()" class="iconButton" title="Toggle Timezone Layer">
|
||||
<img id="timezoneImg" src="./img/timezone-button.png" class="buttonImg" />
|
||||
</div>
|
||||
<div id="radarButton" onclick="toggleNexrad()" class="iconButton" title="Toggle US Nexrad">
|
||||
<img id="radarImg" src="./img/radar-button.png" class="buttonImg" />
|
||||
</div>
|
||||
<div id="gridOverlayButton" onclick="toggleAllGrids()" class="iconButton" title="Toggle All Grid Overlay">
|
||||
<img id="gridOverlayImg" src="./img/grid-overlay.png" class="buttonImg" />
|
||||
<div id="potaButton" onClick="togglePotaMap();" class="iconButton" title="Parks On The Air">
|
||||
<img id="potaImg" src="./img/pota.png" class="buttonImg" />
|
||||
</div>
|
||||
<div id="gtFlagButton" onclick="toggleGtMap();" class="iconButton" title="Toggle View GridTracker Users">
|
||||
<img id="gtFlagImg" src="" class="buttonImg" />
|
||||
|
@ -592,9 +593,6 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
<div id="msgButton" onclick="showMessaging();" class="iconButton" title="Messaging Window">
|
||||
<img id="msgImg" src="./img/gt_chat.png" class="buttonImg" />
|
||||
</div>
|
||||
<div id="potaButton" onClick="togglePotaMap();" class="iconButton" title="Parks On The Air">
|
||||
<img id="potaImg" src="./img/pota.png" class="buttonImg" />
|
||||
</div>
|
||||
</div>
|
||||
<div id="SpotsDiv"
|
||||
style="display: none; border: 1px solid yellow; margin: 1px; margin-bottom: 1px; margin-top: 2px"
|
||||
|
@ -803,8 +801,8 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
<td>0</td>
|
||||
<td align="left">Toggle US Nexrad Overlay</td>
|
||||
<td></td>
|
||||
<td>Y</td>
|
||||
<td align="left">Toggle Global Lightning</td>
|
||||
<td></td>
|
||||
<td align="left"></td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
|
@ -872,8 +870,8 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
<td>Shift-Key</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>H</td>
|
||||
<td align="left">Toggle RX Spots Heatmap</td>
|
||||
<td></td>
|
||||
<td align="left"></td>
|
||||
<td></td>
|
||||
<td>F8</td>
|
||||
<td align="left">Recall Map Position 4</td>
|
||||
|
@ -929,7 +927,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
</tr>
|
||||
<tr>
|
||||
<td>O</td>
|
||||
<td align="left">Toggle RX Spots</td>
|
||||
<td align="left">Cycle Spot View</td>
|
||||
<td></td>
|
||||
<td>F12</td>
|
||||
<td align="left">Toggle Sidebar Menu</td>
|
||||
|
@ -980,8 +978,6 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
onclick="openSettingsTab(event, 'logSettingsDiv')">Logging</button>
|
||||
<button data-i18n="settings.Alerts.label" class="settingsTablinks"
|
||||
onclick="openSettingsTab(event, 'alertsDiv')">Alerts</button>
|
||||
<button data-i18n="settings.CallRoster.label" class="settingsTablinks"
|
||||
onclick="openSettingsTab(event, 'callRosterDiv')">Call Roster</button>
|
||||
<button data-i18n="settings.OAMS.label" class="settingsTablinks"
|
||||
onclick="openSettingsTab(event, 'chatSettingsDiv')">OAMS</button>
|
||||
<button data-i18n="settings.Logbook.label" id="logbut" class="settingsTablinks"
|
||||
|
@ -1083,6 +1079,24 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
</table>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="mapItem" id="multiRigCRDiv" style="display:none;">
|
||||
<table align="center">
|
||||
<tr align="center">
|
||||
<td data-i18n="settings.callroster.MultiRig.label" align="center">On QSO Reply</td>
|
||||
</tr>
|
||||
<tr align="center">
|
||||
<td data-i18n="settings.callroster.MultiRig.SwitchView.label" align="center">Switch View To Transmitting
|
||||
Instance</td>
|
||||
</tr>
|
||||
<tr align="center">
|
||||
<td colspan="2">
|
||||
<input type="checkbox" id="focusRigValue" onchange="changeFocusRigValue(this);" />
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<table align="center">
|
||||
|
@ -1121,6 +1135,23 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
</table>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="mapItem" id="haltTXDiv" style="display:none;">
|
||||
<table align="center">
|
||||
<tr align="center">
|
||||
<td data-i18n="settings.callroster.MultiRig.label" align="center">On QSO Reply</td>
|
||||
</tr>
|
||||
<tr align="center">
|
||||
<td data-i18n="settings.callroster.MultiRig.HaltTx.label" align="center">Halt TX On All Other Instances</td>
|
||||
</tr>
|
||||
<tr align="center">
|
||||
<td colspan="2">
|
||||
<input type="checkbox" id="haltAllOnTxValue" onchange="changeHaltOntTxValue(this);" />
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<table align="center">
|
||||
|
@ -1499,24 +1530,6 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div class="mapItem">
|
||||
<table align="center">
|
||||
<tr>
|
||||
<td data-i18n="settings.audio.lighteningAlert.label" title="Lightning Strike Audio Alert">Lightning Strike
|
||||
Audio Alert</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<select id="strikesAlert" value="0" onchange="changeStrikesAlert();">
|
||||
<option data-i18n="settings.audio.lighteningAlert.none" value="0">None</option>
|
||||
<option data-i18n="settings.audio.lighteningAlert.short" value="1">Short</option>
|
||||
<option data-i18n="settings.audio.lighteningAlert.long" value="2">Long</option>
|
||||
<option data-i18n="settings.audio.lighteningAlert.voice" value="3">Voice</option>
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<br />
|
||||
<div class="mapItem" style="white-space: nowrap">
|
||||
<table align="center">
|
||||
|
@ -1996,7 +2009,6 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<br />
|
||||
<div class="mapItem">
|
||||
<table align="center">
|
||||
|
@ -2449,7 +2461,6 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
<td></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<h2 data-i18n="settings.logging.other.title">Other Services</h2>
|
||||
<table class="darkTable" align="center">
|
||||
<tr>
|
||||
|
@ -2475,136 +2486,6 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
</div>
|
||||
<div id="callRosterDiv" class="settingsTabcontent">
|
||||
<div class="mapItem">
|
||||
<table align="center">
|
||||
<tr align="center">
|
||||
<td data-i18n="settings.callroster.AlwaysOnTop.label" align="center">Window Always On Top</td>
|
||||
</tr>
|
||||
<tr align="center">
|
||||
<td colspan="2">
|
||||
<input type="checkbox" id="rosterAlwaysOnTop" onchange="changeRosterTop(this);" />
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div class="mapItem">
|
||||
<table align="center">
|
||||
<tr align="center">
|
||||
<td data-i18n="settings.callroster.MaxAge.label" align="center">Call Roster Max Age</td>
|
||||
</tr>
|
||||
<tr align="center">
|
||||
<td align="center" id="rosterTimeTd">2m 0s</td>
|
||||
</tr>
|
||||
<tr align="center">
|
||||
<td colspan="2">
|
||||
<input type="range" min="5" max="300" value="120" step="15" class="slider" id="rosterTime"
|
||||
oninput="changeRosterTime()" />
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div class="mapItem">
|
||||
<table align="center">
|
||||
<tr align="center">
|
||||
<td align="center">Clear Call Roster on Band change</td>
|
||||
</tr>
|
||||
<tr align="center">
|
||||
<td colspan="2">
|
||||
<input type="checkbox" id="clearRosterOnBandChange"
|
||||
onchange="clearRosterOnBandChangeValueChanged(this);" />
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<br />
|
||||
<div class="mapItem">
|
||||
<table align="center">
|
||||
<tr align="center">
|
||||
<td align="center">Call Roster Decode Delay On Focus</td>
|
||||
</tr>
|
||||
<td colspan="2">
|
||||
<input type="checkbox" id="rosterDelayOnFocus" onchange="rosterDelayOnFocusValueChanged(this);" />
|
||||
</td>
|
||||
<tr align="center">
|
||||
<td align="center" id="rosterDelayTimeTd">1500ms</td>
|
||||
</tr>
|
||||
<tr align="center">
|
||||
<td colspan="2">
|
||||
<input
|
||||
type="range"
|
||||
min="50"
|
||||
max="5000"
|
||||
value="1500"
|
||||
step="10"
|
||||
class="slider"
|
||||
id="rosterDelayTime"
|
||||
oninput="changeRosterDelayTime()"
|
||||
/>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div class="mapItem" id="haltTXDiv" style="display: none">
|
||||
<table align="center">
|
||||
<tr align="center">
|
||||
<td data-i18n="settings.callroster.MultiRig.label" align="center">On QSO Reply</td>
|
||||
</tr>
|
||||
<tr align="center">
|
||||
<td data-i18n="settings.callroster.MultiRig.HaltTx.label" align="center">Halt TX On All Other Instances</td>
|
||||
</tr>
|
||||
<tr align="center">
|
||||
<td colspan="2">
|
||||
<input type="checkbox" id="haltAllOnTxValue" onchange="changeHaltOntTxValue(this);" />
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div class="mapItem" id="multiRigCRDiv" style="display: none">
|
||||
<table align="center">
|
||||
<tr align="center">
|
||||
<td data-i18n="settings.callroster.MultiRig.label" align="center">On QSO Reply</td>
|
||||
</tr>
|
||||
<tr align="center">
|
||||
<td data-i18n="settings.callroster.MultiRig.SwitchView.label" align="center">Switch View To Transmitting
|
||||
Instance</td>
|
||||
</tr>
|
||||
<tr align="center">
|
||||
<td colspan="2">
|
||||
<input type="checkbox" id="focusRigValue" onchange="changeFocusRigValue(this);" />
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<br />
|
||||
<div class="mapItem">
|
||||
<table align="center" title="Alert when new 'Wanted Row(s)' appear in the Call Roster">
|
||||
<tr>
|
||||
<td data-i18n="settings.callroster.AudioAlert.label" colspan="2">Audio Alert On <b>New Wanted</b></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="2">
|
||||
<input type="checkbox" id="huntRoster" onchange="wantedChanged(this);" />
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<select id="huntRosterNotify" onchange="wantedChanged(this);">
|
||||
<option data-i18n="settings.callroster.AudioAlert.TextToSpeech" value="1">Text-to-Speech</option>
|
||||
<option data-i18n="settings.callroster.AudioAlert.MediaFile" value="0">Media File</option>
|
||||
</select>
|
||||
</td>
|
||||
<td>
|
||||
<input id="huntRosterNotifyWord" type="text" class="inputTextValue" size="14"
|
||||
onkeyup="if (event.keyCode === 13) { speakAlertString(this.value);}"
|
||||
oninput="ValidateText(this);wantedChanged(this);" />
|
||||
<select id="huntRosterNotifyMedia" style="display: block" onchange="wantedChanged(this);"></select>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
<div id="alertsDiv" class="settingsTabcontent">
|
||||
<div id="alertMatrixDiv" style="display: inline-block">
|
||||
|
@ -2781,6 +2662,36 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
oninput="ValidateText(this);wantedChanged(this);" />
|
||||
<select id="huntStatesNotifyMedia" style="display: block" onchange="wantedChanged(this);"></select>
|
||||
</td>
|
||||
<tr>
|
||||
<td colspan="5">
|
||||
<div class="mapItem">
|
||||
<table align="center" title="Alert when new 'Wanted Row(s)' appear in the Call Roster">
|
||||
<tr>
|
||||
<td data-i18n="settings.callroster.AudioAlert.label" colspan="2">Call Roster On <b>New Wanted</b></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="2">
|
||||
<input type="checkbox" id="huntRoster" onchange="wantedChanged(this);" />
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<select id="huntRosterNotify" onchange="wantedChanged(this);">
|
||||
<option data-i18n="settings.callroster.AudioAlert.TextToSpeech" value="1">Text-to-Speech</option>
|
||||
<option data-i18n="settings.callroster.AudioAlert.MediaFile" value="0">Media File</option>
|
||||
</select>
|
||||
</td>
|
||||
<td>
|
||||
<input id="huntRosterNotifyWord" type="text" class="inputTextValue" size="14"
|
||||
onkeyup="if (event.keyCode === 13) { speakAlertString(this.value);}"
|
||||
oninput="ValidateText(this);wantedChanged(this);" />
|
||||
<select id="huntRosterNotifyMedia" style="display: block" onchange="wantedChanged(this);"></select>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tr>
|
||||
</table>
|
||||
<table class="roundBorder" align="left"
|
||||
|
@ -2975,7 +2886,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div class="mapItem" id="GTspotDiv">
|
||||
<div class="mapItem">
|
||||
<table align="center">
|
||||
<tr>
|
||||
<td data-i18n="settings.OAMS.spotting.enable.label"
|
||||
|
@ -2990,6 +2901,35 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
</table>
|
||||
</div>
|
||||
<br />
|
||||
<div class="mapItem">
|
||||
<table align="center">
|
||||
<tr>
|
||||
<td data-i18n="settings.OAMS.BandActivity.enable.label"
|
||||
title="Receive Band Activity Reports through the OAMS network">Band Activity</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<input title="Enable / Disable Band Activity" type="checkbox" id="oamsBandActivity"
|
||||
onclick="setOamsBandActivity(this);" />
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<div class="mapItem" id="bandActivityNeighborDiv">
|
||||
<table align="center">
|
||||
<tr>
|
||||
<td data-i18n="settings.OAMS.BandActivity.neighbor.enable.label"
|
||||
title="Include your 8 neighboring grids in report">Neighboring Grids</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<input title="Enable / Disable Neighbor Grids" type="checkbox" id="oamsBandActivityNeighbors"
|
||||
onclick="setOamsBandActivityNeighbors(this);" />
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
<br />
|
||||
<div id="msgSettingsDiv" class="mapItem" style="padding: 5px">
|
||||
<div class="mapItem">
|
||||
<table align="center">
|
||||
|
|
|
@ -183,7 +183,7 @@
|
|||
"url": "/map/hamgames/{z}/{x}/{y}.png",
|
||||
"attributions": "Mapbox",
|
||||
"minZoom": 0,
|
||||
"maxZoom": 5,
|
||||
"maxZoom": 4,
|
||||
"offline": true
|
||||
}
|
||||
}
|
||||
|
|
|
@ -40,6 +40,7 @@
|
|||
|
||||
<body
|
||||
id="mainBody"
|
||||
onload="window.opener.g_baWindowInitialized = true"
|
||||
style="
|
||||
-webkit-app-region: drag;
|
||||
margin: 0px;
|
||||
|
@ -57,7 +58,7 @@
|
|||
"
|
||||
>
|
||||
<div
|
||||
id="pskReporterBandActivityDiv"
|
||||
id="bandActivityDiv"
|
||||
style="
|
||||
position: relative;
|
||||
background-color: #000;
|
||||
|
@ -67,7 +68,7 @@
|
|||
margin-bottom: 1px;
|
||||
padding: 0px;
|
||||
"
|
||||
title="PSK-Reporter Band Activity"
|
||||
title="Band Activity"
|
||||
>
|
||||
<div data-i18n="bandactivity.noData" id="graphDiv" style="bottom: 0; position: absolute; width: 100%; padding: 0px; margin-bottom: 2px">
|
||||
<br />...no data yet...<br />
|
||||
|
|
|
@ -478,9 +478,8 @@
|
|||
var who = "<text class='" + className + "'>" + who.formatCallsign() + "</text>";
|
||||
var time = "<text class='when'>" + window.opener.userTimeString(when) + "</text>";
|
||||
var worker = who + " " + time + "</br>";
|
||||
var newMsg = msg.replace(new RegExp("\r?\n", "g"), "<br />");
|
||||
var msgTextClass = containsDoubleByte(newMsg) ? "msgTextUnicode" : "msgText";
|
||||
worker += "<text class='" + msgTextClass + "' >" + newMsg.linkify() + "</text><br/>";
|
||||
var msgTextClass = containsDoubleByte(msg) ? "msgTextUnicode" : "msgText";
|
||||
worker += "<text class='" + msgTextClass + "' >" + msg.linkify() + "</text><br/>";
|
||||
return worker;
|
||||
}
|
||||
|
||||
|
@ -669,10 +668,10 @@
|
|||
white-space: normal;
|
||||
"
|
||||
>
|
||||
<div id="messageInfoDiv" class="boxDisplay">
|
||||
<div id="messageInfoDiv" class="boxDisplay" style="overflow: hidden;">
|
||||
<text id="callsign"></text> / <text id="country"></text> / <text id="grid"></text> / <text id="band"></text> / <text id="mode"></text> / <text id="appSource"></text>
|
||||
</div>
|
||||
<div id="messageTextDiv" class="boxDisplay" style="overflow: auto; user-select: text"></div>
|
||||
<div id="messageTextDiv" class="boxDisplay" style="overflow: auto; white-space: pre-wrap;user-select: text"></div>
|
||||
<div id="messageInputDiv" style="position: fixed; bottom: 3px">
|
||||
<textarea disabled="true" id="messageInput" maxlength="256" rows="2" value="" class="roundBorder"></textarea>
|
||||
</div>
|
||||
|
|
|
@ -1,178 +0,0 @@
|
|||
<!--
|
||||
This file is part of GridTracker.
|
||||
|
||||
GridTracker is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, version 3 of the License.
|
||||
|
||||
GridTracker is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GridTracker. If not, see <https://www.gnu.org/licenses/>.
|
||||
-->
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<title>GridTracker - Print</title>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
<style type="text/css">
|
||||
table.darkTable {
|
||||
border-collapse: collapse;
|
||||
border: 1px solid black;
|
||||
background-color: white;
|
||||
text-align: center;
|
||||
}
|
||||
table.darkTable td,
|
||||
table.darkTable th {
|
||||
border: 1px solid black;
|
||||
padding: 3px 5px;
|
||||
}
|
||||
|
||||
table.darkTable thead {
|
||||
border-bottom: 2px solid black;
|
||||
}
|
||||
table.darkTable thead th {
|
||||
font-weight: bold;
|
||||
text-align: center;
|
||||
border-left: 2px solid black;
|
||||
}
|
||||
table.darkTable thead th:first-child {
|
||||
border-left: none;
|
||||
}
|
||||
</style>
|
||||
<script>
|
||||
function init() {
|
||||
window.print();
|
||||
}
|
||||
</script>
|
||||
</head>
|
||||
<body id="mainBody" onload="init();">
|
||||
<div id="main">
|
||||
<center><h2>GridTracker</h2></center>
|
||||
<div id="printDiv">
|
||||
<table align="center" class="darkTable">
|
||||
<tr>
|
||||
<th colspan="3">Hot Key List</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>Key</th>
|
||||
<th align="left">Action</th>
|
||||
<th>Condition</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>C</td>
|
||||
<td align="left">Open Conditions Windows</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>G</td>
|
||||
<td align="left">Toggle GridTracker Flags</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>I</td>
|
||||
<td align="left">Open Stats/Info</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>L</td>
|
||||
<td align="left">Open ADIF file</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>M</td>
|
||||
<td align="left">Toggle Audio Mute</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>N</td>
|
||||
<td align="left">Toggle Earth Shadow</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>P</td>
|
||||
<td align="left">Toggle Grid/PushPin Mode</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Q</td>
|
||||
<td align="left">Cycle QSO/LIVE view</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>R</td>
|
||||
<td align="left">Open Call Roster Window</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>S</td>
|
||||
<td align="left">Open Settings</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>W</td>
|
||||
<td align="left">Toggle Maidenhead Grid Size</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>1</td>
|
||||
<td align="left">Show General Map Layer</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>2</td>
|
||||
<td align="left">Show CQ Zones Award Layer</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>3</td>
|
||||
<td align="left">Show ITU Zones Award Layer</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>4</td>
|
||||
<td align="left">Show Continents Award Layer</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>5</td>
|
||||
<td align="left">Show US States Award Layer</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>6</td>
|
||||
<td align="left">Show DXCC Award Layer</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>7</td>
|
||||
<td align="left">Show US Counties Award Layer</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>M</td>
|
||||
<td align="left">Add MapCenter Alert</td>
|
||||
<td>right-click<br />empty grid</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>T</td>
|
||||
<td align="left">Add TTS Alert</td>
|
||||
<td>right-click<br />empty grid</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>V</td>
|
||||
<td align="left">Add PopUp Alert</td>
|
||||
<td>right-click<br />empty grid</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>F1</td>
|
||||
<td align="left">Hot Key List</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
|
@ -43,8 +43,8 @@
|
|||
<script src="./lib/roster/sendAlerts.js" type="text/javascript"></script>
|
||||
<script src="./lib/screens.js" type="text/javascript"></script>
|
||||
</head>
|
||||
<body onload="init()" class="roster" oncontextmenu="return handleContextMenu(event);">
|
||||
<div id="MainCallRoster">
|
||||
<body id="rosterBody" onload="init()" onresize="resize()" style="display:none;" class="roster" oncontextmenu="return handleContextMenu(event);">
|
||||
<div id="MainCallRoster" style="display:block;";>
|
||||
<header id="RosterControls">
|
||||
<div id="TransmitControls">
|
||||
<div id="txrxdec" style=" background-color: Green; border-style: outset; border-color: yellow; border-width: 3px; margin: 2px;" class="roundBorder">
|
||||
|
@ -177,11 +177,10 @@
|
|||
<input type="checkbox" id="huntPOTA" onchange="wantedChanged(this);" />
|
||||
<label data-i18n="roster.secondary.wanted.pota" for="huntPOTA" title="Parks On The Air">POTA</label>
|
||||
</div>
|
||||
<div>
|
||||
<div id="huntingMatrixOAMSDiv">
|
||||
<input type="checkbox" id="huntOAMS" onchange="wantedChanged(this);" />
|
||||
<label data-i18n="roster.secondary.wanted.OAMS" for="huntOAMS" title="Off-Air Message Service Users">OAMS</label>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
</div>
|
||||
<div>
|
||||
|
@ -425,13 +424,216 @@
|
|||
<div
|
||||
id="editView"
|
||||
class="roundBorder"
|
||||
style="height: 100%; border: 3px solid #066; padding: 10px; margin: 10px; display: none"
|
||||
style="height: 100%; width:95%; top:0px; left:0px; border: 3px solid #066; padding: 10px; margin: 10px; display: none; position: absolute;"
|
||||
>
|
||||
<div style="display: block; font-size: larger">Callsign, CQ and DXCC Ignores</div>
|
||||
<br />
|
||||
<div id="editTables"></div>
|
||||
<div class="button" style="margin-top: 5px" onclick="closeEditIgnores()">Close</div>
|
||||
<div style="top: 1px; right: 1px; position: absolute">
|
||||
<button class="Xbutton" onclick="closeEditIgnores()">X</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="settingsDiv" class="roundBorder" style="overflow: hidden;
|
||||
margin: 0;
|
||||
top: 10px;
|
||||
left: 15%;
|
||||
width: 70%;
|
||||
display: none;
|
||||
background-color: #000000;
|
||||
padding: 0px;
|
||||
text-align: center;
|
||||
vertical-align: middle;
|
||||
position: absolute;
|
||||
z-index: 600;
|
||||
border: 3px solid rgb(0, 50, 189);" >
|
||||
<div class="mapItem" >
|
||||
<table align="center">
|
||||
<tr align="center">
|
||||
<td data-i18n="settings.callroster.AlwaysOnTop.label" align="center">Window Always On Top</td>
|
||||
</tr>
|
||||
<tr align="center">
|
||||
<td colspan="2">
|
||||
<input type="checkbox" id="rosterAlwaysOnTop" onchange="changeRosterTop(this)" />
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div class="mapItem" >
|
||||
<table align="center">
|
||||
<tr align="center">
|
||||
<td data-i18n="settings.callroster.MaxAge.label" align="center">Call Roster Max Age</td>
|
||||
</tr>
|
||||
<tr align="center">
|
||||
<td align="center" id="rosterTimeTd">2m 0s</td>
|
||||
</tr>
|
||||
<tr align="center">
|
||||
<td colspan="2">
|
||||
<input type="range" min="5" max="300" value="120" step="5" class="slider" id="rosterTime"
|
||||
oninput="changeRosterTime()" />
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div class="mapItem">
|
||||
<table align="center">
|
||||
<tr align="center">
|
||||
<td align="center">Clear Call Roster on Band change</td>
|
||||
</tr>
|
||||
<tr align="center">
|
||||
<td colspan="2">
|
||||
<input type="checkbox" id="clearRosterOnBandChange"
|
||||
onchange="clearRosterOnBandChangeValueChanged(this)" />
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<br />
|
||||
<div class="mapItem">
|
||||
<label>Compact Mode Entity<label><br />
|
||||
<select id="compactEntitySelect" onchange="compactEntityChanged()"></select>
|
||||
</div>
|
||||
<div class="mapItem">
|
||||
<table align="center">
|
||||
<tr align="center">
|
||||
<td align="center">Call Roster Decode Delay On Focus</td>
|
||||
</tr>
|
||||
<td colspan="2">
|
||||
<input type="checkbox" id="rosterDelayOnFocus" onchange="rosterDelayOnFocusValueChanged(this)" />
|
||||
</td>
|
||||
<tr align="center">
|
||||
<td align="center" style="display:none;" id="rosterDelayTimeTd">1500ms</td>
|
||||
</tr>
|
||||
<tr align="center">
|
||||
<td colspan="2" >
|
||||
<input
|
||||
type="range"
|
||||
min="50"
|
||||
max="5000"
|
||||
value="1500"
|
||||
step="10"
|
||||
class="slider"
|
||||
id="rosterDelayTime"
|
||||
oninput="changeRosterDelayTime()"
|
||||
style="display:none;"
|
||||
/>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<br />
|
||||
<div class="mapItem">
|
||||
<table align="center">
|
||||
<tr align="center">
|
||||
<td align="center">Window Filters</td>
|
||||
</tr>
|
||||
<tr align="center">
|
||||
<td align="center">
|
||||
<div class="mapItem">
|
||||
<table align="center">
|
||||
<tr align="center">
|
||||
<td align="center">Brightness</td>
|
||||
</tr>
|
||||
<tr align="center">
|
||||
<td align="center" id="filterbrightnessTd"></td>
|
||||
</tr>
|
||||
<tr align="center">
|
||||
<td colspan="2">
|
||||
<input type="range" min="10" max="100" value="100" step="1" class="slider" id="filterbrightnessSlider" oninput="filtersChanged()" />
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div class="mapItem">
|
||||
<table align="center">
|
||||
<tr align="center">
|
||||
<td align="center">Contrast</td>
|
||||
</tr>
|
||||
<tr align="center">
|
||||
<td align="center" id="filtercontrastTd"></td>
|
||||
</tr>
|
||||
<tr align="center">
|
||||
<td colspan="2">
|
||||
<input type="range" min="10" max="100" value="100" step="1" class="slider" id="filtercontrastSlider" oninput="filtersChanged()" />
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div class="mapItem">
|
||||
<table align="center">
|
||||
<tr align="center">
|
||||
<td align="center">Saturate</td>
|
||||
</tr>
|
||||
<tr align="center">
|
||||
<td align="center" id="filtersaturateTd"></td>
|
||||
</tr>
|
||||
<tr align="center">
|
||||
<td colspan="2">
|
||||
<input type="range" min="0" max="200" value="100" step="1" class="slider" id="filtersaturateSlider" oninput="filtersChanged()" />
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<br/>
|
||||
<div class="mapItem">
|
||||
<table align="center">
|
||||
<tr align="center">
|
||||
<td align="center">Invert</td>
|
||||
</tr>
|
||||
<tr align="center">
|
||||
<td align="center" id="filterinvertTd"></td>
|
||||
</tr>
|
||||
<tr align="center">
|
||||
<td colspan="2">
|
||||
<input type="range" min="0" max="100" value="0" step="1" class="slider" id="filterinvertSlider" oninput="filtersChanged()" />
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div class="mapItem">
|
||||
<table align="center">
|
||||
<tr align="center">
|
||||
<td align="center">Sepia</td>
|
||||
</tr>
|
||||
<tr align="center">
|
||||
<td align="center" id="filtersepiaTd"></td>
|
||||
</tr>
|
||||
<tr align="center">
|
||||
<td colspan="2">
|
||||
<input type="range" min="0" max="100" value="0" step="1" class="slider" id="filtersepiaSlider" oninput="filtersChanged()" />
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div class="mapItem">
|
||||
<table align="center">
|
||||
<tr align="center">
|
||||
<td align="center">Hue Rotate</td>
|
||||
</tr>
|
||||
<tr align="center">
|
||||
<td align="center" id="filterhuerotateTd"></td>
|
||||
</tr>
|
||||
<tr align="center">
|
||||
<td colspan="2">
|
||||
<input type="range" min="0" max="359" value="0" step="1" class="slider" id="filterhuerotateSlider" oninput="filtersChanged()" />
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<div class="mapItem">
|
||||
<div class="button" style="margin: 10px" onclick="resetFilters()" title="Reset Filters">Reset Filters (Ctrl-R)</div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div style="top: 1px; right: 1px; position: absolute">
|
||||
<button class="Xbutton" onclick="closeSettings()">X</button>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
|
Plik binarny nie jest wyświetlany.
Plik binarny nie jest wyświetlany.
|
@ -138,7 +138,7 @@
|
|||
"controlPanel.Share.hover": "讓其他GridTracker用戶看到您的在線狀態",
|
||||
"controlPanel.Help.hover": "打開熱鍵清單(F1)",
|
||||
"controlPanel.Trophy.hover": "循環顯示獎狀圖層(=)",
|
||||
"controlPanel.Lightening.hover": "顯示全球閃電實時狀態(Y)",
|
||||
|
||||
"controlPanel.Moon.hover": "顯示月球位置(D)",
|
||||
"controlPanel.MaidenheadWidth.hover": "切換梅登黑德網格位數(W)",
|
||||
"controlPanel.Settings.hover": "設定(S)",
|
||||
|
@ -228,12 +228,6 @@
|
|||
"settings.audio.Speech.Phonetics.hover": "以語音方式播出呼號和網格",
|
||||
"settings.audio.Device.label": "音頻播放設備",
|
||||
"settings.audio.File.Volume.label": "音頻檔案音量",
|
||||
"settings.audio.lighteningAlert.label": "雷擊音頻警報",
|
||||
"settings.audio.lighteningAlert.hover": "如果有雷擊報警,則發出雷擊音頻警報!",
|
||||
"settings.audio.lighteningAlert.none": "無",
|
||||
"settings.audio.lighteningAlert.short": "短",
|
||||
"settings.audio.lighteningAlert.long": "長",
|
||||
"settings.audio.lighteningAlert.voice": "聲音",
|
||||
"settings.audio.QSOLogEventFile.label": "QSO日志記錄通知音頻",
|
||||
"settings.logbook.callsigns.hover": "QSO日志以僅包含這些呼號的數據(逗號分隔)",
|
||||
"settings.logbook.callsigns.label": "過濾通聯呼號",
|
||||
|
@ -432,6 +426,10 @@
|
|||
"settings.OAMS.message.enable.hover": "啟用消息傳遞",
|
||||
"settings.OAMS.spotting.enable.label": "啟用定位",
|
||||
"settings.OAMS.spotting.enable.hover": "通過OAMS網絡發送和接收現場報告",
|
||||
"settings.OAMS.BandActivity.enable.label": "Band Activity",
|
||||
"settings.OAMS.BandActivity.enable.hover": "Receive Band Activity Reports through the OAMS network",
|
||||
"settings.OAMS.BandActivity.neighbor.enable.label": "Neighboring Grids",
|
||||
"settings.OAMS.BandActivity.neighbor.enable.hover": "Include your 8 neighboring grids in report",
|
||||
"settings.OAMS.message.newAlert.label": "新消息警報",
|
||||
"settings.OAMS.message.newAlert.hover": "收到新消息時發出警報。",
|
||||
"settings.OAMS.message.newAlert.none": "None",
|
||||
|
@ -775,18 +773,11 @@
|
|||
"gt.gridTable.Azim": "角度",
|
||||
"gt.gridTable.Lat": "緯度",
|
||||
"gt.gridTable.Long": "經度",
|
||||
"gt.LighteningStrike.disclaimer": "閃電雷擊檢測由 Blitzortung.org 提供\n我們對可能造成損害的誤擊不承擔責任.\n請務必向當地氣象服務機構査詢準確數據.",
|
||||
"gt.UpdateCount.ClearLog": "清除日誌",
|
||||
"gt.UpdateCount.LoadLog": "載入日誌",
|
||||
"gt.CurrentBandMode.Band": "混合波段",
|
||||
"gt.CurrentBandMode.Mode": "混合模式",
|
||||
"gt.currentTime.never": "從未",
|
||||
"gt.LighteningStrike.Global": "全球閃電",
|
||||
"gt.LighteningStrike.Changed": "雷擊距離發生變化",
|
||||
"gt.LighteningStrike.Disabled": "檢測未啟用!",
|
||||
"gt.LighteningStrike.Detected": "檢測到雷擊!",
|
||||
"gt.LighteningStrike.Distance": "距離:",
|
||||
"gt.LighteningStrike.Bearing": "角度:",
|
||||
"gt.WSJTMessage.Generated": "產生信息",
|
||||
"gt.WSJTMessage.TransmitEnable": "發射已啟用!",
|
||||
"gt.WSJTMessage.Decode": "解碼",
|
||||
|
@ -1008,6 +999,7 @@
|
|||
"roster.ignore.DXCCs": "DXCCs",
|
||||
"roster.ignore.CQZones": "CQ 分區",
|
||||
"roster.ignore.ITUZones": "ITU 分區",
|
||||
"roster.menu.Settings": "Settings",
|
||||
"roster.menu.HideControls": "隱藏控件",
|
||||
"roster.menu.ShowControls": "顯示控件",
|
||||
"roster.menu.CompactMode": "緊密模式",
|
||||
|
|
|
@ -138,7 +138,6 @@
|
|||
"controlPanel.Share.hover": "让其他GridTracker用户看到您的在线状态",
|
||||
"controlPanel.Help.hover": "打开热键清单(F1)",
|
||||
"controlPanel.Trophy.hover": "循环显示奖状图层(=)",
|
||||
"controlPanel.Lightening.hover": "显示全球闪电实时状态(Y)",
|
||||
"controlPanel.Moon.hover": "显示月球位置(D)",
|
||||
"controlPanel.MaidenheadWidth.hover": "切换梅登黑德网格位数(W)",
|
||||
"controlPanel.Settings.hover": "设置(S)",
|
||||
|
@ -228,12 +227,6 @@
|
|||
"settings.audio.Speech.Phonetics.hover": "以语音方式播出呼号和网格",
|
||||
"settings.audio.Device.label": "音频播放设备",
|
||||
"settings.audio.File.Volume.label": "音频文件音量",
|
||||
"settings.audio.lighteningAlert.label": "雷击音频警报",
|
||||
"settings.audio.lighteningAlert.hover": "如果有雷击报警,则发出雷击音频警报!",
|
||||
"settings.audio.lighteningAlert.none": "无",
|
||||
"settings.audio.lighteningAlert.short": "短",
|
||||
"settings.audio.lighteningAlert.long": "长",
|
||||
"settings.audio.lighteningAlert.voice": "声音",
|
||||
"settings.audio.QSOLogEventFile.label": "QSO日志记录通知音频",
|
||||
"settings.logbook.callsigns.hover": "QSO日志以仅包含这些呼号的数据(逗号分隔)",
|
||||
"settings.logbook.callsigns.label": "过滤通联呼号",
|
||||
|
@ -432,6 +425,10 @@
|
|||
"settings.OAMS.message.enable.hover": "启用消息传递",
|
||||
"settings.OAMS.spotting.enable.label": "启用定位",
|
||||
"settings.OAMS.spotting.enable.hover": "通过OAMS网络发送和接收现场报告",
|
||||
"settings.OAMS.BandActivity.enable.label": "Band Activity",
|
||||
"settings.OAMS.BandActivity.enable.hover": "Receive Band Activity Reports through the OAMS network",
|
||||
"settings.OAMS.BandActivity.neighbor.enable.label": "Neighboring Grids",
|
||||
"settings.OAMS.BandActivity.neighbor.enable.hover": "Include your 8 neighboring grids in report",
|
||||
"settings.OAMS.message.newAlert.label": "新消息警报",
|
||||
"settings.OAMS.message.newAlert.hover": "收到新消息时发出警报。",
|
||||
"settings.OAMS.message.newAlert.none": "None",
|
||||
|
@ -775,18 +772,11 @@
|
|||
"gt.gridTable.Azim": "方位角",
|
||||
"gt.gridTable.Lat": "纬度",
|
||||
"gt.gridTable.Long": "经度",
|
||||
"gt.LighteningStrike.disclaimer": "开启雷电提示",
|
||||
"gt.UpdateCount.ClearLog": "清除日志",
|
||||
"gt.UpdateCount.LoadLog": "载入日志",
|
||||
"gt.CurrentBandMode.Band": "混合波段",
|
||||
"gt.CurrentBandMode.Mode": "混合模式",
|
||||
"gt.currentTime.never": "从不",
|
||||
"gt.LighteningStrike.Global": "全球雷击",
|
||||
"gt.LighteningStrike.Changed": "累计距离改变",
|
||||
"gt.LighteningStrike.Disabled": "未启用检测!!",
|
||||
"gt.LighteningStrike.Detected": "检测到雷击!",
|
||||
"gt.LighteningStrike.Distance": "距离:",
|
||||
"gt.LighteningStrike.Bearing": "影响:",
|
||||
"gt.WSJTMessage.Generated": "生成消息(JTDX无效)",
|
||||
"gt.WSJTMessage.TransmitEnable": "开启发射!",
|
||||
"gt.WSJTMessage.Decode": "解码",
|
||||
|
@ -1009,6 +999,7 @@
|
|||
"roster.ignore.DXCCs": "DXCCs",
|
||||
"roster.ignore.CQZones": "CQ分区",
|
||||
"roster.ignore.ITUZones": "ITU分区",
|
||||
"roster.menu.Settings": "Settings",
|
||||
"roster.menu.HideControls": "隐藏控件栏",
|
||||
"roster.menu.ShowControls": "显示控件栏",
|
||||
"roster.menu.CompactMode": "紧凑模式",
|
||||
|
|
|
@ -43,7 +43,7 @@
|
|||
"info.DXDistance.hover": "Distance",
|
||||
"info.DXAzimuth.hover": "Heading",
|
||||
"operatingMode.hover": "Click to ignore incoming messages",
|
||||
"bandActivity.hover": "PSK-Reporter band Activity",
|
||||
"bandActivity.hover": "Band Activity",
|
||||
"quickStats.hover": "Quick Stats",
|
||||
"quickStats.CallRX.hover": "Callsigns Heard",
|
||||
"quickStats.CallRX.label": "Rx Calls",
|
||||
|
@ -137,7 +137,6 @@
|
|||
"controlPanel.Share.hover": "Share your On-Air Status with other GridTracker users",
|
||||
"controlPanel.Help.hover": "Toggle Hotkey List",
|
||||
"controlPanel.Trophy.hover": "Cycle Award Overlays",
|
||||
"controlPanel.Lightening.hover": "Toggle Lightening Strikes",
|
||||
"controlPanel.Moon.hover": "Toggle Moon",
|
||||
"controlPanel.MaidenheadWidth.hover": "Toggle Maidenhead Width",
|
||||
"controlPanel.Settings.hover": "Toggle Settings Window",
|
||||
|
@ -227,12 +226,6 @@
|
|||
"settings.audio.Speech.Phonetics.hover": "Speak Callsigns and Gridsquares phonetically",
|
||||
"settings.audio.Device.label": "Audio Device",
|
||||
"settings.audio.File.Volume.label": "File Audio Volume",
|
||||
"settings.audio.lighteningAlert.label": "Lightening Strike Audio Alert",
|
||||
"settings.audio.lighteningAlert.hover": "Lightening Strike Audio Alert",
|
||||
"settings.audio.lighteningAlert.none": "None",
|
||||
"settings.audio.lighteningAlert.short": "Short",
|
||||
"settings.audio.lighteningAlert.long": "Long",
|
||||
"settings.audio.lighteningAlert.voice": "Voice",
|
||||
"settings.audio.QSOLogEventFile.label": "QSO Log Event Notification",
|
||||
"settings.logbook.callsigns.hover": "Filter Logbook QSOs to include these Callsigns only (comma seperated)",
|
||||
"settings.logbook.callsigns.label": "Working Callsign(s)",
|
||||
|
@ -427,10 +420,14 @@
|
|||
"settings.alerts.CustomAlerts.new.repeat.once": "Only Once",
|
||||
"settings.alerts.CustomAlerts.new.repeat.never": "Never Repeat",
|
||||
"settings.alerts.CustomAlerts.new.addButton": "ADD",
|
||||
"settings.OAMS.message.enable.label": "Messaging Enable",
|
||||
"settings.OAMS.message.enable.hover": "Messaging Enable",
|
||||
"settings.OAMS.spotting.enable.label": "Spotting Enable",
|
||||
"settings.OAMS.message.enable.label": "Messaging",
|
||||
"settings.OAMS.message.enable.hover": "Messaging",
|
||||
"settings.OAMS.spotting.enable.label": "Spotting",
|
||||
"settings.OAMS.spotting.enable.hover": "Send and Receivev Spot Reports through the OAMS network",
|
||||
"settings.OAMS.BandActivity.enable.label": "Band Activity",
|
||||
"settings.OAMS.BandActivity.enable.hover": "Receive Band Activity Reports through the OAMS network",
|
||||
"settings.OAMS.BandActivity.neighbor.enable.label": "Neighboring Grids",
|
||||
"settings.OAMS.BandActivity.neighbor.enable.hover": "Include your 8 neighboring grids in report",
|
||||
"settings.OAMS.message.newAlert.label": "New Message Alert",
|
||||
"settings.OAMS.message.newAlert.hover": "Alert when new messages received.",
|
||||
"settings.OAMS.message.newAlert.none": "None",
|
||||
|
@ -775,18 +772,12 @@
|
|||
"gt.gridTable.Azim": "Azim",
|
||||
"gt.gridTable.Lat": "Lat",
|
||||
"gt.gridTable.Long": "Long",
|
||||
"gt.LighteningStrike.disclaimer": "Lighting Strike Detection is provided by Blitzortung.org\nWe are not responsible for missed strikes that could result in damage.\nBe sure to check your local weather providers for accurate data.",
|
||||
"gt.UpdateCount.ClearLog": "Clear Log",
|
||||
"gt.UpdateCount.LoadLog": "Load Logs",
|
||||
"gt.CurrentBandMode.Band": "Mixed Bands",
|
||||
"gt.CurrentBandMode.Mode": "Mixed Modes",
|
||||
"gt.currentTime.never": "Never",
|
||||
"gt.LighteningStrike.Global": "Global Strikes",
|
||||
"gt.LighteningStrike.Changed": "Strike Distance Chagned",
|
||||
"gt.LighteningStrike.Disabled": "Detection is not enabled!",
|
||||
"gt.LighteningStrike.Detected": "Lighting Strike Detected!",
|
||||
"gt.LighteningStrike.Distance": "Distance:",
|
||||
"gt.LighteningStrike.Bearing": "Bearing:",
|
||||
|
||||
"gt.WSJTMessage.Generated": "Generated Msgs",
|
||||
"gt.WSJTMessage.TransmitEnable": "Transmit Enabled!",
|
||||
"gt.WSJTMessage.Decode": "DECODE",
|
||||
|
@ -1008,6 +999,7 @@
|
|||
"roster.ignore.DXCCs": "DXCCs",
|
||||
"roster.ignore.CQZones": "CQ Zones",
|
||||
"roster.ignore.ITUZones": "ITU Zones",
|
||||
"roster.menu.Settings": "Settings",
|
||||
"roster.menu.HideControls": "Hide Controls",
|
||||
"roster.menu.ShowControls": "Show Controls",
|
||||
"roster.menu.CompactMode": "Compact Mode",
|
||||
|
|
Plik binarny nie jest wyświetlany.
Przed Szerokość: | Wysokość: | Rozmiar: 2.1 KiB |
Plik binarny nie jest wyświetlany.
Po Szerokość: | Wysokość: | Rozmiar: 127 KiB |
Plik binarny nie jest wyświetlany.
Przed Szerokość: | Wysokość: | Rozmiar: 721 B |
Plik binarny nie jest wyświetlany.
Przed Szerokość: | Wysokość: | Rozmiar: 5.6 KiB |
|
@ -33,7 +33,6 @@ var validSettings = [
|
|||
|
||||
var def_appSettings = {
|
||||
alertMute: 0,
|
||||
rosterAlwaysOnTop: false,
|
||||
centerGridsquare: "",
|
||||
chatUUID: "",
|
||||
clearOnCQ: false,
|
||||
|
@ -50,7 +49,6 @@ var def_appSettings = {
|
|||
gtMsgEnable: true,
|
||||
gtShareEnable: true,
|
||||
gtSpotEnable: true,
|
||||
heatEnabled: 0,
|
||||
loadAdifAtStartup: false,
|
||||
locale: "en",
|
||||
lookupLoginCq: "",
|
||||
|
@ -65,9 +63,6 @@ var def_appSettings = {
|
|||
lookupPasswordQth: "",
|
||||
lookupService: "CALLOOK",
|
||||
lookupCallookPreferred: false,
|
||||
clearRosterOnBandChange: false,
|
||||
rosterDelayOnFocus: false,
|
||||
rosterDelayTime: 1500,
|
||||
moonPath: 0,
|
||||
moonTrack: 0,
|
||||
mouseTrack: 0,
|
||||
|
@ -79,6 +74,8 @@ var def_appSettings = {
|
|||
myRawCall: "NOCALL",
|
||||
myRawFreq: "",
|
||||
myRawGrid: "",
|
||||
oamsBandActivity: true,
|
||||
oamsBandActivityNeighbors: false,
|
||||
pathWidthWeight: 1.0,
|
||||
potaEnabled: 1,
|
||||
potaShowMenu: true,
|
||||
|
@ -88,7 +85,7 @@ var def_appSettings = {
|
|||
sixWideMode: 0,
|
||||
savedAppData: null,
|
||||
soundCard: "default",
|
||||
spotsEnabled: 0,
|
||||
spotView: 0,
|
||||
stopAskingVersion: false,
|
||||
useLocalTime: 0,
|
||||
wsjtForwardUdpEnable: false,
|
||||
|
@ -126,13 +123,8 @@ var def_mapSettings = {
|
|||
pathColor: 0,
|
||||
qrzDxccFallback: false,
|
||||
qrzPathColor: 1,
|
||||
rosterTime: 120,
|
||||
shadow: 0.1,
|
||||
splitQSL: true,
|
||||
strikes: false,
|
||||
strikesAlert: 2,
|
||||
strikesGlobal: false,
|
||||
strikesNotify: false,
|
||||
trafficDecode: true,
|
||||
usNexrad: false,
|
||||
zoom: 4,
|
||||
|
|
|
@ -0,0 +1,88 @@
|
|||
// Copyright © 2023 N7YHF
|
||||
// Permission granted to GridTracker.org for use.
|
||||
|
||||
function fieldNumberToLetter(number)
|
||||
{
|
||||
return String.fromCharCode(number + 65);
|
||||
}
|
||||
|
||||
// Input already uppercased
|
||||
function squareToNeighbors(square)
|
||||
{
|
||||
const neighborMatrix = [
|
||||
[-1, +1], // NW
|
||||
[0, +1], // N
|
||||
[+1, +1], // NE
|
||||
|
||||
[-1, 0], // W
|
||||
[0, 0], // Self
|
||||
[+1, 0], // E
|
||||
|
||||
[-1, -1], // SW
|
||||
[0, -1], // S
|
||||
[+1, -1] // SE
|
||||
];
|
||||
|
||||
// RL90
|
||||
// ^^---- RL is the "field"
|
||||
// ^^---- 90 is the "square"
|
||||
|
||||
const fieldX = square.charCodeAt(0) - 65;
|
||||
const fieldY = square.charCodeAt(1) - 65;
|
||||
|
||||
const squareX = square.charCodeAt(2) - 48;
|
||||
const squareY = square.charCodeAt(3) - 48;
|
||||
|
||||
const neighbors = [];
|
||||
|
||||
for (const [dx, dy] of neighborMatrix)
|
||||
{
|
||||
let neighborFieldX = fieldX;
|
||||
let neighborFieldY = fieldY;
|
||||
|
||||
let neighborSquareX = squareX + dx;
|
||||
let neighborSquareY = squareY + dy;
|
||||
|
||||
if (neighborSquareX < 0)
|
||||
{
|
||||
neighborSquareX += 10;
|
||||
neighborFieldX -= 1;
|
||||
}
|
||||
else if (neighborSquareX > 9)
|
||||
{
|
||||
neighborSquareX -= 10;
|
||||
neighborFieldX += 1;
|
||||
}
|
||||
|
||||
if (neighborSquareY < 0)
|
||||
{
|
||||
neighborSquareY += 10;
|
||||
neighborFieldY -= 1;
|
||||
}
|
||||
else if (neighborSquareY > 9)
|
||||
{
|
||||
neighborSquareY -= 10;
|
||||
neighborFieldY += 1;
|
||||
}
|
||||
|
||||
if (neighborFieldX < 0)
|
||||
{
|
||||
neighborFieldX += 18;
|
||||
}
|
||||
else if (neighborFieldX > 17)
|
||||
{
|
||||
neighborFieldX -= 18;
|
||||
}
|
||||
|
||||
if (neighborFieldY < 0 || neighborFieldY > 17)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
const neighbor = `${fieldNumberToLetter(neighborFieldX)}${fieldNumberToLetter(neighborFieldY)}${neighborSquareX}${neighborSquareY}`;
|
||||
|
||||
neighbors.push(neighbor);
|
||||
}
|
||||
|
||||
return neighbors;
|
||||
}
|
Plik diff jest za duży
Load Diff
|
@ -10,7 +10,7 @@ var g_chatRecvFunctions = {
|
|||
drop: gtChatRemoveCall,
|
||||
mesg: gtChatMessage,
|
||||
o: gtSpotMessage,
|
||||
l: gtLightningStrike
|
||||
ba: bandActivityReply
|
||||
};
|
||||
|
||||
var ChatState = Object();
|
||||
|
@ -49,6 +49,7 @@ var g_gtNeedUsersList = true;
|
|||
var g_gtUuidValid = false;
|
||||
|
||||
var g_gtLiveStatusUpdate = false;
|
||||
var g_oamsBandActivityData = null;
|
||||
|
||||
var myChatId = 0;
|
||||
|
||||
|
@ -86,7 +87,7 @@ function gtConnectChat()
|
|||
{
|
||||
if (g_appSettings.gtShareEnable == true)
|
||||
{
|
||||
var jsmesg = false;
|
||||
let jsmesg = false;
|
||||
try
|
||||
{
|
||||
jsmesg = JSON.parse(evt.data);
|
||||
|
@ -214,7 +215,7 @@ function gtStatusCheck()
|
|||
|
||||
function sendGtJson(json, isUUIDrequest = false)
|
||||
{
|
||||
if (g_gtChatSocket != null)
|
||||
if (g_appSettings.gtShareEnable == true && g_gtChatSocket != null)
|
||||
{
|
||||
if (g_gtChatSocket.readyState === WebSocket.OPEN && (isUUIDrequest || g_gtUuidValid))
|
||||
{
|
||||
|
@ -228,8 +229,6 @@ function sendGtJson(json, isUUIDrequest = false)
|
|||
}
|
||||
}
|
||||
}
|
||||
// if we don't have a socketHandle, don't go changing the state willy nilly!
|
||||
// else g_gtState = ChatState.closed;
|
||||
}
|
||||
|
||||
var g_lastGtStatus = "";
|
||||
|
@ -248,7 +247,6 @@ function gtChatSendStatus()
|
|||
msg.src = "GT";
|
||||
msg.canmsg = g_appSettings.gtMsgEnable;
|
||||
msg.o = g_appSettings.gtSpotEnable == true ? 1 : 0;
|
||||
msg.l = g_mapSettings.strikes == true ? 1 : 0;
|
||||
msg = JSON.stringify(msg);
|
||||
|
||||
if (msg != g_lastGtStatus)
|
||||
|
@ -260,13 +258,53 @@ function gtChatSendStatus()
|
|||
|
||||
function gtChatSendSpots(spotsObject, detailsObject)
|
||||
{
|
||||
var msg = Object();
|
||||
let msg = Object();
|
||||
msg.type = "o";
|
||||
msg.uuid = g_appSettings.chatUUID;
|
||||
msg.o = spotsObject;
|
||||
msg.d = detailsObject;
|
||||
msg = JSON.stringify(msg);
|
||||
sendGtJson(msg);
|
||||
|
||||
sendGtJson(JSON.stringify(msg));
|
||||
}
|
||||
|
||||
function gtChatSendDecodes(instancesObject)
|
||||
{
|
||||
let msg = Object();
|
||||
msg.type = "d";
|
||||
msg.uuid = g_appSettings.chatUUID;
|
||||
msg.i = instancesObject;
|
||||
sendGtJson(JSON.stringify(msg));
|
||||
}
|
||||
|
||||
function oamsBandActivityCheck()
|
||||
{
|
||||
if (g_appSettings.oamsBandActivity == true && myDEGrid.length >= 4)
|
||||
{
|
||||
let grid = myDEGrid.substring(0, 4).toUpperCase();
|
||||
if (g_appSettings.oamsBandActivityNeighbors == true)
|
||||
{
|
||||
gtChatSendBandActivityRequest(squareToNeighbors(grid));
|
||||
}
|
||||
else
|
||||
{
|
||||
gtChatSendBandActivityRequest([grid]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function gtChatSendBandActivityRequest(gridArray)
|
||||
{
|
||||
msg = Object();
|
||||
msg.type = "ba";
|
||||
msg.uuid = g_appSettings.chatUUID;
|
||||
msg.ga = gridArray;
|
||||
sendGtJson(JSON.stringify(msg));
|
||||
}
|
||||
|
||||
function bandActivityReply(jsmesg)
|
||||
{
|
||||
g_oamsBandActivityData = jsmesg.r;
|
||||
renderBandActivity();
|
||||
}
|
||||
|
||||
function gtChatRemoveCall(jsmesg)
|
||||
|
@ -371,7 +409,7 @@ function gtChatUpdateCall(jsmesg)
|
|||
if (!(g_gtFlagPins[cid].call in g_gtCallsigns))
|
||||
{
|
||||
// Can happen when a user changes callsign
|
||||
g_gtCallsigns[g_gtFlagPins[cid].call] = Object();
|
||||
g_gtCallsigns[g_gtFlagPins[cid].call] = {};
|
||||
}
|
||||
g_gtCallsigns[g_gtFlagPins[cid].call][cid] = true;
|
||||
|
||||
|
@ -429,7 +467,7 @@ function makeGtPin(obj)
|
|||
|
||||
if (validateGridFromString(obj.grid) == false) return;
|
||||
|
||||
if (g_appSettings.gtFlagImgSrc == 2 && (obj.mode != myMode || obj.band != myBand))
|
||||
if (!validateMapBandAndMode(obj.band, obj.mode))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
@ -502,6 +540,8 @@ function gtChatNewList(jsmesg)
|
|||
}
|
||||
|
||||
updateChatWindow();
|
||||
|
||||
oamsBandActivityCheck();
|
||||
}
|
||||
|
||||
function appendToHistory(cid, jsmesg)
|
||||
|
@ -658,15 +698,6 @@ function gtSpotMessage(jsmesg)
|
|||
}
|
||||
}
|
||||
|
||||
function gtLightningStrike(jsmesg)
|
||||
{
|
||||
// Saftey check
|
||||
if (g_mapSettings.strikes)
|
||||
{
|
||||
handleStrike(jsmesg);
|
||||
}
|
||||
}
|
||||
|
||||
function gtChatSystemInit()
|
||||
{
|
||||
g_gtEngineInterval = nodeTimers.setInterval(gtChatStateMachine, 1000);
|
||||
|
@ -697,9 +728,9 @@ function clearGtFlags()
|
|||
function toggleGtMap()
|
||||
{
|
||||
g_appSettings.gtFlagImgSrc += 1;
|
||||
g_appSettings.gtFlagImgSrc %= 3;
|
||||
g_appSettings.gtFlagImgSrc %= 2;
|
||||
gtFlagImg.src = g_gtFlagImageArray[g_appSettings.gtFlagImgSrc];
|
||||
if (g_spotsEnabled == 1 && g_receptionSettings.mergeSpots == false) return;
|
||||
if (g_spotView > 0 && g_receptionSettings.mergeSpots == false) return;
|
||||
if (g_appSettings.gtFlagImgSrc > 0)
|
||||
{
|
||||
redrawPins();
|
||||
|
|
|
@ -65,7 +65,7 @@ function initPota()
|
|||
{
|
||||
potaEnabled.checked = (g_appSettings.potaEnabled == 1);
|
||||
potaMenu.checked = g_appSettings.potaShowMenu;
|
||||
potaButton.style.display = (g_appSettings.potaEnabled == 1 && g_appSettings.potaShowMenu) ? "" : "none";
|
||||
potaButton.style.display = (g_appSettings.potaEnabled == 1 && g_appSettings.potaShowMenu && g_mapSettings.offlineMode == false) ? "" : "none";
|
||||
potaImg.style.filter = g_appSettings.potaMapEnabled ? "" : "grayscale(1)";
|
||||
|
||||
g_layerSources.pota.clear();
|
||||
|
@ -80,7 +80,7 @@ function initPota()
|
|||
function changePotaEnable()
|
||||
{
|
||||
g_appSettings.potaEnabled = (potaEnabled.checked == true) ? 1 : 0;
|
||||
potaButton.style.display = (g_appSettings.potaEnabled == 1 && g_appSettings.potaShowMenu) ? "" : "none";
|
||||
potaButton.style.display = (g_appSettings.potaEnabled == 1 && g_appSettings.potaShowMenu && g_mapSettings.offlineMode == false) ? "" : "none";
|
||||
if (!g_appSettings.potaEnabled)
|
||||
{
|
||||
g_layerSources.pota.clear();
|
||||
|
@ -98,7 +98,7 @@ function changePotaMenu()
|
|||
{
|
||||
g_appSettings.potaShowMenu = potaMenu.checked;
|
||||
|
||||
potaButton.style.display = (g_appSettings.potaEnabled == 1 && g_appSettings.potaShowMenu) ? "" : "none";
|
||||
potaButton.style.display = (g_appSettings.potaEnabled == 1 && g_appSettings.potaShowMenu && g_mapSettings.offlineMode == false) ? "" : "none";
|
||||
potaImg.style.filter = g_appSettings.potaMapEnabled ? "" : "grayscale(1)";
|
||||
|
||||
saveAppSettings();
|
||||
|
@ -420,15 +420,7 @@ function fillObjectFromTemplate(template, input)
|
|||
|
||||
function uniqueArrayFromArray(input)
|
||||
{
|
||||
var unique = [];
|
||||
input.forEach((c) =>
|
||||
{
|
||||
if (!unique.includes(c))
|
||||
{
|
||||
unique.push(c);
|
||||
}
|
||||
});
|
||||
return unique;
|
||||
return [...new Set(input)];
|
||||
}
|
||||
|
||||
function processPotaSpots(buffer)
|
||||
|
|
|
@ -1,86 +1,84 @@
|
|||
// GridTracker Copyright © 2023 GridTracker.org
|
||||
// All rights reserved.
|
||||
// See LICENSE for more information.
|
||||
|
||||
var g_proto_bands = [
|
||||
"OOB",
|
||||
"OOB",
|
||||
1,
|
||||
"160m",
|
||||
3,
|
||||
"80m",
|
||||
5,
|
||||
"60m",
|
||||
7,
|
||||
"40m",
|
||||
10,
|
||||
"30m",
|
||||
14,
|
||||
"20m",
|
||||
18,
|
||||
"17m",
|
||||
21,
|
||||
"15m",
|
||||
24,
|
||||
"12m",
|
||||
27,
|
||||
"11m",
|
||||
28,
|
||||
"10m",
|
||||
29,
|
||||
"10m",
|
||||
40,
|
||||
"8m",
|
||||
50,
|
||||
"6m",
|
||||
51,
|
||||
"6m",
|
||||
52,
|
||||
"6m",
|
||||
53,
|
||||
"6m",
|
||||
54,
|
||||
"6m",
|
||||
70,
|
||||
"4m",
|
||||
141,
|
||||
"2m",
|
||||
142,
|
||||
"2m",
|
||||
143,
|
||||
"2m",
|
||||
144,
|
||||
"2m",
|
||||
145,
|
||||
"2m",
|
||||
146,
|
||||
"2m",
|
||||
147,
|
||||
"2m",
|
||||
148,
|
||||
"2m",
|
||||
219,
|
||||
"1.25m",
|
||||
220,
|
||||
"1.25m",
|
||||
221,
|
||||
"1.25m",
|
||||
222,
|
||||
"1.25m",
|
||||
223,
|
||||
"1.25m",
|
||||
224,
|
||||
"1.25m",
|
||||
225,
|
||||
"1.25m"
|
||||
];
|
||||
// Incoming is already float fixed ( 14.037 ) for 14,037,000hz
|
||||
Number.prototype.formatBand = function ()
|
||||
{
|
||||
var freq = this;
|
||||
var bands = [
|
||||
"OOB",
|
||||
"0",
|
||||
1,
|
||||
"160m",
|
||||
3,
|
||||
"80m",
|
||||
5,
|
||||
"60m",
|
||||
7,
|
||||
"40m",
|
||||
10,
|
||||
"30m",
|
||||
14,
|
||||
"20m",
|
||||
18,
|
||||
"17m",
|
||||
21,
|
||||
"15m",
|
||||
24,
|
||||
"12m",
|
||||
27,
|
||||
"11m",
|
||||
28,
|
||||
"10m",
|
||||
29,
|
||||
"10m",
|
||||
40,
|
||||
"8m",
|
||||
50,
|
||||
"6m",
|
||||
51,
|
||||
"6m",
|
||||
52,
|
||||
"6m",
|
||||
53,
|
||||
"6m",
|
||||
54,
|
||||
"6m",
|
||||
70,
|
||||
"4m",
|
||||
141,
|
||||
"2m",
|
||||
142,
|
||||
"2m",
|
||||
143,
|
||||
"2m",
|
||||
144,
|
||||
"2m",
|
||||
145,
|
||||
"2m",
|
||||
146,
|
||||
"2m",
|
||||
147,
|
||||
"2m",
|
||||
148,
|
||||
"2m",
|
||||
219,
|
||||
"1.25m",
|
||||
220,
|
||||
"1.25m",
|
||||
221,
|
||||
"1.25m",
|
||||
222,
|
||||
"1.25m",
|
||||
223,
|
||||
"1.25m",
|
||||
224,
|
||||
"1.25m",
|
||||
225,
|
||||
"1.25m"
|
||||
];
|
||||
|
||||
var newFreq = parseInt(freq);
|
||||
if (newFreq > 0 && newFreq < 226) return bands[bands.indexOf(newFreq) + 1];
|
||||
let freq = this;
|
||||
let newFreq = parseInt(freq);
|
||||
if (newFreq > 0 && newFreq < 226) return g_proto_bands[g_proto_bands.indexOf(newFreq) + 1];
|
||||
else if (newFreq >= 420 && newFreq <= 450) return "70cm";
|
||||
else if (newFreq >= 902 && newFreq <= 928) return "33cm";
|
||||
else if (newFreq >= 1240 && newFreq <= 1300) return "23cm";
|
||||
|
|
|
@ -141,14 +141,37 @@ var g_defaultSettings = {
|
|||
OAMS: true,
|
||||
Age: true
|
||||
},
|
||||
displayFilters: {
|
||||
brightness: 100,
|
||||
contrast: 100,
|
||||
saturate: 100,
|
||||
invert: 0,
|
||||
grayscale: 0,
|
||||
sepia: 0,
|
||||
huerotate: 0
|
||||
},
|
||||
reference: 0,
|
||||
controls: true,
|
||||
controlsExtended: true,
|
||||
compact: false,
|
||||
settingProfiles: false,
|
||||
|
||||
sortColumn: "Age",
|
||||
sortReverse: true
|
||||
sortReverse: true,
|
||||
clearRosterOnBandChange: true,
|
||||
rosterAlwaysOnTop: false,
|
||||
rosterDelayOnFocus: false,
|
||||
rosterDelayTime: 1500,
|
||||
rosterTime: 120,
|
||||
compactEntity: "DXCC"
|
||||
};
|
||||
|
||||
g_def_displayFilters = {
|
||||
brightness: 100,
|
||||
contrast: 100,
|
||||
saturate: 100,
|
||||
invert: 0,
|
||||
sepia: 0,
|
||||
huerotate: 0
|
||||
};
|
||||
|
||||
const LOGBOOK_LIVE_BAND_LIVE_MODE = "0";
|
||||
|
@ -326,7 +349,7 @@ var rosterFocus = false;
|
|||
|
||||
function rosterInFocus()
|
||||
{
|
||||
if (window.opener.g_appSettings.rosterDelayOnFocus)
|
||||
if (g_rosterSettings.rosterDelayOnFocus)
|
||||
{
|
||||
rosterFocus = true;
|
||||
}
|
||||
|
@ -354,7 +377,7 @@ function processRoster(roster)
|
|||
|
||||
if (rosterFocus)
|
||||
{
|
||||
rosterTimeout = nodeTimers.setTimeout(viewRoster, window.opener.g_appSettings.rosterDelayTime);
|
||||
rosterTimeout = nodeTimers.setTimeout(viewRoster, g_rosterSettings.rosterDelayTime);
|
||||
rosterDelayDiv.style.display = "inline-block";
|
||||
}
|
||||
else
|
||||
|
@ -422,14 +445,14 @@ function realtimeRoster()
|
|||
|
||||
function getSpotString(callObj)
|
||||
{
|
||||
let result = "";
|
||||
let result = " ";
|
||||
if (callObj.spot && callObj.spot.when > 0)
|
||||
{
|
||||
when = timeNowSec() - callObj.spot.when;
|
||||
if (when <= window.opener.g_receptionSettings.viewHistoryTimeSec)
|
||||
{ result = parseInt(when).toDHM(); }
|
||||
}
|
||||
if (result) result += " / " + callObj.spot.snr;
|
||||
if (result != " ") result += " / " + callObj.spot.snr;
|
||||
return result;
|
||||
}
|
||||
|
||||
|
@ -914,7 +937,9 @@ function setVisual()
|
|||
for (const key in g_rosterSettings.wanted)
|
||||
{
|
||||
if (document.getElementById(key))
|
||||
{ document.getElementById(key).checked = g_rosterSettings.wanted[key]; }
|
||||
{
|
||||
document.getElementById(key).checked = g_rosterSettings.wanted[key];
|
||||
}
|
||||
}
|
||||
|
||||
AwardTrackerControls.style.display = "none";
|
||||
|
@ -933,11 +958,7 @@ function setVisual()
|
|||
huntingMatrixDiv.style.display = "none";
|
||||
huntMode.style.display = "";
|
||||
|
||||
if (
|
||||
huntMode.value != "callsign" &&
|
||||
huntMode.value != "usstate" &&
|
||||
huntMode.value != "dxccs"
|
||||
)
|
||||
if (huntMode.value != "callsign" && huntMode.value != "usstate" && huntMode.value != "dxccs")
|
||||
{
|
||||
huntNeed.style.display = "";
|
||||
}
|
||||
|
@ -975,6 +996,7 @@ function setVisual()
|
|||
maxDT.style.display = "none";
|
||||
maxDTView.style.display = "none";
|
||||
}
|
||||
|
||||
if (wantMinDB.checked == true)
|
||||
{
|
||||
minDb.style.display = "";
|
||||
|
@ -985,6 +1007,7 @@ function setVisual()
|
|||
minDb.style.display = "none";
|
||||
minDbView.style.display = "none";
|
||||
}
|
||||
|
||||
if (wantMinFreq.checked == true)
|
||||
{
|
||||
minFreq.style.display = "";
|
||||
|
@ -995,6 +1018,7 @@ function setVisual()
|
|||
minFreq.style.display = "none";
|
||||
minFreqView.style.display = "none";
|
||||
}
|
||||
|
||||
if (wantMaxFreq.checked == true)
|
||||
{
|
||||
maxFreq.style.display = "";
|
||||
|
@ -1037,20 +1061,42 @@ function setVisual()
|
|||
}
|
||||
|
||||
if (window.opener.g_callsignLookups.eqslUseEnable == true)
|
||||
{ useseQSLDiv.style.display = ""; }
|
||||
else useseQSLDiv.style.display = "none";
|
||||
{
|
||||
useseQSLDiv.style.display = "";
|
||||
}
|
||||
else
|
||||
{
|
||||
useseQSLDiv.style.display = "none";
|
||||
}
|
||||
|
||||
if (window.opener.g_callsignLookups.oqrsUseEnable == true)
|
||||
{ usesOQRSDiv.style.display = ""; }
|
||||
else usesOQRSDiv.style.display = "none";
|
||||
{
|
||||
usesOQRSDiv.style.display = "";
|
||||
}
|
||||
else
|
||||
{
|
||||
usesOQRSDiv.style.display = "none";
|
||||
}
|
||||
|
||||
if (g_rosterSettings.columns.Spot == true)
|
||||
{ onlySpotDiv.style.display = ""; }
|
||||
else onlySpotDiv.style.display = "none";
|
||||
{
|
||||
onlySpotDiv.style.display = "";
|
||||
}
|
||||
else
|
||||
{
|
||||
onlySpotDiv.style.display = "none";
|
||||
}
|
||||
|
||||
if (g_rosterSettings.callsign == "all" || g_rosterSettings.callsign == "hits")
|
||||
{ allOnlyNewDiv.style.display = ""; }
|
||||
else allOnlyNewDiv.style.display = "none";
|
||||
{
|
||||
allOnlyNewDiv.style.display = "";
|
||||
}
|
||||
else
|
||||
{
|
||||
allOnlyNewDiv.style.display = "none";
|
||||
}
|
||||
|
||||
rosterBody.style.display = "block";
|
||||
|
||||
resize();
|
||||
}
|
||||
|
@ -1110,22 +1156,21 @@ function valuesChanged()
|
|||
minFreqView.innerHTML = g_rosterSettings.minFreq = minFreq.value;
|
||||
maxFreqView.innerHTML = g_rosterSettings.maxFreq = maxFreq.value;
|
||||
g_rosterSettings.maxLoTW = maxLoTW.value;
|
||||
maxLoTWView.innerHTML =
|
||||
g_rosterSettings.maxLoTW < 27
|
||||
? Number(g_rosterSettings.maxLoTW).toYM()
|
||||
: "<b>∞</b>";
|
||||
maxLoTWView.innerHTML = g_rosterSettings.maxLoTW < 27 ? Number(g_rosterSettings.maxLoTW).toYM() : "<b>∞</b>";
|
||||
g_rosterSettings.maxLoTW = maxLoTW.value;
|
||||
g_rosterSettings.cqOnly = cqOnly.checked;
|
||||
g_rosterSettings.noMyDxcc = noMyDxcc.checked;
|
||||
g_rosterSettings.onlyMyDxcc = onlyMyDxcc.checked;
|
||||
if (
|
||||
noMsg.checked &&
|
||||
onlyMsg.checked &&
|
||||
noMsgValue.value == onlyMsgValue.value
|
||||
)
|
||||
if (noMsg.checked && onlyMsg.checked && noMsgValue.value == onlyMsgValue.value)
|
||||
{
|
||||
if (g_rosterSettings.noMsg) noMsg.checked = false;
|
||||
else onlyMsg.checked = false;
|
||||
if (g_rosterSettings.noMsg)
|
||||
{
|
||||
noMsg.checked = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
onlyMsg.checked = false;
|
||||
}
|
||||
}
|
||||
g_rosterSettings.noMsg = noMsg.checked;
|
||||
g_rosterSettings.onlyMsg = onlyMsg.checked;
|
||||
|
@ -1146,10 +1191,66 @@ function valuesChanged()
|
|||
|
||||
g_scriptReport = Object();
|
||||
for (const callHash in window.opener.g_callRoster)
|
||||
{ window.opener.g_callRoster[callHash].callObj.alerted = false; }
|
||||
{
|
||||
window.opener.g_callRoster[callHash].callObj.alerted = false;
|
||||
}
|
||||
window.opener.goProcessRoster();
|
||||
}
|
||||
|
||||
function loadFilterSettings()
|
||||
{
|
||||
var filters = "";
|
||||
for (const filter in g_rosterSettings.displayFilters)
|
||||
{
|
||||
var slider = document.getElementById("filter" + filter + "Slider");
|
||||
|
||||
if (slider)
|
||||
{
|
||||
slider.value = g_rosterSettings.displayFilters[filter];
|
||||
var td = document.getElementById("filter" + filter + "Td");
|
||||
if (filter != "huerotate")
|
||||
{
|
||||
td.innerHTML = slider.value + "%";
|
||||
filters += filter + "(" + slider.value + "%) ";
|
||||
}
|
||||
else
|
||||
{
|
||||
td.innerHTML = slider.value + " deg";
|
||||
filters += "hue-rotate(" + slider.value + "deg) ";
|
||||
}
|
||||
}
|
||||
}
|
||||
document.documentElement.style.filter = filters;
|
||||
}
|
||||
|
||||
function filtersChanged()
|
||||
{
|
||||
for (const filter in g_rosterSettings.displayFilters)
|
||||
{
|
||||
var slider = document.getElementById("filter" + filter + "Slider");
|
||||
|
||||
if (slider)
|
||||
{
|
||||
g_rosterSettings.displayFilters[filter] = slider.value;
|
||||
}
|
||||
else
|
||||
{
|
||||
// no longer a filter, get rid of it
|
||||
delete g_rosterSettings.displayFilters[filter];
|
||||
}
|
||||
}
|
||||
loadFilterSettings();
|
||||
}
|
||||
|
||||
function resetFilters()
|
||||
{
|
||||
for (const filter in g_rosterSettings.displayFilters)
|
||||
{
|
||||
g_rosterSettings.displayFilters[filter] = g_def_displayFilters[filter];
|
||||
}
|
||||
loadFilterSettings();
|
||||
}
|
||||
|
||||
function getBuffer(file_url, callback, flag, mode, port, cookie)
|
||||
{
|
||||
let url = require("url");
|
||||
|
@ -1177,7 +1278,7 @@ function getBuffer(file_url, callback, flag, mode, port, cookie)
|
|||
}
|
||||
http.get(options, function (res)
|
||||
{
|
||||
let fsize = res.headers["content-length"];
|
||||
// let fsize = res.headers["content-length"];
|
||||
let cookies = null;
|
||||
if (typeof res.headers["set-cookie"] != "undefined")
|
||||
{ cookies = res.headers["set-cookie"]; }
|
||||
|
@ -1404,6 +1505,20 @@ function clearAllITUzIgnores()
|
|||
window.opener.goProcessRoster();
|
||||
}
|
||||
|
||||
function openSettings()
|
||||
{
|
||||
MainCallRoster.style.display = "block";
|
||||
settingsDiv.style.display = "block";
|
||||
editView.style.display = "none";
|
||||
}
|
||||
|
||||
function closeSettings()
|
||||
{
|
||||
MainCallRoster.style.display = "block";
|
||||
settingsDiv.style.display = "none";
|
||||
editView.style.display = "none";
|
||||
}
|
||||
|
||||
function closeEditIgnores()
|
||||
{
|
||||
MainCallRoster.style.display = "block";
|
||||
|
@ -1542,14 +1657,25 @@ function openIgnoreEdit()
|
|||
worker += "</table></div>";
|
||||
|
||||
editTables.innerHTML = worker;
|
||||
editView.style.height = (window.innerHeight - 50) + "px";
|
||||
editView.style.height = (window.innerHeight - 45) + "px";
|
||||
}
|
||||
|
||||
function onMyKeyDown(event)
|
||||
{
|
||||
if (!g_typingInRoster)
|
||||
{
|
||||
window.opener.onMyKeyDown(event);
|
||||
if (event.code == "KeyS" && event.ctrlKey == true)
|
||||
{
|
||||
openSettings();
|
||||
}
|
||||
else if (event.code == "KeyR" && event.ctrlKey == true)
|
||||
{
|
||||
resetFilters();
|
||||
}
|
||||
else
|
||||
{
|
||||
window.opener.onMyKeyDown(event);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1594,10 +1720,13 @@ function init()
|
|||
);
|
||||
}
|
||||
loadSettings();
|
||||
loadFilterSettings();
|
||||
updateInstances();
|
||||
|
||||
// callback to addControls();
|
||||
loadRosteri18n();
|
||||
|
||||
setRosterTop();
|
||||
}
|
||||
|
||||
// From i18n.js
|
||||
|
@ -1647,9 +1776,7 @@ function addControls()
|
|||
this.label = hideControlsText;
|
||||
g_rosterSettings.controls = true;
|
||||
}
|
||||
g_compactMenu.items[0].label = g_rosterSettings.controls
|
||||
? hideControlsText
|
||||
: showControlsText;
|
||||
g_compactMenu.items[0].label = g_rosterSettings.controls ? hideControlsText : showControlsText;
|
||||
localStorage.rosterSettings = JSON.stringify(g_rosterSettings);
|
||||
setVisual();
|
||||
}
|
||||
|
@ -1671,15 +1798,33 @@ function addControls()
|
|||
this.label = hideControlsText;
|
||||
g_rosterSettings.controls = true;
|
||||
}
|
||||
g_menu.items[0].label = g_rosterSettings.controls
|
||||
? hideControlsText
|
||||
: showControlsText;
|
||||
g_menu.items[0].label = g_rosterSettings.controls ? hideControlsText : showControlsText;
|
||||
localStorage.rosterSettings = JSON.stringify(g_rosterSettings);
|
||||
setVisual();
|
||||
}
|
||||
});
|
||||
g_compactMenu.append(item);
|
||||
|
||||
item = new nw.MenuItem({
|
||||
type: "normal",
|
||||
label: $.i18n("roster.menu.Settings"),
|
||||
click: function ()
|
||||
{
|
||||
openSettings();
|
||||
}
|
||||
});
|
||||
g_menu.append(item);
|
||||
|
||||
item = new nw.MenuItem({
|
||||
type: "normal",
|
||||
label: $.i18n("roster.menu.Settings"),
|
||||
click: function ()
|
||||
{
|
||||
openSettings();
|
||||
}
|
||||
});
|
||||
g_compactMenu.append(item);
|
||||
|
||||
item = new nw.MenuItem({
|
||||
type: "normal",
|
||||
label: $.i18n("roster.menu.CompactMode"),
|
||||
|
@ -2179,6 +2324,27 @@ function addControls()
|
|||
|
||||
noUnknownDXCC.checked = g_rosterSettings.noUnknownDXCC;
|
||||
|
||||
clearRosterOnBandChange.checked = g_rosterSettings.clearRosterOnBandChange;
|
||||
rosterAlwaysOnTop.checked = g_rosterSettings.rosterAlwaysOnTop;
|
||||
rosterDelayOnFocus.checked = g_rosterSettings.rosterDelayOnFocus;
|
||||
displayDelayOnFocus();
|
||||
rosterDelayTime.value = g_rosterSettings.rosterDelayTime;
|
||||
rosterDelayTimeTd.innerHTML = rosterDelayTime.value + "ms";
|
||||
setRosterTimeView();
|
||||
|
||||
for (const column in ROSTER_COLUMNS)
|
||||
{
|
||||
if (column != "Callsign")
|
||||
{
|
||||
var option = newOption(column, column);
|
||||
if (column == g_rosterSettings.compactEntity)
|
||||
{
|
||||
option.selected = true;
|
||||
}
|
||||
compactEntitySelect.appendChild(option);
|
||||
}
|
||||
}
|
||||
|
||||
setVisual();
|
||||
document.addEventListener("keydown", onMyKeyDown, false);
|
||||
|
||||
|
@ -2188,6 +2354,71 @@ function addControls()
|
|||
updateInstances();
|
||||
}
|
||||
|
||||
function compactEntityChanged()
|
||||
{
|
||||
g_rosterSettings.compactEntity = compactEntitySelect.value;
|
||||
viewRoster();
|
||||
}
|
||||
|
||||
function clearRosterOnBandChangeValueChanged(what)
|
||||
{
|
||||
g_rosterSettings.clearRosterOnBandChange = clearRosterOnBandChange.checked;
|
||||
writeRosterSettings();
|
||||
}
|
||||
|
||||
function rosterDelayOnFocusValueChanged(what)
|
||||
{
|
||||
g_rosterSettings.rosterDelayOnFocus = rosterDelayOnFocus.checked;
|
||||
displayDelayOnFocus();
|
||||
writeRosterSettings();
|
||||
}
|
||||
|
||||
function displayDelayOnFocus()
|
||||
{
|
||||
if (g_rosterSettings.rosterDelayOnFocus)
|
||||
{
|
||||
rosterDelayTimeTd.style.display = "block";
|
||||
rosterDelayTime.style.display = "block";
|
||||
}
|
||||
else
|
||||
{
|
||||
rosterDelayTimeTd.style.display = "none";
|
||||
rosterDelayTime.style.display = "none";
|
||||
}
|
||||
}
|
||||
|
||||
function changeRosterDelayTime()
|
||||
{
|
||||
g_rosterSettings.rosterDelayTime = rosterDelayTime.value;
|
||||
rosterDelayTimeTd.innerHTML = rosterDelayTime.value + "ms";
|
||||
writeRosterSettings();
|
||||
}
|
||||
|
||||
function changeRosterTime()
|
||||
{
|
||||
g_rosterSettings.rosterTime = rosterTime.value;
|
||||
setRosterTimeView();
|
||||
writeRosterSettings();
|
||||
viewRoster();
|
||||
}
|
||||
|
||||
function changeRosterTop(butt)
|
||||
{
|
||||
g_rosterSettings.rosterAlwaysOnTop = butt.checked;
|
||||
setRosterTop();
|
||||
}
|
||||
|
||||
function setRosterTop()
|
||||
{
|
||||
nw.Window.get().setAlwaysOnTop(g_rosterSettings.rosterAlwaysOnTop);
|
||||
}
|
||||
|
||||
function setRosterTimeView()
|
||||
{
|
||||
rosterTime.value = g_rosterSettings.rosterTime;
|
||||
rosterTimeTd.innerHTML = Number(rosterTime.value).toDHMS();
|
||||
}
|
||||
|
||||
function handleContextMenu(ev)
|
||||
{
|
||||
if (editView.style.display == "inline-block") return false;
|
||||
|
@ -2296,7 +2527,7 @@ function handleContextMenu(ev)
|
|||
}
|
||||
|
||||
let name = "";
|
||||
if (ev.target.tagName == "TD")
|
||||
if (ev.target.tagName == "TD" || (g_rosterSettings.compact && ev.target.tagName == "DIV"))
|
||||
{
|
||||
name = ev.target.getAttribute("name");
|
||||
}
|
||||
|
|
|
@ -26,8 +26,8 @@ function prepareRosterSettings()
|
|||
// be it's own function maybe?
|
||||
rosterSettings.canMsg =
|
||||
window.opener.g_mapSettings.offlineMode == false &&
|
||||
window.opener.g_appSettings.gtShareEnable == "true" &&
|
||||
window.opener.g_appSettings.gtMsgEnable == "true";
|
||||
window.opener.g_appSettings.gtShareEnable == true &&
|
||||
window.opener.g_appSettings.gtMsgEnable == true;
|
||||
|
||||
// The following 3 sections deal with QSLing, do we break them out
|
||||
// individually or lump them into a qslUser function that sets
|
||||
|
|
|
@ -35,12 +35,12 @@ function processRosterFiltering(callRoster, rosterSettings)
|
|||
|
||||
if (!call || !call.match(CALLSIGN_REGEXP))
|
||||
{
|
||||
console.error(`Invalid Callsign ${call}`, entry)
|
||||
// console.error(`Invalid Callsign ${call}`, entry)
|
||||
entry.tx = false
|
||||
continue;
|
||||
}
|
||||
|
||||
if (rosterSettings.now - callObj.age > window.opener.g_mapSettings.rosterTime)
|
||||
if (rosterSettings.now - callObj.age > g_rosterSettings.rosterTime)
|
||||
{
|
||||
entry.tx = false;
|
||||
entry.alerted = false;
|
||||
|
|
|
@ -824,9 +824,7 @@ function processRosterHunting(callRoster, rosterSettings, awardTracker)
|
|||
|
||||
if (g_rosterSettings.columns.Spot)
|
||||
{
|
||||
callObj.spot = window.opener.getSpotTime(
|
||||
callObj.DEcall + callObj.mode + callObj.band + callObj.grid
|
||||
);
|
||||
callObj.spot = window.opener.getSpotTime(callObj.DEcall + callObj.mode + callObj.band + callObj.grid);
|
||||
if (callObj.spot == null)
|
||||
{
|
||||
callObj.spot = { when: 0, snr: 0 };
|
||||
|
|
|
@ -1,51 +1,29 @@
|
|||
// Because the County is clickable we do not allow the whole compact div to trigger an initiateQSO
|
||||
g_isCompactCounty = false;
|
||||
|
||||
function renderCompactRosterHeaders()
|
||||
{
|
||||
g_isCompactCounty = (g_rosterSettings.compactEntity == "County");
|
||||
return "<div id=\"buttonsDiv\" style=\"margin-left:0px;white-space:normal;\" onmouseenter='rosterInFocus()' onmouseleave='rosterNoFocus()'>";
|
||||
}
|
||||
|
||||
function renderCompactRosterRow(callObj)
|
||||
function renderCompactRosterRow(callObj, showBand)
|
||||
{
|
||||
var thisCall = callObj.DEcall;
|
||||
var tt =
|
||||
callObj.RSTsent +
|
||||
"㏈, " +
|
||||
parseInt(callObj.dt * 100) +
|
||||
"ms, " +
|
||||
callObj.delta +
|
||||
"hz" +
|
||||
(callObj.grid.length ? ", " + callObj.grid : "") +
|
||||
", " +
|
||||
(timeNowSec() - callObj.age).toDHMS();
|
||||
var worker =
|
||||
"<div class='compact' onClick='initiateQso(\"" +
|
||||
thisCall +
|
||||
callObj.band +
|
||||
callObj.mode +
|
||||
"\")' ";
|
||||
worker +=
|
||||
"id='" +
|
||||
thisCall +
|
||||
callObj.band +
|
||||
callObj.mode +
|
||||
"' title='" +
|
||||
tt +
|
||||
"'>";
|
||||
worker +=
|
||||
"<div class='compactCallsign' name='Callsign' " +
|
||||
callObj.style.call +
|
||||
" >" +
|
||||
thisCall.formatCallsign() +
|
||||
"</div>";
|
||||
worker +=
|
||||
"<div class='compactDXCC' name='DXCC (" +
|
||||
callObj.dxcc +
|
||||
")' " +
|
||||
callObj.style.dxcc +
|
||||
">" +
|
||||
window.opener.g_dxccToAltName[callObj.dxcc] +
|
||||
"</div>";
|
||||
worker += "</div>";
|
||||
|
||||
var ID = callObj.DEcall + callObj.band + callObj.mode;
|
||||
var title = callObj.RSTsent + "㏈, " + parseInt(callObj.dt * 100) + "ms, " + callObj.delta + "hz" + (callObj.grid.length ? ", " + callObj.grid : "") + ", " + (timeNowSec() - callObj.age).toDHMS();
|
||||
var bandView = showBand ? "<div style='color: #" + window.opener.g_pskColors[callObj.band] + ";float:right;display:inline-block;'>" + callObj.band + "</div>" : "";
|
||||
if (g_rosterSettings.compactEntity == "Band")
|
||||
{
|
||||
bandView = "";
|
||||
}
|
||||
var onClick = " onClick='initiateQso(\"" + ID + "\")' id='" + ID + "' title='" + title + "' ";
|
||||
var wholeClick = (g_isCompactCounty ? "" : onClick);
|
||||
var callsignClick = (g_isCompactCounty ? onClick : "");
|
||||
var worker = "<div class='compact' " + wholeClick + " >";
|
||||
worker += "<div class='compactCallsign' " + callsignClick + " name='Callsign' " + callObj.style.call + " >" + callObj.DEcall.formatCallsign() + bandView + "</div>";
|
||||
worker += "<div class='compactData'>";
|
||||
worker += renderEntryForColumn(g_rosterSettings.compactEntity, callObj, "div");
|
||||
worker += "</div></div>";
|
||||
return worker;
|
||||
}
|
||||
|
||||
|
|
|
@ -33,6 +33,16 @@ function renderRoster(callRoster, rosterSettings)
|
|||
columnOverrides.LoTW = false;
|
||||
}
|
||||
|
||||
if (rosterSettings.canMsg == true)
|
||||
{
|
||||
huntingMatrixOAMSDiv.style.display = "";
|
||||
}
|
||||
else
|
||||
{
|
||||
huntingMatrixOAMSDiv.style.display = "none";
|
||||
columnOverrides.OAMS = false;
|
||||
}
|
||||
|
||||
if (window.opener.g_appSettings.potaEnabled === 1)
|
||||
{
|
||||
huntingMatrixPotaDiv.style.display = "";
|
||||
|
@ -87,17 +97,19 @@ function renderRoster(callRoster, rosterSettings)
|
|||
}
|
||||
|
||||
window.document.title = `Call Roster: ${countParts.join(" • ")}`;
|
||||
let multiInstance = false;
|
||||
if (listShortInstances().length > 0)
|
||||
{
|
||||
window.document.title += " | " + listShortInstances().join(" • ");
|
||||
multiInstance = true;
|
||||
}
|
||||
|
||||
let showBands = (Object.keys(rosterSettings.bands).length > 1) || g_rosterSettings.columns.Band;
|
||||
let multiBand = Object.keys(rosterSettings.bands).length > 1;
|
||||
let showBands = multiBand || g_rosterSettings.columns.Band;
|
||||
let showModes = (Object.keys(rosterSettings.modes).length > 1) || g_rosterSettings.columns.Mode;
|
||||
|
||||
columnOverrides.Band = showBands
|
||||
columnOverrides.Mode = showModes
|
||||
const rosterColumns = rosterColumnList(g_rosterSettings.columns, columnOverrides)
|
||||
columnOverrides.Band = showBands;
|
||||
columnOverrides.Mode = showModes;
|
||||
const rosterColumns = rosterColumnList(g_rosterSettings.columns, columnOverrides);
|
||||
|
||||
if (g_rosterSettings.compact)
|
||||
{
|
||||
|
@ -108,7 +120,7 @@ function renderRoster(callRoster, rosterSettings)
|
|||
sortCallList(visibleCallList, g_rosterSettings.sortColumn, g_rosterSettings.sortReverse);
|
||||
}
|
||||
|
||||
let worker = g_rosterSettings.compact ? renderCompactRosterHeaders() : renderNormalRosterHeaders(rosterColumns)
|
||||
let worker = g_rosterSettings.compact ? renderCompactRosterHeaders() : renderNormalRosterHeaders(rosterColumns);
|
||||
|
||||
// Third loop: render all rows
|
||||
for (let x in visibleCallList)
|
||||
|
@ -133,10 +145,10 @@ function renderRoster(callRoster, rosterSettings)
|
|||
}
|
||||
}
|
||||
|
||||
worker += g_rosterSettings.compact ? renderCompactRosterRow(callObj) : renderNormalRosterRow(rosterColumns, callObj)
|
||||
worker += g_rosterSettings.compact ? renderCompactRosterRow(callObj, multiInstance || multiBand) : renderNormalRosterRow(rosterColumns, callObj);
|
||||
}
|
||||
|
||||
worker += g_rosterSettings.compact ? renderCompactRosterFooter() : renderNormalRosterFooter()
|
||||
worker += g_rosterSettings.compact ? renderCompactRosterFooter() : renderNormalRosterFooter();
|
||||
|
||||
RosterTable.innerHTML = worker;
|
||||
}
|
||||
|
|
|
@ -13,7 +13,6 @@ function renderHeaderForColumn(column)
|
|||
let attrs = (columnInfo && columnInfo.tableHeader && columnInfo.tableHeader()) || {}
|
||||
|
||||
attrs.name = column
|
||||
|
||||
attrs.html = attrs.html || column
|
||||
|
||||
if (columnInfo.compare)
|
||||
|
@ -22,16 +21,21 @@ function renderHeaderForColumn(column)
|
|||
attrs.onClick = `setRosterSorting('${column}');`
|
||||
}
|
||||
|
||||
if (g_rosterSettings.sortColumn == column)
|
||||
{
|
||||
attrs.html += "<div style='display:inline-block;margin:0px;padding:0px;'> " + (g_rosterSettings.sortReverse == false ? "▲" : "▼") + "</div>";
|
||||
}
|
||||
|
||||
return renderRosterTableHTML("th", attrs)
|
||||
}
|
||||
|
||||
function renderEntryForColumn(column, entry)
|
||||
function renderEntryForColumn(column, entry, element = "td")
|
||||
{
|
||||
const columnInfo = ROSTER_COLUMNS[column]
|
||||
|
||||
let attrs = (columnInfo && columnInfo.tableData && columnInfo.tableData(entry)) || {}
|
||||
|
||||
return renderRosterTableHTML("td", attrs)
|
||||
return renderRosterTableHTML(element, attrs)
|
||||
}
|
||||
|
||||
function renderRosterTableHTML(tag, attrs)
|
||||
|
|
|
@ -75,7 +75,7 @@ const ROSTER_COLUMNS = {
|
|||
},
|
||||
|
||||
Band: {
|
||||
compare: false,
|
||||
compare: callObjSimpleComparer("band"),
|
||||
tableData: (callObj) => ({
|
||||
style: `color: #${window.opener.g_pskColors[callObj.band]};`,
|
||||
html: callObj.band
|
||||
|
@ -83,7 +83,7 @@ const ROSTER_COLUMNS = {
|
|||
},
|
||||
|
||||
Mode: {
|
||||
compare: false,
|
||||
compare: callObjSimpleComparer("mode"),
|
||||
tableData: (callObj) => ({
|
||||
style: `color: #${g_modeColors[callObj.mode] || "888888"};`,
|
||||
html: callObj.mode
|
||||
|
@ -95,7 +95,7 @@ const ROSTER_COLUMNS = {
|
|||
tableData: (callObj) => ({
|
||||
rawAttrs: callObj.style.grid,
|
||||
onClick: `centerOn("${callObj.grid}")`,
|
||||
html: callObj.grid
|
||||
html: (callObj.grid.length > 0 ? callObj.grid : " ")
|
||||
})
|
||||
},
|
||||
|
||||
|
@ -119,7 +119,7 @@ const ROSTER_COLUMNS = {
|
|||
title: window.opener.g_dxccInfo[callObj.dxcc].pp,
|
||||
name: `DXCC (${callObj.dxcc})`,
|
||||
rawAttrs: callObj.style.dxcc,
|
||||
html: [window.opener.g_dxccToAltName[callObj.dxcc], callObj.dxccSuffix].join(" ")
|
||||
html: (callObj.dxccSuffix ? [window.opener.g_dxccToAltName[callObj.dxcc], callObj.dxccSuffix].join(" ") : window.opener.g_dxccToAltName[callObj.dxcc])
|
||||
})
|
||||
},
|
||||
|
||||
|
@ -128,7 +128,7 @@ const ROSTER_COLUMNS = {
|
|||
tableData: (callObj) => ({
|
||||
align: "center",
|
||||
style: "margin:0; padding:0;",
|
||||
html: `<img style='padding-top:3px' src='./img/flags/16/${window.opener.g_dxccInfo[callObj.dxcc].flag}'>`
|
||||
html: `<img style='margin-bottom:-3px;height:14px' src='./img/flags/16/${window.opener.g_dxccInfo[callObj.dxcc].flag}'>`
|
||||
})
|
||||
},
|
||||
|
||||
|
@ -137,7 +137,7 @@ const ROSTER_COLUMNS = {
|
|||
tableData: (callObj) => ({
|
||||
align: "center",
|
||||
rawAttrs: callObj.style.state,
|
||||
html: callObj.state ? callObj.state.substr(3) : ""
|
||||
html: callObj.state ? callObj.state.substr(3) : " "
|
||||
})
|
||||
},
|
||||
|
||||
|
@ -150,7 +150,7 @@ const ROSTER_COLUMNS = {
|
|||
let attrs = {
|
||||
align: "center",
|
||||
rawAttrs: callObj.style.cnty,
|
||||
html: callObj.cnty ? window.opener.g_cntyToCounty[callObj.cnty] : ""
|
||||
html: callObj.cnty ? window.opener.g_cntyToCounty[callObj.cnty] : " "
|
||||
}
|
||||
if (callObj.cnty && callObj.qual == false)
|
||||
{
|
||||
|
@ -168,7 +168,7 @@ const ROSTER_COLUMNS = {
|
|||
tableData: (callObj) => ({
|
||||
align: "center",
|
||||
rawAttrs: callObj.style.cont,
|
||||
html: callObj.cont ? callObj.cont : ""
|
||||
html: callObj.cont ? callObj.cont : " "
|
||||
})
|
||||
},
|
||||
|
||||
|
@ -201,7 +201,7 @@ const ROSTER_COLUMNS = {
|
|||
tableHeader: () => ({ html: `Dist (${window.opener.distanceUnit.value.toLowerCase()})` }),
|
||||
tableData: (callObj) => ({
|
||||
style: "color: cyan;",
|
||||
html: Math.round(callObj.distance * MyCircle.validateRadius(window.opener.distanceUnit.value))
|
||||
html: (callObj.distance > 0 ? Math.round(callObj.distance * MyCircle.validateRadius(window.opener.distanceUnit.value)) : " ")
|
||||
})
|
||||
},
|
||||
|
||||
|
@ -209,7 +209,7 @@ const ROSTER_COLUMNS = {
|
|||
compare: callObjSimpleComparer("heading"),
|
||||
tableData: (callObj) => ({
|
||||
style: "color: yellow;",
|
||||
html: Math.round(callObj.heading)
|
||||
html: (callObj.distance > 0 ? Math.round(callObj.heading) : " ")
|
||||
})
|
||||
},
|
||||
|
||||
|
@ -235,7 +235,7 @@ const ROSTER_COLUMNS = {
|
|||
compare: callObjSimpleComparer("px"),
|
||||
tableData: (callObj) => ({
|
||||
rawAttrs: callObj.style.px,
|
||||
html: callObj.px ? callObj.px : ""
|
||||
html: callObj.px ? callObj.px : " "
|
||||
})
|
||||
},
|
||||
|
||||
|
@ -281,6 +281,12 @@ const ROSTER_COLUMNS = {
|
|||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
return {
|
||||
html: " "
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
|
@ -289,7 +295,7 @@ const ROSTER_COLUMNS = {
|
|||
tableData: (callObj) => ({
|
||||
style: "color: #0F0;",
|
||||
align: "center",
|
||||
html: (callObj.DEcall in window.opener.g_eqslCallsigns ? "✔" : "")
|
||||
html: (callObj.DEcall in window.opener.g_eqslCallsigns ? "✔" : " ")
|
||||
})
|
||||
},
|
||||
|
||||
|
@ -298,7 +304,7 @@ const ROSTER_COLUMNS = {
|
|||
tableData: (callObj) => ({
|
||||
style: "color: #0F0;",
|
||||
align: "center",
|
||||
html: (callObj.DEcall in window.opener.g_oqrsCallsigns ? "✔" : "")
|
||||
html: (callObj.DEcall in window.opener.g_oqrsCallsigns ? "✔" : " ")
|
||||
})
|
||||
},
|
||||
|
||||
|
@ -325,7 +331,7 @@ const ROSTER_COLUMNS = {
|
|||
align: "center",
|
||||
style: "margin: 0; padding: 0; cursor: pointer; background-clip: content-box; box-shadow: 0 0 4px 4px inset #2222FFFF;",
|
||||
onClick: `openChatToCid("${callObj.gt}")`,
|
||||
html: "<img height='16px' style='' src='./img/gt_chat.png' />"
|
||||
html: "<img height='13px' style='margin-bottom:-2px;' src='./img/gt_chat.png' />"
|
||||
}
|
||||
}
|
||||
else
|
||||
|
@ -334,10 +340,16 @@ const ROSTER_COLUMNS = {
|
|||
align: "center",
|
||||
style: "margin: 0; padding: 0; cursor: pointer;",
|
||||
onClick: `openChatToCid("${callObj.gt}")`,
|
||||
html: "<img height='16px' style='' src='./img/gt_chat.png' />"
|
||||
html: "<img height='13px' style='margin-bottom:-2px;' src='./img/gt_chat.png' />"
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
return {
|
||||
html: " "
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
|
@ -379,7 +391,7 @@ const ROSTER_COLUMNS = {
|
|||
},
|
||||
|
||||
POTA: {
|
||||
compare: false,
|
||||
compare: callObjSimpleComparer("pota"),
|
||||
tableData: (callObj) => ({
|
||||
name: "POTA",
|
||||
rawAttrs: callObj.style.pota,
|
||||
|
@ -406,7 +418,7 @@ function potaColumnRef(callObj)
|
|||
}
|
||||
else
|
||||
{
|
||||
return "";
|
||||
return " ";
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -431,7 +443,7 @@ function wantedColumnParts(callObj, options)
|
|||
|
||||
if (Object.keys(callObj.hunting).length == 0)
|
||||
{
|
||||
return [];
|
||||
return [" "];
|
||||
}
|
||||
|
||||
let parts = [];
|
||||
|
|
|
@ -11,40 +11,29 @@ function sendAlerts(callRoster, rosterSettings)
|
|||
var callObj = callRoster[entry].callObj;
|
||||
|
||||
// chrbayer: what does the tx field mean? no alerts are generated (at all) if this is in place...
|
||||
// if (!callObj.tx) continue;
|
||||
// if it's "not visible in the roster, don't put it in the report!"
|
||||
if (callRoster[entry].tx == false) continue;
|
||||
|
||||
// TODO: Get rid of realtime
|
||||
if (g_rosterSettings.realtime == false)
|
||||
var call = callObj.DEcall;
|
||||
g_scriptReport[call] = Object.assign({}, callObj);
|
||||
g_scriptReport[call].dxccName = window.opener.g_dxccToAltName[callObj.dxcc];
|
||||
g_scriptReport[call].distance = (callObj.distance > 0) ? parseInt(callObj.distance * MyCircle.validateRadius(window.opener.distanceUnit.value)) : 0;
|
||||
|
||||
delete g_scriptReport[call].DEcall;
|
||||
g_scriptReport[call].rect = null;
|
||||
delete g_scriptReport[call].rect;
|
||||
delete g_scriptReport[call].style;
|
||||
delete g_scriptReport[call].wspr;
|
||||
delete g_scriptReport[call].qso;
|
||||
delete g_scriptReport[call].instance;
|
||||
|
||||
if (rosterSettings.callMode != "all")
|
||||
{
|
||||
var call = callObj.DEcall;
|
||||
g_scriptReport[call] = Object.assign({}, callObj);
|
||||
g_scriptReport[call].dxccName =
|
||||
window.opener.g_dxccToAltName[callObj.dxcc];
|
||||
g_scriptReport[call].distance = parseInt(
|
||||
callObj.distance *
|
||||
MyCircle.validateRadius(window.opener.distanceUnit.value)
|
||||
);
|
||||
|
||||
delete g_scriptReport[call].DEcall;
|
||||
g_scriptReport[call].rect = null;
|
||||
delete g_scriptReport[call].rect;
|
||||
delete g_scriptReport[call].style;
|
||||
delete g_scriptReport[call].wspr;
|
||||
delete g_scriptReport[call].qso;
|
||||
delete g_scriptReport[call].instance;
|
||||
|
||||
if (rosterSettings.callMode != "all")
|
||||
{
|
||||
g_scriptReport[call].shouldAlert = true;
|
||||
g_scriptReport[call].reason.push(g_rosterSettings.hunting);
|
||||
}
|
||||
g_scriptReport[call].shouldAlert = true;
|
||||
g_scriptReport[call].reason.push(g_rosterSettings.hunting);
|
||||
}
|
||||
|
||||
if (
|
||||
callObj.alerted == false &&
|
||||
rosterSettings.callMode == "all" &&
|
||||
callObj.shouldAlert == true
|
||||
)
|
||||
if (callObj.alerted == false && rosterSettings.callMode == "all" && callObj.shouldAlert == true)
|
||||
{
|
||||
callObj.alerted = true;
|
||||
shouldAlert++;
|
||||
|
@ -67,10 +56,7 @@ function sendAlerts(callRoster, rosterSettings)
|
|||
{
|
||||
script = "cr-alert.bat";
|
||||
}
|
||||
if (
|
||||
fs.existsSync(dirPath + script) &&
|
||||
g_rosterSettings.realtime == false
|
||||
)
|
||||
if (fs.existsSync(dirPath + script))
|
||||
{
|
||||
scriptExists = true;
|
||||
scriptIcon.innerHTML =
|
||||
|
@ -101,24 +87,15 @@ function sendAlerts(callRoster, rosterSettings)
|
|||
}
|
||||
else if (notify == "1")
|
||||
{
|
||||
window.opener.speakAlertString(
|
||||
window.opener.huntRosterNotifyWord.value
|
||||
);
|
||||
window.opener.speakAlertString(window.opener.huntRosterNotifyWord.value);
|
||||
}
|
||||
}
|
||||
|
||||
if (
|
||||
g_rosterSettings.realtime == false &&
|
||||
scriptExists &&
|
||||
window.opener.g_crScript == 1
|
||||
)
|
||||
if (scriptExists && window.opener.g_crScript == 1)
|
||||
{
|
||||
try
|
||||
{
|
||||
fs.writeFileSync(
|
||||
dirPath + "cr-alert.json",
|
||||
JSON.stringify(g_scriptReport, null, 2)
|
||||
);
|
||||
fs.writeFileSync(dirPath + "cr-alert.json", JSON.stringify(g_scriptReport, null, 2));
|
||||
|
||||
var thisProc = dirPath + script;
|
||||
var cp = require("child_process");
|
||||
|
|
|
@ -1,3 +1,19 @@
|
|||
html, body {
|
||||
margin: 0px;
|
||||
-webkit-user-select: none;
|
||||
user-select: none;
|
||||
height: 100%;
|
||||
background-color: black;
|
||||
color: #fff;
|
||||
white-space: nowrap;
|
||||
font-family: Sans-Serif;
|
||||
font-size: 12px;
|
||||
text-align: center;
|
||||
overflow: hidden;
|
||||
width: 100%;
|
||||
display: block;
|
||||
}
|
||||
|
||||
@media print {
|
||||
.printHotKeyDiv {
|
||||
background-color: white;
|
||||
|
@ -21,7 +37,6 @@
|
|||
|
||||
#mapDiv {
|
||||
height: 100%;
|
||||
|
||||
z-index: 0;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
|
@ -269,21 +284,6 @@
|
|||
-webkit-border-radius: 6px;
|
||||
}
|
||||
|
||||
html,
|
||||
body {
|
||||
-webkit-user-select: none;
|
||||
user-select: none;
|
||||
height: 100%;
|
||||
background-color: black;
|
||||
color: #fff;
|
||||
white-space: nowrap;
|
||||
font-family: Sans-Serif;
|
||||
font-size: 12px;
|
||||
text-align: center;
|
||||
overflow: hidden;
|
||||
width: 100%;
|
||||
display: block;
|
||||
}
|
||||
|
||||
button:focus {
|
||||
outline: none;
|
||||
|
@ -538,6 +538,7 @@ select {
|
|||
color: #ff0;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
select:focus {
|
||||
outline: none;
|
||||
}
|
||||
|
@ -554,18 +555,8 @@ select:disabled {
|
|||
}
|
||||
|
||||
select option {
|
||||
margin: 40px;
|
||||
background: #000;
|
||||
color: #fff;
|
||||
text-shadow: 0 2px 0 rgba(0, 0, 0, 0.4);
|
||||
-moz-appearance: none;
|
||||
-webkit-appearance: none;
|
||||
-moz-border-radius: 8px;
|
||||
-webkit-border-radius: 8px;
|
||||
border-radius: 8px;
|
||||
text-indent: 0.2px;
|
||||
text-overflow: "";
|
||||
padding: 5px;
|
||||
}
|
||||
|
||||
select option:focus {
|
||||
|
|
|
@ -442,7 +442,8 @@ table.rosterTable {
|
|||
table.rosterTable td,
|
||||
table.rosterTable th {
|
||||
border: 1px solid #555;
|
||||
padding: 2px 4px;
|
||||
padding: 2px;
|
||||
padding-bottom: 1px;
|
||||
}
|
||||
|
||||
table.rosterTable thead {
|
||||
|
@ -521,9 +522,11 @@ table.rosterTable thead th:first-child {
|
|||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.compactDXCC {
|
||||
.compactData {
|
||||
padding: 2px;
|
||||
max-width: 9em;
|
||||
min-width: 9em;
|
||||
max-height: 14px;
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
text-overflow: ellipsis;
|
||||
|
@ -541,14 +544,15 @@ table.rosterTable thead th:first-child {
|
|||
}
|
||||
|
||||
.ackBadge {
|
||||
padding: 0;
|
||||
width: 1.5em;
|
||||
padding: 0px;
|
||||
margin: 0px;
|
||||
height: 12px;
|
||||
margin-bottom: -2px;
|
||||
}
|
||||
|
||||
.wantedCol {
|
||||
max-width: 160px;
|
||||
overflow: hidden;
|
||||
text-overflow:
|
||||
ellipsis;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"name": "GridTracker",
|
||||
"product_string_do_not_use": "gridtracker",
|
||||
"version": "1.23.0110",
|
||||
"version": "1.23.0131",
|
||||
"betaVersion": "",
|
||||
"description": "GridTracker, an amateur radio companion",
|
||||
"author": "GridTracker.org",
|
||||
|
|
Ładowanie…
Reference in New Issue