kopia lustrzana https://gitlab.com/gridtracker.org/gridtracker
Squashed commits '${title}'
rodzic
f1dc31b192
commit
bd3d63fe2f
|
@ -1,3 +1,19 @@
|
|||
gridtracker (1.23.1202) unstable; urgency=low
|
||||
- BIGCTY - Update from November 29th
|
||||
- System - Returned LoTW, eQSL and OQRS membership columns to log entries
|
||||
- System - Fixed initial install window sizes
|
||||
- Logbook Viewer - Added DXCC reset view button
|
||||
- Call Roster
|
||||
- New “Move Column Right” added to right-click Column header
|
||||
- Fixed handling of compound callsigns
|
||||
- Fixed saving of Ignored CQ zones and ITU zones
|
||||
- New Settings Button (Ctrl-S)
|
||||
- New Callsign / Message Watcher (Ctrl-W or Ctrl-O)
|
||||
- New Exceptions Settings (Ctrl-E)
|
||||
- New Ignores Editor / Viewer (Ctrl-I)
|
||||
- New Columns Editor (Ctrl-C)
|
||||
-- Tag Loomis <n0ttl@gridtracker.org> Sat, 02 Dec 2023 00:00:00 -0000
|
||||
|
||||
gridtracker (1.23.1112) unstable; urgency=low
|
||||
- Language - Added Français and Italiano (Special thanks to HB9TIH and HB9SNR)
|
||||
- Language - Added Español (Special thanks to KI2D and HI8O)
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
Name: {{{ git_name name=gridtracker }}}
|
||||
Summary: GridTracker: An Amateur Radio Companion
|
||||
Version: 1.23.1112
|
||||
Version: 1.23.1202
|
||||
Release: 1%{?dist}
|
||||
BuildArch: noarch
|
||||
Source0: {{{ git_dir_pack }}}
|
||||
|
@ -40,6 +40,20 @@ DESTDIR=${RPM_BUILD_ROOT} make clean
|
|||
%license %{_docdir}/%{name}/
|
||||
|
||||
%changelog
|
||||
* Sat Dec 02 2023 Tag Loomis <n0ttl@gridtracker.org> - 1.23.1202-1
|
||||
- BIGCTY - Update from November 29th
|
||||
- System - Returned LoTW, eQSL and OQRS membership columns to log entries
|
||||
- System - Fixed initial install window sizes
|
||||
- Logbook Viewer - Added DXCC reset view button
|
||||
- Call Roster
|
||||
- New “Move Column Right” added to right-click Column header
|
||||
- Fixed handling of compound callsigns
|
||||
- Fixed saving of Ignored CQ zones and ITU zones
|
||||
- New Settings Button (Ctrl-S)
|
||||
- New Callsign / Message Watcher (Ctrl-W or Ctrl-O)
|
||||
- New Exceptions Settings (Ctrl-E)
|
||||
- New Ignores Editor / Viewer (Ctrl-I)
|
||||
- New Columns Editor (Ctrl-C)
|
||||
* Sun Nov 12 2023 Tag Loomis <n0ttl@gridtracker.org> - 1.23.1112-1
|
||||
- Language - Added Français and Italiano (Special thanks to HB9TIH and HB9SNR)
|
||||
- Language - Added Español (Special thanks to KI2D and HI8O)
|
||||
|
|
|
@ -761,9 +761,9 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
<td>5</td>
|
||||
<td align="left">Show US States Award Layer</td>
|
||||
<td></td>
|
||||
<td>T</td>
|
||||
<td align="left">Add TTS Alert</td>
|
||||
<td>right-click<br />empty grid</td>
|
||||
<td></td>
|
||||
<td></td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>6</td>
|
||||
|
@ -777,9 +777,9 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
<td>7</td>
|
||||
<td align="left">Show US Counties Award Layer</td>
|
||||
<td></td>
|
||||
<td>V</td>
|
||||
<td align="left">Add PopUp Alert</td>
|
||||
<td>right-click<br />empty grid</td>
|
||||
<td></td>
|
||||
<td align="left"></td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>8</td>
|
||||
|
@ -910,9 +910,9 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>M</td>
|
||||
<td align="left">Add MapCenter Alert</td>
|
||||
<td>right-click<br />empty grid</td>
|
||||
<td></td>
|
||||
<td align="left"></td>
|
||||
<td></td>
|
||||
<td>F10</td>
|
||||
<td align="left">Store Map Position 6</td>
|
||||
<td>Shift-Key</td>
|
||||
|
@ -1444,9 +1444,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
<td data-i18n="settings.audio.TextToSpeech.label" align="center">Text-to-speech Voice</td>
|
||||
</tr>
|
||||
<tr align="center">
|
||||
<td colspan="1">
|
||||
<div id="voicesDiv"></div>
|
||||
</td>
|
||||
<td colspan="1" id="voicesDiv"></td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
|
@ -3185,8 +3183,8 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
</div>
|
||||
</div>
|
||||
<div id="updateSettingsDiv" class="settingsTabcontent">
|
||||
<div style="left: 0; display: inline-block; height: 510px; width: 740px" id="updateText">
|
||||
<embed src="./gt_update.pdf" style="width: 100%; height: 100%" frameborder="0" scrolling="yes" />
|
||||
<div style="left: 0; display: inline-block; height: 510px; width: 800px" id="updateText">
|
||||
<embed src="./gt_update.pdf#zoom=100&navpanes=0&page=1&toolbar=0" style="width: 100%; height: 100%" frameborder="0" scrolling="yes" />
|
||||
</div>
|
||||
</div>
|
||||
<div style="top: 0; right: 1px; position: absolute">
|
||||
|
|
Plik diff jest za duży
Load Diff
|
@ -76,14 +76,25 @@
|
|||
wrapperDiv.style.display = "block";
|
||||
}
|
||||
|
||||
document.addEventListener("keydown", handleEnter, false);
|
||||
document.addEventListener("keyup", handleKey, false);
|
||||
|
||||
function handleEnter(event)
|
||||
{
|
||||
if (event.key == "Enter")
|
||||
{
|
||||
event.preventDefault();
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
function handleKey(event)
|
||||
{
|
||||
if (event.key == "Enter")
|
||||
{
|
||||
// Do work
|
||||
var msg = messageInput.value.replace(/[\n\r]/g, '');
|
||||
var msg = messageInput.value.trim();
|
||||
if (msg.length > 0 && g_currentId != 0 && g_currentId in window.opener.GT.gtFlagPins && window.opener.GT.gtFlagPins[g_currentId].canmsg == true)
|
||||
{
|
||||
var worker = "";
|
||||
|
@ -673,7 +684,7 @@
|
|||
</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>
|
||||
<textarea disabled="true" id="messageInput" maxlength="500" rows="2" value="" class="roundBorder"></textarea>
|
||||
</div>
|
||||
</div>
|
||||
<div
|
||||
|
|
|
@ -80,6 +80,7 @@
|
|||
}
|
||||
|
||||
function init() {
|
||||
window.opener.GT.conditionsWindowInitialized = true;
|
||||
lockNewWindows();
|
||||
showConditionsBox();
|
||||
|
||||
|
@ -105,7 +106,7 @@
|
|||
vertical-align: middle;
|
||||
position: relative;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
|
||||
"
|
||||
>
|
||||
<div id="conditionsDataDiv">
|
||||
|
|
|
@ -44,17 +44,432 @@
|
|||
<script src="./lib/roster/sendAlerts.js" type="text/javascript"></script>
|
||||
</head>
|
||||
<body id="rosterBody" onload="init()" onresize="resize()" style="display:none;" class="roster" oncontextmenu="return handleContextMenu(event);">
|
||||
<div id="settingsDiv">
|
||||
<div style="top: 1px; right: 1px; position: absolute">
|
||||
<button class="Xbutton" onclick="closeSettings()">X</button>
|
||||
</div>
|
||||
<div class="infotab">
|
||||
<button data-i18n="settings.General.label" id="generalbox" class="infoTablinks active" onclick="openInfoTab(event, 'generalSettingsDiv')">
|
||||
General
|
||||
</button>
|
||||
<button data-i18n="roster.watcher.label" id="watcherbox" class="infoTablinks" onclick="openInfoTab(event, 'watcherBoxDiv', openWathcherTab);">
|
||||
Watcher
|
||||
</button>
|
||||
<button data-i18n="roster.exceptions.label" id="exceptionsbox" class="infoTablinks" onclick="openInfoTab(event, 'exceptionsBoxDiv')">
|
||||
Exceptions
|
||||
</button>
|
||||
<button data-i18n="roster.ignores.label" id="ingoresbox" class="infoTablinks" onclick="openInfoTab(event, 'ignoresBoxDiv', renderIgnoresTab)">
|
||||
Ignores
|
||||
</button>
|
||||
<button data-i18n="settings.Columns.label" id="columnsbox" class="infoTablinks" onclick="openInfoTab(event, 'columnsBoxDiv', renderColumnsTab)">
|
||||
Columns
|
||||
</button>
|
||||
</div>
|
||||
<div id="generalSettingsDiv" class="infoTabcontent">
|
||||
<div class="mapItem" align="center">
|
||||
<table >
|
||||
<tr align="center" >
|
||||
<td>Animate 'CQ GT'</td>
|
||||
</tr>
|
||||
<tr align="center">
|
||||
<td>
|
||||
<input type="checkbox" id="animateCQGT" onchange="changeAnimateCQGT(this)" />
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div class="mapItem" align="center">
|
||||
<table >
|
||||
<tr align="center" >
|
||||
<td data-i18n="settings.callroster.AlwaysOnTop.label" >Window Always On Top</td>
|
||||
</tr>
|
||||
<tr align="center">
|
||||
<td>
|
||||
<input type="checkbox" id="rosterAlwaysOnTop" onchange="changeRosterTop(this)" />
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div class="mapItem" align="center">
|
||||
<table>
|
||||
<tr align="center">
|
||||
<td data-i18n="settings.callroster.MaxAge.label">Roster Max Age</td>
|
||||
</tr>
|
||||
<tr align="center">
|
||||
<td 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>
|
||||
<br/>
|
||||
<div class="mapItem" align="center">
|
||||
<table>
|
||||
<tr align="center">
|
||||
<td>Clear Roster on Band change</td>
|
||||
</tr>
|
||||
<tr align="center">
|
||||
<td colspan="1">
|
||||
<input type="checkbox" id="clearRosterOnBandChange" onchange="clearRosterOnBandChangeValueChanged(this)" />
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div class="mapItem" align="center">
|
||||
<table>
|
||||
<tr align="center">
|
||||
<td>Decode Delay On Focus</td>
|
||||
</tr>
|
||||
<td align="center" colspan="1">
|
||||
<input type="checkbox" id="rosterDelayOnFocus" onchange="rosterDelayOnFocusValueChanged(this)" />
|
||||
</td>
|
||||
<tr align="center">
|
||||
<td style="display:none;" id="rosterDelayTimeTd">1500ms</td>
|
||||
</tr>
|
||||
<tr align="center">
|
||||
<td >
|
||||
<input type="range" min="50" max="5000" value="1500" step="10" class="slider" id="rosterDelayTime"
|
||||
oninput="changeRosterDelayTime()" style="display:none;" />
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div class="mapItem">
|
||||
<div class="button" style="margin: 5px; font:larger; padding:5px;" id="compactModeDiv" onclick="compactModeChanged()">Compact Mode</div>
|
||||
</div>
|
||||
<div class="mapItem" id="compactEnityDiv">
|
||||
<label>Compact Mode Entity<label><br />
|
||||
<select id="compactEntitySelect" onchange="compactEntityChanged()"></select>
|
||||
</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;padding:3px;" onclick="resetFilters()" title="Reset Filters">Reset Filters
|
||||
(Ctrl-R)</div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
<div id="watcherBoxDiv" class="infoTabcontent">
|
||||
<div class="rowBuilder">
|
||||
<table>
|
||||
<tr>
|
||||
<th>Name</th>
|
||||
<th>Type</th>
|
||||
<th>Regex</th>
|
||||
<th id="watcherTextTh">Input</th>
|
||||
<th>Start<br/>Date</th>
|
||||
<th id="watcherStartDateTh">UTC</th>
|
||||
<th>End<br/>Date</th>
|
||||
<th id="watcherEndDateTh">UTC</th>
|
||||
<th id="watcherAutoDeleteTh"></thid>Auto<br/>Delete</th>
|
||||
<th>Clear</th>
|
||||
<th>Save</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<input id="watcherName" type="text" class="inputTextValue" oninput="watcherOnName()" size="7"/>
|
||||
</td>
|
||||
<td>
|
||||
<select id="watcherType" onchange="watcherTypeChanged(this.value)">
|
||||
<option value="Callsign">Callsign</option>
|
||||
<option value="Calling">Calling</option>
|
||||
<option value="Message" data-i18n="gt.WSJTMessage.Message">Message</option>
|
||||
</select>
|
||||
</td>
|
||||
<td>
|
||||
<input type="checkbox" id="watcherRegexCheckbox" onchange="watcherRegexChanged(this.checked)" />
|
||||
</td>
|
||||
<td>
|
||||
<input id="watcherText" type="text" class="inputTextValue" value="" oninput="watcherOnText()" size="10"/>
|
||||
</td>
|
||||
<td>
|
||||
<input type="checkbox" id="watcherStartDateCheckbox" onchange="watcherStartDateEnable(this.checked)" />
|
||||
</td>
|
||||
<td id="watcherStartDateTd">
|
||||
<input type="datetime-local" required id="watcherStartDate" style="background-color: green; color: yellow;" />
|
||||
</td>
|
||||
<td>
|
||||
<input type="checkbox" id="watcherEndDateCheckbox" onchange="watcherEndDateEnable(this.checked)" />
|
||||
</td>
|
||||
<td id="watcherEndDateTd">
|
||||
<input type="datetime-local" required id="watcherEndDate" style="background-color: green; color: yellow;" />
|
||||
</td>
|
||||
<td id="watcherAutoDeleteTd">
|
||||
<input type="checkbox" id="watcherAutoDeleteCheckbox" />
|
||||
</td>
|
||||
<td style="font:xx-large;cursor:pointer;" onclick="clearWatcher()">🛑</td>
|
||||
<td style="font:xx-large;cursor:pointer;" onclick="saveWatcher()">✅</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div id="watcherEditView"></div>
|
||||
</div>
|
||||
<div id="exceptionsBoxDiv" class="infoTabcontent">
|
||||
<div class="exceptionTab">
|
||||
<div id="onlySpotDiv">
|
||||
<input type="checkbox" id="onlySpot" onchange="valuesChanged();" />
|
||||
<label data-i18n="roster.secondary.exceptions.spottedMe" for="onlySpot">Spotted Me</label>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<input type="checkbox" id="noMyDxcc" onchange="onlyMyDxcc.checked=false; valuesChanged();" />
|
||||
<label data-i18n="roster.secondary.exceptions.noMyDXCC" for="noMyDxcc">Not My DXCC</label>
|
||||
<p>
|
||||
<input type="checkbox" id="onlyMyDxcc" onchange="noMyDxcc.checked=false; valuesChanged();" />
|
||||
<label data-i18n="roster.secondary.exceptions.onlyMyDXCC" for="onlyMyDxcc">Only My DXCC</label>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<input type="checkbox" id="wantMinDB" onchange="valuesChanged();" />
|
||||
<label data-i18n="roster.secondary.exceptions.minDB" for="wantMinDB">Min dB</label>
|
||||
<span id="minDbView" class="roundBorderValue">-24</span>
|
||||
<p>
|
||||
<input
|
||||
type="range"
|
||||
min="-25"
|
||||
max="0"
|
||||
step="1"
|
||||
class="slider"
|
||||
id="minDb"
|
||||
oninput="valuesChanged();"
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<input type="checkbox" id="wantMaxDT" onchange="valuesChanged();" />
|
||||
<label data-i18n="roster.secondary.exceptions.maxDT" for="wantMaxDT">Max DT</label>
|
||||
<span id="maxDTView" class="roundBorderValue">.5</span>
|
||||
<p>
|
||||
<input
|
||||
type="range"
|
||||
min="0.1"
|
||||
max="2"
|
||||
step="0.1"
|
||||
class="slider"
|
||||
id="maxDT"
|
||||
oninput="valuesChanged();"
|
||||
/>
|
||||
</div>
|
||||
<div>
|
||||
<input type="checkbox" id="wantMinFreq" onchange="valuesChanged();" />
|
||||
<label data-i18n="roster.secondary.exceptions.minFreq" for="wantMinFreq">Min freq</label>
|
||||
<span id="minFreqView" class="roundBorderValue">400</span>
|
||||
<p>
|
||||
<input
|
||||
type="range"
|
||||
min="0"
|
||||
max="2500"
|
||||
step="10"
|
||||
class="slider"
|
||||
id="minFreq"
|
||||
oninput="valuesChanged();"
|
||||
/>
|
||||
</div>
|
||||
<div>
|
||||
<input type="checkbox" id="wantMaxFreq" onchange="valuesChanged();" />
|
||||
<label data-i18n="roster.secondary.exceptions.maxFreq" for="wantMaxFreq">Max freq</label>
|
||||
<span id="maxFreqView" class="roundBorderValue">3500</span>
|
||||
<p>
|
||||
<input
|
||||
type="range"
|
||||
min="500"
|
||||
max="3500"
|
||||
step="10"
|
||||
class="slider"
|
||||
id="maxFreq"
|
||||
oninput="valuesChanged();"
|
||||
/>
|
||||
</div>
|
||||
<div id="usesLoTWDiv">
|
||||
<input type="checkbox" id="usesLoTW" onchange="valuesChanged();" />
|
||||
<label data-i18n="roster.secondary.exceptions.usesLoTW" for="usesLoTW">Uses LoTW</label>
|
||||
<span id="maxLoTWView" class="roundBorderValue" style="width: 35px;">3</span>
|
||||
<p>
|
||||
<input
|
||||
title="Max time since their last upload"
|
||||
type="range"
|
||||
min="3"
|
||||
max="27"
|
||||
step="3"
|
||||
class="slider"
|
||||
id="maxLoTW"
|
||||
oninput="valuesChanged();"
|
||||
/>
|
||||
|
||||
</div>
|
||||
<div id="useseQSLDiv">
|
||||
<input type="checkbox" id="useseQSL" onchange="valuesChanged();" />
|
||||
<label data-i18n="roster.secondary.exceptions.useseQSL" for="useseQSL">Uses eQSL</label>
|
||||
</div>
|
||||
<div id="usesOQRSDiv">
|
||||
<input type="checkbox" id="usesOQRS" onchange="valuesChanged();" />
|
||||
<label data-i18n="roster.secondary.exceptions.usesOQRS" for="usesOQRS">Uses OQRS</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="ituzoneBoxDiv" class="infoTabcontent">
|
||||
</div>
|
||||
<div id="ignoresBoxDiv" class="infoTabcontent">
|
||||
<div class="rowBuilder" >
|
||||
Entity
|
||||
<select id="ignoreTypeSelect" onchange="ignoreTypeChanged(this.value);">
|
||||
<option value="Callsign" selected="true">Callsign</option>
|
||||
<option value="CQ">CQ</option>
|
||||
<option value="DXCC">DXCC</option>
|
||||
<option value="CQz">CQ Zone</option>
|
||||
<option value="ITUz">ITU Zone</option>
|
||||
</select>
|
||||
<input id="ignoreCallsignValue" type="text" class="inputTextValue" oninput="this.value = this.value.toUpperCase()" size="10"/>
|
||||
<div id ="ignoreCqDiv">
|
||||
CQ "<input id="ignoreCqCallsignValue" type="text" class="inputTextValue" oninput="this.value = this.value.toUpperCase()" size="4" value=""/>"
|
||||
From
|
||||
<select id="ignoreCqDxccSelect"><option value=-1 selected="true">All</option></select>
|
||||
</div>
|
||||
<select id="ignoreDxccSelect" >
|
||||
<option value=-1 selected="true" data-i18n="mapFilter.prop.Unknown">Unknown</option>
|
||||
</select>
|
||||
<select id="ignoreCqzSelect"></select>
|
||||
<select id="ignoreItuzSelect"></select>
|
||||
<button onclick="addNewIgnore()" class="flexButton" style="background-color: #000000;font-weight:bold;font-size:larger;color:lightgreen;">+</button>
|
||||
<labal id="ingnoreAddResultLabel"></label>
|
||||
</div>
|
||||
<div id="ignoresEditView"></div>
|
||||
</div>
|
||||
<div id="columnsBoxDiv" class="infoTabcontent">
|
||||
<div id="columnsEditView">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<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">
|
||||
<div id="txrxdec" style="background-color: Green; border-style: outset; border-color: yellow; border-width: 3px; margin: 2px;" class="roundBorder">
|
||||
Waiting…
|
||||
</div>
|
||||
<div class="button" style="margin: 3px" onclick="window.opener.haltAllTx(true);" data-i18n="roster.haltTX">Halt Tx</div>
|
||||
<div class="button" style="margin: 3px;" onclick="window.opener.haltAllTx(true);" data-i18n="roster.haltTX">Halt Tx</div>
|
||||
<div class="button" style="margin: 3px;color:cyan;" onclick="openSettings();" data-i18n="roster.menu.Settings"></div>
|
||||
|
||||
</div>
|
||||
|
||||
<div id="MoreLessControls">
|
||||
<div id="MoreControls">
|
||||
<div data-i18n="roster.controls.more" class="link" onclick="toggleMoreControls()" id="ShowMoreControlsLink">More Controls</div>
|
||||
</div>
|
||||
|
||||
<div id="LessControls">
|
||||
<div data-i18n="roster.controls.less" class="link" onclick="toggleMoreControls()" id="ShowFewerControlsLink">Fewer Controls</div>
|
||||
</div>
|
||||
|
||||
|
@ -106,7 +521,7 @@
|
|||
<option data-i18n="roster.controls.huntState.label"value="" selected="true">Select Territory</option>
|
||||
</select>
|
||||
|
||||
<select id="DXCCsSelect" onchange="valuesChanged();" id="HuntDXCCsControls">
|
||||
<select id="DxccSingleSelect" onchange="valuesChanged();"">
|
||||
<option data-i18n="roster.controls.huntDXCC.label" value="-1" selected="true">Select DXCC</option>
|
||||
</select>
|
||||
</div>
|
||||
|
@ -150,8 +565,7 @@
|
|||
<div id="SecondaryRosterControls">
|
||||
<div id="huntingMatrixDiv" class="secondaryControlGroup">
|
||||
<h3 data-i18n="roster.secondary.wanted.label">Wanted</h3>
|
||||
|
||||
<div class='columns'>
|
||||
<div class="columns">
|
||||
<div>
|
||||
<input type="checkbox" id="huntCallsign" onchange="wantedChanged(this);" />
|
||||
<label data-i18n="roster.secondary.wanted.callsign" for="huntCallsign">Callsign</label>
|
||||
|
@ -180,8 +594,6 @@
|
|||
<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>
|
||||
<input type="checkbox" id="huntCQz" onchange="wantedChanged(this);" />
|
||||
<label data-i18n="roster.secondary.wanted.cqzone" for="huntCQz" title="CQ Zones">CQz</label>
|
||||
|
@ -207,207 +619,34 @@
|
|||
<label data-i18n="roster.secondary.wanted.cont" for="huntCont" title="Continent">Continent</label>
|
||||
</div>
|
||||
<div>
|
||||
<input type="checkbox" id="huntRegex" onchange="wantedChanged(this);" />
|
||||
<label data-i18n="roster.secondary.wanted.regex" title="Callsign Regular Expression">Regex</label>
|
||||
|
||||
<input
|
||||
type="text"
|
||||
class="inputTextValue"
|
||||
size="12"
|
||||
id="huntRegexValue"
|
||||
onfocus="CR.typingInRoster=true;"
|
||||
onblur="CR.typingInRoster=false;"
|
||||
oninput="valuesChanged();"
|
||||
onkeydown="blurOnEnter(this);"
|
||||
/>
|
||||
<input type="checkbox" id="huntWatcher" onchange="wantedChanged(this);" />
|
||||
<label data-i18n="roster.watcher.label" class="flexButton" onclick="openWatcher();">Watcher</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="exceptionDiv" class="secondaryControlGroup">
|
||||
<h3 data-i18n="roster.secondary.exceptions.label">Exceptions</h3>
|
||||
<div class='columns'>
|
||||
<div id="exceptionDiv" class="secondaryControlGroup" >
|
||||
<h3 data-i18n="roster.exceptions.label">Exceptions</h3>
|
||||
<div class="columns">
|
||||
<div>
|
||||
<input type="checkbox" id="cqOnly" onchange="valuesChanged();" />
|
||||
<label data-i18n="roster.secondary.exceptions.cqOnly" for="cqOnly">CQ Only</label>
|
||||
<label data-i18n="roster.secondary.exceptions.cqOnly" for="cqOnly">CQ Only</label>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<input type="checkbox" id="wantGrid" onchange="valuesChanged();" />
|
||||
<label data-i18n="roster.secondary.exceptions.hasGrid" for="wantGrid">Has Grid</label>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<input type="checkbox" id="wantMinDB" onchange="valuesChanged();" />
|
||||
<label data-i18n="roster.secondary.exceptions.minDB" for="wantMinDB">Min dB</label>
|
||||
<input
|
||||
type="range"
|
||||
min="-25"
|
||||
max="0"
|
||||
step="1"
|
||||
class="slider"
|
||||
id="minDb"
|
||||
oninput="valuesChanged();"
|
||||
/>
|
||||
<span id="minDbView" class="roundBorderValue">-24</span>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<input type="checkbox" id="wantMaxDT" onchange="valuesChanged();" />
|
||||
<label data-i18n="roster.secondary.exceptions.maxDT" for="wantMaxDT">Max DT</label>
|
||||
<input
|
||||
type="range"
|
||||
min="0.1"
|
||||
max="2"
|
||||
step="0.1"
|
||||
class="slider"
|
||||
id="maxDT"
|
||||
oninput="valuesChanged();"
|
||||
/>
|
||||
<span id="maxDTView" class="roundBorderValue">.5</span>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<input type="checkbox" id="wantMinFreq" onchange="valuesChanged();" />
|
||||
<label data-i18n="roster.secondary.exceptions.minFreq" for="wantMinFreq">Min freq</label>
|
||||
<input
|
||||
type="range"
|
||||
min="0"
|
||||
max="2500"
|
||||
step="10"
|
||||
class="slider"
|
||||
id="minFreq"
|
||||
oninput="valuesChanged();"
|
||||
/>
|
||||
<span id="minFreqView" class="roundBorderValue">400</span>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<input type="checkbox" id="wantMaxFreq" onchange="valuesChanged();" />
|
||||
<label data-i18n="roster.secondary.exceptions.maxFreq" for="wantMaxFreq">Max freq</label>
|
||||
<input
|
||||
type="range"
|
||||
min="500"
|
||||
max="3500"
|
||||
step="10"
|
||||
class="slider"
|
||||
id="maxFreq"
|
||||
oninput="valuesChanged();"
|
||||
/>
|
||||
|
||||
<span id="maxFreqView" class="roundBorderValue">3500</span>
|
||||
</div>
|
||||
|
||||
<div id="usesLoTWDiv">
|
||||
<input type="checkbox" id="usesLoTW" onchange="valuesChanged();" />
|
||||
<label data-i18n="roster.secondary.exceptions.usesLoTW" for="usesLoTW">Uses LoTW</label>
|
||||
|
||||
<input
|
||||
title="Max time since their last upload"
|
||||
type="range"
|
||||
min="3"
|
||||
max="27"
|
||||
step="3"
|
||||
class="slider"
|
||||
id="maxLoTW"
|
||||
oninput="valuesChanged();"
|
||||
/>
|
||||
<span id="maxLoTWView" class="roundBorderValue" style="width: 35px;">3</span>
|
||||
</div>
|
||||
|
||||
<div id="onlySpotDiv">
|
||||
<input type="checkbox" id="onlySpot" onchange="valuesChanged();" />
|
||||
<label data-i18n="roster.secondary.exceptions.spottedMe" for="onlySpot">Spotted Me</label>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<input type="checkbox" id="noMyDxcc" onchange="onlyMyDxcc.checked=false; valuesChanged();" />
|
||||
<label data-i18n="roster.secondary.exceptions.noMyDXCC" for="noMyDxcc">Not My DXCC</label>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<input type="checkbox" id="onlyMyDxcc" onchange="noMyDxcc.checked=false; valuesChanged();" />
|
||||
<label data-i18n="roster.secondary.exceptions.onlyMyDXCC" for="onlyMyDxcc">Only My DXCC</label>
|
||||
</div>
|
||||
|
||||
<div id="useseQSLDiv">
|
||||
<input type="checkbox" id="useseQSL" onchange="valuesChanged();" />
|
||||
<label data-i18n="roster.secondary.exceptions.useseQSL" for="useseQSL">Uses eQSL</label>
|
||||
</div>
|
||||
|
||||
<div id="usesOQRSDiv">
|
||||
<input type="checkbox" id="usesOQRS" onchange="valuesChanged();" />
|
||||
<label data-i18n="roster.secondary.exceptions.usesOQRS" for="usesOQRS">Uses OQRS</label>
|
||||
</div>
|
||||
|
||||
<div id="allOnlyNewDiv">
|
||||
<input type="checkbox" id="allOnlyNew" onchange="valuesChanged();" />
|
||||
<label data-i18n="roster.secondary.exceptions.allOnlyNew" for="allOnlyNew">Only New Calls</label>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<input type="checkbox" id="wantRRCQ" onchange="valuesChanged();" />
|
||||
<label data-i18n="roster.secondary.exceptions.wantRRCQ" for="wantRRCQ">RR73 as CQ</label>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<input type="checkbox" id="noUnknownDXCC" onchange="valuesChanged();" />
|
||||
<label data-i18n="roster.secondary.exceptions.noUnknownDXCC" >No Unknown DXCC</label>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<input type="checkbox" id="noMsg" onchange="valuesChanged();" />
|
||||
<label title="No Decodes Containing..." data-i18n="roster.secondary.exceptions.noMsg.label" style="padding-right: 2em;">
|
||||
No
|
||||
</label>
|
||||
<input
|
||||
type="text"
|
||||
class="inputTextValue"
|
||||
size="8"
|
||||
id="noMsgValue"
|
||||
onfocus="CR.typingInRoster=true;"
|
||||
onblur="CR.typingInRoster=false;"
|
||||
oninput="valuesChanged();"
|
||||
onkeydown="blurOnEnter(this);"
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<input type="checkbox" id="onlyMsg" onchange="valuesChanged();" />
|
||||
<label title="Only Decodes Containing..." data-i18n="roster.secondary.exceptions.onlyMsg.label">
|
||||
Only
|
||||
</label>
|
||||
<input
|
||||
type="text"
|
||||
class="inputTextValue"
|
||||
size="8"
|
||||
id="onlyMsgValue"
|
||||
onfocus="CR.typingInRoster=true;"
|
||||
onblur="CR.typingInRoster=false;"
|
||||
oninput="valuesChanged();"
|
||||
onkeydown="blurOnEnter(this);"
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<input type="checkbox" id="useRegex" onchange="valuesChanged();" />
|
||||
<label title="Callsign Regular Expression" data-i18n="roster.secondary.exceptions.regex.label">
|
||||
Regex
|
||||
</label>
|
||||
|
||||
<input
|
||||
type="text"
|
||||
class="inputTextValue"
|
||||
size="12"
|
||||
id="callsignRegex"
|
||||
onfocus="CR.typingInRoster=true;"
|
||||
onblur="CR.typingInRoster=false;"
|
||||
oninput="valuesChanged();"
|
||||
onkeydown="blurOnEnter(this);"
|
||||
/>
|
||||
<input type="checkbox" id="wantGrid" onchange="valuesChanged();" />
|
||||
<label data-i18n="roster.secondary.exceptions.hasGrid" for="wantGrid">Has Grid</label>
|
||||
</div>
|
||||
<div id="allOnlyNewDiv">
|
||||
<input type="checkbox" id="allOnlyNew" onchange="valuesChanged();" />
|
||||
<label data-i18n="roster.secondary.exceptions.allOnlyNew" for="allOnlyNew">Only New Calls</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="flexButton" style="margin-left: 15px;font:smaller;" onclick="openExceptions()">More</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</header>
|
||||
|
@ -419,221 +658,8 @@
|
|||
<main id="RosterTable"></main>
|
||||
</div>
|
||||
|
||||
<div id="rosterDelayDiv" class="roundBorder" style="display:none; margin: 0px; margin-top: -1px; position:fixed; top:0px; left:0px;">⌛</div>
|
||||
<div id="rosterDelayDiv" class="roundBorder" style="display:none; margin: 0px; margin-top: -1px; position:fixed; top:3px; left:3px;font-size:larger;">⌛</div>
|
||||
|
||||
<div
|
||||
id="editView"
|
||||
class="roundBorder"
|
||||
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 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.
|
@ -165,6 +165,7 @@
|
|||
"settings.Logging.label": "日志記錄",
|
||||
"settings.Alerts.label": "警報",
|
||||
"settings.CallRoster.label": "呼叫清單",
|
||||
"settings.Columns.label": "表格列",
|
||||
"settings.OAMS.label": "OAMS",
|
||||
"settings.OAMS.simplepush.enable.label": "Simplepush.io Message Forwarding",
|
||||
"settings.OAMS.simplepush.apikey.label": "Simplepush API Key",
|
||||
|
@ -436,7 +437,7 @@
|
|||
"settings.alerts.CustomAlerts.new.repeat.exit": "直到退出",
|
||||
"settings.alerts.CustomAlerts.new.repeat.once": "一次",
|
||||
"settings.alerts.CustomAlerts.new.repeat.never": "從不",
|
||||
"settings.alerts.CustomAlerts.new.addButton": "增加",
|
||||
"settings.alerts.CustomAlerts.new.addButton": "添加",
|
||||
"settings.OAMS.message.enable.label": "啟用消息傳遞",
|
||||
"settings.OAMS.message.enable.hover": "啟用消息傳遞",
|
||||
"settings.OAMS.spotting.enable.label": "啟用定位",
|
||||
|
@ -506,7 +507,7 @@
|
|||
"lookup.title": "呼號信息查詢",
|
||||
"lookup.callsign.label": "呼號:",
|
||||
"lookup.callsign.button": "尋找",
|
||||
"lookup.noinfo": "沒有要顯示的呼號信息<br/>請嘗試其他呼號尋找!",
|
||||
"lookup.noinfo": "沒有要顯示的呼號信息 請嘗試其他呼號尋找!",
|
||||
"COMMENT_gt_popup.html": "",
|
||||
"popup.title": "數據突破",
|
||||
"COMMENT_gt_roster.html": "",
|
||||
|
@ -561,7 +562,7 @@
|
|||
"roster.secondary.wanted.marathon": "Marathon",
|
||||
"roster.secondary.wanted.county": "縣",
|
||||
"roster.secondary.wanted cont": "續",
|
||||
"roster.secondary.exceptions.label": "例外情況",
|
||||
"roster.exceptions.label": "例外情況",
|
||||
"roster.secondary.exceptions.cqOnly": "僅限CQ",
|
||||
"roster.secondary.exceptions.hasGrid": "有網格",
|
||||
"roster.secondary.exceptions.minDB": "最小dB",
|
||||
|
@ -584,8 +585,10 @@
|
|||
"roster.secondary.excpetions.regex.label": "正則表達式",
|
||||
"roster.secondary.exceptions.regex.hover": "調用符號正則表達式",
|
||||
"roster.secondary.instances.label": "實例",
|
||||
"roster.ignoresTable.title": "呼號, 忽略CQ和DXCC",
|
||||
"roster.ignoresTable.close": "關閉",
|
||||
"roster.ignores.label": "忽視",
|
||||
"roster.close": "關閉",
|
||||
"roster.watcher.label": "觀察者",
|
||||
"roster.add.watcher.label": "添加觀察者",
|
||||
"COMMENT_gt_stats.html": "",
|
||||
"stats.title": "日志數據統計",
|
||||
"stats.tabs.logbook": "日志",
|
||||
|
@ -1012,6 +1015,7 @@
|
|||
"roster.menu.IgnoreCall": "忽視呼號",
|
||||
"roster.menu.Realtime": "實時",
|
||||
"roster.menu.MoveLeft": "列向左移動",
|
||||
"roster.menu.MoveRight": "列向右移動",
|
||||
"roster.menu.ClearCallIgnore": "清除忽視呼號",
|
||||
"roster.menu.ClearIgnore": "清除忽視",
|
||||
"roster.menu.ClearCQFromDXCC": "清除來自 DXCC 的 CQ",
|
||||
|
|
|
@ -165,6 +165,7 @@
|
|||
"settings.Logging.label": "日志记录",
|
||||
"settings.Alerts.label": "警报",
|
||||
"settings.CallRoster.label": "呼叫列表",
|
||||
"settings.Columns.label": "表格列",
|
||||
"settings.OAMS.label": "OAMS",
|
||||
"settings.OAMS.simplepush.enable.label": "Simplepush.io Message Forwarding",
|
||||
"settings.OAMS.simplepush.apikey.label": "Simplepush API Key",
|
||||
|
@ -436,7 +437,7 @@
|
|||
"settings.alerts.CustomAlerts.new.repeat.exit": "直到退出",
|
||||
"settings.alerts.CustomAlerts.new.repeat.once": "一次",
|
||||
"settings.alerts.CustomAlerts.new.repeat.never": "从不",
|
||||
"settings.alerts.CustomAlerts.new.addButton": "增加",
|
||||
"settings.alerts.CustomAlerts.new.addButton": "添加",
|
||||
"settings.OAMS.message.enable.label": "启用消息传递",
|
||||
"settings.OAMS.message.enable.hover": "启用消息传递",
|
||||
"settings.OAMS.spotting.enable.label": "启用定位",
|
||||
|
@ -506,7 +507,7 @@
|
|||
"lookup.title": "呼号信息查询",
|
||||
"lookup.callsign.label": "呼号:",
|
||||
"lookup.callsign.button": "查找",
|
||||
"lookup.noinfo": "没有要显示的呼号信息<br/>请尝试其他呼号查找!",
|
||||
"lookup.noinfo": "没有要显示的呼号信息 请尝试其他呼号查找!",
|
||||
"COMMENT_gt_popup.html": "",
|
||||
"popup.title": "数据突破",
|
||||
"COMMENT_gt_roster.html": "",
|
||||
|
@ -561,7 +562,7 @@
|
|||
"roster.secondary.wanted.marathon": "马拉松",
|
||||
"roster.secondary.wanted.county": "县",
|
||||
"roster.secondary.wanted cont": "续",
|
||||
"roster.secondary.exceptions.label": "例外情况",
|
||||
"roster.exceptions.label": "例外情况",
|
||||
"roster.secondary.exceptions.cqOnly": "仅限CQ",
|
||||
"roster.secondary.exceptions.hasGrid": "有网格",
|
||||
"roster.secondary.exceptions.minDB": "最小dB",
|
||||
|
@ -584,8 +585,10 @@
|
|||
"roster.secondary.excpetions.regex.label": "正则表达式",
|
||||
"roster.secondary.exceptions.regex.hover": "调用符号正则表达式",
|
||||
"roster.secondary.instances.label": "实例",
|
||||
"roster.ignoresTable.title": "呼号, 忽略CQ和DXCC",
|
||||
"roster.ignoresTable.close": "关闭",
|
||||
"roster.ignores.label": "忽視",
|
||||
"roster.close": "关闭",
|
||||
"roster.watcher.label": "观察者",
|
||||
"roster.add.watcher.label": "添加观察者",
|
||||
"COMMENT_gt_stats.html": "",
|
||||
"stats.title": "日志数据统计",
|
||||
"stats.tabs.logbook": "日志",
|
||||
|
@ -1012,6 +1015,7 @@
|
|||
"roster.menu.IgnoreCall": "忽略呼叫",
|
||||
"roster.menu.Realtime": "实时",
|
||||
"roster.menu.MoveLeft": "向左移动列",
|
||||
"roster.menu.MoveRight": "向右移动列",
|
||||
"roster.menu.ClearCallIgnore": "清除已忽略的呼叫",
|
||||
"roster.menu.ClearIgnore": "清除忽略",
|
||||
"roster.menu.ClearCQFromDXCC": "从DXCC中清除CQ",
|
||||
|
|
|
@ -46,7 +46,7 @@
|
|||
"bandActivity.hover": "PSK-Reporter Band-Aktivität",
|
||||
"quickStats.hover": "Statistik",
|
||||
"quickStats.CallRX.hover": "Gehörte Rufzeichen",
|
||||
"quickStats.CallRX.label": "Rx Rufzeichen",
|
||||
"quickStats.CallRX.label": "Rx Calls",
|
||||
"quickStats.QSO.hover": "Gearbeitete Stationen",
|
||||
"quickStats.QSO.label": "QSO",
|
||||
"quickStats.DXCCRx.hover": "Gehörte DXCCs",
|
||||
|
@ -54,9 +54,9 @@
|
|||
"quickStats.QSL.hover": "QSL Liste",
|
||||
"quickStats.QSL.label": "QSL",
|
||||
"quickLoad.clearLive.hover": "GridTracker's Live-Daten zurücksetzen",
|
||||
"quickLoad.clearLive.label": "Live zurücksetzen",
|
||||
"quickLoad.clearLive.label": "Live löschen",
|
||||
"quickLoad.clearLog.hover": "Log-Daten zurücksetzen (löscht keine Dateien)",
|
||||
"quickLoad.clearLog.label": "Log zurücksetzen",
|
||||
"quickLoad.clearLog.label": "Log löschen",
|
||||
"quickLoad.loadLog.label": "Log laden",
|
||||
"mapFilter.title.hover": "Kartenansicht-Einstellungen",
|
||||
"mapFilter.title.label": "Kartenansicht-Filter",
|
||||
|
@ -165,6 +165,7 @@
|
|||
"settings.Logging.label": "Logging",
|
||||
"settings.Alerts.label": "Alarme",
|
||||
"settings.CallRoster.label": "Rufzeichenliste",
|
||||
"settings.Columns.label": "Spalten",
|
||||
"settings.OAMS.label": "OAMS",
|
||||
"settings.OAMS.simplepush.enable.label": "Simplepush Nachrichtenweiterleitung",
|
||||
"settings.OAMS.simplepush.apikey.label": "Simplepush API Key",
|
||||
|
@ -560,7 +561,7 @@
|
|||
"roster.secondary.wanted.marathon": "Marathon",
|
||||
"roster.secondary.wanted.county": "Kreis",
|
||||
"roster.secondary.wanted.cont": "Kont",
|
||||
"roster.secondary.exceptions.label": "Filter",
|
||||
"roster.exceptions.label": "Filter",
|
||||
"roster.secondary.exceptions.cqOnly": "Nur CQ",
|
||||
"roster.secondary.exceptions.hasGrid": "Nur mit Locator",
|
||||
"roster.secondary.exceptions.minDB": "Min dB",
|
||||
|
@ -573,7 +574,7 @@
|
|||
"roster.secondary.exceptions.onlyMyDXCC": "Nur mein DXCC",
|
||||
"roster.secondary.exceptions.useseQSL":" Benutzt eQSL",
|
||||
"roster.secondary.exceptions.usesOQRS": "Benutzt OQRS",
|
||||
"roster.secondary.exceptions.allOnlyNew": "Nur neue Rufzeichen",
|
||||
"roster.secondary.exceptions.allOnlyNew": "Nur neue Calls",
|
||||
"roster.secondary.exceptions.wantRRCQ": "RR73 als CQ",
|
||||
"roster.secondary.exceptions.noUnknownDXCC": "Keine unbekannten DXCC",
|
||||
"roster.secondary.exceptions.noMsg.label": "Keine",
|
||||
|
@ -583,8 +584,10 @@
|
|||
"roster.secondary.exceptions.regex.label": "Regex",
|
||||
"roster.secondary.exceptions.regex.hover": "Rufzeichen RegEx",
|
||||
"roster.secondary.instances.label": "Instanzen",
|
||||
"roster.ignoresTable.title": "Rufzeichen, CQ and DXCC Ausnahmen",
|
||||
"roster.ignoresTable.close": "Schliessen",
|
||||
"roster.ignores.label": "Ignoriert",
|
||||
"roster.close": "Schliessen",
|
||||
"roster.watcher.label": "Beobachten",
|
||||
"roster.add.watcher.label": "Beobachter hinzufügen",
|
||||
"COMMENT_gt_stats.html": "",
|
||||
"stats.title": "Statistiken",
|
||||
"stats.tabs.logbook": "Logbücher",
|
||||
|
@ -1027,15 +1030,18 @@
|
|||
"roster.ignore.DXCCs": "DXCCs",
|
||||
"roster.ignore.CQZones": "CQ-Zonen",
|
||||
"roster.ignore.ITUZones": "ITU-Zonen",
|
||||
"roster.menu.Settings": "Einstellungen",
|
||||
"roster.menu.HideControls": "Einstellungen ausblenden",
|
||||
"roster.menu.ShowControls": "Einstellungen anzeigen",
|
||||
"roster.menu.CompactMode": "Kompaktmodus",
|
||||
"roster.menu.RosterMode": "Rostermodus",
|
||||
"roster.menu.Lookup": "Nachschlagen",
|
||||
"roster.menu.GenMesg": "WSJT-X befüllen",
|
||||
"roster.menu.AimRotator": "Rotor ausrichten",
|
||||
"roster.menu.IgnoreCall": "Rufzeichen ignorieren",
|
||||
"roster.menu.Realtime": "Echtzeit",
|
||||
"roster.menu.MoveLeft": "Spalte nach links verschieben",
|
||||
"roster.menu.MoveRight": "Spalte nach rechts verschieben",
|
||||
"roster.menu.ClearCallIgnore": "Ignorierte Rufzeichen aufheben",
|
||||
"roster.menu.ClearIgnore": "Ignorierte aufheben",
|
||||
"roster.menu.ClearCQFromDXCC": "CQ von DXCC aufheben",
|
||||
|
|
|
@ -164,6 +164,7 @@
|
|||
"settings.Logging.label": "Logging",
|
||||
"settings.Alerts.label": "Alerts",
|
||||
"settings.CallRoster.label": "Call Roster",
|
||||
"settings.Columns.label": "Columns",
|
||||
"settings.OAMS.label": "OAMS",
|
||||
"settings.OAMS.simplepush.enable.label": "Simplepush.io Message Forwarding",
|
||||
"settings.OAMS.simplepush.apikey.label": "Simplepush API Key",
|
||||
|
@ -373,7 +374,7 @@
|
|||
"settings.logging.pstrotator.details.Port": "UDP Port",
|
||||
"settings.callroster.AlwaysOnTop.label": "Window Always On Top",
|
||||
"settings.callroster.AlwaysOnTop.hover": "Keep Call Roster Above Other Windows",
|
||||
"settings.callroster.MaxAge.label": "Call Roster Max Age",
|
||||
"settings.callroster.MaxAge.label": "Roster Max Age",
|
||||
"settings.callroster.MultiRig.label": "On QSO Reply",
|
||||
"settings.callroster.MultiRig.HaltTx.label": "Halt Tx On All Other Instances",
|
||||
"settings.callroster.MultiRig.SwitchView.label": "Switch View to Transmitting Instance",
|
||||
|
@ -505,7 +506,7 @@
|
|||
"lookup.title": "Callsign Lookup",
|
||||
"lookup.callsign.label": "Callsign",
|
||||
"lookup.callsign.button": "Lookup",
|
||||
"lookup.noinfo": "No Callsign information to display<br />try a lookup!",
|
||||
"lookup.noinfo": "No Callsign information to display, try a lookup!",
|
||||
"COMMENT_gt_popup.html": "",
|
||||
"popup.title": "Data Breakout",
|
||||
"COMMENT_gt_roster.html": "",
|
||||
|
@ -561,7 +562,7 @@
|
|||
"roster.secondary.wanted.marathon": "Marathon",
|
||||
"roster.secondary.wanted.county": "County",
|
||||
"roster.secondary.wanted.cont": "Continent",
|
||||
"roster.secondary.exceptions.label": "Exceptions",
|
||||
"roster.exceptions.label": "Exceptions",
|
||||
"roster.secondary.exceptions.cqOnly": "CQ Only",
|
||||
"roster.secondary.exceptions.hasGrid": "Has Grid",
|
||||
"roster.secondary.exceptions.minDB": "Min dB",
|
||||
|
@ -584,8 +585,10 @@
|
|||
"roster.secondary.exceptions.regex.label": "Regex",
|
||||
"roster.secondary.exceptions.regex.hover": "Callsign Regular Expression",
|
||||
"roster.secondary.instances.label": "Instances",
|
||||
"roster.ignoresTable.title": "Callsign, CQ and DXCC Ignores",
|
||||
"roster.ignoresTable.close": "Close",
|
||||
"roster.ignores.label": "Ignores",
|
||||
"roster.close": "Close",
|
||||
"roster.watcher.label": "Watcher",
|
||||
"roster.add.watcher.label": "Add Watcher",
|
||||
"COMMENT_gt_stats.html": "",
|
||||
"stats.title": "Statistics",
|
||||
"stats.tabs.logbook": "Logbook",
|
||||
|
@ -1013,6 +1016,7 @@
|
|||
"roster.menu.IgnoreCall": "Ignore Call",
|
||||
"roster.menu.Realtime": "Realtime",
|
||||
"roster.menu.MoveLeft": "Move Column Left",
|
||||
"roster.menu.MoveRight": "Move Column Right",
|
||||
"roster.menu.ClearCallIgnore": "Clear Call Ignore",
|
||||
"roster.menu.ClearIgnore": "Clear Ignore",
|
||||
"roster.menu.ClearCQFromDXCC": "Clear CQ from DXCC",
|
||||
|
|
|
@ -164,6 +164,7 @@
|
|||
"settings.Logging.label": "Registros",
|
||||
"settings.Alerts.label": "Alertas",
|
||||
"settings.CallRoster.label": "Lista de llamadas",
|
||||
"settings.Columns.label": "Columnas",
|
||||
"settings.OAMS.label": "OAMS",
|
||||
"settings.OAMS.simplepush.enable.label": "Reenvío mensajes Simplepush.io",
|
||||
"settings.OAMS.simplepush.apikey.label": "Llave de API Simplepush",
|
||||
|
@ -504,7 +505,7 @@
|
|||
"lookup.title": "Búsqueda de Indicativo",
|
||||
"lookup.callsign.label": "Indicativo",
|
||||
"lookup.callsign.button": "Buscar",
|
||||
"lookup.noinfo": "No hay información de indicativo para mostrar<br />intente una búsqueda",
|
||||
"lookup.noinfo": "No hay información de indicativo para mostrar, intente una búsqueda",
|
||||
"COMMENT_gt_popup.html": "",
|
||||
"popup.title": "Desglose de Datos",
|
||||
"COMMENT_gt_roster.html": "",
|
||||
|
@ -560,7 +561,7 @@
|
|||
"roster.secondary.wanted.marathon": "Maratón",
|
||||
"roster.secondary.wanted.county": "Condado",
|
||||
"roster.secondary.wanted.cont": "Continente",
|
||||
"roster.secondary.exceptions.label": "Excepciones",
|
||||
"roster.exceptions.label": "Excepciones",
|
||||
"roster.secondary.exceptions.cqOnly": "Solo CQ",
|
||||
"roster.secondary.exceptions.hasGrid": "Tiene Grid",
|
||||
"roster.secondary.exceptions.minDB": "dB Mínimo",
|
||||
|
@ -583,8 +584,10 @@
|
|||
"roster.secondary.exceptions.regex.label": "Regex",
|
||||
"roster.secondary.exceptions.regex.hover": "Expresión Regular de Indicativo",
|
||||
"roster.secondary.instances.label": "Instancias",
|
||||
"roster.ignoresTable.title": "Ignorar Indicativos de Llamada, CQ y DXCC",
|
||||
"roster.ignoresTable.close": "Cerrar",
|
||||
"roster.ignores.label": "Ignorar",
|
||||
"roster.close": "Cerrar",
|
||||
"roster.watcher.label": "Observador",
|
||||
"roster.add.watcher.label": "Agregar observador",
|
||||
"COMMENT_gt_stats.html": "",
|
||||
"stats.title": "Estadísticas",
|
||||
"stats.tabs.logbook": "Libro de Guardia",
|
||||
|
@ -1007,7 +1010,8 @@
|
|||
"roster.menu.AimRotator": "Apuntar Rotador",
|
||||
"roster.menu.IgnoreCall": "Ignorar Llamada",
|
||||
"roster.menu.Realtime": "En Vivo",
|
||||
"roster.menu.MoveLeft": "Mover Columna a la Izquierda",
|
||||
"roster.menu.MoveLeft": "Mover Columna a la izquierda",
|
||||
"roster.menu.MoveRight": "Mover Columna a la derecha",
|
||||
"roster.menu.ClearCallIgnore": "Borrar Ignorar Llamada",
|
||||
"roster.menu.ClearIgnore": "Borrar Ignorar",
|
||||
"roster.menu.ClearCQFromDXCC": "Borrar CQ de DXCC",
|
||||
|
|
|
@ -164,6 +164,7 @@
|
|||
"settings.Logging.label": "Enregistrement",
|
||||
"settings.Alerts.label": "Alertes",
|
||||
"settings.CallRoster.label": "Liste des appels",
|
||||
"settings.Columns.label": "Colonnes",
|
||||
"settings.OAMS.label": "OAMS",
|
||||
"settings.OAMS.simplepush.enable.label": "Transfert de messages Simplepush.io",
|
||||
"settings.OAMS.simplepush.apikey.label": "Clé API Simplepush",
|
||||
|
@ -505,7 +506,7 @@
|
|||
"lookup.title": "Recherche d'un indicatif",
|
||||
"lookup.callsign.label": "Indicatif",
|
||||
"lookup.callsign.button": "Consulter",
|
||||
"lookup.noinfo": "Pas d'information sur l'indicatif à afficher<br />essayez une recherche !",
|
||||
"lookup.noinfo": "Pas d'information sur l'indicatif à afficher, essayez une recherche !",
|
||||
"COMMENT_gt_popup.html": "",
|
||||
"popup.title": "Répartition des données",
|
||||
"COMMENT_gt_roster.html": "",
|
||||
|
@ -561,7 +562,7 @@
|
|||
"roster.secondary.wanted.marathon": "Marathon",
|
||||
"roster.secondary.wanted.county": "Pays",
|
||||
"roster.secondary.wanted.cont": "Continent",
|
||||
"roster.secondary.exceptions.label": "Exceptions",
|
||||
"roster.exceptions.label": "Exceptions",
|
||||
"roster.secondary.exceptions.cqOnly": "CQ uniquement",
|
||||
"roster.secondary.exceptions.hasGrid": "Dispose d'une grille",
|
||||
"roster.secondary.exceptions.minDB": "Min dB",
|
||||
|
@ -584,8 +585,10 @@
|
|||
"roster.secondary.exceptions.regex.label": "Filtre",
|
||||
"roster.secondary.exceptions.regex.hover": "Recherche indicatifs (même partielle)",
|
||||
"roster.secondary.instances.label": "Instances",
|
||||
"roster.ignoresTable.title": "Ignorer les indicatifs, les CQ et les DXCC",
|
||||
"roster.ignoresTable.close": "Fermer",
|
||||
"roster.ignores.label": "Ignorer",
|
||||
"roster.close": "Fermer",
|
||||
"roster.watcher.label": "Observateur",
|
||||
"roster.add.watcher.label": "Ajouter observateur",
|
||||
"COMMENT_gt_stats.html": "",
|
||||
"stats.title": "Statistiques",
|
||||
"stats.tabs.logbook": "Journal de bord",
|
||||
|
@ -1013,6 +1016,7 @@
|
|||
"roster.menu.IgnoreCall": "Ignorer l'appel",
|
||||
"roster.menu.Realtime": "Temps réel",
|
||||
"roster.menu.MoveLeft": "Déplacer la colonne vers la gauche",
|
||||
"roster.menu.MoveRight": "Déplacer la colonne vers la droite",
|
||||
"roster.menu.ClearCallIgnore": "Effacer l'appel Ignorer",
|
||||
"roster.menu.ClearIgnore": "Effacer Ignorer",
|
||||
"roster.menu.ClearCQFromDXCC": "Effacer le CQ du DXCC",
|
||||
|
|
|
@ -164,6 +164,7 @@
|
|||
"settings.Logging.label": "Registrazione",
|
||||
"settings.Alerts.label": "Allarmi",
|
||||
"settings.CallRoster.label": "Elenco delle chiamate",
|
||||
"settings.Columns.label": "Colonne",
|
||||
"settings.OAMS.label": "OAMS",
|
||||
"settings.OAMS.simplepush.enable.label": "Trasferimento di messaggi con Simplepush.io",
|
||||
"settings.OAMS.simplepush.apikey.label": "Chiave API Simplepush",
|
||||
|
@ -505,7 +506,7 @@
|
|||
"lookup.title": "Cerca un nominativo",
|
||||
"lookup.callsign.label": "Nominativo",
|
||||
"lookup.callsign.button": "Consultare",
|
||||
"lookup.noinfo": "Non ci sono informazioni sul nominativo da visualizzare<br />prova a fare una ricerca!",
|
||||
"lookup.noinfo": "Non ci sono informazioni sul nominativo da visualizzare, prova a fare una ricerca!",
|
||||
"COMMENT_gt_popup.html": "",
|
||||
"popup.title": "Distribuzione dei dati",
|
||||
"COMMENT_gt_roster.html": "",
|
||||
|
@ -561,7 +562,7 @@
|
|||
"roster.secondary.wanted.marathon": "Marathon",
|
||||
"roster.secondary.wanted.county": "Paese",
|
||||
"roster.secondary.wanted.cont": "Continente",
|
||||
"roster.secondary.exceptions.label": "Eccezioni",
|
||||
"roster.exceptions.label": "Eccezioni",
|
||||
"roster.secondary.exceptions.cqOnly": "Solo CQ",
|
||||
"roster.secondary.exceptions.hasGrid": "Ha una griglia",
|
||||
"roster.secondary.exceptions.minDB": "Min dB",
|
||||
|
@ -584,8 +585,10 @@
|
|||
"roster.secondary.exceptions.regex.label": "Filtro",
|
||||
"roster.secondary.exceptions.regex.hover": "Ricerca nominativo (anche parziale)",
|
||||
"roster.secondary.instances.label": "Enti",
|
||||
"roster.ignoresTable.title": "Ignorare i nominativi, i CQ e i DXCC",
|
||||
"roster.ignoresTable.close": "Chiudere",
|
||||
"roster.ignores.label": "Ignorare",
|
||||
"roster.close": "Chiudere",
|
||||
"roster.watcher.label": "Osservatore",
|
||||
"roster.add.watcher.label": "Aggiungi Osservatore",
|
||||
"COMMENT_gt_stats.html": "",
|
||||
"stats.title": "Statistiche",
|
||||
"stats.tabs.logbook": "Diario di bordo",
|
||||
|
@ -1013,6 +1016,7 @@
|
|||
"roster.menu.IgnoreCall": "Ignorare la chiamata",
|
||||
"roster.menu.Realtime": "Tempo reale",
|
||||
"roster.menu.MoveLeft": "Spostare la colonna a sinistra",
|
||||
"roster.menu.MoveRight": "Sposta la colonna a destra",
|
||||
"roster.menu.ClearCallIgnore": "Eliminare la chiamata Ignorare",
|
||||
"roster.menu.ClearIgnore": "Elimina Ignora",
|
||||
"roster.menu.ClearCQFromDXCC": "Cancellare CQ da DXCC",
|
||||
|
|
Plik binarny nie jest wyświetlany.
Przed Szerokość: | Wysokość: | Rozmiar: 552 B |
Plik binarny nie jest wyświetlany.
Przed Szerokość: | Wysokość: | Rozmiar: 2.1 KiB |
|
@ -9,8 +9,11 @@ var validSettings = [
|
|||
"awardTracker",
|
||||
"bandActivity",
|
||||
"blockedCQ",
|
||||
"ignoredCQ",
|
||||
"blockedCalls",
|
||||
"blockedDxcc",
|
||||
"blockedCQz",
|
||||
"blockedITUz",
|
||||
"callsignLookups",
|
||||
"classicAlerts",
|
||||
"classicAlertsVersion",
|
||||
|
|
|
@ -7,6 +7,7 @@ var gtVersionStr = pjson.version
|
|||
var gtVersion = parseInt(gtVersionStr.replace(/\./g, ""));
|
||||
var gtBeta = pjson.betaVersion;
|
||||
|
||||
GT.startingUp = true;
|
||||
// var GT is in screen.js
|
||||
GT.startVersion = 0;
|
||||
|
||||
|
@ -15,8 +16,14 @@ if (typeof localStorage.currentVersion != "undefined")
|
|||
GT.startVersion = parseInt(localStorage.currentVersion);
|
||||
}
|
||||
|
||||
GT.firstRun = false;
|
||||
|
||||
if (typeof localStorage.currentVersion == "undefined" || localStorage.currentVersion != String(gtVersion))
|
||||
{
|
||||
if (typeof localStorage.currentVersion == "undefined")
|
||||
{
|
||||
GT.firstRun = true;
|
||||
}
|
||||
localStorage.currentVersion = String(gtVersion);
|
||||
}
|
||||
|
||||
|
@ -48,13 +55,18 @@ if (GT.platform.indexOf("darwin") > -1)
|
|||
|
||||
const gui = require("nw.gui");
|
||||
const win = gui.Window.get();
|
||||
|
||||
if (GT.firstRun)
|
||||
{
|
||||
win.moveTo(2, 2);
|
||||
}
|
||||
GT.developerMode = process.versions["nw-flavor"] == "sdk";
|
||||
|
||||
GT.popupWindowHandle = null;
|
||||
GT.callRosterWindowHandle = null;
|
||||
GT.conditionsWindowHandle = null;
|
||||
GT.conditionsWindowInitialized = false;
|
||||
GT.chatWindowHandle = null;
|
||||
GT.chatWindowInitialized = false;
|
||||
GT.statsWindowHandle = null;
|
||||
GT.lookupWindowHandle = null;
|
||||
GT.lookupWindowInitialized = false;
|
||||
|
@ -455,6 +467,7 @@ GT.directCallToITUzone = {};
|
|||
GT.prefixToCQzone = {};
|
||||
GT.prefixToITUzone = {};
|
||||
GT.dxccToAltName = {};
|
||||
GT.altNameToDXCC = {};
|
||||
GT.dxccToADIFName = {};
|
||||
GT.gridToDXCC = {};
|
||||
|
||||
|
@ -552,17 +565,17 @@ GT.pskColors["2200m"] = "FF4500";
|
|||
GT.pskColors["630m"] = "1E90FF";
|
||||
GT.pskColors["160m"] = "7CFC00";
|
||||
GT.pskColors["80m"] = "E550E5";
|
||||
GT.pskColors["60m"] = "0000FF";
|
||||
GT.pskColors["40m"] = "4949FF";
|
||||
GT.pskColors["60m"] = "99CCFF";
|
||||
GT.pskColors["40m"] = "00FFFF";
|
||||
GT.pskColors["30m"] = "62FF62";
|
||||
GT.pskColors["20m"] = "FFC40C";
|
||||
GT.pskColors["17m"] = "F2F261";
|
||||
GT.pskColors["15m"] = "CCA166";
|
||||
GT.pskColors["12m"] = "B22222";
|
||||
GT.pskColors["12m"] = "CB3D3D";
|
||||
GT.pskColors["11m"] = "00FF00";
|
||||
GT.pskColors["10m"] = "FF69B4";
|
||||
GT.pskColors["8m"] = "8b00fb";
|
||||
GT.pskColors["6m"] = "FF0000";
|
||||
GT.pskColors["6m"] = "ff4d4d";
|
||||
GT.pskColors["4m"] = "df0040";
|
||||
GT.pskColors["2m"] = "FF1493";
|
||||
GT.pskColors["1.25m"] = "beff00";
|
||||
|
@ -976,7 +989,7 @@ function getWpx(callsign)
|
|||
|
||||
if (foundPrefix) prefix = callsign.substr(0, prefixEnd + 1);
|
||||
|
||||
return prefix;
|
||||
return String(prefix);
|
||||
}
|
||||
|
||||
function setState(details)
|
||||
|
@ -1467,20 +1480,6 @@ function addDeDx(
|
|||
}
|
||||
}
|
||||
|
||||
// we don't need confirmations, worked is enough
|
||||
/* if (finalPOTA)
|
||||
{
|
||||
GT.tracker.confirmed.pota[dayAsString + finalDXcall + finalPOTA] = true;
|
||||
GT.tracker.confirmed.pota[dayAsString + finalDXcall + finalPOTA + mode] = true;
|
||||
GT.tracker.confirmed.pota[dayAsString + finalDXcall + finalPOTA + band] = true;
|
||||
GT.tracker.confirmed.pota[dayAsString + finalDXcall + finalPOTA + band + mode] = true;
|
||||
if (isDigi == true)
|
||||
{
|
||||
GT.tracker.confirmed.pota[dayAsString + finalDXcall + finalPOTA + "dg"] = true;
|
||||
GT.tracker.confirmed.pota[dayAsString + finalDXcall + finalPOTA + band + "dg"] = true;
|
||||
}
|
||||
} */
|
||||
|
||||
GT.tracker.confirmed.call[finalDXcall + band + mode] = true;
|
||||
GT.tracker.confirmed.call[finalDXcall] = true;
|
||||
GT.tracker.confirmed.call[finalDXcall + mode] = true;
|
||||
|
@ -2014,6 +2013,10 @@ function createTooltTipTable(toolElement)
|
|||
"<td>" + $.i18n("gt.newCallList.LastMsg") + "</td>" +
|
||||
"<td>" + $.i18n("gt.newCallList.DXCC") + "</td>" +
|
||||
"<td>" + $.i18n("gt.newCallList.Time") + "</td>";
|
||||
|
||||
if (GT.callsignLookups.lotwUseEnable == true) worker += "<td>" + $.i18n("gt.qsoPage.LoTW") + "</td>";
|
||||
if (GT.callsignLookups.eqslUseEnable == true) worker += "<td>" + $.i18n("gt.qsoPage.eQSL") + "</td>";
|
||||
if (GT.callsignLookups.oqrsUseEnable == true) worker += "<td>" + $.i18n("gt.qsoPage.OQRS") + "</td>";
|
||||
worker += "</tr>";
|
||||
}
|
||||
for (var KeyIsHash in toolElement.hashes)
|
||||
|
@ -2127,30 +2130,28 @@ function createTooltTipTable(toolElement)
|
|||
ageString +
|
||||
"</td>";
|
||||
|
||||
if (toolElement.qso == false)
|
||||
if (GT.callsignLookups.lotwUseEnable == true)
|
||||
{
|
||||
if (GT.callsignLookups.lotwUseEnable == true)
|
||||
{
|
||||
worker +=
|
||||
"<td align='center'>" +
|
||||
(callsign.DEcall in GT.lotwCallsigns ? "✔" : "") +
|
||||
"</td>";
|
||||
}
|
||||
if (GT.callsignLookups.eqslUseEnable == true)
|
||||
{
|
||||
worker +=
|
||||
"<td align='center'>" +
|
||||
(callsign.DEcall in GT.eqslCallsigns ? "✔" : "") +
|
||||
"</td>";
|
||||
}
|
||||
if (GT.callsignLookups.oqrsUseEnable == true)
|
||||
{
|
||||
worker +=
|
||||
"<td align='center'>" +
|
||||
(callsign.DEcall in GT.oqrsCallsigns ? "✔" : "") +
|
||||
"</td>";
|
||||
}
|
||||
worker +=
|
||||
"<td align='center'>" +
|
||||
(callsign.DEcall in GT.lotwCallsigns ? "🙋🏻♂️" : "") +
|
||||
"</td>";
|
||||
}
|
||||
if (GT.callsignLookups.eqslUseEnable == true)
|
||||
{
|
||||
worker +=
|
||||
"<td align='center'>" +
|
||||
(callsign.DEcall in GT.eqslCallsigns ? "🙋🏻♂️" : "") +
|
||||
"</td>";
|
||||
}
|
||||
if (GT.callsignLookups.oqrsUseEnable == true)
|
||||
{
|
||||
worker +=
|
||||
"<td align='center'>" +
|
||||
(callsign.DEcall in GT.oqrsCallsigns ? "🙋🏻♂️" : "") +
|
||||
"</td>";
|
||||
}
|
||||
|
||||
worker += "</tr>";
|
||||
}
|
||||
worker += "</table>";
|
||||
|
@ -2167,12 +2168,11 @@ function createTooltTipTableLogbook(toolElement)
|
|||
{
|
||||
colspan += 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (GT.callsignLookups.lotwUseEnable == true) colspan++;
|
||||
if (GT.callsignLookups.eqslUseEnable == true) colspan++;
|
||||
if (GT.callsignLookups.oqrsUseEnable == true) colspan++;
|
||||
}
|
||||
|
||||
if (GT.callsignLookups.lotwUseEnable == true) colspan++;
|
||||
if (GT.callsignLookups.eqslUseEnable == true) colspan++;
|
||||
if (GT.callsignLookups.oqrsUseEnable == true) colspan++;
|
||||
|
||||
var worker =
|
||||
"<table id='tooltipTable' class='darkTable' ><tr><th colspan=" +
|
||||
colspan +
|
||||
|
@ -2192,12 +2192,10 @@ function createTooltTipTableLogbook(toolElement)
|
|||
"<td>" + $.i18n("gt.newCallList.DXCC") + "</td>" +
|
||||
"<td>" + $.i18n("gt.newCallList.Time") + "</td>";
|
||||
|
||||
if (toolElement.qso == false)
|
||||
{
|
||||
if (GT.callsignLookups.lotwUseEnable == true) worker += "<td>" + $.i18n("gt.newCallList.LoTW") + "</td>";
|
||||
if (GT.callsignLookups.eqslUseEnable == true) worker += "<td>" + $.i18n("gt.newCallList.eQSL") + "</td>";
|
||||
if (GT.callsignLookups.oqrsUseEnable == true) worker += "<td>" + $.i18n("gt.newCallList.OQRS") + "</td>";
|
||||
}
|
||||
if (GT.callsignLookups.lotwUseEnable == true) worker += "<td>" + $.i18n("gt.newCallList.LoTW") + "</td>";
|
||||
if (GT.callsignLookups.eqslUseEnable == true) worker += "<td>" + $.i18n("gt.newCallList.eQSL") + "</td>";
|
||||
if (GT.callsignLookups.oqrsUseEnable == true) worker += "<td>" + $.i18n("gt.newCallList.OQRS") + "</td>";
|
||||
|
||||
worker += "</tr>";
|
||||
|
||||
var newCallList = Array();
|
||||
|
@ -2261,39 +2259,37 @@ function createTooltTipTableLogbook(toolElement)
|
|||
ageString +
|
||||
"</td>";
|
||||
|
||||
if (toolElement.qso == false)
|
||||
if (GT.callsignLookups.lotwUseEnable == true)
|
||||
{
|
||||
if (GT.callsignLookups.lotwUseEnable == true)
|
||||
worker +=
|
||||
"<td align='center'>" +
|
||||
(callsign.DEcall in GT.lotwCallsigns ? "🙋🏻♂️" : "") +
|
||||
"</td>";
|
||||
}
|
||||
if (GT.callsignLookups.eqslUseEnable == true)
|
||||
{
|
||||
worker +=
|
||||
"<td align='center'>" +
|
||||
(callsign.DEcall in GT.eqslCallsigns ? "🙋🏻♂️" : "") +
|
||||
"</td>";
|
||||
}
|
||||
if (GT.callsignLookups.oqrsUseEnable == true)
|
||||
{
|
||||
if (callsign.DEcall in GT.oqrsCallsigns)
|
||||
{
|
||||
worker +=
|
||||
"<td align='center'>" +
|
||||
(callsign.DEcall in GT.lotwCallsigns ? "✔" : "") +
|
||||
"</td>";
|
||||
"<td style='cursor:pointer;' align='center' " +
|
||||
"onClick='window.opener.openSite(\"https://clublog.org/logsearch/logsearch.php?log=" +
|
||||
callsign.DEcall + "&call=" + callsign.DXcall + "&SubmitLogSearch=Show+contacts\");'>" +
|
||||
"🙋🏻♂️ 📬</td>";
|
||||
}
|
||||
if (GT.callsignLookups.eqslUseEnable == true)
|
||||
else
|
||||
{
|
||||
worker +=
|
||||
"<td align='center'>" +
|
||||
(callsign.DEcall in GT.eqslCallsigns ? "✔" : "") +
|
||||
"</td>";
|
||||
}
|
||||
if (GT.callsignLookups.oqrsUseEnable == true)
|
||||
{
|
||||
if (callsign.DEcall in GT.oqrsCallsigns)
|
||||
{
|
||||
worker +=
|
||||
"<td align='center' " +
|
||||
"onClick='window.opener.openSite(\"https://clublog.org/logsearch/logsearch.php?log=" +
|
||||
callsign.DEcall + "&call=" + callsign.DXcall + "&SubmitLogSearch=Show+contacts\");'>" +
|
||||
"✔📬</td>";
|
||||
}
|
||||
else
|
||||
{
|
||||
worker +=
|
||||
"<td align='center'></td>";
|
||||
}
|
||||
"<td align='center'></td>";
|
||||
}
|
||||
}
|
||||
|
||||
worker += "</tr>";
|
||||
}
|
||||
worker += "</table>";
|
||||
|
@ -2380,7 +2376,12 @@ function openConditionsWindow()
|
|||
GT.conditionsWindowHandle = new_win;
|
||||
new_win.on("loaded", function ()
|
||||
{
|
||||
GT.conditionsWindowHandle.setMinimumSize(490, 290);
|
||||
GT.conditionsWindowHandle.setMinimumSize(490, 280);
|
||||
if (GT.firstRun)
|
||||
{
|
||||
GT.conditionsWindowHandle.resizeTo(490, 280);
|
||||
GT.conditionsWindowHandle.moveTo(100, 100);
|
||||
}
|
||||
});
|
||||
new_win.on("close", function ()
|
||||
{
|
||||
|
@ -2482,6 +2483,11 @@ function openCallRosterWindow(show = true)
|
|||
{
|
||||
GT.callRosterWindowHandle.setMinimumSize(390, 250);
|
||||
GT.callRosterWindowHandle.setResizable(true);
|
||||
if (GT.firstRun)
|
||||
{
|
||||
GT.callRosterWindowHandle.resizeTo(1000, 500);
|
||||
GT.callRosterWindowHandle.moveTo(15, 15);
|
||||
}
|
||||
});
|
||||
new_win.on("close", function ()
|
||||
{
|
||||
|
@ -2583,6 +2589,11 @@ function openStatsWindow(show = true)
|
|||
{
|
||||
GT.statsWindowHandle.setMinimumSize(620, 200);
|
||||
GT.statsWindowHandle.setResizable(true);
|
||||
if (GT.firstRun)
|
||||
{
|
||||
GT.statsWindowHandle.resizeTo(640, 480);
|
||||
GT.statsWindowHandle.moveTo(50, 50);
|
||||
}
|
||||
});
|
||||
new_win.on("close", function ()
|
||||
{
|
||||
|
@ -2638,6 +2649,11 @@ function showMessaging(show = true, cid)
|
|||
{
|
||||
GT.chatWindowHandle.setMinimumSize(450, 140);
|
||||
GT.chatWindowHandle.setResizable(true);
|
||||
if (GT.firstRun)
|
||||
{
|
||||
GT.chatWindowHandle.resizeTo(640, 300);
|
||||
GT.chatWindowHandle.moveTo(50, 50);
|
||||
}
|
||||
});
|
||||
GT.chatWindowHandle.on("close", function ()
|
||||
{
|
||||
|
@ -2788,48 +2804,6 @@ GT.tempGrids = Array();
|
|||
|
||||
function onMyKeyDown(event)
|
||||
{
|
||||
if (GT.MyGridIsUp == true && GT.MyCurrentGrid.length == 4)
|
||||
{
|
||||
var processedAlert = false;
|
||||
var mediaClip = "";
|
||||
var failedToAdd = GT.dirSeperator + "Balloon-deflating-1.mp3";
|
||||
if (event.code == "KeyM")
|
||||
{
|
||||
mediaClip = GT.dirSeperator + "Clicky-1.mp3";
|
||||
var valid = addAlert(GT.MyCurrentGrid, 2, 3, 2, "", "");
|
||||
if (!valid)
|
||||
{
|
||||
mediaClip = failedToAdd;
|
||||
}
|
||||
processedAlert = true;
|
||||
}
|
||||
else if (event.code == "KeyT")
|
||||
{
|
||||
mediaClip = GT.dirSeperator + "Ping-coin.mp3";
|
||||
var valid = addAlert(GT.MyCurrentGrid, 2, 1, 2, "", "");
|
||||
if (!valid)
|
||||
{
|
||||
mediaClip = failedToAdd;
|
||||
}
|
||||
processedAlert = true;
|
||||
}
|
||||
else if (event.code == "KeyV")
|
||||
{
|
||||
mediaClip = GT.dirSeperator + "Slide-ping.mp3";
|
||||
var valid = addAlert(GT.MyCurrentGrid, 2, 2, 2, "", "");
|
||||
if (!valid)
|
||||
{
|
||||
mediaClip = failedToAdd;
|
||||
}
|
||||
processedAlert = true;
|
||||
}
|
||||
if (processedAlert == true)
|
||||
{
|
||||
playAlertMediaFile(mediaClip);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
if (event.keyCode == 27)
|
||||
{
|
||||
rootSettingsDiv.style.display = "none";
|
||||
|
@ -2940,9 +2914,7 @@ function registerHotKeys()
|
|||
registerHotKey("KeyE", toggleMoonTrack);
|
||||
registerHotKey("KeyF", toggleSpotPaths);
|
||||
registerHotKey("KeyG", toggleGtMap);
|
||||
// registerHotKey("KeyH", cycleSpotView);
|
||||
registerHotKey("KeyI", showRootInfoBox);
|
||||
// registerHotKey("KeyJ", setTrophyOverlay, 8);
|
||||
registerHotKey("KeyK", makeScreenshots);
|
||||
registerHotKey("KeyL", adifLoadDialog);
|
||||
registerHotKey("KeyM", toggleAlertMute);
|
||||
|
@ -2956,7 +2928,6 @@ function registerHotKeys()
|
|||
registerHotKey("KeyU", toggleMergeOverlay);
|
||||
registerHotKey("KeyW", toggleGridMode);
|
||||
registerHotKey("KeyX", toggleMouseTrack);
|
||||
// registerHotKey("KeyY", toggleGlobalStrikes);
|
||||
registerHotKey("KeyZ", setCenterQTH);
|
||||
registerHotKey("Minus", toggleCRScript);
|
||||
|
||||
|
@ -6153,7 +6124,7 @@ function handleWsjtxStatus(newMessage)
|
|||
}
|
||||
}
|
||||
if (GT.pskBandActivityTimerHandle == null) pskGetBandActivity();
|
||||
if (bandChange || modeChange)
|
||||
if (bandChange || modeChange || GT.startingUp)
|
||||
{
|
||||
removePaths();
|
||||
goProcessRoster();
|
||||
|
@ -6168,6 +6139,7 @@ function handleWsjtxStatus(newMessage)
|
|||
updateChatWindow();
|
||||
oamsBandActivityCheck();
|
||||
GT.gtLiveStatusUpdate = true;
|
||||
GT.startingUp = false;
|
||||
}
|
||||
|
||||
GT.appSettings.myRawFreq = newMessage.Frequency;
|
||||
|
@ -6547,10 +6519,17 @@ function finalWsjtxDecode(newMessage, isFox = false, foxMessage)
|
|||
for (const i in decodeWords)
|
||||
{
|
||||
decodeWords[i] = decodeWords[i].replace("<", "").replace(">", "");
|
||||
if (decodeWords[i].indexOf("...") != 1)
|
||||
if (decodeWords[i].indexOf("...") != -1)
|
||||
{
|
||||
// simply ignore <...> , we don't know who they are and we aint talking to them.
|
||||
return;
|
||||
if (i != 0)
|
||||
{
|
||||
// simply ignore <...> , we don't know who they are and we aint talking to them.
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
decodeWords[0] = "UNKNOWN";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -7455,21 +7434,21 @@ function showCallsignBox(redraw)
|
|||
{
|
||||
worker +=
|
||||
"<td align='center'>" +
|
||||
(thisCall in GT.lotwCallsigns ? "✔" : "") +
|
||||
(thisCall in GT.lotwCallsigns ? "🙋🏻♂️" : "") +
|
||||
"</td>";
|
||||
}
|
||||
if (GT.callsignLookups.eqslUseEnable == true)
|
||||
{
|
||||
worker +=
|
||||
"<td align='center'>" +
|
||||
(thisCall in GT.eqslCallsigns ? "✔" : "") +
|
||||
(thisCall in GT.eqslCallsigns ? "🙋🏻♂️" : "") +
|
||||
"</td>";
|
||||
}
|
||||
if (GT.callsignLookups.oqrsUseEnable == true)
|
||||
{
|
||||
worker +=
|
||||
"<td align='center'>" +
|
||||
(thisCall in GT.oqrsCallsigns ? "✔" : "") +
|
||||
(thisCall in GT.oqrsCallsigns ? "🙋🏻♂️" : "") +
|
||||
"</td>";
|
||||
}
|
||||
worker += "</tr>";
|
||||
|
@ -7969,7 +7948,16 @@ function showWorkedBox(sortIndex, nextPage, redraw)
|
|||
worker += "<th><div id='qslFilterDiv'></div></th>";
|
||||
worker += "<th></th>";
|
||||
worker += "<th></th>";
|
||||
worker += "<th colspan=2><div id='dxccFilterDiv'></div></th>";
|
||||
if (GT.filterDxcc != 0)
|
||||
{
|
||||
worker += "<th style='border-right:none;'><div id='dxccFilterDiv'></div></th>";
|
||||
worker += "<th style='border-left:none;'><img title='Show All' onclick='window.opener.GT.filterDxcc = 0; window.opener.showWorkedBox();' src='/img/trash_24x48.png' style='width: 30px; margin:0px; padding:0px; margin-bottom: -4px; cursor: pointer'/></th>";
|
||||
}
|
||||
else
|
||||
{
|
||||
worker += "<th colspan=2><div id='dxccFilterDiv'></div><th>";
|
||||
}
|
||||
|
||||
worker += "</tr> ";
|
||||
worker += "<tr><th style='cursor:pointer;' align=center onclick='window.opener.showWorkedBox(0);'>" + $.i18n("gt.qsoPage.Station") + "</th>";
|
||||
worker += "<th style='cursor:pointer;' align=center onclick='window.opener.showWorkedBox(1);'>" + $.i18n("gt.qsoPage.Grid") + "</th>";
|
||||
|
@ -7981,6 +7969,9 @@ function showWorkedBox(sortIndex, nextPage, redraw)
|
|||
worker += "<th style='cursor:pointer;' align=center onclick='window.opener.showWorkedBox(3);'>" + $.i18n("gt.qsoPage.DXCC") + "</th>";
|
||||
worker += "<th style='cursor:pointer;' align=center onclick='window.opener.showWorkedBox(3);'>" + $.i18n("gt.qsoPage.Flag") + "</th>";
|
||||
worker += "<th style='cursor:pointer;' align=center onclick='window.opener.showWorkedBox(4);'>" + $.i18n("gt.qsoPage.When") + "</th>";
|
||||
if (GT.callsignLookups.lotwUseEnable == true) worker += "<th>" + $.i18n("gt.qsoPage.LoTW") + "</th>";
|
||||
if (GT.callsignLookups.eqslUseEnable == true) worker += "<th>" + $.i18n("gt.qsoPage.eQSL") + "</th>";
|
||||
if (GT.callsignLookups.oqrsUseEnable == true) worker += "<th>" + $.i18n("gt.qsoPage.OQRS") + "</th>";
|
||||
worker += "</tr>";
|
||||
|
||||
var key = null;
|
||||
|
@ -8024,6 +8015,27 @@ function showWorkedBox(sortIndex, nextPage, redraw)
|
|||
"<td style='color:lightblue'>" +
|
||||
userTimeString(key.time * 1000) +
|
||||
"</td>";
|
||||
if (GT.callsignLookups.lotwUseEnable == true)
|
||||
{
|
||||
worker +=
|
||||
"<td align=center>" +
|
||||
(key.DEcall in GT.lotwCallsigns ? "🙋🏻♂️" : "") +
|
||||
"</td>";
|
||||
}
|
||||
if (GT.callsignLookups.eqslUseEnable == true)
|
||||
{
|
||||
worker +=
|
||||
"<td align=center>" +
|
||||
(key.DEcall in GT.eqslCallsigns ? "🙋🏻♂️" : "") +
|
||||
"</td>";
|
||||
}
|
||||
if (GT.callsignLookups.oqrsUseEnable == true)
|
||||
{
|
||||
worker +=
|
||||
"<td align=center>" +
|
||||
(key.DEcall in GT.oqrsCallsigns ? "🙋🏻♂️" : "") +
|
||||
"</td>";
|
||||
}
|
||||
worker += "</tr>";
|
||||
}
|
||||
|
||||
|
@ -8165,20 +8177,14 @@ function showWorkedBox(sortIndex, nextPage, redraw)
|
|||
|
||||
function statsValidateCallByElement(elementString)
|
||||
{
|
||||
if (
|
||||
GT.statsWindowHandle != null &&
|
||||
typeof GT.statsWindowHandle.window.validateCallByElement !== "undefined"
|
||||
)
|
||||
if (GT.statsWindowHandle != null && typeof GT.statsWindowHandle.window.validateCallByElement !== "undefined")
|
||||
{
|
||||
GT.statsWindowHandle.window.validateCallByElement(elementString);
|
||||
}
|
||||
}
|
||||
function statsFocus(selection)
|
||||
{
|
||||
if (
|
||||
GT.statsWindowHandle != null &&
|
||||
typeof GT.statsWindowHandle.window.statsFocus !== "undefined"
|
||||
)
|
||||
if (GT.statsWindowHandle != null && typeof GT.statsWindowHandle.window.statsFocus !== "undefined")
|
||||
{
|
||||
GT.statsWindowHandle.window.statsFocus(selection);
|
||||
}
|
||||
|
@ -8186,10 +8192,7 @@ function statsFocus(selection)
|
|||
|
||||
function lookupValidateCallByElement(elementString)
|
||||
{
|
||||
if (
|
||||
GT.lookupWindowHandle != null && GT.lookupWindowInitialized &&
|
||||
typeof GT.lookupWindowHandle.window.validateCallByElement !== "undefined"
|
||||
)
|
||||
if (GT.lookupWindowHandle != null && GT.lookupWindowInitialized && typeof GT.lookupWindowHandle.window.validateCallByElement !== "undefined")
|
||||
{
|
||||
GT.lookupWindowHandle.window.validateCallByElement(elementString);
|
||||
}
|
||||
|
@ -8197,10 +8200,7 @@ function lookupValidateCallByElement(elementString)
|
|||
|
||||
function lookupFocus(selection)
|
||||
{
|
||||
if (
|
||||
GT.lookupWindowHandle != null && GT.lookupWindowInitialized &&
|
||||
typeof GT.lookupWindowHandle.window.statsFocus !== "undefined"
|
||||
)
|
||||
if (GT.lookupWindowHandle != null && GT.lookupWindowInitialized && typeof GT.lookupWindowHandle.window.statsFocus !== "undefined")
|
||||
{
|
||||
GT.lookupWindowHandle.window.statsFocus(selection);
|
||||
}
|
||||
|
@ -8208,10 +8208,7 @@ function lookupFocus(selection)
|
|||
|
||||
function statsAppendChild(elementString, object, onInputString, defaultValue)
|
||||
{
|
||||
if (
|
||||
GT.statsWindowHandle != null &&
|
||||
typeof GT.statsWindowHandle.window.appendToChild !== "undefined"
|
||||
)
|
||||
if (GT.statsWindowHandle != null && typeof GT.statsWindowHandle.window.appendToChild !== "undefined")
|
||||
{
|
||||
GT.statsWindowHandle.window.appendToChild(
|
||||
elementString,
|
||||
|
@ -8682,6 +8679,11 @@ function openBaWindow(show = true)
|
|||
new_win.on("loaded", function ()
|
||||
{
|
||||
GT.baWindowHandle.setMinimumSize(198, 52);
|
||||
if (GT.firstRun)
|
||||
{
|
||||
GT.baWindowHandle.resizeTo(198, 52);
|
||||
GT.baWindowHandle.moveTo(250, 250);
|
||||
}
|
||||
});
|
||||
new_win.on("close", function ()
|
||||
{
|
||||
|
@ -8794,6 +8796,11 @@ function openLookupWindow(show = false)
|
|||
{
|
||||
GT.lookupWindowHandle.setMinimumSize(680, 200);
|
||||
GT.lookupWindowHandle.setResizable(true);
|
||||
if (GT.firstRun)
|
||||
{
|
||||
GT.lookupWindowHandle.resizeTo(680, 200);
|
||||
GT.lookupWindowHandle.moveTo(75, 75);
|
||||
}
|
||||
});
|
||||
new_win.on("close", function ()
|
||||
{
|
||||
|
@ -9377,8 +9384,7 @@ function renderStatsBox()
|
|||
|
||||
for (var band in stats[i][key].confirmed_bands)
|
||||
{
|
||||
output[i].confirmed_bands[band] =
|
||||
~~output[i].confirmed_bands[band] + 1;
|
||||
output[i].confirmed_bands[band] = ~~output[i].confirmed_bands[band] + 1;
|
||||
}
|
||||
|
||||
for (var mode in stats[i][key].worked_modes)
|
||||
|
@ -9388,8 +9394,7 @@ function renderStatsBox()
|
|||
|
||||
for (var mode in stats[i][key].confirmed_modes)
|
||||
{
|
||||
output[i].confirmed_modes[mode] =
|
||||
~~output[i].confirmed_modes[mode] + 1;
|
||||
output[i].confirmed_modes[mode] = ~~output[i].confirmed_modes[mode] + 1;
|
||||
}
|
||||
|
||||
for (var type in stats[i][key].worked_types)
|
||||
|
@ -9399,8 +9404,7 @@ function renderStatsBox()
|
|||
|
||||
for (var type in stats[i][key].confirmed_types)
|
||||
{
|
||||
output[i].confirmed_types[type] =
|
||||
~~output[i].confirmed_types[type] + 1;
|
||||
output[i].confirmed_types[type] = ~~output[i].confirmed_types[type] + 1;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -11505,16 +11509,6 @@ function workingDateChanged()
|
|||
var fields = workingDateValue.value.split("-");
|
||||
var time = workingTimeValue.value.split(":");
|
||||
|
||||
var date = new Date(
|
||||
Date.UTC(
|
||||
parseInt(fields[0]),
|
||||
parseInt(fields[1]) - 1,
|
||||
parseInt(fields[2]),
|
||||
parseInt(time[0]),
|
||||
parseInt(time[1]),
|
||||
0
|
||||
)
|
||||
);
|
||||
GT.appSettings.workingDate =
|
||||
Date.UTC(
|
||||
parseInt(fields[0]),
|
||||
|
@ -11748,7 +11742,8 @@ function loadMaidenHeadData()
|
|||
{
|
||||
GT.dxccToAltName[GT.dxccInfo[key].dxcc] = GT.dxccInfo[key].name;
|
||||
GT.dxccToADIFName[GT.dxccInfo[key].dxcc] = GT.dxccInfo[key].aname;
|
||||
|
||||
GT.altNameToDXCC[GT.dxccInfo[key].name] = GT.dxccInfo[key].dxcc;
|
||||
|
||||
for (var x = 0; x < GT.dxccInfo[key].prefix.length; x++)
|
||||
{
|
||||
GT.prefixToMap[GT.dxccInfo[key].prefix[x]] = key;
|
||||
|
@ -12777,7 +12772,7 @@ function initSpeech()
|
|||
{
|
||||
window.speechSynthesis.onvoiceschanged = function ()
|
||||
{
|
||||
nodeTimers.setTimeout(timedGetVoices, 500);
|
||||
nodeTimers.setTimeout(timedGetVoices, 3000);
|
||||
};
|
||||
var msg = new SpeechSynthesisUtterance("\n");
|
||||
msg.lang = GT.localeString;
|
||||
|
@ -14970,19 +14965,19 @@ function displayLookupObject(lookup, gridPass, fromCache = false)
|
|||
if (GT.callsignLookups.lotwUseEnable == true && thisCall in GT.lotwCallsigns)
|
||||
{
|
||||
lookup.ulotw =
|
||||
"✔ (" +
|
||||
"🙋🏻♂️ (" +
|
||||
userDayString(GT.lotwCallsigns[thisCall] * 86400 * 1000) +
|
||||
")";
|
||||
worker += makeRow("LoTW Member", lookup, "ulotw");
|
||||
}
|
||||
if (GT.callsignLookups.eqslUseEnable == true && thisCall in GT.eqslCallsigns)
|
||||
{
|
||||
lookup.ueqsl = "✔";
|
||||
lookup.ueqsl = "🙋🏻♂️";
|
||||
worker += makeRow("eQSL Member", lookup, "ueqsl");
|
||||
}
|
||||
if (GT.callsignLookups.oqrsUseEnable == true && thisCall in GT.oqrsCallsigns)
|
||||
{
|
||||
lookup.uoqrs = "✔";
|
||||
lookup.uoqrs = "🙋🏻♂️";
|
||||
worker += makeRow("ClubLog OQRS", lookup, "uoqrs");
|
||||
}
|
||||
|
||||
|
|
|
@ -47,20 +47,38 @@ GT.potaUnknownPark = {
|
|||
grid: ""
|
||||
};
|
||||
|
||||
GT.gtParkIconActive = new ol.style.Icon({
|
||||
src: "./img/pota_icon_active.png",
|
||||
anchorYUnits: "pixels",
|
||||
anchorXUnits: "pixels",
|
||||
anchor: [10, 19]
|
||||
GT.gtParkOnInstance = new ol.style.Text({
|
||||
text: "🏕️",
|
||||
font: "20px Verdana",
|
||||
textAlign: "center",
|
||||
justify: "center"
|
||||
});
|
||||
|
||||
GT.gtParkIconInactive = new ol.style.Icon({
|
||||
src: "./img/pota_icon_inactive.png",
|
||||
anchorYUnits: "pixels",
|
||||
anchorXUnits: "pixels",
|
||||
anchor: [10, 19]
|
||||
GT.gtParkOffInstance = new ol.style.Text({
|
||||
text: "🌲",
|
||||
font: "20px Verdana",
|
||||
textAlign: "center",
|
||||
justify: "center"
|
||||
});
|
||||
|
||||
function iconText(center, iconObj, zIndex, propName)
|
||||
{
|
||||
var feature = new ol.Feature({
|
||||
geometry: new ol.geom.Point(center),
|
||||
textAlign: "center",
|
||||
justify: "center",
|
||||
prop: propName
|
||||
});
|
||||
|
||||
var iconStyle = new ol.style.Style({
|
||||
zIndex: zIndex,
|
||||
text: iconObj
|
||||
});
|
||||
|
||||
feature.setStyle(iconStyle);
|
||||
return feature;
|
||||
}
|
||||
|
||||
function initPota()
|
||||
{
|
||||
potaEnabled.checked = (GT.appSettings.potaEnabled == 1);
|
||||
|
@ -139,7 +157,18 @@ function makeParkFeatures()
|
|||
var report = GT.pota.parkSpots[park][call];
|
||||
if (parkObj.feature == null && validateMapBandAndMode(report.band, report.mode) && Date.now() < report.expire)
|
||||
{
|
||||
parkObj.feature = iconFeature(ol.proj.fromLonLat([Number(GT.pota.parks[park].longitude), Number(GT.pota.parks[park].latitude)]), GT.gtParkIconActive, 1, "parkFlag");
|
||||
let parkIcon = GT.gtParkOffInstance;
|
||||
let zIndex = 1;
|
||||
for (let instance in GT.instances)
|
||||
{
|
||||
if (GT.instances[instance].valid && GT.instances[instance].status.Band == report.band && GT.instances[instance].status.MO == report.mode)
|
||||
{
|
||||
parkIcon = GT.gtParkOnInstance;
|
||||
zIndex = 2;
|
||||
break;
|
||||
}
|
||||
}
|
||||
parkObj.feature = iconText(ol.proj.fromLonLat([Number(GT.pota.parks[park].longitude), Number(GT.pota.parks[park].latitude)]), parkIcon, zIndex, "parkFlag");
|
||||
parkObj.feature.key = park;
|
||||
parkObj.feature.size = 22;
|
||||
|
||||
|
@ -179,7 +208,6 @@ function potaSpotFromDecode(callObj)
|
|||
if (!(hash in GT.pota.rbnReportTimes) || Date.now() > GT.pota.rbnReportTimes[hash])
|
||||
{
|
||||
GT.pota.rbnReportTimes[hash] = Date.now() + GT.pota.rbnFrequency;
|
||||
// reportPotaRBN(GT.pota.parkSpots[park][callObj.DEcall]);
|
||||
}
|
||||
}
|
||||
else if (callObj.DEcall in GT.pota.callSchedule)
|
||||
|
@ -205,7 +233,6 @@ function potaSpotFromDecode(callObj)
|
|||
if (!(hash in GT.pota.rbnReportTimes) || Date.now() > GT.pota.rbnReportTimes[hash])
|
||||
{
|
||||
GT.pota.rbnReportTimes[hash] = Date.now() + GT.pota.rbnFrequency;
|
||||
// reportPotaRBN(GT.pota.parkSpots[park][callObj.DEcall]);
|
||||
}
|
||||
}
|
||||
else
|
||||
|
@ -245,39 +272,6 @@ function leftClickPota(parkId)
|
|||
}
|
||||
}
|
||||
|
||||
/* function reportPotaRBN(callSpot)
|
||||
{
|
||||
if (Date.now() < callSpot.expire)
|
||||
{
|
||||
var report = {
|
||||
activator: callSpot.activator,
|
||||
spotter: GT.appSettings.myCall + "-#",
|
||||
frequency: String(parseInt(callSpot.frequency * 1000)),
|
||||
reference: callSpot.reference,
|
||||
mode: callSpot.mode,
|
||||
source: "RBN",
|
||||
comments: callSpot.comments,
|
||||
activatorGrid: callSpot.activatorGrid,
|
||||
spotterGrid: callSpot.spotterGrid
|
||||
};
|
||||
|
||||
if (Number(report.frequency) > 0)
|
||||
{
|
||||
getPostJSONBuffer(
|
||||
"https://api.pota.app/spot",
|
||||
rbnReportResult,
|
||||
null,
|
||||
"https",
|
||||
443,
|
||||
report,
|
||||
10000,
|
||||
null,
|
||||
null
|
||||
);
|
||||
}
|
||||
}
|
||||
} */
|
||||
|
||||
function reportPotaQSO(record)
|
||||
{
|
||||
var report = {
|
||||
|
@ -357,7 +351,18 @@ function addParkSpotFeature(park, report)
|
|||
|
||||
if (parkObj.feature == null && validateMapBandAndMode(report.band, report.mode))
|
||||
{
|
||||
parkObj.feature = iconFeature(ol.proj.fromLonLat([Number(GT.pota.parks[park].longitude), Number(GT.pota.parks[park].latitude)]), GT.gtParkIconActive, 1, "parkFlag");
|
||||
let parkIcon = GT.gtParkOffInstance;
|
||||
let zIndex = 1;
|
||||
for (let instance in GT.instances)
|
||||
{
|
||||
if (GT.instances[instance].valid && GT.instances[instance].status.Band == report.band && GT.instances[instance].status.MO == report.mode)
|
||||
{
|
||||
parkIcon = GT.gtParkOnInstance;
|
||||
zIndex = 2;
|
||||
break;
|
||||
}
|
||||
}
|
||||
parkObj.feature = iconText(ol.proj.fromLonLat([Number(GT.pota.parks[park].longitude), Number(GT.pota.parks[park].latitude)]), parkIcon, zIndex, "parkFlag");
|
||||
parkObj.feature.key = park;
|
||||
parkObj.feature.size = 22;
|
||||
GT.layerSources.pota.addFeature(parkObj.feature);
|
||||
|
|
Plik diff jest za duży
Load Diff
|
@ -29,31 +29,6 @@ function prepareRosterSettings()
|
|||
window.opener.GT.appSettings.gtShareEnable == true &&
|
||||
window.opener.GT.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
|
||||
// all three at the same time?
|
||||
// this section is for LoTW users, can be a function
|
||||
if (window.opener.GT.callsignLookups.lotwUseEnable == true)
|
||||
{
|
||||
usesLoTWDiv.style.display = "";
|
||||
if (CR.rosterSettings.usesLoTW == true)
|
||||
{
|
||||
maxLoTW.style.display = "";
|
||||
maxLoTWView.style.display = "";
|
||||
}
|
||||
else
|
||||
{
|
||||
maxLoTW.style.display = "none";
|
||||
maxLoTWView.style.display = "none";
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
usesLoTWDiv.style.display = "none";
|
||||
maxLoTW.style.display = "none";
|
||||
maxLoTWView.style.display = "none";
|
||||
}
|
||||
|
||||
if (CR.rosterSettings.huntNeed == "mixed")
|
||||
{
|
||||
rosterSettings.huntIndex = CR.confirmed;
|
||||
|
|
|
@ -53,11 +53,6 @@ function processRosterFiltering(callRoster, rosterSettings)
|
|||
entry.tx = false;
|
||||
continue;
|
||||
}
|
||||
if (CR.rosterSettings.noUnknownDXCC && callObj.dxcc == -1)
|
||||
{
|
||||
entry.tx = false;
|
||||
continue;
|
||||
}
|
||||
if (window.opener.GT.instances[callObj.instance].crEnable == false)
|
||||
{
|
||||
entry.tx = false;
|
||||
|
@ -68,7 +63,7 @@ function processRosterFiltering(callRoster, rosterSettings)
|
|||
entry.tx = false;
|
||||
continue;
|
||||
}
|
||||
if (entry.DXcall + " from All" in CR.blockedCQ || entry.DXcall + " from " + window.opener.GT.dxccToAltName[callObj.dxcc] in CR.blockedCQ)
|
||||
if (entry.DXcall in CR.ignoredCQ || entry.DXcall + ":" + callObj.dxcc in CR.ignoredCQ)
|
||||
{
|
||||
entry.tx = false;
|
||||
continue;
|
||||
|
@ -104,19 +99,6 @@ function processRosterFiltering(callRoster, rosterSettings)
|
|||
continue;
|
||||
}
|
||||
}
|
||||
if (CR.rosterSettings.useRegex && CR.rosterSettings.callsignRegex.length > 0)
|
||||
{
|
||||
var regexObj = regexObj || new RegExp(CR.rosterSettings.callsignRegex, "i")
|
||||
try
|
||||
{
|
||||
if (!call.match(regexObj))
|
||||
{
|
||||
entry.tx = false;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
catch (e) {}
|
||||
}
|
||||
if (CR.rosterSettings.requireGrid == true && callObj.grid.length != 4)
|
||||
{
|
||||
entry.tx = false;
|
||||
|
@ -143,31 +125,6 @@ function processRosterFiltering(callRoster, rosterSettings)
|
|||
continue;
|
||||
}
|
||||
|
||||
if (CR.rosterSettings.noMsg == true)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (callObj.msg.match(CR.rosterSettings.noMsgValue))
|
||||
{
|
||||
entry.tx = false;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
catch (e) {}
|
||||
}
|
||||
if (CR.rosterSettings.onlyMsg == true)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (!callObj.msg.match(CR.rosterSettings.onlyMsgValue))
|
||||
{
|
||||
entry.tx = false;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
catch (e) {}
|
||||
}
|
||||
|
||||
if (callObj.dxcc == window.opener.GT.myDXCC)
|
||||
{
|
||||
if (CR.rosterSettings.noMyDxcc == true)
|
||||
|
|
|
@ -3,7 +3,6 @@ function processRosterHunting(callRoster, rosterSettings, awardTracker)
|
|||
// these lets, do they rely on anything between the top and here?
|
||||
// if not could they be put in the let list at the beginning?
|
||||
let hasGtPin = false;
|
||||
|
||||
let inversionAlpha = "DD";
|
||||
let row = "#000000";
|
||||
let bold = "#000000;font-weight: bold;";
|
||||
|
@ -18,6 +17,29 @@ function processRosterHunting(callRoster, rosterSettings, awardTracker)
|
|||
const potaEnabled = (window.opener.GT.appSettings.potaEnabled == 1);
|
||||
// TODO: Hunting results might be used to filter, based on the "Callsigns: Only Wanted" option,
|
||||
// so maybe we can move this loop first, and add a check to the filtering loop?
|
||||
|
||||
// award tracker overrides
|
||||
let awardTrackerOverrides = {
|
||||
call: false,
|
||||
grids: false,
|
||||
dxcc: false,
|
||||
states: false,
|
||||
cnty: false,
|
||||
cqz: false,
|
||||
px: false,
|
||||
cont: false
|
||||
};
|
||||
|
||||
if (CR.rosterSettings.reference == LOGBOOK_AWARD_TRACKER)
|
||||
{
|
||||
for (let key in awardTracker)
|
||||
{
|
||||
if (awardTracker[key].enable)
|
||||
{
|
||||
awardTrackerOverrides[awardTracker[key].rule.type] = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Second loop, hunting and highlighting
|
||||
for (const callHash in callRoster)
|
||||
|
@ -63,10 +85,12 @@ function processRosterHunting(callRoster, rosterSettings, awardTracker)
|
|||
|
||||
let callsign = entry.DEcall;
|
||||
|
||||
callObj.hunting = {}
|
||||
callObj.callFlags = {}
|
||||
callObj.style = callObj.style || {}
|
||||
callObj.DEcallHTML = callObj.DEcall
|
||||
callObj.hunting = {};
|
||||
callObj.callFlags = {};
|
||||
callObj.style = callObj.style || {};
|
||||
callObj.DEcallHTML = null;
|
||||
callObj.DXcallHTML = null;
|
||||
callObj.msgHTML = null;
|
||||
|
||||
let colorObject = Object();
|
||||
|
||||
|
@ -95,11 +119,8 @@ function processRosterHunting(callRoster, rosterSettings, awardTracker)
|
|||
"";
|
||||
|
||||
let cntyPointer = (callObj.cnty && callObj.qual == false) ? "cursor: pointer;" : "";
|
||||
|
||||
let didWork = false;
|
||||
|
||||
let hash = callsign + workHashSuffix;
|
||||
let layeredHash = layeredHashSuffix && (callsign + layeredHashSuffix)
|
||||
|
||||
// Call worked in current logbook settings, regardless of hunting mode
|
||||
if (hash in CR.worked.call)
|
||||
|
@ -170,28 +191,6 @@ function processRosterHunting(callRoster, rosterSettings, awardTracker)
|
|||
}
|
||||
}
|
||||
|
||||
// award tracker overrides
|
||||
let awardTrackerOverrides = {
|
||||
call: false,
|
||||
grids: false,
|
||||
dxcc: false,
|
||||
states: false,
|
||||
cnty: false,
|
||||
cqz: false,
|
||||
px: false,
|
||||
cont: false
|
||||
};
|
||||
if (CR.rosterSettings.reference == LOGBOOK_AWARD_TRACKER)
|
||||
{
|
||||
for (let key in awardTracker)
|
||||
{
|
||||
if (awardTracker[key].enable)
|
||||
{
|
||||
awardTrackerOverrides[awardTracker[key].rule.type] = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Hunting for callsigns
|
||||
if (huntCallsign.checked || awardTrackerOverrides.call)
|
||||
{
|
||||
|
@ -251,25 +250,9 @@ function processRosterHunting(callRoster, rosterSettings, awardTracker)
|
|||
}
|
||||
}
|
||||
|
||||
if (huntRegex.checked == true && CR.rosterSettings.huntRegexValue.length > 0)
|
||||
if (huntWatcher.checked)
|
||||
{
|
||||
var huntRegexObj = huntRegexObj || new RegExp(CR.rosterSettings.huntRegexValue, "gi")
|
||||
try
|
||||
{
|
||||
if (callsign.match(huntRegexObj))
|
||||
{
|
||||
shouldAlert = true;
|
||||
callObj.reason.push("regex");
|
||||
callObj.hunting.regex = "hunted";
|
||||
callObj.DEcallHTML = callsign.replace(huntRegexObj, (x, y) => `<span class='regexMatch'>${x}</span>`)
|
||||
if (!callObj.hunting.call && !callObj.callFlags.worked)
|
||||
{
|
||||
callBg = `${call}${inversionAlpha};`;
|
||||
call = bold;
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (e) {}
|
||||
shouldAlert = processWatchers(callObj);
|
||||
}
|
||||
|
||||
// Hunting for "stations calling you"
|
||||
|
@ -339,7 +322,7 @@ function processRosterHunting(callRoster, rosterSettings, awardTracker)
|
|||
}
|
||||
|
||||
// Hunting for DXCC
|
||||
if (huntDXCC.checked || awardTrackerOverrides.dxcc)
|
||||
if (huntDXCC.checked || awardTrackerOverrides.dxcc || awardTrackerOverrides.dxcc2band)
|
||||
{
|
||||
let hash = String(callObj.dxcc) + "|" + workHashSuffix;
|
||||
let layeredHash = rosterSettings.layeredMode && (String(callObj.dxcc) + "|" + layeredHashSuffix)
|
||||
|
@ -469,11 +452,7 @@ function processRosterHunting(callRoster, rosterSettings, awardTracker)
|
|||
if ((huntCounty.checked || awardTrackerOverrides.cnty) && window.opener.GT.callsignLookups.ulsUseEnable == true)
|
||||
{
|
||||
let finalDxcc = callObj.dxcc;
|
||||
if (
|
||||
callObj.cnty &&
|
||||
(finalDxcc == 291 || finalDxcc == 110 || finalDxcc == 6 || finalDxcc == 202) &&
|
||||
callObj.cnty.length > 0
|
||||
)
|
||||
if (callObj.cnty && (finalDxcc == 291 || finalDxcc == 110 || finalDxcc == 6 || finalDxcc == 202) && callObj.cnty.length > 0)
|
||||
{
|
||||
let hash = callObj.cnty + (rosterSettings.layeredMode ? layeredHashSuffix : workHashSuffix);
|
||||
|
||||
|
@ -790,11 +769,25 @@ function processRosterHunting(callRoster, rosterSettings, awardTracker)
|
|||
}
|
||||
}
|
||||
|
||||
let huzzah = "";
|
||||
// Uncomment to test
|
||||
// callObj.DXcall = "CQ GT";
|
||||
if (CR.rosterSettings.animateCQGT == true && callObj.CQ == true && (callObj.DXcall == "CQ GT" || callObj.DXcall == "GridTracker"))
|
||||
{
|
||||
huzzah = "class='huzzah' ";
|
||||
callObj.DXcall = "GridTracker";
|
||||
calling = "white";
|
||||
}
|
||||
else if (CR.rosterSettings.animateCQGT == false && callObj.DXcall == "GridTracker")
|
||||
{
|
||||
callObj.DXcall = "CQ GT";
|
||||
}
|
||||
|
||||
// Assemble all styles
|
||||
colorObject.call = "style='" + callConf + "background-color:" + callBg + ";color:" +
|
||||
call + ";" + callPointer + "'";
|
||||
colorObject.grid = "style='" + gridConf + "background-color:" + gridBg + ";color:" + grid + ";cursor:pointer'";
|
||||
colorObject.calling = "style='" + callingConf + "background-color:" + callingBg + ";color:" + calling + "'";
|
||||
colorObject.calling = huzzah + "style='" + callingConf + "background-color:" + callingBg + ";color:" + calling + "'";
|
||||
colorObject.dxcc = "style='" + dxccConf + "background-color:" + dxccBg + ";color:" + dxcc + "'";
|
||||
colorObject.state = "style='" + stateConf + "background-color:" + stateBg + ";color:" + state + "'";
|
||||
colorObject.cnty = "style='" + cntyConf + "background-color:" + cntyBg + ";color:" + cnty + ";" + cntyPointer + "'";
|
||||
|
@ -818,3 +811,76 @@ function processRosterHunting(callRoster, rosterSettings, awardTracker)
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
function buildWatcher(watcher)
|
||||
{
|
||||
if (watcher.regex)
|
||||
{
|
||||
watcher.test = new RegExp(watcher.text, "gi");
|
||||
}
|
||||
else
|
||||
{
|
||||
watcher.test = new RegExp("^" + watcher.text + "$", "gi");
|
||||
}
|
||||
|
||||
if (watcher.type == "Callsign")
|
||||
{
|
||||
watcher.source = "DEcall";
|
||||
watcher.html = "DEcallHTML";
|
||||
}
|
||||
else if (watcher.type == "Calling")
|
||||
{
|
||||
watcher.source = "DXcall";
|
||||
watcher.html = "DXcallHTML";
|
||||
}
|
||||
else
|
||||
{
|
||||
watcher.source = "msg";
|
||||
watcher.html = "msgHTML";
|
||||
}
|
||||
return watcher.test;
|
||||
}
|
||||
|
||||
function processWatchers(callObj)
|
||||
{
|
||||
let now = Date.now();
|
||||
for (let key in CR.watchers)
|
||||
{
|
||||
let watcher = CR.watchers[key];
|
||||
if (watcher.watch)
|
||||
{
|
||||
if (watcher.start && now < watcher.startTime) continue;
|
||||
if (watcher.end && now > watcher.endTime)
|
||||
{
|
||||
if (watcher.autoDelete)
|
||||
{
|
||||
// Don't call deleteWatcher() as it calls the roster renderer
|
||||
delete CR.watchers[key];
|
||||
writeRosterSettings();
|
||||
wantRenderWatchersTab();
|
||||
}
|
||||
else
|
||||
{
|
||||
watcher.watch = false;
|
||||
wantRenderWatchersTab();
|
||||
}
|
||||
continue;
|
||||
}
|
||||
watcher.test = watcher.test || buildWatcher(watcher);
|
||||
try
|
||||
{
|
||||
if (callObj[watcher.source].match(watcher.test))
|
||||
{
|
||||
callObj.reason.push("watcher");
|
||||
callObj.hunting.watcher = "hunted";
|
||||
callObj.watcherKey = key;
|
||||
let htmlPrevent = htmlEntities(callObj[watcher.source]);
|
||||
callObj[watcher.html] = htmlPrevent.replace(watcher.test, (x, y) => `<span class='regexMatch'>${x}</span>`);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
catch (e) {}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
|
|
@ -19,7 +19,7 @@ function renderCompactRosterRow(callObj, showBand)
|
|||
let wholeClick = (CR.isCompactCounty ? "" : onClick);
|
||||
let callsignClick = (CR.isCompactCounty ? onClick : "");
|
||||
let worker = "<div class='compact' " + wholeClick + " >";
|
||||
worker += "<div class='compactCallsign' " + callsignClick + " name='Callsign' " + callObj.style.call + " >" + formatCallsign(callObj.DEcall) + bandView + "</div>";
|
||||
worker += "<div class='compactCallsign' " + callsignClick + " name='Callsign' " + callObj.style.call + " >" + formatCallsign(callObj.DEcallHTML || callObj.DEcall) + bandView + "</div>";
|
||||
worker += "<div class='compactData'>";
|
||||
worker += renderEntryForColumn(CR.rosterSettings.compactEntity, callObj, "div");
|
||||
worker += "</div></div>";
|
||||
|
|
|
@ -26,11 +26,12 @@ function renderRoster(callRoster, rosterSettings)
|
|||
|
||||
if (window.opener.GT.callsignLookups.lotwUseEnable == true)
|
||||
{
|
||||
// Do nothing
|
||||
usesLoTWDiv.style.display = "";
|
||||
}
|
||||
else
|
||||
{
|
||||
columnOverrides.LoTW = false;
|
||||
usesLoTWDiv.style.display = "none";
|
||||
}
|
||||
|
||||
if (rosterSettings.canMsg == true)
|
||||
|
@ -53,10 +54,6 @@ function renderRoster(callRoster, rosterSettings)
|
|||
columnOverrides.POTA = false;
|
||||
}
|
||||
|
||||
if (rosterSettings.isAwardTracker)
|
||||
{
|
||||
columnOverrides.Wanted = true;
|
||||
}
|
||||
// dealing with spots
|
||||
if (CR.rosterSettings.columns.Spot == true) onlySpotDiv.style.display = "";
|
||||
else onlySpotDiv.style.display = "none";
|
||||
|
|
|
@ -131,7 +131,7 @@ function changeRosterColumnOrder(columns)
|
|||
|
||||
function moveColumnLeft(column)
|
||||
{
|
||||
const columns = rosterColumnList(CR.rosterSettings.columns, { Callsign: true, Grid: true });
|
||||
const columns = rosterColumnList(CR.rosterSettings.columns, { Callsign: true });
|
||||
const pos = columns.indexOf(column);
|
||||
if (pos > 1)
|
||||
{
|
||||
|
@ -140,3 +140,29 @@ function moveColumnLeft(column)
|
|||
}
|
||||
changeRosterColumnOrder(columns);
|
||||
}
|
||||
|
||||
function moveColumnRight(column)
|
||||
{
|
||||
const columns = rosterColumnList(CR.rosterSettings.columns, { Callsign: true });
|
||||
const pos = columns.indexOf(column);
|
||||
if (pos > 0 && pos + 1 < Object.keys(columns).length)
|
||||
{
|
||||
columns[pos] = columns[pos + 1];
|
||||
columns[pos + 1] = column;
|
||||
}
|
||||
changeRosterColumnOrder(columns);
|
||||
}
|
||||
|
||||
function toggleColumn(target, column = null)
|
||||
{
|
||||
let label = column || target.label;
|
||||
CR.rosterSettings.columns[label] = target.checked;
|
||||
CR.columnMembers[label].checked = target.checked;
|
||||
if (label == "Spot")
|
||||
{
|
||||
window.opener.setRosterSpot(CR.rosterSettings.columns.Spot);
|
||||
}
|
||||
writeRosterSettings();
|
||||
viewRoster();
|
||||
resize();
|
||||
}
|
||||
|
|
|
@ -111,13 +111,16 @@ const ROSTER_COLUMNS = {
|
|||
tableData: (callObj) => ({
|
||||
rawAttrs: callObj.style.calling,
|
||||
name: callObj.CQ ? "CQ" : "Calling",
|
||||
html: (CR.rosterSettings.wantRRCQ && callObj.RR73) ? "RR73" : formatCallsign(callObj.DXcall)
|
||||
html: (CR.rosterSettings.wantRRCQ && callObj.RR73) ? "RR73" : formatCallsign(callObj.DXcallHTML || callObj.DXcall)
|
||||
})
|
||||
},
|
||||
|
||||
Msg: {
|
||||
compare: callObjLocaleComparer("DXcall"),
|
||||
tableData: (callObj) => ({ html: callObj.msg })
|
||||
tableData: (callObj) => ({
|
||||
name: "Msg",
|
||||
html: callObj.msgHTML || htmlEntities(callObj.msg)
|
||||
})
|
||||
},
|
||||
|
||||
DXCC: {
|
||||
|
@ -272,7 +275,7 @@ const ROSTER_COLUMNS = {
|
|||
title: `${$.i18n("rosterColumns.LoTW.LastUpdate")}${
|
||||
window.opener.userDayString(window.opener.GT.lotwCallsigns[callObj.DEcall] * 86400000)
|
||||
}`,
|
||||
html: "✔"
|
||||
html: "🙋🏻♂️"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -284,7 +287,7 @@ const ROSTER_COLUMNS = {
|
|||
title: `${$.i18n("rosterColumns.LoTW.LastUpdate")}${
|
||||
window.opener.userDayString(window.opener.GT.lotwCallsigns[callObj.DEcall] * 86400000)
|
||||
}`,
|
||||
html: "✔"
|
||||
html: "🙋🏻♂️"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -302,7 +305,7 @@ const ROSTER_COLUMNS = {
|
|||
tableData: (callObj) => ({
|
||||
style: "color: #0F0;",
|
||||
align: "center",
|
||||
html: (callObj.DEcall in window.opener.GT.eqslCallsigns ? "✔" : " ")
|
||||
html: (callObj.DEcall in window.opener.GT.eqslCallsigns ? "🙋🏻♂️" : " ")
|
||||
})
|
||||
},
|
||||
|
||||
|
@ -311,7 +314,7 @@ const ROSTER_COLUMNS = {
|
|||
tableData: (callObj) => ({
|
||||
style: "color: #0F0;",
|
||||
align: "center",
|
||||
html: (callObj.DEcall in window.opener.GT.oqrsCallsigns ? "✔" : " ")
|
||||
html: (callObj.DEcall in window.opener.GT.oqrsCallsigns ? "🙋🏻♂️" : " ")
|
||||
})
|
||||
},
|
||||
|
||||
|
@ -449,7 +452,7 @@ function potaColumnHover(callObj)
|
|||
return value;
|
||||
}
|
||||
|
||||
WANTED_ORDER = ["call", "qrz", "regex", "cont", "dxcc", "cqz", "ituz", "dxccMarathon", "cqzMarathon", "state", "pota", "grid", "cnty", "wpx", "oams"];
|
||||
WANTED_ORDER = ["call", "qrz", "watcher", "cont", "dxcc", "cqz", "ituz", "dxccMarathon", "cqzMarathon", "state", "pota", "grid", "cnty", "wpx", "oams"];
|
||||
WANTED_LABELS = {};
|
||||
|
||||
function wantedColumnParts(callObj, options)
|
||||
|
@ -472,7 +475,7 @@ function wantedColumnParts(callObj, options)
|
|||
// else if (wanted == "caller") { parts.push("Called"); }
|
||||
else if (wanted == "hunted" && field == "qrz") { parts.push("Caller"); }
|
||||
else if (wanted == "hunted" && field == "oams") { parts.push("OAMS User"); }
|
||||
else if (wanted == "hunted" && field == "regex") { parts.push("Regex match"); }
|
||||
else if (wanted == "hunted" && field == "watcher") { parts.push(callObj.watcherKey); }
|
||||
else if (wanted == "hunted") { parts.push(`${options.html ? "<b>" : ""}New ${WANTED_LABELS[field]}${options.html ? "<b>" : ""}`); }
|
||||
else if (wanted == "worked") { parts.push(`Worked ${WANTED_LABELS[field]}`); }
|
||||
else if (wanted == "mixed") { parts.push(`${callObj.band} ${WANTED_LABELS[field]}`); }
|
||||
|
|
|
@ -683,12 +683,8 @@ a {
|
|||
text-align: center;
|
||||
width: auto;
|
||||
border-top: 1px solid green;
|
||||
|
||||
vertical-align: top;
|
||||
|
||||
white-space: normal;
|
||||
|
||||
/* animation: fadeEffect .3s; Fading effect takes 1 second */
|
||||
}
|
||||
|
||||
/* Style the tab content */
|
||||
|
|
|
@ -6,11 +6,16 @@ td {
|
|||
white-space: nowrap;
|
||||
font-family: Sans-Serif;
|
||||
text-align: auto;
|
||||
vertical-align: baseline;
|
||||
padding: 0px;
|
||||
margin: 0px;
|
||||
top: 0;
|
||||
}
|
||||
|
||||
th {
|
||||
vertical-align: bottom;
|
||||
}
|
||||
|
||||
table,
|
||||
th,
|
||||
td,
|
||||
|
@ -21,24 +26,20 @@ select,
|
|||
|
||||
th,
|
||||
td {
|
||||
padding-bottom: 2px;
|
||||
padding-bottom: 1px;
|
||||
padding-right: 1px;
|
||||
margin-right: 2px;
|
||||
padding-left: 2px;
|
||||
|
||||
}
|
||||
|
||||
input[type="checkbox"] {
|
||||
appearance: checkbox !important;
|
||||
margin: 0;
|
||||
margin-top: -1px;
|
||||
margin-right: 1px;
|
||||
vertical-align: middle;
|
||||
vertical-align: top;
|
||||
position: relative;
|
||||
top: 0px;
|
||||
}
|
||||
|
||||
/* input[type="checkbox"]:checked {
|
||||
appearance: checkbox !important;
|
||||
} */
|
||||
}
|
||||
|
||||
select {
|
||||
appearance: none;
|
||||
|
@ -136,36 +137,42 @@ body.roster {
|
|||
min-height: 28px;
|
||||
margin-top: 4px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
flex-direction: row;
|
||||
align-items: stretch;
|
||||
justify-content: flex-start;
|
||||
}
|
||||
|
||||
#RosterControls.normal #MainRosterControls {
|
||||
margin-left: 180px;
|
||||
margin-right: 100px;
|
||||
margin-left: 1px;
|
||||
margin-top: 3px;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
justify-content: space-evenly;
|
||||
}
|
||||
|
||||
#TransmitControls {
|
||||
position: absolute;
|
||||
top: 3px;
|
||||
left: 6px;
|
||||
width: 180px;
|
||||
left: 3px;
|
||||
width: 246px;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
#MoreLessControls {
|
||||
#LessControls {
|
||||
position: absolute;
|
||||
top: 7px;
|
||||
left: 50%;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
#MoreControls {
|
||||
position: absolute;
|
||||
top: 5px;
|
||||
right: 6px;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
|
||||
#RosterControls.normal #ShowFewerControlsLink {
|
||||
display: none;
|
||||
}
|
||||
|
@ -174,10 +181,11 @@ body.roster {
|
|||
}
|
||||
|
||||
#RosterControls.normal #MainRosterControls {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
justify-content: space-evenly;
|
||||
position: absolute;
|
||||
top: 3px;
|
||||
left: 250px;
|
||||
text-align: left;
|
||||
justify-content: left;
|
||||
}
|
||||
|
||||
#RosterControls.extended {
|
||||
|
@ -190,7 +198,7 @@ body.roster {
|
|||
|
||||
#RosterControls.extended #MainRosterControls {
|
||||
margin-top: 30px;
|
||||
min-width: 210px;
|
||||
min-width: 250px;
|
||||
flex: 0;
|
||||
}
|
||||
|
||||
|
@ -232,13 +240,13 @@ body.roster {
|
|||
max-height: 142px;
|
||||
}
|
||||
|
||||
@media (max-width: 1050px) {
|
||||
@media (max-width: 1000px) {
|
||||
#RosterControls.normal #HuntModeControls {
|
||||
display: none !important;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 735px) {
|
||||
@media (max-width: 800px) {
|
||||
#RosterControls.normal #CallsignsControls {
|
||||
display: none;
|
||||
}
|
||||
|
@ -274,7 +282,7 @@ body.roster {
|
|||
flex-direction: row;
|
||||
align-items: flex-start;
|
||||
justify-content: flex-start;
|
||||
margin-right: 8px;
|
||||
margin-right: 1px;
|
||||
margin-bottom: 4px;
|
||||
}
|
||||
|
||||
|
@ -305,16 +313,16 @@ body.roster {
|
|||
|
||||
.secondaryControlGroup {
|
||||
flex: 1;
|
||||
margin-left: 8px;
|
||||
margin-left: 4px;
|
||||
padding: 0px;
|
||||
}
|
||||
|
||||
#huntingMatrixDiv {
|
||||
flex: 0.75;
|
||||
flex: .9;
|
||||
}
|
||||
|
||||
#exceptionDiv {
|
||||
flex: 1.25;
|
||||
flex: .25;
|
||||
}
|
||||
|
||||
.secondaryControlGroup h3 {
|
||||
|
@ -328,51 +336,57 @@ body.roster {
|
|||
#huntingMatrixDiv h3 {
|
||||
color: #099;
|
||||
border-bottom: 2px solid #066;
|
||||
margin-bottom: 2px;
|
||||
margin-bottom: 3px;
|
||||
}
|
||||
|
||||
#exceptionDiv h3 {
|
||||
color: #944;
|
||||
border-bottom: 2px solid #622;
|
||||
margin-bottom: 2px;
|
||||
color: rgb(206, 89, 89);
|
||||
border-bottom: 2px solid rgba(253, 113, 113, 0.644);
|
||||
margin-bottom: 3px;
|
||||
}
|
||||
|
||||
.secondaryControlGroup .columns {
|
||||
/* column-count: 2; */
|
||||
max-height: 135px;
|
||||
max-height: 100px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
flex-wrap: wrap;
|
||||
justify-content: flex-start;
|
||||
align-items: stretch;
|
||||
align-items: normal;
|
||||
}
|
||||
|
||||
@media (min-width: 1100px) {
|
||||
.secondaryControlGroup .columns {
|
||||
max-height: 80px;
|
||||
}
|
||||
}
|
||||
|
||||
.secondaryControlGroup .columns > div {
|
||||
.secondaryControlGroup .columns div {
|
||||
text-align: left;
|
||||
margin-bottom: 2px;
|
||||
vertical-align: bottom;
|
||||
margin-top: 3px;
|
||||
margin-right: 0px;
|
||||
}
|
||||
|
||||
.secondaryControlGroup input.slider {
|
||||
input.slider {
|
||||
display: inline-block;
|
||||
width: 75px;
|
||||
width: max-content;
|
||||
}
|
||||
|
||||
.secondaryControlGroup input.inputTextValue {
|
||||
.inputTextValue {
|
||||
border-radius: 6px;
|
||||
border: 1px solid #999;
|
||||
background-color: green;
|
||||
color: yellow;
|
||||
outline: none;
|
||||
margin: 0px;
|
||||
padding: 2px;
|
||||
border-style: inset;
|
||||
}
|
||||
|
||||
.secondaryControlGroup .roundBorderValue {
|
||||
padding: 2px;
|
||||
.inputTextValue:hover {
|
||||
border-color: #fff;
|
||||
border-style: outset;
|
||||
}
|
||||
|
||||
.roundBorderValue {
|
||||
padding: 3px;
|
||||
font-size: larger;
|
||||
}
|
||||
|
||||
#instancesWrapper .button {
|
||||
display: inline-block;
|
||||
|
@ -390,11 +404,12 @@ body.roster {
|
|||
#txrxdec {
|
||||
padding-left: 5px;
|
||||
padding-right: 5px;
|
||||
width: 68px;
|
||||
}
|
||||
|
||||
.link {
|
||||
cursor: hand;
|
||||
color: #ffffaa;
|
||||
color: #ffffaaa1;
|
||||
}
|
||||
|
||||
.link:hover {
|
||||
|
@ -419,13 +434,13 @@ table.awardTableCSS th {
|
|||
border-left: none;
|
||||
border-right: none;
|
||||
font-size: 12px;
|
||||
vertical-align: baseline;
|
||||
}
|
||||
|
||||
table.awardTableCSS tr {
|
||||
padding: 0px;
|
||||
margin: 0px;
|
||||
max-height: 16px;
|
||||
bottom: 0;
|
||||
}
|
||||
|
||||
table.awardTableCSS thead {
|
||||
|
@ -487,7 +502,8 @@ table.rosterTable thead th:first-child {
|
|||
}
|
||||
|
||||
.regexMatch {
|
||||
text-decoration: underline;
|
||||
background-color: #ffffff;
|
||||
color: #000;
|
||||
}
|
||||
|
||||
.dxCaller {
|
||||
|
@ -569,3 +585,235 @@ table.rosterTable thead th:first-child {
|
|||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
/* Style the tab */
|
||||
.infotab {
|
||||
overflow: hidden;
|
||||
background-color: black;
|
||||
}
|
||||
|
||||
/* Style the buttons that are used to open the tab content */
|
||||
.infotab button {
|
||||
border: 1px solid lightblue;
|
||||
padding: 3px;
|
||||
font-weight: bold;
|
||||
border-top-right-radius: 6px;
|
||||
border-top-left-radius: 6px;
|
||||
margin-left: 5px;
|
||||
margin-right: 0px;
|
||||
color: #eee;
|
||||
background: black;
|
||||
text-align: center;
|
||||
cursor: pointer;
|
||||
white-space: nowrap;
|
||||
border-bottom-style: none;
|
||||
transition: 0.1s;
|
||||
}
|
||||
|
||||
/* Create an active/current tablink class */
|
||||
.infotab button.active {
|
||||
background-color: cyan;
|
||||
color: black;
|
||||
}
|
||||
/* Style the tab content */
|
||||
.infoTabcontent {
|
||||
margin: auto;
|
||||
display: none;
|
||||
background-color: black;
|
||||
padding: 0;
|
||||
padding-top: 4px;
|
||||
text-align: center;
|
||||
width: auto;
|
||||
left:0;
|
||||
right:0;
|
||||
border-top: 1px solid lightblue;
|
||||
vertical-align: top;
|
||||
white-space: normal;
|
||||
overflow:auto;
|
||||
min-width: 480px;
|
||||
}
|
||||
|
||||
.exceptionTab {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(auto-fill,minmax(150px, 1fr));
|
||||
justify-content:center;
|
||||
align-items:center;
|
||||
}
|
||||
|
||||
.exceptionTab > div {
|
||||
margin: 6px;
|
||||
padding: 5px;
|
||||
height: 35px;
|
||||
width: 140px;
|
||||
border-width: 1px;
|
||||
border-color: #aaa;
|
||||
border-style: inset;
|
||||
vertical-align:baseline;
|
||||
border-radius: 4px;
|
||||
transition: border-color;
|
||||
}
|
||||
|
||||
p {
|
||||
margin-top: 4px;
|
||||
margin-bottom: 1px;
|
||||
margin-left: 1px;
|
||||
margin-right: 1px;
|
||||
}
|
||||
|
||||
.exceptionTab > div:hover {
|
||||
border-color: #fff;
|
||||
}
|
||||
|
||||
.break {
|
||||
flex-basis: 100%;
|
||||
}
|
||||
|
||||
:root {
|
||||
accent-color: #4ab9f8;
|
||||
color-scheme: dark;
|
||||
}
|
||||
|
||||
.columnEditView {
|
||||
margin:5px;
|
||||
padding:5px;
|
||||
vertical-align:top;
|
||||
display:inline-block;
|
||||
overflow:auto;
|
||||
overflow-x:hidden;
|
||||
height: fit-content;
|
||||
}
|
||||
|
||||
.columnEditRow {
|
||||
display:grid;
|
||||
grid-template-columns: 1fr 1fr 1fr 1fr;
|
||||
margin-top:2px;
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
|
||||
.columnEditRowHeader {
|
||||
border: 1px solid #cecccc;
|
||||
grid-row: 1 / span 4;
|
||||
font-weight: bold;
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
|
||||
.columnEditRow:hover {
|
||||
box-shadow: inset 0px 11px 6px -8px #888, inset 0px -11px 6px -8px #888;
|
||||
}
|
||||
|
||||
.columnAvailableRow {
|
||||
display:grid;
|
||||
grid-template-columns: 1fr 3fr;
|
||||
margin-top:2px;
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
|
||||
.columnAvailableRow:hover {
|
||||
box-shadow: inset 0px 11px 6px -8px #888, inset 0px -11px 6px -8px #888;
|
||||
}
|
||||
|
||||
.huzzah {
|
||||
background: linear-gradient(135deg, #360000, #00580f, rgb(11, 0, 80));
|
||||
background-size: 500% 500%;
|
||||
animation: AnimationHuzzah 5s alternate infinite;
|
||||
text-shadow: black 0 0 6px;
|
||||
}
|
||||
|
||||
@keyframes AnimationHuzzah {
|
||||
0% {
|
||||
background-position: 0% 50%;
|
||||
}
|
||||
50% {
|
||||
background-position: 100% 50%;
|
||||
}
|
||||
100% {
|
||||
background-position: 0% 50%;
|
||||
}
|
||||
}
|
||||
|
||||
.rowBuilder {
|
||||
border-width: 1px;
|
||||
border-color: #aaa;
|
||||
border-style: outset;
|
||||
vertical-align: top;
|
||||
border-radius: 4px;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
transition: border-color;
|
||||
text-align: center;
|
||||
vertical-align:middle;
|
||||
justify-content:center;
|
||||
align-items:center;
|
||||
width: fit-content;
|
||||
left:0;
|
||||
right:0;
|
||||
margin: auto;
|
||||
padding: 4px;
|
||||
}
|
||||
|
||||
.rowBuilder:hover {
|
||||
border-color: #fff;
|
||||
}
|
||||
|
||||
.rowBuilder > * {
|
||||
margin-right: 4px;
|
||||
padding: 2px;
|
||||
}
|
||||
|
||||
.flexButton {
|
||||
border-radius: 4px;
|
||||
cursor: pointer;
|
||||
border-width: 1px;
|
||||
border-color: #999;
|
||||
border-style: outset;
|
||||
color: #eee;
|
||||
transition: border-style;
|
||||
vertical-align: middle;
|
||||
padding: 2px;
|
||||
padding-bottom: 1px;
|
||||
text-align: center;
|
||||
width: fit-content;
|
||||
}
|
||||
|
||||
.flexButton:hover {
|
||||
border-color: #fff;
|
||||
}
|
||||
.ignoresTables {
|
||||
margin:10px;
|
||||
padding:0px;
|
||||
vertical-align:top;
|
||||
display:inline-block;
|
||||
margin-right:2px;
|
||||
overflow:auto;
|
||||
overflow-x:hidden;
|
||||
}
|
||||
|
||||
#watcherTable {
|
||||
margin: auto;
|
||||
left:0;
|
||||
right:0;
|
||||
width:fit-content;
|
||||
padding:0px;
|
||||
vertical-align:top;
|
||||
display:inline-block;
|
||||
margin-top:2px;
|
||||
overflow:auto;
|
||||
overflow-x:hidden;
|
||||
}
|
||||
|
||||
#settingsDiv {
|
||||
padding: 3px;
|
||||
overflow: hidden;
|
||||
margin: auto;
|
||||
top: 3px;
|
||||
left:0;
|
||||
right:0;
|
||||
width: fit-content;
|
||||
display:none;
|
||||
padding: 1px;
|
||||
text-align: center;
|
||||
vertical-align: middle;
|
||||
position: absolute;
|
||||
z-index: 600;
|
||||
border: 1px solid lightblue;
|
||||
}
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"name": "GridTracker",
|
||||
"product_string_do_not_use": "gridtracker",
|
||||
"version": "1.23.1112",
|
||||
"version": "1.23.1202",
|
||||
"betaVersion": "",
|
||||
"description": "GridTracker: An Amateur Radio Companion",
|
||||
"author": "GridTracker.org",
|
||||
|
@ -12,7 +12,7 @@
|
|||
"icon": "gridview.png",
|
||||
"toolbar": false,
|
||||
"show": false,
|
||||
"width": 800,
|
||||
"width": 860,
|
||||
"height": 652
|
||||
},
|
||||
"webkit": {
|
||||
|
|
Ładowanie…
Reference in New Issue