gridtracker/package.nw/lib/roster.js

4161 wiersze
100 KiB
JavaScript
Czysty Zwykły widok Historia

2024-01-03 02:05:31 +00:00
// GridTracker Copyright © 2024 GridTracker.org
// All rights reserved.
// See LICENSE for more information.
2020-08-19 16:55:41 +00:00
const fs = require("fs");
2020-09-06 23:50:53 +00:00
// var CR is in screen.js
CR.developerMode = process.versions["nw-flavor"] == "sdk";
CR.callRoster = {};
CR.blockedCalls = {};
CR.blockedCQ = {};
2023-12-02 01:09:18 +00:00
CR.ignoredCQ = {};
CR.blockedDxcc = {};
CR.blockedGrid = {};
CR.blockedCQz = {};
CR.blockedITUz = {};
CR.scriptReport = {};
CR.worked = {};
CR.confirmed = {};
CR.modes = {};
CR.modes_phone = {};
CR.currentUSCallsigns = null;
CR.currentUSState = "";
CR.currentDXCCs = -1;
CR.callsignManifest = null;
CR.rosterSettings = {};
CR.day = 0;
CR.dayAsString = "0";
CR.menu = null;
2023-12-02 01:09:18 +00:00
CR.columnMenu = null;
CR.columnMembers = {};
CR.callMenu = null;
CR.ageMenu = null;
CR.callingMenu = null;
CR.compactMenu = null;
2023-12-02 01:09:18 +00:00
CR.menuItemForMoveLeftColumn = null;
CR.menuItemForMoveRightColumn = null;
CR.currentColumnName = null;
CR.targetHash = "";
CR.dxccMenu = null;
CR.targetDxcc = -1;
CR.CQMenu = null;
CR.GridMenu = null;
2023-12-02 01:09:18 +00:00
CR.MsgMenu = null;
CR.targetCQ = "";
CR.timerInterval = null;
CR.awards = {};
CR.awardTypes = {};
CR.awardTracker = {};
CR.callsignDatabaseDXCC = {};
CR.callsignDatabaseUS = {};
CR.callsignDatabaseUSplus = {};
CR.modeColors = {};
CR.modeColors.FT4 = "1111FF";
CR.modeColors.FT8 = "11FF11";
CR.modeColors.JT4 = "EE1111";
CR.modeColors.JT9 = "7CFC00";
CR.modeColors.JT65 = "E550E5";
CR.modeColors.QRA64 = "FF00FF";
CR.modeColors.MSK144 = "4949FF";
CR.rosterTimeout = null;
CR.rosterFocus = false;
2023-12-02 01:09:18 +00:00
CR.watchers = null;
CR.defaultSettings = {
callsign: "all",
hunting: "dxcc",
huntNeed: "confirmed",
requireGrid: false,
2023-12-02 01:09:18 +00:00
animateCQGT: true,
wantMaxDT: false,
wantMinDB: false,
wantMinFreq: false,
wantMaxFreq: false,
2022-09-27 00:27:22 +00:00
wantRRCQ: false,
maxDT: 0.5,
minDb: -25,
minFreq: 0,
maxFreq: 3500,
noMyDxcc: false,
onlyMyDxcc: false,
2023-12-02 01:09:18 +00:00
cqOnly: false,
usesLoTW: false,
maxLoTW: 27,
useseQSL: false,
usesOQRS: false,
onlySpot: false,
allOnlyNew: false,
2022-09-21 22:46:27 +00:00
realtime: true,
wanted: {
huntCallsign: false,
huntGrid: true,
huntDXCC: true,
huntCQz: false,
huntITUz: false,
2022-01-05 14:37:21 +00:00
huntMarathon: false,
2023-12-02 01:09:18 +00:00
huntState: true,
huntCounty: false,
huntCont: false,
huntPX: false,
huntPOTA: false,
huntQRZ: true,
2022-10-10 12:37:55 +00:00
huntOAMS: false,
2023-12-02 01:09:18 +00:00
huntRegex: false,
huntWatcher: false
},
columns: {
Callsign: true,
Band: false,
Mode: false,
Calling: true,
2023-10-14 20:42:44 +00:00
Rig: false,
Grid: true,
Msg: false,
DXCC: true,
Flag: true,
State: true,
County: false,
POTA: false,
Cont: false,
dB: true,
Freq: false,
DT: false,
Dist: false,
2023-12-02 01:09:18 +00:00
Azim: false,
CQz: false,
ITUz: false,
PX: false,
LoTW: false,
eQSL: false,
OQRS: false,
Spot: false,
Life: false,
OAMS: true,
2023-03-26 20:22:24 +00:00
Age: true,
UTC: true
},
2023-01-19 21:03:43 +00:00
displayFilters: {
brightness: 100,
contrast: 100,
saturate: 100,
invert: 0,
sepia: 0,
2023-01-21 02:11:25 +00:00
huerotate: 0
2023-01-19 21:03:43 +00:00
},
reference: 0,
controls: true,
controlsExtended: true,
compact: false,
settingProfiles: false,
2022-03-05 03:25:45 +00:00
sortColumn: "Age",
2023-01-17 12:42:36 +00:00
sortReverse: true,
2023-01-20 22:56:30 +00:00
clearRosterOnBandChange: true,
2023-01-17 12:42:36 +00:00
rosterAlwaysOnTop: false,
rosterDelayOnFocus: false,
rosterDelayTime: 1500,
2023-01-21 21:49:07 +00:00
rosterTime: 120,
2023-12-02 01:09:18 +00:00
compactEntity: "DXCC",
watchers: {}
};
CR.def_displayFilters = {
2023-01-19 21:03:43 +00:00
brightness: 100,
contrast: 100,
saturate: 100,
invert: 0,
sepia: 0,
2023-01-21 02:11:25 +00:00
huerotate: 0
2023-01-19 21:03:43 +00:00
};
const LOGBOOK_LIVE_BAND_LIVE_MODE = "0";
const LOGBOOK_LIVE_BAND_MIX_MODE = "1";
const LOGBOOK_LIVE_BAND_DIGI_MODE = "2";
const LOGBOOK_MIX_BAND_LIVE_MODE = "3";
const LOGBOOK_MIX_BAND_MIX_MODE = "4";
const LOGBOOK_MIX_BAND_DIGI_MODE = "5";
const LOGBOOK_AWARD_TRACKER = "6";
const LAYERED_MODE_FOR = {}
LAYERED_MODE_FOR[LOGBOOK_MIX_BAND_LIVE_MODE] = LOGBOOK_LIVE_BAND_LIVE_MODE;
LAYERED_MODE_FOR[LOGBOOK_MIX_BAND_MIX_MODE] = LOGBOOK_LIVE_BAND_MIX_MODE;
LAYERED_MODE_FOR[LOGBOOK_MIX_BAND_DIGI_MODE] = LOGBOOK_LIVE_BAND_DIGI_MODE;
2020-12-14 02:10:27 +00:00
document.addEventListener("dragover", function (event)
{
event.preventDefault();
2020-08-19 17:01:51 +00:00
});
2020-12-14 02:10:27 +00:00
document.addEventListener("drop", function (event)
{
event.preventDefault();
2020-08-19 17:01:51 +00:00
});
window.addEventListener("message", receiveMessage, false);
2023-12-02 01:09:18 +00:00
if (typeof localStorage.awardTracker == "undefined")
2020-12-14 02:10:27 +00:00
{
2023-12-02 01:09:18 +00:00
localStorage.awardTracker = "{}";
CR.rosterSettings = {};
writeRosterSettings();
2020-08-19 17:01:51 +00:00
}
2023-12-02 01:09:18 +00:00
CR.awardTracker = JSON.parse(localStorage.awardTracker);
// These two need to stay here because of an old bug.
2021-12-14 01:03:46 +00:00
if (typeof localStorage.blockedCQz == "undefined")
{
localStorage.blockedCQz = "{}";
}
if (typeof localStorage.blockedITUz == "undefined")
{
localStorage.blockedITUz = "{}";
}
if (typeof localStorage.blockedGrid == "undefined")
{
localStorage.blockedGrid = "{}";
}
2020-12-14 02:10:27 +00:00
if (typeof localStorage.blockedCalls != "undefined")
{
CR.blockedCalls = JSON.parse(localStorage.blockedCalls);
CR.blockedCQ = JSON.parse(localStorage.blockedCQ);
CR.blockedDxcc = JSON.parse(localStorage.blockedDxcc);
CR.blockedGrid = JSON.parse(localStorage.blockedGrid);
CR.blockedCQz = JSON.parse(localStorage.blockedCQz);
CR.blockedITUz = JSON.parse(localStorage.blockedITUz);
2020-08-19 16:55:41 +00:00
}
2023-12-02 01:09:18 +00:00
else
{
localStorage.blockedCalls = "{}";
localStorage.blockedDxcc = "{}";
localStorage.blockedGrid = "{}";
2023-12-02 01:09:18 +00:00
localStorage.blockedCQz = "{}";
localStorage.blockedITUz = "{}";
localStorage.ignoredCQ = "{}";
}
2020-08-19 16:55:41 +00:00
2023-12-02 01:09:18 +00:00
if (typeof localStorage.ignoredCQ == "undefined")
{
// CR.blockedCQ is deprecated, we don't clear it, we copy it
// This is protection against them rolling back to a previous version
// where keys are "CQ POTA from CountryString"
let shouldStore = false;
for (let key in CR.blockedCQ)
{
let test = key.split(" from ");
if (test.length == 2)
{
if (test[1] == "All")
{
CR.ignoredCQ[test[0]] = true;
}
else
{
CR.ignoredCQ[test[0] + ":" + window.opener.GT.altNameToDXCC[test[1]]] = true;
}
shouldStore = true;
}
}
if (shouldStore) storeBlocks(false);
}
else
{
CR.ignoredCQ = JSON.parse(localStorage.ignoredCQ);
}
function storeBlocks(render = true)
2020-12-14 02:10:27 +00:00
{
localStorage.blockedCalls = JSON.stringify(CR.blockedCalls);
2023-12-02 01:09:18 +00:00
localStorage.ignoredCQ = JSON.stringify(CR.ignoredCQ);
localStorage.blockedDxcc = JSON.stringify(CR.blockedDxcc);
localStorage.blockedGrid = JSON.stringify(CR.blockedGrid);
localStorage.blockedCQz = JSON.stringify(CR.blockedCQz);
localStorage.blockedITUz = JSON.stringify(CR.blockedITUz);
2023-12-02 01:09:18 +00:00
if (render)
{
renderIgnoresTab();
}
2020-08-19 16:55:41 +00:00
}
2020-09-28 19:28:09 +00:00
2020-12-14 02:10:27 +00:00
function storeAwardTracker()
{
localStorage.awardTracker = JSON.stringify(CR.awardTracker);
2020-08-26 02:38:51 +00:00
}
2020-12-14 02:10:27 +00:00
function loadSettings()
{
let readSettings = {};
2020-12-14 02:10:27 +00:00
if (typeof localStorage.rosterSettings != "undefined")
{
readSettings = JSON.parse(localStorage.rosterSettings);
}
CR.rosterSettings = deepmerge(CR.defaultSettings, readSettings);
2020-08-26 02:38:51 +00:00
2022-03-05 03:25:45 +00:00
fixLegacySettings();
2020-09-28 19:28:09 +00:00
writeRosterSettings();
2023-12-02 01:09:18 +00:00
// Code reducder
CR.watchers = CR.rosterSettings.watchers;
2020-08-26 02:38:51 +00:00
}
2022-03-05 03:25:45 +00:00
function fixLegacySettings()
{
// Not sure why, but Paul Traina added this settings cleanup in August 2020.
if ("GT" in CR.rosterSettings.columns) delete CR.rosterSettings.columns.GT;
2022-03-05 03:25:45 +00:00
// In January 2022, we refactored roster column sorting
if (CR.rosterSettings.lastSortIndex)
2022-03-05 03:25:45 +00:00
{
CR.rosterSettings.sortColumn = LEGACY_COLUMN_SORT_ID[CR.rosterSettings.lastSortIndex] || "Age";
delete CR.rosterSettings.lastSortIndex;
2022-03-05 03:25:45 +00:00
}
// In January 2022, we refactored roster column sorting
if (CR.rosterSettings.lastSortReverse)
2022-03-05 03:25:45 +00:00
{
CR.rosterSettings.sortReverse = CR.rosterSettings.lastSortReverse;
delete CR.rosterSettings.lastSortReverse;
2022-03-05 03:25:45 +00:00
}
// In January 2022, we added a `columnOrder` setting, which we need to ensure always includes all columns
CR.rosterSettings.columnOrder = validateRosterColumnOrder(CR.rosterSettings.columnOrder);
2022-03-05 03:25:45 +00:00
}
2020-12-14 02:10:27 +00:00
function writeRosterSettings()
{
2023-12-02 01:09:18 +00:00
for (let key in CR.rosterSettings.watchers)
{
CR.rosterSettings.watchers[key].test = null;
}
localStorage.rosterSettings = JSON.stringify(CR.rosterSettings);
2020-08-19 16:55:41 +00:00
}
2020-12-14 02:10:27 +00:00
function isKnownCallsignDXCC(dxcc)
{
if (dxcc in CR.callsignDatabaseDXCC) return true;
return false;
2020-08-19 16:55:41 +00:00
}
2020-12-14 02:10:27 +00:00
function isKnownCallsignUS(dxcc)
{
if (dxcc in CR.callsignDatabaseUS) return true;
return false;
2020-08-19 16:55:41 +00:00
}
2020-12-14 02:10:27 +00:00
function isKnownCallsignUSplus(dxcc)
{
if (dxcc in CR.callsignDatabaseUSplus) return true;
return false;
2020-08-19 16:55:41 +00:00
}
2020-12-14 02:10:27 +00:00
function timeNowSec()
{
return parseInt(Date.now() / 1000);
2020-08-19 16:55:41 +00:00
}
2020-12-14 02:10:27 +00:00
function lockNewWindows()
{
if (typeof nw != "undefined")
{
let gui = require("nw.gui");
let win = gui.Window.get();
2020-12-14 02:10:27 +00:00
win.on("new-win-policy", function (frame, url, policy)
{
gui.Shell.openExternal(url);
policy.ignore();
});
}
2020-08-19 16:55:41 +00:00
}
function hashMaker(start, callObj, reference)
2020-12-14 02:10:27 +00:00
{
if (reference == LOGBOOK_LIVE_BAND_LIVE_MODE) return `${start}${callObj.band}${callObj.mode}`;
if (reference == LOGBOOK_AWARD_TRACKER) return `${start}${callObj.band}${callObj.mode}`;
if (reference == LOGBOOK_LIVE_BAND_MIX_MODE) return `${start}${callObj.band}`;
if (reference == LOGBOOK_LIVE_BAND_DIGI_MODE) return `${start}${callObj.band}dg`;
if (reference == LOGBOOK_MIX_BAND_LIVE_MODE) return `${start}${callObj.mode}`;
if (reference == LOGBOOK_MIX_BAND_MIX_MODE) return `${start}`;
if (reference == LOGBOOK_MIX_BAND_DIGI_MODE) return `${start}dg`;
return "";
}
function rosterInFocus()
{
if (CR.rosterSettings.rosterDelayOnFocus)
2022-10-04 23:08:22 +00:00
{
CR.rosterFocus = true;
2022-10-04 23:08:22 +00:00
}
}
function rosterNoFocus()
{
CR.rosterFocus = false;
if (CR.rosterTimeout != null)
2022-10-04 22:42:31 +00:00
{
nodeTimers.clearTimeout(CR.rosterTimeout);
CR.rosterTimeout = null;
2022-10-04 22:42:31 +00:00
viewRoster();
}
}
2020-12-14 02:10:27 +00:00
function processRoster(roster)
{
CR.callRoster = roster;
if (CR.rosterTimeout != null)
{
nodeTimers.clearTimeout(CR.rosterTimeout);
CR.rosterTimeout = null;
}
if (CR.rosterFocus)
{
CR.rosterTimeout = nodeTimers.setTimeout(viewRoster, CR.rosterSettings.rosterDelayTime);
2022-10-05 22:03:55 +00:00
rosterDelayDiv.style.display = "inline-block";
}
else
{
viewRoster();
}
}
2020-12-14 02:10:27 +00:00
function viewRoster()
{
CR.rosterTimeout = null;
2022-10-05 22:03:55 +00:00
rosterDelayDiv.style.display = "none";
let rosterSettings = prepareRosterSettings();
processRosterFiltering(CR.callRoster, rosterSettings);
processRosterHunting(CR.callRoster, rosterSettings, CR.awardTracker);
renderRoster(CR.callRoster, rosterSettings);
sendAlerts(CR.callRoster, rosterSettings);
}
2020-12-14 02:10:27 +00:00
function realtimeRoster()
{
let now = timeNowSec();
CR.day = parseInt(now / 86400);
CR.dayAsString = String(CR.day);
2022-10-10 12:37:55 +00:00
if (CR.rosterSettings.realtime == false) return;
let timeCols = document.getElementsByClassName("timeCol");
2022-09-28 20:41:19 +00:00
for (const x in timeCols)
2020-12-14 02:10:27 +00:00
{
if ((typeof timeCols[x].id != "undefined") && (typeof CR.callRoster[timeCols[x].id.substr(2)] != "undefined"))
2020-12-14 02:10:27 +00:00
{
let when = now - CR.callRoster[timeCols[x].id.substr(2)].callObj.age;
timeCols[x].innerHTML = toDHMS(when);
}
}
let lifeCols = document.getElementsByClassName("lifeCol");
2022-09-28 20:41:19 +00:00
for (const x in lifeCols)
2020-12-14 02:10:27 +00:00
{
if ((typeof lifeCols[x].id != "undefined") && (typeof CR.callRoster[lifeCols[x].id.substr(2)] != "undefined"))
2020-12-14 02:10:27 +00:00
{
let when = now - CR.callRoster[lifeCols[x].id.substr(2)].callObj.life;
lifeCols[x].innerHTML = toDHMS(when);
}
}
2023-02-21 23:24:06 +00:00
if (CR.rosterSettings.columns.Spot)
2020-12-14 02:10:27 +00:00
{
let spotCols = document.getElementsByClassName("spotCol");
2022-09-28 20:41:19 +00:00
for (const x in spotCols)
2020-12-14 02:10:27 +00:00
{
if ((typeof spotCols[x].id != "undefined") && (typeof CR.callRoster[spotCols[x].id.substr(2)] != "undefined"))
2020-12-14 02:10:27 +00:00
{
2023-02-21 23:24:06 +00:00
spotCols[x].innerHTML = getSpotString(CR.callRoster[spotCols[x].id.substr(2)].callObj);
}
}
}
2020-08-19 17:01:51 +00:00
}
2020-12-14 02:10:27 +00:00
function getSpotString(callObj)
{
2023-01-21 21:49:07 +00:00
let result = " ";
2020-12-14 02:10:27 +00:00
if (callObj.spot && callObj.spot.when > 0)
{
when = timeNowSec() - callObj.spot.when;
if (when <= window.opener.GT.receptionSettings.viewHistoryTimeSec)
{ result = toDHM(parseInt(when)); }
}
2023-01-21 21:49:07 +00:00
if (result != "&nbsp;") result += " / " + callObj.spot.snr;
2020-12-14 02:25:39 +00:00
return result;
2020-08-19 17:01:51 +00:00
}
2020-12-14 02:10:27 +00:00
function openChatToCid(cid)
{
window.opener.showMessaging(true, cid);
}
2020-08-19 17:01:51 +00:00
2020-12-14 02:10:27 +00:00
function initiateQso(thisHash)
{
window.opener.initiateQso(thisHash);
}
2020-08-19 17:01:51 +00:00
2020-12-14 02:10:27 +00:00
function callLookup(thisHash, grid)
{
window.opener.startLookup(
CR.callRoster[thisHash].DEcall,
CR.callRoster[thisHash].grid
);
}
2020-09-28 19:28:09 +00:00
2020-12-14 02:10:27 +00:00
function callingLookup(thisHash, grid)
{
let thisCall = CR.callRoster[thisHash].DXcall;
window.opener.startLookup(thisCall, grid);
}
2020-08-19 17:01:51 +00:00
2020-12-14 02:10:27 +00:00
function callGenMessage(thisHash, grid)
{
let thisCall = CR.callRoster[thisHash].DEcall;
let instance = CR.callRoster[thisHash].callObj.instance;
2020-08-19 17:01:51 +00:00
window.opener.startGenMessages(thisCall, grid, instance);
2020-08-19 17:01:51 +00:00
}
2020-12-14 02:10:27 +00:00
function callingGenMessage(thisHash, grid)
{
let thisCall = CR.callRoster[thisHash].DXcall;
let instance = CR.callRoster[thisHash].callObj.instance;
window.opener.startGenMessages(thisCall, grid, instance);
2020-08-19 17:01:51 +00:00
}
2020-12-14 02:10:27 +00:00
function centerOn(grid)
{
window.opener.centerOn(grid);
2020-08-19 17:01:51 +00:00
}
2020-12-14 02:10:27 +00:00
function instanceChange(what)
{
window.opener.GT.instances[what.id].crEnable = what.checked;
2023-02-17 01:50:47 +00:00
viewRoster();
2020-08-19 17:01:51 +00:00
}
2020-12-14 02:10:27 +00:00
function updateInstances()
{
if (window.opener.GT.instancesIndex.length > 1)
2020-12-14 02:10:27 +00:00
{
let instances = window.opener.GT.instances;
let worker = "";
let keys = Object.keys(instances).sort();
2022-09-28 20:41:19 +00:00
for (const key in keys)
2020-12-14 02:10:27 +00:00
{
let inst = keys[key];
let sp = inst.split(" - ");
let shortInst = sp[sp.length - 1].substring(0, 18);
let color = "blue";
2020-12-14 02:10:27 +00:00
if (instances[inst].open == false)
{
color = "purple";
}
worker +=
`<div class='button' style='background-color:${color};'>` +
`<input type='checkbox' id='${inst}' onchange='instanceChange(this);' ` +
(instances[inst].crEnable ? "checked" : "") +
`>&nbsp;${shortInst}</div>`
}
instancesDiv.innerHTML = worker;
instancesWrapper.style.display = "";
}
else
{
instancesDiv.innerHTML = "";
instancesWrapper.style.display = "none";
2020-12-14 02:10:27 +00:00
}
}
2020-12-14 02:10:27 +00:00
function processStatus(newMessage)
{
if (newMessage.Transmitting == 0)
{
// Not Transmitting
2020-12-14 02:10:27 +00:00
if (newMessage.Decoding == 1)
{
// Decoding
txrxdec.style.backgroundColor = "Blue";
txrxdec.style.borderColor = "Cyan";
txrxdec.innerHTML = "DECODE";
2020-12-14 02:10:27 +00:00
}
else
{
txrxdec.style.backgroundColor = "Green";
txrxdec.style.borderColor = "GreenYellow";
txrxdec.innerHTML = "RECEIVE";
}
2020-12-14 02:10:27 +00:00
}
else
{
txrxdec.style.backgroundColor = "Red";
txrxdec.style.borderColor = "Orange";
txrxdec.innerHTML = "TRANSMIT";
}
2020-08-19 17:01:51 +00:00
}
2020-09-28 19:28:09 +00:00
2020-12-14 02:10:27 +00:00
function toTitleCase(str)
{
return str.replace(/\w\S*/g, function (txt)
{
return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();
});
2020-08-19 17:01:51 +00:00
}
2020-12-14 02:10:27 +00:00
function newOption(value, text)
{
if (typeof text == "undefined") text = value;
let option = document.createElement("option");
option.value = value;
option.text = text;
return option;
}
function createSelectOptions(
selectElementString,
selectNameDefault,
forObject,
altName = null,
defaultValue = null,
checkSponsor = null
2020-12-14 02:10:27 +00:00
)
{
let selector = document.getElementById(selectElementString);
selector.innerHTML = "";
let option = document.createElement("option");
option.value = defaultValue;
option.text = selectNameDefault;
option.selected = true;
option.disabled = true;
option.style.display = "none";
selector.appendChild(option);
let obj = null;
2020-12-14 02:10:27 +00:00
if (forObject)
{
obj = Object.keys(forObject).sort();
}
2022-09-28 20:41:19 +00:00
for (const k in obj)
2020-12-14 02:10:27 +00:00
{
let opt = obj[k];
let option = document.createElement("option");
option.value = opt;
option.text = altName ? forObject[opt][altName] : opt;
if (checkSponsor && opt + "-" + checkSponsor in CR.awardTracker)
2020-12-14 02:10:27 +00:00
{ option.disabled = true; }
selector.appendChild(option);
}
}
2020-12-14 02:10:27 +00:00
function awardSponsorChanged()
{
awardName.style.display = "";
createSelectOptions(
"awardName",
"Select Award",
CR.awards[awardSponsor.value].awards,
"name",
null,
awardSponsor.value
);
}
2020-12-14 02:10:27 +00:00
function awardNameChanged()
{
let awardToAdd = newAwardTrackerObject(
awardSponsor.value,
awardName.value,
true
);
let hash = awardToAdd.name + "-" + awardToAdd.sponsor;
if (!(hash in CR.awardTracker))
2020-12-14 02:10:27 +00:00
{
CR.awardTracker[hash] = awardToAdd;
storeAwardTracker();
processAward(hash);
updateAwardList(hash);
2023-02-17 01:50:47 +00:00
viewRoster();
}
createSelectOptions(
"awardName",
"Select Award",
CR.awards[awardToAdd.sponsor].awards,
"name",
null,
awardToAdd.sponsor
);
}
2020-12-14 02:10:27 +00:00
function updateAwardList(target = null)
{
let worker =
2023-02-04 00:41:15 +00:00
"<table id='awardTable' class='awardTableCSS' >";
worker += "<tr>";
worker += "<th align='left'>Name</th><th>Award</th><th>Track</th><th></th>";
worker += "</tr>";
worker += "</table>";
2020-11-02 14:57:06 +00:00
AwardWantedList.innerHTML = worker;
let keys = Object.keys(CR.awardTracker).sort();
2022-09-28 20:41:19 +00:00
for (const key in keys)
2020-12-14 02:10:27 +00:00
{
let award = CR.awardTracker[keys[key]];
let rule = CR.awards[award.sponsor].awards[award.name].rule;
let row = awardTable.insertRow();
row.id = keys[key];
let baseAward = false;
let baseCount = 0;
let endorseCount = 0;
let endorseTotal = 0;
let allEndorse = false;
let tooltip = CR.awards[award.sponsor].awards[award.name].tooltip + " (" + CR.awards[award.sponsor].sponsor + ")\n";
tooltip += toTitleCase(award.test.qsl_req) + " QSO\n";
2022-10-05 00:23:50 +00:00
for (const mode in award.comp.counts)
2020-12-14 02:10:27 +00:00
{
tooltip += mode + "\n";
2022-10-05 00:23:50 +00:00
for (const count in award.comp.counts[mode])
2020-12-14 02:10:27 +00:00
{
endorseTotal++;
2020-12-14 02:10:27 +00:00
if (award.comp.counts[mode][count].per == 100)
{
baseAward = true;
endorseCount++;
}
if (award.comp.counts[mode][count].num > baseCount)
2020-12-14 02:10:27 +00:00
{ baseCount = award.comp.counts[mode][count].num; }
2023-02-04 00:41:15 +00:00
tooltip += "\t" + award.comp.counts[mode][count].num + "/" + count + " (" + award.comp.counts[mode][count].per + "%)\n";
let wrk = "";
2020-12-14 02:10:27 +00:00
if (Object.keys(award.comp.endorse).length > 0)
{
2022-10-05 00:23:50 +00:00
for (const band in award.comp.endorse[mode])
2020-12-14 02:10:27 +00:00
{
endorseTotal++;
2020-12-14 02:10:27 +00:00
if (award.comp.endorse[mode][band][count] == true)
{
endorseCount++;
wrk += band + " ";
}
}
}
2020-12-14 02:10:27 +00:00
if (wrk.length > 0)
{
tooltip += "\t\t" + wrk + "\n";
}
}
}
if (baseCount > 0 && endorseCount == endorseTotal) allEndorse = true;
2023-02-04 00:41:15 +00:00
let cell = createCellHtml(row, award.name + " - " + award.sponsor);
cell.style.textAlign = "left";
cell.style.color = "lightblue";
createCellHtml(
2023-02-04 00:41:15 +00:00
row, (allEndorse
? "<img src='./img/award-trophy.png' height='14px'>"
: baseAward
? "<img src='./img/award-medal.png' height='13px'>"
: baseCount > 0
? "<img src='./img/award-tally.png' height='15px'>"
: "<img src='./img/award-empty.png' height='12px'>"),
tooltip
);
2023-02-04 01:03:56 +00:00
createCell(row, "enable", award.enable, award.enable, "Toggle Tracking", true);
2023-02-04 00:41:15 +00:00
createCellHtml(row, "<img title='Remove Tracker' onclick='deleteAwardTracker(this)' style='margin:0;padding:0;margin-top:2px;cursor:pointer;' src='./img/award-delete.png' height='12px'>");
}
}
2020-12-14 02:10:27 +00:00
function deleteAwardTracker(sender)
{
let id = sender.parentNode.parentNode.id;
delete CR.awardTracker[id];
storeAwardTracker();
resetAwardAdd();
updateAwardList();
2023-02-17 01:50:47 +00:00
viewRoster();
}
2020-12-14 02:10:27 +00:00
function awardCheckboxChanged(sender)
{
let awardId = sender.target.parentNode.parentNode.id;
CR.awardTracker[sender.target.parentNode.parentNode.id][sender.target.name] =
sender.target.checked;
storeAwardTracker();
2023-02-17 01:50:47 +00:00
viewRoster();
}
2020-12-14 02:10:27 +00:00
function awardValueChanged(sender)
{
let awardId = sender.target.parentNode.parentNode.id;
CR.awardTracker[sender.target.parentNode.parentNode.id][sender.target.name] =
sender.target.value;
storeAwardTracker();
2023-02-17 01:50:47 +00:00
viewRoster();
}
function createCell(
row,
target,
value,
data = null,
title = null,
checkbox = false
2020-12-14 02:10:27 +00:00
)
{
let cell = row.insertCell();
if (data == null) cell.innerHTML = value;
if (title) cell.title = title;
2020-12-14 02:10:27 +00:00
if (checkbox)
{
let x = document.createElement("INPUT");
x.setAttribute("type", "checkbox");
x.checked = value;
x.name = target;
x.addEventListener("change", awardCheckboxChanged);
cell.appendChild(x);
2020-12-14 02:10:27 +00:00
}
else if (data)
{
cell.appendChild(createAwardSelector(cell, target, value, data));
}
return cell;
}
2020-12-14 02:10:27 +00:00
function createCellHtml(row, html, title = null)
{
let cell = row.insertCell();
cell.innerHTML = html;
if (title) cell.title = title;
return cell;
}
2020-12-14 02:10:27 +00:00
function createAwardSelector(cell, target, value, forObject)
{
let selector = document.createElement("select");
selector.name = target;
selector.value = value;
2020-12-14 02:10:27 +00:00
selector.disabled = forObject.length == 1;
selector.style.margin = "0px";
selector.style.padding = "1px";
if (selector.disabled) selector.style.cursor = "auto";
selector.addEventListener("change", awardValueChanged);
2022-10-05 00:23:50 +00:00
for (const opt in forObject)
2020-12-14 02:10:27 +00:00
{
let option = document.createElement("option");
option.value = forObject[opt];
if (option.value == "Phone" || option.value == "CW") option.disabled = true;
option.text = forObject[opt];
selector.appendChild(option);
}
return selector;
}
2020-12-14 02:10:27 +00:00
function resetAwardAdd()
{
awardName.style.display = "none";
createSelectOptions("awardName", "Select Award", null);
createSelectOptions("awardSponsor", "Select Sponsor", CR.awards, "sponsor");
}
2020-12-14 02:10:27 +00:00
function openAwardPopup()
{
2020-12-22 17:53:41 +00:00
awardHunterDiv.style.display = "";
resetAwardAdd();
}
2020-12-14 02:10:27 +00:00
function closeAwardPopup()
{
2020-12-22 17:53:41 +00:00
awardHunterDiv.style.display = "none";
resetAwardAdd();
}
2020-12-14 02:10:27 +00:00
function toggleMoreControls()
{
CR.rosterSettings.controlsExtended = !CR.rosterSettings.controlsExtended;
2023-12-02 01:09:18 +00:00
writeRosterSettings();
2020-11-02 14:57:06 +00:00
setVisual();
2020-11-02 14:57:06 +00:00
}
2020-12-14 02:10:27 +00:00
function setVisual()
{
huntNeed.style.display = "none";
stateSelect.style.display = "none";
2023-12-02 01:09:18 +00:00
DxccSingleSelect.style.display = "none";
if (CR.rosterSettings.controls)
2020-12-14 02:10:27 +00:00
{
if (CR.rosterSettings.controlsExtended)
2020-12-14 02:10:27 +00:00
{
RosterControls.className = "extended";
instancesWrapper.style.display = "";
2020-12-14 02:10:27 +00:00
}
else
{
RosterControls.className = "normal";
instancesWrapper.style.display = "none";
}
2020-12-14 02:10:27 +00:00
}
else
{
RosterControls.className = "hidden";
instancesWrapper.style.display = "none";
2020-11-02 14:57:06 +00:00
}
// Award Hunter
if (referenceNeed.value == LOGBOOK_AWARD_TRACKER)
2020-12-14 02:10:27 +00:00
{
HuntModeControls.style.display = "none";
2020-11-02 14:57:06 +00:00
CallsignsControls.style.display = "none";
AwardTrackerControls.style.display = "";
updateAwardList();
2020-12-14 02:10:27 +00:00
}
else
{
for (const key in CR.rosterSettings.wanted)
2020-12-14 02:10:27 +00:00
{
if (document.getElementById(key))
2023-01-20 22:56:30 +00:00
{
document.getElementById(key).checked = CR.rosterSettings.wanted[key];
2023-01-20 22:56:30 +00:00
}
}
2020-09-28 19:28:09 +00:00
2020-11-02 14:57:06 +00:00
AwardTrackerControls.style.display = "none";
HuntModeControls.style.display = "";
huntMode.style.display = "";
2020-11-02 14:57:06 +00:00
CallsignsControls.style.display = "";
closeAwardPopup();
2020-12-14 02:10:27 +00:00
if (callsignNeed.value == "all" || callsignNeed.value == "hits")
{
huntingMatrixDiv.style.display = "";
huntNeed.style.display = "";
huntMode.style.display = "none";
2020-12-14 02:10:27 +00:00
}
else
{
huntingMatrixDiv.style.display = "none";
huntMode.style.display = "";
2023-01-20 22:56:30 +00:00
if (huntMode.value != "callsign" && huntMode.value != "usstate" && huntMode.value != "dxccs")
2020-12-14 02:10:27 +00:00
{
huntNeed.style.display = "";
}
2020-12-14 02:10:27 +00:00
if (huntMode.value == "usstate")
{
stateSelect.style.display = "";
}
2020-12-14 02:10:27 +00:00
if (huntMode.value == "usstates")
{
huntNeed.style.display = "";
}
2020-12-14 02:10:27 +00:00
if (huntMode.value == "dxccs")
{
2023-12-02 01:09:18 +00:00
DxccSingleSelect.style.display = "";
}
}
}
2022-10-10 12:37:55 +00:00
if (window.opener.GT.callsignLookups.lotwUseEnable == true)
2020-12-14 02:10:27 +00:00
{
usesLoTWDiv.style.display = "";
2020-12-14 02:10:27 +00:00
}
else
{
usesLoTWDiv.style.display = "none";
}
2020-08-19 17:01:51 +00:00
if (window.opener.GT.callsignLookups.eqslUseEnable == true)
2023-01-20 22:56:30 +00:00
{
2023-01-21 02:11:25 +00:00
useseQSLDiv.style.display = "";
2023-01-20 22:56:30 +00:00
}
else
{
useseQSLDiv.style.display = "none";
}
2020-08-19 17:01:51 +00:00
if (window.opener.GT.callsignLookups.oqrsUseEnable == true)
2023-01-20 22:56:30 +00:00
{
usesOQRSDiv.style.display = "";
}
else
{
usesOQRSDiv.style.display = "none";
}
2020-09-28 19:28:09 +00:00
if (CR.rosterSettings.columns.Spot == true)
2023-01-20 22:56:30 +00:00
{
onlySpotDiv.style.display = "";
}
else
{
onlySpotDiv.style.display = "none";
}
2020-08-19 17:01:51 +00:00
if (CR.rosterSettings.callsign == "all" || CR.rosterSettings.callsign == "hits")
2023-01-20 22:56:30 +00:00
{
allOnlyNewDiv.style.display = "";
}
else
{
allOnlyNewDiv.style.display = "none";
}
2020-09-28 19:28:09 +00:00
2023-01-20 23:59:53 +00:00
rosterBody.style.display = "block";
resize();
2020-08-19 17:01:51 +00:00
}
2020-12-14 02:10:27 +00:00
function wantedChanged(element)
{
CR.rosterSettings.wanted[element.id] = element.checked;
2020-09-28 19:28:09 +00:00
2020-12-14 02:10:27 +00:00
if (element.checked == true)
{
let t = element.id.replace("hunt", "");
2020-08-19 17:01:51 +00:00
if (t in CR.rosterSettings.columns)
2020-12-14 02:10:27 +00:00
{
CR.rosterSettings.columns[t] = true;
2023-12-02 01:09:18 +00:00
if (t in CR.columnMembers)
2020-12-14 02:10:27 +00:00
{
2023-12-02 01:09:18 +00:00
CR.columnMembers[t].checked = true;
}
}
}
2022-10-10 12:37:55 +00:00
setVisual();
writeRosterSettings();
CR.scriptReport = Object();
for (const callHash in window.opener.GT.callRoster)
2020-12-14 02:10:27 +00:00
{
window.opener.GT.callRoster[callHash].callObj.alerted = false;
}
2023-02-17 01:50:47 +00:00
viewRoster();
}
2020-12-14 02:10:27 +00:00
function valuesChanged()
{
CR.rosterSettings.callsign = callsignNeed.value;
CR.rosterSettings.hunting = huntMode.value;
CR.rosterSettings.huntNeed = huntNeed.value;
CR.rosterSettings.requireGrid = wantGrid.checked;
CR.rosterSettings.wantMaxDT = wantMaxDT.checked;
CR.rosterSettings.wantMinDB = wantMinDB.checked;
CR.rosterSettings.wantMinFreq = wantMinFreq.checked;
CR.rosterSettings.wantMaxFreq = wantMaxFreq.checked;
CR.rosterSettings.wantRRCQ = wantRRCQ.checked;
maxDTView.innerHTML = CR.rosterSettings.maxDT = maxDT.value;
minDbView.innerHTML = CR.rosterSettings.minDb = minDb.value;
minFreqView.innerHTML = CR.rosterSettings.minFreq = minFreq.value;
maxFreqView.innerHTML = CR.rosterSettings.maxFreq = maxFreq.value;
CR.rosterSettings.maxLoTW = maxLoTW.value;
maxLoTWView.innerHTML = CR.rosterSettings.maxLoTW < 27 ? toYM(Number(CR.rosterSettings.maxLoTW)) : "<b>&infin;</b>";
CR.rosterSettings.maxLoTW = maxLoTW.value;
CR.rosterSettings.cqOnly = cqOnly.checked;
CR.rosterSettings.noMyDxcc = noMyDxcc.checked;
CR.rosterSettings.onlyMyDxcc = onlyMyDxcc.checked;
CR.rosterSettings.usesLoTW = usesLoTW.checked;
CR.rosterSettings.useseQSL = useseQSL.checked;
CR.rosterSettings.usesOQRS = usesOQRS.checked;
CR.rosterSettings.onlySpot = onlySpot.checked;
CR.rosterSettings.reference = referenceNeed.value;
CR.rosterSettings.allOnlyNew = allOnlyNew.checked;
writeRosterSettings();
CR.scriptReport = Object();
for (const callHash in window.opener.GT.callRoster)
2023-01-22 20:37:23 +00:00
{
window.opener.GT.callRoster[callHash].callObj.alerted = false;
2023-01-22 20:37:23 +00:00
}
2023-02-21 23:29:03 +00:00
2023-02-21 23:24:06 +00:00
setVisual();
}
2023-01-21 02:11:25 +00:00
function loadFilterSettings()
{
let filters = "";
for (const filter in CR.rosterSettings.displayFilters)
2023-01-21 02:11:25 +00:00
{
let slider = document.getElementById("filter" + filter + "Slider");
2023-01-21 02:11:25 +00:00
if (slider)
{
slider.value = CR.rosterSettings.displayFilters[filter];
let td = document.getElementById("filter" + filter + "Td");
2023-01-21 02:11:25 +00:00
if (filter != "huerotate")
{
td.innerHTML = slider.value + "%";
filters += filter + "(" + slider.value + "%) ";
}
else
{
td.innerHTML = slider.value + " deg";
filters += "hue-rotate(" + slider.value + "deg) ";
}
}
}
document.documentElement.style.filter = filters;
}
2023-01-20 22:56:30 +00:00
function filtersChanged()
{
for (const filter in CR.rosterSettings.displayFilters)
2023-01-21 02:11:25 +00:00
{
let slider = document.getElementById("filter" + filter + "Slider");
2023-01-20 22:56:30 +00:00
2023-01-21 02:11:25 +00:00
if (slider)
{
CR.rosterSettings.displayFilters[filter] = slider.value;
2023-01-21 02:11:25 +00:00
}
else
{
// no longer a filter, get rid of it
delete CR.rosterSettings.displayFilters[filter];
2023-01-21 02:11:25 +00:00
}
}
loadFilterSettings();
}
function resetFilters()
{
for (const filter in CR.rosterSettings.displayFilters)
2023-01-21 02:11:25 +00:00
{
CR.rosterSettings.displayFilters[filter] = CR.def_displayFilters[filter];
2023-01-21 02:11:25 +00:00
}
loadFilterSettings();
2023-01-20 22:56:30 +00:00
}
2020-12-14 02:10:27 +00:00
function getBuffer(file_url, callback, flag, mode, port, cookie)
{
let url = require("url");
let http = require(mode);
let fileBuffer = null;
let options = null;
2020-12-14 02:10:27 +00:00
if (cookie != null)
{
options = {
host: url.parse(file_url).host, // eslint-disable-line node/no-deprecated-api
port: port,
path: url.parse(file_url).path, // eslint-disable-line node/no-deprecated-api
headers: {
2020-12-14 02:10:27 +00:00
Cookie: cookie
2023-10-19 23:39:48 +00:00
}
};
2020-12-14 02:10:27 +00:00
}
else
{
options = {
host: url.parse(file_url).host, // eslint-disable-line node/no-deprecated-api
port: port,
2023-10-19 23:39:48 +00:00
path: url.parse(file_url).path // eslint-disable-line node/no-deprecated-api
};
}
2020-12-14 02:10:27 +00:00
http.get(options, function (res)
{
// let fsize = res.headers["content-length"];
let cookies = null;
if (typeof res.headers["set-cookie"] != "undefined")
2020-12-14 02:10:27 +00:00
{ cookies = res.headers["set-cookie"]; }
res
2020-12-14 02:10:27 +00:00
.on("data", function (data)
{
if (fileBuffer == null) fileBuffer = data;
else fileBuffer += data;
})
2020-12-14 02:10:27 +00:00
.on("end", function ()
{
if (typeof callback == "function")
2020-12-14 02:10:27 +00:00
{
// Call it, since we have confirmed it is callable
callback(fileBuffer, flag, cookies);
}
})
.on("error", function () {});
});
2020-08-19 17:01:51 +00:00
}
2020-12-14 02:10:27 +00:00
function callsignResult(buffer, flag)
{
let rawData = JSON.parse(buffer);
CR.currentUSState = flag;
2020-09-28 19:28:09 +00:00
CR.currentUSCallsigns = Object();
for (const key in rawData.c) CR.currentUSCallsigns[rawData.c[key]] = true;
2020-09-28 19:28:09 +00:00
2023-02-17 01:50:47 +00:00
viewRoster();
2020-08-19 17:01:51 +00:00
}
2020-12-14 02:10:27 +00:00
function stateChangedValue(what)
{
if (CR.currentUSState != stateSelect.value && stateSelect.value != "")
2020-12-14 02:10:27 +00:00
{
CR.currentUSState = stateSelect.value;
2020-08-19 17:01:51 +00:00
if (window.opener.GT.mapSettings.offlineMode == false)
2020-12-14 02:10:27 +00:00
{
let callState = CR.currentUSState.replace("CN-", "");
getBuffer(
2022-05-02 02:47:01 +00:00
"https://storage.googleapis.com/gt_app/callsigns/" + callState + ".callsigns.json",
callsignResult,
CR.currentUSState,
2020-12-05 01:50:14 +00:00
"http",
80
);
2020-12-14 02:10:27 +00:00
}
else
{
2023-02-17 01:50:47 +00:00
viewRoster();
CR.currentUSState = "";
CR.currentUSCallsigns = null;
stateSelect.value = "";
2020-09-28 19:28:09 +00:00
return;
}
}
2020-08-19 17:01:51 +00:00
2020-12-14 02:10:27 +00:00
if (stateSelect.value == "")
{
CR.currentUSState = "";
CR.currentUSCallsigns = null;
2020-09-28 19:28:09 +00:00
2023-02-17 01:50:47 +00:00
viewRoster();
}
2020-08-19 17:01:51 +00:00
}
2020-08-19 16:55:41 +00:00
2020-12-14 02:10:27 +00:00
function DXCCsChangedValue(what)
{
2023-12-02 01:09:18 +00:00
CR.currentDXCCs = DxccSingleSelect.value;
2023-02-17 01:50:47 +00:00
viewRoster();
2020-08-19 17:01:51 +00:00
}
2020-08-19 16:55:41 +00:00
2023-12-02 01:09:18 +00:00
function initSelectors()
2020-12-14 02:10:27 +00:00
{
2023-12-02 01:09:18 +00:00
for (const column in ROSTER_COLUMNS)
{
if (column != "Callsign")
{
let option = newOption(column, column);
if (column == CR.rosterSettings.compactEntity)
{
option.selected = true;
}
compactEntitySelect.appendChild(option);
}
}
let items = Object.keys(window.opener.GT.dxccToAltName).sort(function (a, b)
2020-12-14 02:10:27 +00:00
{
return window.opener.GT.dxccToAltName[a].localeCompare(
window.opener.GT.dxccToAltName[b]
);
});
2022-10-05 00:23:50 +00:00
for (const i in items)
2020-12-14 02:10:27 +00:00
{
let key = items[i];
2023-12-02 01:09:18 +00:00
if (window.opener.GT.dxccInfo[key].geo != "deleted")
2020-12-14 02:10:27 +00:00
{
let option = document.createElement("option");
option.value = key;
2023-12-02 01:09:18 +00:00
option.text = window.opener.GT.dxccToAltName[key] + " (" + window.opener.GT.dxccInfo[key].pp + ")";
DxccSingleSelect.appendChild(option);
// Note: do not use cloneNode on elements/nodes that have ids
ignoreCqDxccSelect.appendChild(option.cloneNode(true));
ignoreDxccSelect.appendChild(option.cloneNode(true));
}
}
DxccSingleSelect.oninput = DXCCsChangedValue;
items = Object.keys(window.opener.GT.cqZones).sort();
for (const i in items)
{
let key = items[i];
let option = document.createElement("option");
option.value = key;
option.text = key + " - " + window.opener.GT.cqZones[key].name;
ignoreCqzSelect.appendChild(option);
}
items = Object.keys(window.opener.GT.ituZones).sort();
for (const i in items)
{
let key = items[i];
let option = document.createElement("option");
option.value = key;
option.text = key;
ignoreItuzSelect.appendChild(option);
}
CR.ignoreTypeInputs = {};
CR.ignoreTypeInputs.Callsign = ignoreCallsignValue;
CR.ignoreTypeInputs.Grid = ignoreGridValue;
2023-12-02 01:09:18 +00:00
CR.ignoreTypeInputs.CQ = ignoreCqDiv;
CR.ignoreTypeInputs.DXCC = ignoreDxccSelect;
CR.ignoreTypeInputs.CQz = ignoreCqzSelect;
CR.ignoreTypeInputs.ITUz = ignoreItuzSelect;
ignoreTypeChanged("Callsign");
watcherTypeChanged("Callsign");
}
function hideIgnoreElements()
{
ignoreCallsignValue.style.display = "none";
ignoreGridValue.style.display = "none";
2023-12-02 01:09:18 +00:00
ignoreCqDiv.style.display = "none";
ignoreDxccSelect.style.display = "none";
ignoreCqzSelect.style.display = "none";
ignoreItuzSelect.style.display = "none";
}
CR.ignoreType = "Callsign";
function ignoreTypeChanged(ignoreTypeValue)
{
hideIgnoreElements();
CR.ignoreTypeInputs[ignoreTypeValue].style.display = "";
if (CR.ignoreType != ignoreTypeValue)
{
ingnoreAddResultLabel.innerHTML = "";
CR.ignoreType = ignoreTypeValue;
}
ValidateTextInput(ignoreCallsignValue);
gridInputValidate(ignoreGridValue);
2023-12-02 01:09:18 +00:00
ValidateTextInput(ignoreCqCallsignValue);
}
function gridInputValidate(element)
{
element.value = element.value.toUpperCase().replace(/[^A-Z0-9/]+/g, "").substr(0, 4);
if (!element.value.match(GRID_REGEXP))
{
element.style.color = "#000";
element.style.backgroundColor = "yellow";
}
else
{
element.style.color = "";
element.style.backgroundColor = "";
}
}
2023-12-02 01:09:18 +00:00
function addNewIgnore()
{
if (CR.ignoreType == "Callsign")
{
if (ValidateTextInput(ignoreCallsignValue, ingnoreAddResultLabel))
{
ignoreCallsign(ignoreCallsignValue.value);
}
}
else if (CR.ignoreType == "CQ")
{
if (ValidateTextInput(ignoreCqCallsignValue, ingnoreAddResultLabel))
{
ignoreCQ("CQ " + ignoreCqCallsignValue.value, ignoreCqDxccSelect.value);
}
}
2023-12-02 01:09:18 +00:00
else if (CR.ignoreType == "DXCC")
{
ignoreDxcc(ignoreDxccSelect.value);
}
else if (CR.ignoreType == "Grid")
{
ignoreGrid(ignoreGridValue.value);
}
2023-12-02 01:09:18 +00:00
else if (CR.ignoreType == "CQz")
{
ignoreCQz(ignoreCqzSelect.value)
}
else if (CR.ignoreType == "ITUz")
{
ignoreITUz(ignoreItuzSelect.value);
}
}
2020-12-14 02:10:27 +00:00
function manifestResult(buffer, flag)
{
CR.callsignManifest = JSON.parse(buffer);
let newSelect = document.getElementById("stateSelect");
for (const key in CR.callsignManifest.cnt)
2020-12-14 02:10:27 +00:00
{
let option = document.createElement("option");
if (window.opener.GT.enums[key])
2020-12-14 02:10:27 +00:00
{
option.value = key;
option.text = window.opener.GT.enums[key];
2020-12-14 02:10:27 +00:00
}
else
{
option.value = "CN-" + key;
option.text = window.opener.GT.enums["CN-" + key];
}
newSelect.appendChild(option);
}
newSelect.oninput = stateChangedValue;
2020-08-19 16:55:41 +00:00
}
function receiveMessage(event) {}
2020-08-19 17:01:51 +00:00
CR.tracker = {};
2020-08-19 17:01:51 +00:00
2020-12-14 02:10:27 +00:00
function updateWorked()
{
CR.worked = window.opener.GT.tracker.worked;
CR.confirmed = window.opener.GT.tracker.confirmed;
CR.modes = window.opener.GT.modes;
CR.modes_phone = window.opener.GT.modes_phone;
CR.tracker = window.opener.GT.tracker;
processAllAwardTrackers();
}
2020-12-14 02:10:27 +00:00
function deleteCallsignIgnore(key)
{
delete CR.blockedCalls[key];
storeBlocks();
2023-12-02 01:09:18 +00:00
viewRoster();
}
function ignoreCallsign(callsign)
{
CR.blockedCalls[callsign] = true;
storeBlocks();
viewRoster();
}
function ignoreDxcc(dxcc)
{
CR.blockedDxcc[dxcc] = true;
storeBlocks();
viewRoster();
}
function ignoreGrid(grid)
{
CR.blockedGrid[grid] = true;
storeBlocks();
viewRoster();
}
2023-12-02 01:09:18 +00:00
function ignoreCQ(cq, dxcc)
{
if (dxcc > 0)
{
CR.ignoredCQ[cq + ":" + dxcc] = true;
}
else
{
CR.ignoredCQ[cq] = true;
}
storeBlocks();
viewRoster();
}
function ignoreCQz(cqz)
{
CR.blockedCQz[cqz] = true;
storeBlocks();
viewRoster();
}
function ignoreITUz(ituz)
{
CR.blockedITUz[ituz] = true;
storeBlocks();
2023-02-17 01:50:47 +00:00
viewRoster();
}
2020-12-14 02:10:27 +00:00
function deleteDxccIgnore(key)
{
delete CR.blockedDxcc[key];
storeBlocks();
2023-02-17 01:50:47 +00:00
viewRoster();
}
function deleteGridIgnore(key)
{
delete CR.blockedGrid[key];
storeBlocks();
viewRoster();
}
2020-12-14 02:10:27 +00:00
function deleteCQIgnore(key)
{
2023-12-02 01:09:18 +00:00
delete CR.ignoredCQ[key];
storeBlocks();
2023-02-17 01:50:47 +00:00
viewRoster();
}
2021-12-14 01:03:46 +00:00
function deleteCQzIgnore(key)
{
delete CR.blockedCQz[key];
2021-12-14 01:03:46 +00:00
storeBlocks();
2023-02-17 01:50:47 +00:00
viewRoster();
2021-12-14 01:03:46 +00:00
}
function deleteITUzIgnore(key)
{
delete CR.blockedITUz[key];
2021-12-14 01:03:46 +00:00
storeBlocks();
2023-02-17 01:50:47 +00:00
viewRoster();
2021-12-14 01:03:46 +00:00
}
2020-12-14 02:10:27 +00:00
function clearAllCallsignIgnores()
{
CR.blockedCalls = Object();
storeBlocks();
2023-02-17 01:50:47 +00:00
viewRoster();
}
2020-12-14 02:10:27 +00:00
function clearAllDxccIgnores()
{
CR.blockedDxcc = Object();
storeBlocks();
2023-02-17 01:50:47 +00:00
viewRoster();
}
function clearAllGridIgnores()
{
CR.blockedGrid = Object();
storeBlocks();
viewRoster();
}
2020-12-14 02:10:27 +00:00
function clearAllCQIgnores()
{
2023-12-02 01:09:18 +00:00
CR.ignoredCQ = Object();
storeBlocks();
2023-02-17 01:50:47 +00:00
viewRoster();
}
2021-12-14 01:03:46 +00:00
function clearAllCQzIgnores()
{
CR.blockedCQz = Object();
2021-12-14 01:03:46 +00:00
storeBlocks();
2023-02-17 01:50:47 +00:00
viewRoster();
2021-12-14 01:03:46 +00:00
}
function clearAllITUzIgnores()
{
CR.blockedITUz = Object();
2021-12-14 01:03:46 +00:00
storeBlocks();
2023-02-17 01:50:47 +00:00
viewRoster();
2021-12-14 01:03:46 +00:00
}
2023-01-17 12:42:36 +00:00
function openSettings()
{
2023-12-02 01:09:18 +00:00
openInfoTab("generalbox", "generalSettingsDiv");
settingsDiv.style.display = "inline-block";
2023-01-17 12:42:36 +00:00
}
2023-12-02 01:09:18 +00:00
function openWatcher()
2023-01-17 12:42:36 +00:00
{
2023-12-02 01:09:18 +00:00
openInfoTab("watcherbox", "watcherBoxDiv", openWathcherTab);
settingsDiv.style.display = "inline-block";
}
function openExceptions()
{
openInfoTab("exceptionsbox", "exceptionsBoxDiv");
settingsDiv.style.display = "inline-block";
2023-01-17 12:42:36 +00:00
}
2023-12-02 01:09:18 +00:00
function openIgnores()
2020-12-14 02:10:27 +00:00
{
2023-12-02 01:09:18 +00:00
openInfoTab("ingoresbox", "ignoresBoxDiv", renderIgnoresTab);
settingsDiv.style.display = "inline-block";
}
2023-12-02 01:09:18 +00:00
function openColumns()
{
openInfoTab("columnsbox", "columnsBoxDiv", renderColumnsTab);
settingsDiv.style.display = "inline-block";
}
function closeSettings()
{
settingsDiv.style.display = "none";
}
function renderIgnoresTab()
2020-12-14 02:10:27 +00:00
{
let worker = "";
let clearString = "<th>none</th>";
if (Object.keys(CR.blockedCalls).length > 0)
{
2023-12-02 01:09:18 +00:00
clearString = "<th style='cursor:pointer;' onclick='clearAllCallsignIgnores()'>Clear All</th>";
worker += "<div class='ignoresTables'><table class='darkTable' align=center><tr><th align=left>Callsigns</th>" + clearString + "</tr>";
Object.keys(CR.blockedCalls)
.sort()
.forEach(function (key, i)
{
worker += "<tr><td align=left style='color:#FFFF00;' >" + key + "</td><td style='cursor:pointer;' onclick='deleteCallsignIgnore(\"" + key + "\")'><img src='/img/trash_24x48.png' style='height:17px;margin:-1px;margin-bottom:-3px;padding:0px'></td></tr>";
});
worker += "</table></div>";
}
2023-12-02 01:09:18 +00:00
if (Object.keys(CR.ignoredCQ).length > 0)
{
2023-12-02 01:09:18 +00:00
clearString = "<th style='cursor:pointer;' onclick='clearAllCQIgnores()'>Clear All</th>";
worker += "<div class='ignoresTables'><table class='darkTable' align=center><tr><th align=left>CQ</th>" + clearString + "</tr>";
Object.keys(CR.ignoredCQ)
.sort()
.forEach(function (rawKey, i)
{
let split = rawKey.split(":");
let key = split[0];
let dxcc = -1;
if (split.length == 2) dxcc = parseInt(split[1]);
worker += "<tr><td align=left style='color:lightgreen;' >" + key + " from " + (dxcc == -1 ? "All" : window.opener.GT.dxccToAltName[dxcc]) + "</td><td style='cursor:pointer;' onclick='deleteCQIgnore(\"" + rawKey + "\")'><img src='/img/trash_24x48.png' style='height:17px;margin:-1px;margin-bottom:-3px;padding:0px'></td></tr>";
2023-12-02 01:09:18 +00:00
});
worker += "</table></div>";
}
if (Object.keys(CR.blockedDxcc).length > 0)
{
2023-12-02 01:09:18 +00:00
clearString = "<th style='cursor:pointer;' onclick='clearAllDxccIgnores()'>Clear All</th>";
worker += "<div class='ignoresTables'><table class='darkTable' align=center><tr><th align=left>DXCC</th>" + clearString + "</tr>";
Object.keys(CR.blockedDxcc)
.sort()
.forEach(function (key, i)
{
worker += "<tr><td align=left style='color:#FFA500' >" + window.opener.GT.dxccToAltName[key] + " (" + window.opener.GT.dxccInfo[key].pp + ")</td><td style='cursor:pointer;' onclick='deleteDxccIgnore(\"" + key + "\")'><img src='/img/trash_24x48.png' style='height:17px;margin:-1px;margin-bottom:-3px;padding:0px'></td></tr>";
});
worker += "</table></div>";
}
if (Object.keys(CR.blockedGrid).length > 0)
{
clearString = "<th style='cursor:pointer;' onclick='clearAllGridIgnores()'>Clear All</th>";
worker += "<div class='ignoresTables'><table class='darkTable' align=center><tr><th align=left>Grid</th>" + clearString + "</tr>";
Object.keys(CR.blockedGrid)
.sort()
.forEach(function (key, i)
{
worker += "<tr><td align=left style='color:cyan' >" + key + "</td><td style='cursor:pointer;' onclick='deleteGridIgnore(\"" + key + "\")'><img src='/img/trash_24x48.png' style='height:17px;margin:-1px;margin-bottom:-3px;padding:0px'></td></tr>";
});
worker += "</table></div>";
}
if (Object.keys(CR.blockedCQz).length > 0)
2021-12-14 01:03:46 +00:00
{
2023-12-02 01:09:18 +00:00
clearString = "<th style='cursor:pointer;' onclick='clearAllCQzIgnores()'>Clear All</th>";
worker += "<div class='ignoresTables' ><table class='darkTable' align=center><tr><th align=left>CQ Zones</th>" + clearString + "</tr>";
Object.keys(CR.blockedCQz)
.sort()
.forEach(function (key, i)
{
worker += "<tr><td align=left style='color:cyan;' >" + key + "</td><td style='cursor:pointer;' onclick='deleteCQzIgnore(\"" + key + "\")'><img src='/img/trash_24x48.png' style='height:17px;margin:-1px;margin-bottom:-3px;padding:0px'></td></tr>";
});
worker += "</table></div>";
2021-12-14 01:03:46 +00:00
}
if (Object.keys(CR.blockedITUz).length > 0)
2021-12-14 01:03:46 +00:00
{
2023-12-02 01:09:18 +00:00
clearString = "<th style='cursor:pointer;' onclick='clearAllITUzIgnores()'>Clear All</th>";
worker += "<div class='ignoresTables'><table class='darkTable' align=center><tr><th align=left>ITU Zones</th>" + clearString + "</tr>";
Object.keys(CR.blockedITUz)
.sort()
.forEach(function (key, i)
{
worker += "<tr><td align=left style='color:cyan;' >" + key + "</td><td style='cursor:pointer;' onclick='deleteITUzIgnore(\"" + key + "\")'><img src='/img/trash_24x48.png' style='height:17px;margin:-1px;margin-bottom:-3px;padding:0px'></td></tr>";
});
worker += "</table></div>";
2021-12-14 01:03:46 +00:00
}
2023-12-02 01:09:18 +00:00
ignoresEditView.innerHTML = worker;
ignoresBoxDiv.style.height = (window.innerHeight - 50) + "px";
let elems = document.getElementsByClassName("ignoresTables");
for (let x = 0; x < elems.length; x++)
{
let height = 110;
if (elems[x].offsetHeight > window.innerHeight - height)
2021-12-14 01:03:46 +00:00
{
2023-12-02 01:09:18 +00:00
elems[x].style.height = (window.innerHeight - height) + "px";
}
}
}
function renderColumnsTab()
{
let worker = "";
let renderHeight = 230;
worker += "<div id='columnEnabledView' class='columnEditView'>";
worker += "<div class='columnEditRowHeader'>Enabled</div>";
const columns = rosterColumnList(CR.rosterSettings.columns, { Callsign: false });
let enabled = {};
for (let x = 0; x != columns.length; x++)
{
let column = columns[x];
enabled[column] = true;
worker += "<div class='columnEditRow'>";
if (x > 0)
{
worker += `<div style='cursor:pointer' onclick='moveColumnLeft("${column}");renderColumnsTab();'>▲</div>`;
}
else
{
worker += "<div>&nbsp</div>"
}
worker += `<div><input type='checkbox' checked onchange='toggleColumn(this, "${column}");renderColumnsTab();'></div>`
worker += "<div>" + column + "</div>";
if (x + 1 != columns.length)
{
worker += `<div style='cursor:pointer' onclick='moveColumnRight("${column}");renderColumnsTab();'>▼</div>`;
}
else
{
worker += "<div>&nbsp</div>";
}
worker += "</div>";
}
worker += "</div>";
worker += "<div id='columnAvailableView' class='columnEditView'>";
let available = [...CR.rosterSettings.columnOrder];
available.sort((a, b) => a.toLowerCase() < b.toLowerCase() ? -1 : 1);
for (let x = 0; x != available.length; x++)
{
let column = available[x];
if (column == "Callsign") continue;
if (column == "eQSL" && window.opener.GT.callsignLookups.eqslUseEnable == false) continue;
if (column == "LoTW" && window.opener.GT.callsignLookups.lotwUseEnable == false) continue;
if (column == "OQRS" && window.opener.GT.callsignLookups.oqrsUseEnable == false) continue;
if (!(column in enabled))
{
worker += "<div class='columnAvailableRow'>";
worker += `<div><input type='checkbox' onchange='toggleColumn(this, "${column}");renderColumnsTab();'></div>`;
worker += "<div>" + column + "</div>";
worker += "</div>";
}
}
worker += "</div>";
2021-12-14 01:03:46 +00:00
2023-12-02 01:09:18 +00:00
columnsEditView.innerHTML = worker;
renderHeight = Math.max(window.innerHeight - 200, 150);
columnEnabledView.style.height = renderHeight + "px";
columnAvailableView.style.height = renderHeight + "px";
}
2020-12-14 02:10:27 +00:00
function onMyKeyDown(event)
{
2023-12-02 01:09:18 +00:00
if (event.keyCode == 27)
2020-12-14 02:10:27 +00:00
{
2023-12-02 01:09:18 +00:00
closeSettings();
}
if (event.ctrlKey == true)
{
if (event.code == "KeyS")
2023-01-17 12:42:36 +00:00
{
openSettings();
}
2023-12-02 01:09:18 +00:00
else if (event.code == "KeyW" || event.code == "KeyO")
2023-01-21 02:11:25 +00:00
{
2023-12-02 01:09:18 +00:00
openWatcher();
2023-01-21 02:11:25 +00:00
}
2023-12-02 01:09:18 +00:00
else if (event.code == "KeyE")
{
openExceptions();
}
else if (event.code == "KeyI")
{
openIgnores();
}
else if (event.code == "KeyC")
{
openColumns();
}
else if (event.code == "KeyR")
2023-01-17 12:42:36 +00:00
{
2023-12-02 01:09:18 +00:00
resetFilters();
2023-01-17 12:42:36 +00:00
}
}
}
2022-10-10 12:37:55 +00:00
function blurOnEnter(ele)
2020-12-14 02:10:27 +00:00
{
if (event.key == "Enter")
2020-12-14 02:10:27 +00:00
{
ele.blur();
}
}
2020-12-14 02:10:27 +00:00
function resize()
{
2023-12-02 01:09:18 +00:00
if (ignoresBoxDiv.style.display != "none")
{
renderIgnoresTab();
}
if (columnsBoxDiv.style.display != "none")
{
renderColumnsTab();
}
wantRenderWatchersTab();
2023-02-23 00:55:04 +00:00
window.opener.goProcessRoster();
}
2020-12-14 02:10:27 +00:00
function init()
{
window.opener.GT.rosterInitialized = true;
CR.callsignDatabaseDXCC = window.opener.GT.callsignDatabaseDXCC;
CR.callsignDatabaseUS = window.opener.GT.callsignDatabaseUS;
CR.callsignDatabaseUSplus = window.opener.GT.callsignDatabaseUSplus;
loadAwardJson();
updateWorked();
2020-12-14 02:10:27 +00:00
// addAllAwards();
window.addEventListener("message", receiveMessage, false);
lockNewWindows();
if (window.opener.GT.mapSettings.offlineMode == false)
2020-12-14 02:10:27 +00:00
{
getBuffer(
2022-05-02 02:47:01 +00:00
"https://storage.googleapis.com/gt_app/callsigns/manifest.json",
manifestResult,
null,
2020-12-05 01:50:14 +00:00
"http",
80
);
2020-12-14 02:10:27 +00:00
}
loadSettings();
2023-01-21 02:11:25 +00:00
loadFilterSettings();
Squashed commit of the following: commit afb25f406b51a9d52d35e25cebb78547c964884a Author: Christian Bayer <chrbayer84@googlemail.com> Date: Mon Sep 5 21:45:16 2022 -0400 WIP german translation commit 3abbf5cd5fe89fbe474ade395a1ad2d0ddd8c1b0 Author: Christian Bayer <chrbayer84@googlemail.com> Date: Sat Sep 3 15:06:47 2022 -0400 WIP german translation and some programmatic translation from CR commit 4c8fcc656b4085e88151cb5a3ce9f6c5e5bf3a21 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Mon Aug 15 22:14:16 2022 -0500 progress so far, fixed what got broke in CR and fixed being able to close and reopen CR. still need to get i18n figured out commit 78aaaed2ade1094add163d5850bef6ab1b2226fb Author: Matthew Chambers <nr0q@gridtracker.org> Date: Mon Aug 15 20:19:09 2022 -0500 one step forward, 2 steps backwards commit 903319452bf0c5ed8a2da879281d8b08ef7ff05e Author: Christian Bayer <chrbayer84@googlemail.com> Date: Mon Aug 15 23:23:51 2022 +0200 WIP translating strings in js: roster.js commit 934f619af63a97363dcff19ef2343b3e12e269ee Author: Matthew Chambers <nr0q@gridtracker.org> Date: Mon Aug 15 00:06:13 2022 -0500 add JA because may have a JA contributor commit 8c7bd091acf83b45a8e0957e4990c4660f3673a2 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Sun Aug 14 23:41:29 2022 -0500 all JS files have been passed through, may need another pass through all files though commit 835892b70b7b229fe0d353831271b21fc2fa716a Author: Matthew Chambers <nr0q@gridtracker.org> Date: Sun Aug 14 20:03:18 2022 -0500 Finished gt.js tags commit 404dd1a2477e27b2c665dc3ecaba77dafcc7be20 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Sun Aug 14 18:10:34 2022 -0500 progress so far (up to line 9871 in gt.js) commit c59473f8986fab8b2b336f212b0ead9d10617899 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Sun Aug 14 12:43:01 2022 -0500 add comment between adif and alerts js files in en.json commit 80cb9d5178a255dcc1a15482b0bcabce1555aa61 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Sun Aug 14 12:42:27 2022 -0500 Fix Chinese label to a more proper one commit 08a00eeae86d7d9a97cf17aa6029468024bf6784 Author: Christian Bayer <chrbayer84@googlemail.com> Date: Sun Aug 14 16:54:32 2022 +0200 moved scripts commit 8c9569b1c5f6b4d1b4b92db1ce7806b7246862fe Author: Christian Bayer <chrbayer84@googlemail.com> Date: Sun Aug 14 16:51:10 2022 +0200 started german translation commit b857ecf91e97bed0479ca759eddf234da65c5313 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Sun Aug 14 01:37:39 2022 -0500 tags for adif and alerts js files commit 9c328de842bbe773746beddaeec0d2ea81225752 Author: Christian Bayer <chrbayer84@googlemail.com> Date: Sun Aug 14 08:23:51 2022 +0200 fixed cn.json additonal keys commit 7bc459195f8738cf77835329acf962274cd9cc38 Author: Christian Bayer <chrbayer84@googlemail.com> Date: Sun Aug 14 08:20:22 2022 +0200 Revert "fixed CN.json" This reverts commit f2f71c94dbb8f270aff76223a5d30769d8819b1a. commit 236bea23bd13324f25cbcdbd39c3ec008a679f10 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Sat Aug 13 19:02:49 2022 -0500 cleanup and lint commit a78d32ed1bb5457be0d7e227492cdd1c3e77c431 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Sat Aug 13 19:01:47 2022 -0500 THis works! commit edc0d40256b32f81a135f5efc3819c04018774d6 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Sat Aug 13 18:17:15 2022 -0500 more tweaks trying to make it work commit f2f71c94dbb8f270aff76223a5d30769d8819b1a Author: Matthew Chambers <nr0q@gridtracker.org> Date: Sat Aug 13 17:09:39 2022 -0500 fixed CN.json commit 9b90cf4b142f0c52bd0e4ba7ce926ad145f90ecd Author: Matthew Chambers <nr0q@gridtracker.org> Date: Sat Aug 13 16:33:09 2022 -0500 language change so far commit dd60fc5012fa8f7a8655dacc9b8e0c0237e33f4e Author: Christian Bayer <chrbayer84@googlemail.com> Date: Sat Aug 13 22:19:25 2022 +0200 added missing keys to cn.json commit fc5e25c81a7541d2fe03ed9b79950c4ddbd71abb Author: Matthew Chambers <nr0q@gridtracker.org> Date: Sat Aug 13 15:18:54 2022 -0500 Fixed linting` commit 485adc6da114a28f58e2d112f5f83f7541af9843 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Sat Aug 13 14:57:30 2022 -0500 slight cleanup commit dada794ccdf699fe4eaf179b2cfef2a96e6a82fb Author: Christian Bayer <chrbayer84@googlemail.com> Date: Sat Aug 13 21:55:55 2022 +0200 fixed cn json commit 82809c0458e0b99159e87e1d22eba4cde6339015 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Sat Aug 13 14:45:21 2022 -0500 added dropdown for language in settings commit 3159040b514f497a23b7169fb9512b032ee8b942 Author: Christian Bayer <chrbayer84@googlemail.com> Date: Fri Aug 12 22:29:51 2022 +0200 added raw output of the i18n extractor. needs cleanup commit 8f31e9e757f6c6a29678f0c0bddad1c6dc360df4 Author: Christian Bayer <chrbayer84@googlemail.com> Date: Thu Aug 11 22:29:12 2022 +0200 added i18n generator script based off of a patch file commit de81e35754dd2bb4c838aa6c7bf12a2025b1ded1 Author: Christian Bayer <chrbayer84@googlemail.com> Date: Mon Aug 8 22:20:47 2022 +0200 added cascading install for nested package.json commit bf7ecfeb4f44b0c65bbea0c5a43eb0e809652384 Author: Christian Bayer <chrbayer84@googlemail.com> Date: Mon Aug 8 22:11:18 2022 +0200 added pota key commit e14bca8172272d4a4f53eb5282d3d5576e057a2a Merge: f8c7232 91145aa Author: Matthew Chambers <nr0q@gridtracker.org> Date: Sun Aug 7 18:39:40 2022 +0000 Merge branch 'master' into 'cbayer-i18n' Master See merge request gridtracker.org/gridtracker!182 If this is changing anything in the UI or operational behavior, please prepare to update the wiki! commit f8c7232c38ea4194fa8f69fe5721a74689b7ef2a Author: Matthew Chambers <nr0q@gridtracker.org> Date: Sun Aug 7 12:54:04 2022 -0500 add jquery to npm depends commit 734e972d9e3a66ca8d85debbe1a8f75c6f824020 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Sun Aug 7 12:53:24 2022 -0500 wip, i18n debugging commit 013d9c8ebfc67f0f4ce8a4df8bea86bf812fd880 Author: Christian Bayer <chrbayer84@googlemail.com> Date: Sun Aug 7 10:34:19 2022 +0200 small fixes commit 8da135bb6db8e15069eefb07397c9ceeee6d8bac Merge: 0183434 c1f7f1b Author: Christian Bayer <chrbayer84@googlemail.com> Date: Sat Aug 6 22:39:24 2022 +0200 Merge branch 'master' into cbayer-i18n commit 0183434bba0d7c6b7652b3b8700bac3630902737 Author: Christian Bayer <chrbayer84@googlemail.com> Date: Sat Aug 6 22:27:35 2022 +0200 removed banana import commit 670001a6db028dc93bc56ddb8b29d2e897974ffa Merge: c120df0 236ff10 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Tue May 17 18:38:11 2022 -0500 Merge branch 'master' into cbayer-i18n commit c120df0e3ba77a985fdbd8c9a76028aee9a8d8d0 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Thu Dec 16 15:15:21 2021 -0600 the linter lints commit 2243beddb2aaa1a163b1ba142a95fce60774e2e7 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Thu Dec 16 14:39:00 2021 -0600 mostly finished with gridtracker.html file's i18n commit 33d69c950145dc398d10723f56102dbec77ba0b5 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Thu Dec 16 14:36:34 2021 -0600 add functions to get acks json off website and overwrite file commit 98170dce4f1313cbf42bd0ae4bf5d1c490a077da Author: Matthew Chambers <nr0q@gridtracker.org> Date: Thu Dec 16 15:02:46 2021 -0600 Initial workup for LoTW throttling & diff fetching commit 655c0416635c5cafecaa612f8f6fd9a20db21f58 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Thu Dec 16 14:31:19 2021 -0600 WIP banana i18n commit 26495c1f1436e5b99c317d8305101dbecd8f2b95 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Wed Dec 15 11:52:08 2021 -0600 update rpm spec 1.21.1212 commit e00269304da44ea6da20362f96714584164ba8b2 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Thu Dec 16 14:47:50 2021 -0600 Trigger COPR and AUR repos and build .deb commit 2b2e660108ca4f000a6ac31c347f80010e7b11b8 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Wed Dec 15 11:46:41 2021 -0600 updated changelog / release notes commit 0265f75fd85509081d5992db0d729149521254f5 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Mon Dec 13 20:48:27 2021 -0600 update changelog commit cd28c73c8a1dcb569fe3629e03b8d9646c832e5f Author: Matthew Chambers <nr0q@gridtracker.org> Date: Mon Dec 13 19:04:23 2021 -0600 update changelog commit 058dbea415898134f345653532a3789ee7855ef0 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Mon Dec 13 19:03:46 2021 -0600 Fix #76 commit f50ea44466328d0d632955b8a8725bf780417068 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Mon Dec 13 16:18:51 2021 -0600 update changelog to recent bug fixes commit 3b0c9b5acc8cf3c57a2b0526451edf8250c11b89 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Mon Dec 13 16:18:37 2021 -0600 Fix #91 commit d906ee7d5f18e682ab0b47277474170dd89622de Author: Matthew Chambers <nr0q@gridtracker.org> Date: Mon Dec 13 15:54:51 2021 -0600 Fixes #107 commit 8252ca3f82843758edf5594d804989c3c4a1d6f0 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Mon Dec 13 12:13:23 2021 -0600 fix hunting commit c1f3ae9e1c7605a31635bad8ed5e793f8a5d39d1 Author: Sebastian Delmont <sd@notso.net> Date: Mon Dec 13 13:09:46 2021 -0500 Really fix roster counts commit 0054993dc8ab1406da8b0b4644382f453f9b4584 Author: Sebastian Delmont <sd@notso.net> Date: Mon Dec 13 11:54:19 2021 -0500 Fix roster counts commit 69e1152e7883369b3a818f516f3302681800c241 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Mon Dec 13 10:09:19 2021 -0600 update check for bad dxcc commit a0b2595e9ea38e0a936fb97e691aaa7a7bb2d31e Author: Sebastian Delmont <sd@notso.net> Date: Mon Dec 13 11:04:53 2021 -0500 Fixed spot sorting in refactored code commit 298e8cfbd7b9ee9b4560cb6c66e642e14abcae87 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Sun Dec 12 16:37:52 2021 -0600 update changelog commit eb793d5607721231574a301fe1a4ea577628abf8 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Thu Dec 16 14:47:21 2021 -0600 Update Copyright for 2022 commit 0eb2fac9a0efa2e1b97389a5a09cba4ba83ccfa1 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Thu Dec 16 14:46:52 2021 -0600 change vars to lets per Tag's suggestion commit c78ea075b4f948dc88c91447ff66e471b21cc192 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Sun Dec 12 15:46:17 2021 -0600 RC build commit 0c5cde472bffa1d2e2fe502449164aca153dd159 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Tue Nov 16 04:11:44 2021 +0000 Update .gitlab-ci.yml file commit 492b791bc058555e49a16616ecb32c3cd9dd4ca4 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Tue Nov 16 04:10:31 2021 +0000 Update .gitlab-ci.yml commit e77b9922ed1eea9c0ecd00860a4755b2523dba5b Author: Matthew Chambers <nr0q@gridtracker.org> Date: Tue Nov 16 03:56:53 2021 +0000 Update .gitlab-ci.yml - include security scanning commit 13c1236f7bf50c60756f1688b061f56d14f3afb9 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Thu Dec 16 14:46:20 2021 -0600 Fix acknowledgement icons commit 28772768e8253edfb6b14b3a97908bf8102ad239 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Thu Dec 16 14:45:31 2021 -0600 Add support for Apple Silicon Macs, by hardcoding x64 mode in Phoenix commit 0cec076dbb43d513ec93a63aaf51cf1423a9ebbb Author: Matthew Chambers <nr0q@gridtracker.org> Date: Thu Dec 16 14:45:05 2021 -0600 allow package-lock to be uploaded to repo commit 8b23a4ef25d12c417747b663334b046b723d703a Author: Matthew Chambers <nr0q@gridtracker.org> Date: Sun Dec 12 09:11:24 2021 -0600 beta III of call roster testing commit cc476c84ed84cb7e55e68cf6d482bfdd569f78a0 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Sun Dec 12 09:09:57 2021 -0600 if dxcc = -1, no roster commit ca5a4db664876a48b7d8a5ffaff28d7b067d99d0 Author: nr0q <nr0q@gridtracker.org> Date: Thu Dec 9 20:59:15 2021 -0600 beta version for testing fix to CR commit 5556bbfee08d0d1480d987dc396130cceed6cf20 Author: nr0q <nr0q@gridtracker.org> Date: Thu Dec 9 14:31:02 2021 -0600 a few of SD's roster tweaks commit 2b65f293a788b5c083efd04cfd4c803796df1b03 Author: nr0q <nr0q@gridtracker.org> Date: Thu Dec 9 13:53:20 2021 -0600 could this cure the free text messages breaking the CR? commit 43ea47a09d1058baa6bee5a109d7454cab6218c8 Author: nr0q <nr0q@gridtracker.org> Date: Mon Oct 25 20:43:48 2021 -0500 roll v for beta build commit f1d9db2e6fd14362a4fbf4d742be9a95ee871f0e Author: nr0q <nr0q@gridtracker.org> Date: Mon Oct 25 15:17:33 2021 -0500 better handling of /MM so that it doesn't tear a hole in space-time commit 9fed1b4aca10997081f32e5e1777b52a3072d3d6 Author: nr0q <nr0q@gridtracker.org> Date: Mon Oct 25 14:00:29 2021 -0500 remove the exception handler for callObj.style because need to fix the root cause commit 7a73c988dac34545da26fd4a736a964215ebc872 Author: nr0q <nr0q@gridtracker.org> Date: Mon Oct 25 13:31:15 2021 -0500 handle undefined callObj.style commit 71a2df7e20e8e424aa0ec90ea5d8d9d3492487ff Author: nr0q <nr0q@gridtracker.org> Date: Mon Oct 25 12:42:58 2021 -0500 handle bug line 114 commit 8d5117b76b6844df4eeced0e9f0e01d1e28be2e2 Author: nr0q <nr0q@gridtracker.org> Date: Sun Oct 24 20:36:10 2021 -0500 inc v for beta 2 commit b199c4c4fad3558843d6d21958761ef6b9996fa7 Author: christian <christian_bay@gmx.de> Date: Sun Oct 24 21:23:40 2021 -0400 fixed linting commit 7830e52978f964c5da015b1bb0928f56028c260b Author: nr0q <nr0q@gridtracker.org> Date: Sun Oct 24 20:15:07 2021 -0500 cleaned up linting commit ac51710ff3fb3d296ddd4edeeff4957e677fb6ec Author: Christian Bayer <christian_bay@gmx.de> Date: Sun Oct 24 20:56:21 2021 -0400 fixed reference error on huntedCount commit 66f7ad87b3d91397cab29bc8c0bcca9e137e682e Author: Matthew Chambers <nr0q@gridtracker.org> Date: Thu Dec 16 14:44:39 2021 -0600 fix pack.json and changelog to reflect test V# commit 7a43853533e364cf85e70262b6573afe47542fbc Author: Matthew Chambers <nr0q@gridtracker.org> Date: Thu Dec 16 14:44:14 2021 -0600 add settings.json to gitignore commit 4f2ce9d89099b674fed2c5053cc80f7f9866f325 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Thu Oct 21 00:41:12 2021 +0000 Update package.json commit dbc297a00c6405971219ccba4ad27416ef321282 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Thu Dec 16 14:43:52 2021 -0600 Update package.json commit 6c68a190dbd73b385fbaea9878f513ba0684dc2c Author: Matthew Chambers <nr0q@gridtracker.org> Date: Thu Dec 16 14:43:31 2021 -0600 Update changelog commit 3125b01a17f9fa4c44ec139a4a58fcd8effbf3cd Author: christian <christian@t530> Date: Wed Jul 7 15:08:03 2021 -0400 clear call roster on band change: option added commit 6f4c15c157ff956352bebd9e20a06610ef3d3196 Author: christian <christian@t530> Date: Sun Jul 4 23:07:51 2021 -0400 unknown dxxc filter for roster commit a444d163cae7fd3256992571a2f95b6ac5b921a1 Author: christian <christian@t530> Date: Thu Jul 1 21:39:50 2021 -0400 fixed other sorts commit cb73f21a937c95541ca756ee9988d54f8056fd16 Author: christian <christian@t530> Date: Wed Jun 30 20:37:27 2021 -0400 fixed alert script call commit 2226f707bd41ab4f271ca3b2c8c72f8028735894 Author: christian <christian@t530> Date: Wed Jun 30 07:52:36 2021 -0400 fixed dxcc sorting commit d395b8dd0e0df8fcee8d8da9701428803ef0c5af Author: Matthew Chambers <nr0q@gridtracker.org> Date: Mon Jun 28 23:18:43 2021 -0500 tweak for compact mode commit 86fb507d5a45a3418ae7f98d828e91f74f5af9a9 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Mon Jun 28 23:08:13 2021 -0500 IT WORKS! commit d55ac551d1c1d923b184c121af69d065ccc3eb70 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Mon Jun 28 22:51:52 2021 -0500 fix grid commit 0a85e764931371591899a503609bcafb35babb30 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Mon Jun 28 22:50:49 2021 -0500 bunch of stuff moved to the right places commit 68f81c62003e0826f2766b5065f464d008b95db7 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Mon Jun 28 22:37:49 2021 -0500 fix some small stuff commit db738a4230fd6d6f79c122643ba48d687da783b7 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Mon Jun 28 22:26:40 2021 -0500 lost show bands/modes on render call rows commit 68f7544b1a2e8dfca87bbfc3708aa30aae4b2b31 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Mon Jun 28 22:24:32 2021 -0500 fix line 73 commit 95920077bd64eea14a6dee6f4d112f4f65031450 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Mon Jun 28 22:21:19 2021 -0500 fix line 34 commit 84059439c1108a083f52aed5b2302adca2bb7ead Author: Matthew Chambers <nr0q@gridtracker.org> Date: Mon Jun 28 22:18:32 2021 -0500 fix broken array commit 817e9c5e18868bee13b7dfa029b4bbc008ded300 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Mon Jun 28 22:12:23 2021 -0500 fix sendAlerts undefined object commit 7a0b16d262f77dfbaf56bdeb678637f67f4c45a0 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Mon Jun 28 22:08:06 2021 -0500 more broke fixed commit 6a9896ce4112b3b84fb9f1429285885ed5f8085b Author: Matthew Chambers <nr0q@gridtracker.org> Date: Mon Jun 28 22:00:27 2021 -0500 re-added r_sortFunction that somehow wondered off commit 856a49b720f41c68b91cb38ca135b82cb5a36e09 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Mon Jun 28 21:58:05 2021 -0500 fix some more broken stuff commit 076a7e5eec824af2db9edf8e083807d0dff4fb8d Author: Matthew Chambers <nr0q@gridtracker.org> Date: Mon Jun 28 20:42:07 2021 -0500 fixed a bunch of broken refs to rosterSettings commit 443409b90253c2e45d7d080819286a9b6dd39e88 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Mon Jun 28 19:19:26 2021 -0500 refactor so far commit 1f452992861643d61caf5bcf85739c199a28582b Author: Matthew Chambers <nr0q@gridtracker.org> Date: Mon Jun 28 17:26:44 2021 -0500 big roster refactor - starting Co-authored-by: Sebastian Delmont <sd@notso.net> Matthew Chambers <nr0q@gridtracker.org> commit 4ed8b2c3cbd7e1f850256d4589c7cc6621825eed Author: Matthew Chambers <nr0q@gridtracker.org> Date: Thu Jun 24 18:46:42 2021 -0500 missing comma line 422 commit b089caf50ad28215280b343eca43e816d0e8aaad Author: Matthew Chambers <nr0q@gridtracker.org> Date: Thu Jun 24 18:04:46 2021 -0500 add array with exception test function names, need to create functions yet commit 0b27feb3677218b7a3185ecb8c187384572451eb Author: Matthew Chambers <nr0q@gridtracker.org> Date: Thu Jun 24 11:06:31 2021 -0500 some notes that might aid in refactoring commit 0518d6e40caf7cede1b1a3ecced412d910f3bdeb Author: Matthew Chambers <nr0q@gridtracker.org> Date: Thu Dec 16 14:42:44 2021 -0600 add functions to get acks json off website and overwrite file commit 268459833bdd6bfbb84cd8d05df2a649ab34f1cc Author: Matthew Chambers <nr0q@gridtracker.org> Date: Thu Dec 16 14:41:03 2021 -0600 Initial workup for LoTW throttling & diff fetching commit 9330df84f38f9705d8c6f8ff56bd2479cacd108a Author: nr0q <nr0q@gridtracker.org> Date: Sun Oct 24 12:59:29 2021 -0500 save work so far commit 0761163ddd2b851c617ca6d4cc497f32063c2bf6 Author: nr0q <nr0q@gridtracker.org> Date: Tue Oct 19 21:54:26 2021 -0500 adding i18n to other html files, need to call scripts I think to make them "work" commit 3a00b5b3d0bbbdbb494bd90ba8638f9be0434e6a Author: nr0q <nr0q@gridtracker.org> Date: Tue Oct 19 21:16:02 2021 -0500 i18n chat html and format chat.css commit 220fc036b8b6d200ffbe79a5e293770b9a17d88c Author: nr0q <nr0q@gridtracker.org> Date: Tue Oct 19 20:57:05 2021 -0500 refactor chat css into it's own css file, fix linting in gt.js start adding i18n in chat and bandactivity htmls commit fceaaaa4aa8076ae5dbb544bbe63eef812606503 Author: nr0q <nr0q@gridtracker.org> Date: Tue Oct 19 19:39:21 2021 -0500 update all except hover/title elements with i18n in GridTracker.html commit 215bc2c55c770575a5594a48872b1fb28bb160b1 Author: nr0q <nr0q@gridtracker.org> Date: Tue Oct 19 18:28:48 2021 -0500 mostly finished with gridtracker.html file's i18n commit 9a63953b7d407530cebd9c341ddda3dd08346750 Author: nr0q <nr0q@gridtracker.org> Date: Tue Oct 19 17:58:13 2021 -0500 all through Audio Alerts done commit bbe38ea60d0c7ba8359a4a599ecc2d4e8e8537f7 Author: nr0q <nr0q@gridtracker.org> Date: Tue Oct 19 17:05:47 2021 -0500 check in everything up to mid alert settings commit 99d89f68fca24ded7d4080942aa8303898a3d86c Author: nr0q <nr0q@gridtracker.org> Date: Tue Oct 19 13:00:00 2021 -0500 fix badly broken HTML commit 934f097b7019c9d02e220bd26ab4e2dbf96d252c Author: nr0q <nr0q@gridtracker.org> Date: Tue Oct 19 12:39:04 2021 -0500 update through to Lookup tab commit efd03b85aee05e489a558d3d9769bf524340f769 Author: chrbayer84 <christian_bay@gmx.de> Date: Wed Sep 29 18:04:22 2021 +0000 Update README.md commit ac5299cbb516fefce635a5cd99c72048e4bb678d Author: nr0q <nr0q@gridtracker.org> Date: Wed Sep 29 12:26:50 2021 -0500 add Getting GridTracker to readme commit 8f3a7f81ae27b6d7382ac4b75e89f5582c79c4d2 Author: nr0q <nr0q@gridtracker.org> Date: Tue Sep 28 14:58:22 2021 -0500 copy of NWJS's license commit 645b2222b084b575b8b0b4fb8ea61be8c972b010 Author: T Loomis <tag.loomis@gmail.com> Date: Tue Sep 28 19:09:45 2021 +0000 Removed OAMS messaging pop-up reset commit 17035c84a092be7cabeff4648f9827bc87cf445e Author: Matthew Chambers <nr0q@gridtracker.org> Date: Mon Sep 27 18:04:00 2021 +0000 updated arm to NWJS 0.54.2 with 64 bit capability rolled to v1.21.0928 commit 75421054f92497a4a8f7466eefa4c30684206ac2 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Mon Sep 27 18:00:48 2021 +0000 Treat adif record values as byte length vs string length commit 44d54dd5dfecb3389317f3c6a88793c38c78f7ff Author: Matthew Chambers <NR0Q@gridtracker.org> Date: Thu Sep 16 20:37:04 2021 -0500 updated V-num for beta build commit 50c65ac2c4bdc10da679d495f794e4424981f935 Author: jangliss <jon+gh@netdork.net> Date: Thu Sep 16 20:27:21 2021 -0500 Remove looking at fetched records for last fetch date for LoTW. Use only header commit 421601e36d3bde33c13ae7646f12d4cc1c617eff Author: Matthew Chambers <NR0Q@gridtracker.org> Date: Sun Aug 29 14:39:18 2021 -0500 new donors yay commit 3eb3fa4b21f6ab580ed6f1f8cf348b1e6e1fbe2d Author: Matthew Chambers <NR0Q@gridtracker.org> Date: Sat Aug 28 13:06:48 2021 -0500 acks data update commit cdb524a887cbabfeac288fad2d04f6126665b601 Author: Matthew Chambers <NR0Q@gridtracker.org> Date: Wed Aug 25 14:38:51 2021 -0500 data update commit f91cc0968cdb25164894739693c8bfc15aa7af9d Author: Matthew Chambers <nr0q@gridtracker.org> Date: Mon Jul 5 11:47:16 2021 -0500 acks update 5-july-2021 commit 0ca37bf71eaef8c7423944a478f9b3836d7320c7 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Tue Jun 29 16:41:47 2021 -0500 ack update 29 July 2021 commit 53f6168e2363e26c548d108f735805dcfba8330e Author: Matthew Chambers <nr0q@gridtracker.org> Date: Tue Jun 22 11:49:53 2021 -0500 update acknowledgements.json for 6/22/2021 commit 2b79d75f0989c1fcb35ea90d72266e9238bd285e Author: Matthew Chambers <nr0q@gridtracker.org> Date: Sun Jun 20 13:13:40 2021 -0500 update acknowledgements.json commit c30d004c69824a71d8391129cf38ece5a84dc3a7 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Sat Jun 19 16:19:52 2021 -0500 update acknowledgements.json commit c3bef85eabb56709833ac36fd299cbb90e07aa4f Author: Matthew Chambers <nr0q@gridtracker.org> Date: Sat Jun 19 20:58:02 2021 +0000 Update acks json commit 260e4bc9bc3d15d02b45e5efe0c955c5beaddd27 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Sat Jun 19 12:01:43 2021 -0500 general updates for new general release commit fc742c95a868269ff691b0579aef3c61d6643591 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Sat Jun 19 14:36:13 2021 -0500 fix line 15581 commit 6a04b9cb7bc2c11f458cae3aad8e9569ae7a0a58 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Sat Jun 19 13:44:44 2021 -0500 more better commit 229efb099a1688b00af4469d9d5f3b15f067d84a Author: Matthew Chambers <nr0q@gridtracker.org> Date: Sat Jun 19 13:26:06 2021 -0500 better get acks code (Thanks Tag) commit 7b30fb3093212e034ea57f42090f72ec768f6320 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Sat Jun 19 11:43:05 2021 -0500 fix missing " around http line 11141 commit 24e180ffdcb34c8f26dcf183607c83f704168695 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Sat Jun 19 11:33:04 2021 -0500 call checkForNewAcks when checkForNewVersion commit e9d9f8b24a3bf927040bd7f77227edcaafd631e8 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Sat Jun 19 11:17:29 2021 -0500 add functions to get acks json off website and overwrite file commit 56e4d5816918078152fb74ca8a542179d87b6077 Author: jangliss <jon+gh@netdork.net> Date: Fri Jun 18 20:28:25 2021 -0500 Date.parse behavior to local time instead of UTC commit 74db81d764f165d1c45aab54cd24137062e7a204 Author: jangliss <jon+gh@netdork.net> Date: Thu Jun 17 17:56:37 2021 -0500 More LoTW Fixes to do diff fetching commit cedeef59f878ca42e6190b41d8774ee4ce4eb640 Author: jangliss <jon+gh@netdork.net> Date: Tue Jun 15 21:03:15 2021 -0500 Initial workup for LoTW throttling & diff fetching commit 4576c519c85b0445dad7ba655e2d22b387c9a26f Author: Santiago Mejia <santiago.hi8smx@gmail.com> Date: Wed Jun 16 19:59:05 2021 +0000 Upload New File commit f79010707a3fac0e29c63ef1b741a737bcab522c Author: jangliss <jon+gh@netdork.net> Date: Sat Jun 19 15:44:51 2021 -0500 Fix linting warning commit 9b31e8c1a859fe94109f295f6376d4cffd87a1c2 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Sat Jun 12 22:13:03 2021 -0500 update changelog etc for v1.21.0613 commit 3706978e8b45855f70e4c5723898d0797e7066b5 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Sun Jun 13 03:27:38 2021 +0000 Update acks json commit bbd17c1e32dc2685a57871a446ee8e3d5bc5b3c9 Author: jangliss <jon+gh@netdork.net> Date: Sat Jun 12 22:20:32 2021 -0500 Linting hates me. Remove space on comment. commit 80466b0edab9b138fd78c45ef270ce8a7b644fc1 Author: jangliss <jon+gh@netdork.net> Date: Sat Jun 12 22:08:47 2021 -0500 Fix npm wanting a space after comment syntax commit 5791ba583e4c04de01058807a61af9fb49599114 Author: jangliss <jon+gh@netdork.net> Date: Sat Jun 12 21:55:50 2021 -0500 Temporarily disable LoTW full downloads on startup commit d5478ee4ab7730af7eac637f839a05348558b517 Author: nr0q <nr0q@gridtracker.org> Date: Mon Oct 18 17:17:41 2021 -0500 small fixes in typos in data-i18n tags commit ec541a5a835eec2233d752a88b809ff0dbc9e78b Author: nr0q <nr0q@gridtracker.org> Date: Mon Oct 18 14:08:50 2021 -0500 it all works and created es file for Santiago to start on commit 6c14637639be2e5ff7535c26c5c4f3db07c5add2 Author: nr0q <nr0q@gridtracker.org> Date: Mon Oct 18 13:51:09 2021 -0500 loading the local file helps, added a statup function to do that commit 635431735822ad0385fd713c8def0ffd094fd2ec Author: nr0q <nr0q@gridtracker.org> Date: Wed Oct 13 16:25:07 2021 -0500 add .vscode to gitignore commit 27cc542b65cf486a25ba93fb06901ff7b0a888d8 Author: nr0q <nr0q@gridtracker.org> Date: Wed Oct 13 10:20:55 2021 -0500 finished i18n tags through map vew filters commit ef4683c8ea3235670509a17b4a2b6108c7d27bab Author: nr0q <nr0q@gridtracker.org> Date: Tue Oct 12 20:23:12 2021 -0500 added data-i18n tags up through mapFilter.mode commit 0aa862afbe239cd062902804de9ccad95e354839 Author: nr0q <nr0q@gridtracker.org> Date: Tue Oct 12 16:49:03 2021 -0500 more data-i18n tags commit bbd39a640fd5b31366b141bb687fad04b27c64fd Author: nr0q <nr0q@gridtracker.org> Date: Tue Oct 12 16:07:39 2021 -0500 adding data-i18n fields to tags commit 603c8c039d6ba6113cd2de62c994d8c5bba42e08 Author: nr0q <nr0q@gridtracker.org> Date: Mon Oct 11 17:37:11 2021 -0500 all HTML files done commit 7e97e9d2af6db22b95205ace9a00887b493a2be8 Author: nr0q <nr0q@gridtracker.org> Date: Mon Oct 11 16:08:52 2021 -0500 i18n up to the about tab commit 0c65ab8f3ae0b54f80be894067547bbc5674f5d5 Author: nr0q <nr0q@gridtracker.org> Date: Mon Oct 11 13:51:09 2021 -0500 i18n en strings through audio settings commit 39152109a5156f08f4984364a0f7488cd617dd18 Author: nr0q <nr0q@gridtracker.org> Date: Mon Oct 11 13:18:35 2021 -0500 cleaner keys commit 59a93e3f30cabdc7529aef005b085c3a9e582ecf Author: nr0q <nr0q@gridtracker.org> Date: Mon Oct 11 11:46:28 2021 -0500 i18n through control panel commit 17be5a28434dda24fff0fb7e198cc89ac0bbfb5c Author: nr0q <nr0q@gridtracker.org> Date: Mon Oct 11 10:43:25 2021 -0500 check in what I have so far commit aa65ad9936c7c37ada7b5d8b7263adddf60dec8f Author: christian <christian@t530> Date: Sun Jun 13 14:21:43 2021 -0400 added jquery.i18n commit 9d31645823b45417f393d68951a18b4d05bb8e93 Author: christian <christian@t530> Date: Wed Jun 9 21:29:23 2021 -0400 i18n hook for main gt.html commit 7e9e5b9cfe1bdbbee391565f1fda282a27f0bb55 Author: christian <christian@t530> Date: Mon May 24 21:08:15 2021 -0400 WIP banana i18n
2022-09-06 01:57:15 +00:00
updateInstances();
// callback to addControls();
loadRosterI18n();
2023-01-17 12:42:36 +00:00
setRosterTop();
Squashed commit of the following: commit afb25f406b51a9d52d35e25cebb78547c964884a Author: Christian Bayer <chrbayer84@googlemail.com> Date: Mon Sep 5 21:45:16 2022 -0400 WIP german translation commit 3abbf5cd5fe89fbe474ade395a1ad2d0ddd8c1b0 Author: Christian Bayer <chrbayer84@googlemail.com> Date: Sat Sep 3 15:06:47 2022 -0400 WIP german translation and some programmatic translation from CR commit 4c8fcc656b4085e88151cb5a3ce9f6c5e5bf3a21 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Mon Aug 15 22:14:16 2022 -0500 progress so far, fixed what got broke in CR and fixed being able to close and reopen CR. still need to get i18n figured out commit 78aaaed2ade1094add163d5850bef6ab1b2226fb Author: Matthew Chambers <nr0q@gridtracker.org> Date: Mon Aug 15 20:19:09 2022 -0500 one step forward, 2 steps backwards commit 903319452bf0c5ed8a2da879281d8b08ef7ff05e Author: Christian Bayer <chrbayer84@googlemail.com> Date: Mon Aug 15 23:23:51 2022 +0200 WIP translating strings in js: roster.js commit 934f619af63a97363dcff19ef2343b3e12e269ee Author: Matthew Chambers <nr0q@gridtracker.org> Date: Mon Aug 15 00:06:13 2022 -0500 add JA because may have a JA contributor commit 8c7bd091acf83b45a8e0957e4990c4660f3673a2 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Sun Aug 14 23:41:29 2022 -0500 all JS files have been passed through, may need another pass through all files though commit 835892b70b7b229fe0d353831271b21fc2fa716a Author: Matthew Chambers <nr0q@gridtracker.org> Date: Sun Aug 14 20:03:18 2022 -0500 Finished gt.js tags commit 404dd1a2477e27b2c665dc3ecaba77dafcc7be20 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Sun Aug 14 18:10:34 2022 -0500 progress so far (up to line 9871 in gt.js) commit c59473f8986fab8b2b336f212b0ead9d10617899 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Sun Aug 14 12:43:01 2022 -0500 add comment between adif and alerts js files in en.json commit 80cb9d5178a255dcc1a15482b0bcabce1555aa61 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Sun Aug 14 12:42:27 2022 -0500 Fix Chinese label to a more proper one commit 08a00eeae86d7d9a97cf17aa6029468024bf6784 Author: Christian Bayer <chrbayer84@googlemail.com> Date: Sun Aug 14 16:54:32 2022 +0200 moved scripts commit 8c9569b1c5f6b4d1b4b92db1ce7806b7246862fe Author: Christian Bayer <chrbayer84@googlemail.com> Date: Sun Aug 14 16:51:10 2022 +0200 started german translation commit b857ecf91e97bed0479ca759eddf234da65c5313 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Sun Aug 14 01:37:39 2022 -0500 tags for adif and alerts js files commit 9c328de842bbe773746beddaeec0d2ea81225752 Author: Christian Bayer <chrbayer84@googlemail.com> Date: Sun Aug 14 08:23:51 2022 +0200 fixed cn.json additonal keys commit 7bc459195f8738cf77835329acf962274cd9cc38 Author: Christian Bayer <chrbayer84@googlemail.com> Date: Sun Aug 14 08:20:22 2022 +0200 Revert "fixed CN.json" This reverts commit f2f71c94dbb8f270aff76223a5d30769d8819b1a. commit 236bea23bd13324f25cbcdbd39c3ec008a679f10 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Sat Aug 13 19:02:49 2022 -0500 cleanup and lint commit a78d32ed1bb5457be0d7e227492cdd1c3e77c431 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Sat Aug 13 19:01:47 2022 -0500 THis works! commit edc0d40256b32f81a135f5efc3819c04018774d6 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Sat Aug 13 18:17:15 2022 -0500 more tweaks trying to make it work commit f2f71c94dbb8f270aff76223a5d30769d8819b1a Author: Matthew Chambers <nr0q@gridtracker.org> Date: Sat Aug 13 17:09:39 2022 -0500 fixed CN.json commit 9b90cf4b142f0c52bd0e4ba7ce926ad145f90ecd Author: Matthew Chambers <nr0q@gridtracker.org> Date: Sat Aug 13 16:33:09 2022 -0500 language change so far commit dd60fc5012fa8f7a8655dacc9b8e0c0237e33f4e Author: Christian Bayer <chrbayer84@googlemail.com> Date: Sat Aug 13 22:19:25 2022 +0200 added missing keys to cn.json commit fc5e25c81a7541d2fe03ed9b79950c4ddbd71abb Author: Matthew Chambers <nr0q@gridtracker.org> Date: Sat Aug 13 15:18:54 2022 -0500 Fixed linting` commit 485adc6da114a28f58e2d112f5f83f7541af9843 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Sat Aug 13 14:57:30 2022 -0500 slight cleanup commit dada794ccdf699fe4eaf179b2cfef2a96e6a82fb Author: Christian Bayer <chrbayer84@googlemail.com> Date: Sat Aug 13 21:55:55 2022 +0200 fixed cn json commit 82809c0458e0b99159e87e1d22eba4cde6339015 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Sat Aug 13 14:45:21 2022 -0500 added dropdown for language in settings commit 3159040b514f497a23b7169fb9512b032ee8b942 Author: Christian Bayer <chrbayer84@googlemail.com> Date: Fri Aug 12 22:29:51 2022 +0200 added raw output of the i18n extractor. needs cleanup commit 8f31e9e757f6c6a29678f0c0bddad1c6dc360df4 Author: Christian Bayer <chrbayer84@googlemail.com> Date: Thu Aug 11 22:29:12 2022 +0200 added i18n generator script based off of a patch file commit de81e35754dd2bb4c838aa6c7bf12a2025b1ded1 Author: Christian Bayer <chrbayer84@googlemail.com> Date: Mon Aug 8 22:20:47 2022 +0200 added cascading install for nested package.json commit bf7ecfeb4f44b0c65bbea0c5a43eb0e809652384 Author: Christian Bayer <chrbayer84@googlemail.com> Date: Mon Aug 8 22:11:18 2022 +0200 added pota key commit e14bca8172272d4a4f53eb5282d3d5576e057a2a Merge: f8c7232 91145aa Author: Matthew Chambers <nr0q@gridtracker.org> Date: Sun Aug 7 18:39:40 2022 +0000 Merge branch 'master' into 'cbayer-i18n' Master See merge request gridtracker.org/gridtracker!182 If this is changing anything in the UI or operational behavior, please prepare to update the wiki! commit f8c7232c38ea4194fa8f69fe5721a74689b7ef2a Author: Matthew Chambers <nr0q@gridtracker.org> Date: Sun Aug 7 12:54:04 2022 -0500 add jquery to npm depends commit 734e972d9e3a66ca8d85debbe1a8f75c6f824020 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Sun Aug 7 12:53:24 2022 -0500 wip, i18n debugging commit 013d9c8ebfc67f0f4ce8a4df8bea86bf812fd880 Author: Christian Bayer <chrbayer84@googlemail.com> Date: Sun Aug 7 10:34:19 2022 +0200 small fixes commit 8da135bb6db8e15069eefb07397c9ceeee6d8bac Merge: 0183434 c1f7f1b Author: Christian Bayer <chrbayer84@googlemail.com> Date: Sat Aug 6 22:39:24 2022 +0200 Merge branch 'master' into cbayer-i18n commit 0183434bba0d7c6b7652b3b8700bac3630902737 Author: Christian Bayer <chrbayer84@googlemail.com> Date: Sat Aug 6 22:27:35 2022 +0200 removed banana import commit 670001a6db028dc93bc56ddb8b29d2e897974ffa Merge: c120df0 236ff10 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Tue May 17 18:38:11 2022 -0500 Merge branch 'master' into cbayer-i18n commit c120df0e3ba77a985fdbd8c9a76028aee9a8d8d0 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Thu Dec 16 15:15:21 2021 -0600 the linter lints commit 2243beddb2aaa1a163b1ba142a95fce60774e2e7 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Thu Dec 16 14:39:00 2021 -0600 mostly finished with gridtracker.html file's i18n commit 33d69c950145dc398d10723f56102dbec77ba0b5 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Thu Dec 16 14:36:34 2021 -0600 add functions to get acks json off website and overwrite file commit 98170dce4f1313cbf42bd0ae4bf5d1c490a077da Author: Matthew Chambers <nr0q@gridtracker.org> Date: Thu Dec 16 15:02:46 2021 -0600 Initial workup for LoTW throttling & diff fetching commit 655c0416635c5cafecaa612f8f6fd9a20db21f58 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Thu Dec 16 14:31:19 2021 -0600 WIP banana i18n commit 26495c1f1436e5b99c317d8305101dbecd8f2b95 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Wed Dec 15 11:52:08 2021 -0600 update rpm spec 1.21.1212 commit e00269304da44ea6da20362f96714584164ba8b2 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Thu Dec 16 14:47:50 2021 -0600 Trigger COPR and AUR repos and build .deb commit 2b2e660108ca4f000a6ac31c347f80010e7b11b8 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Wed Dec 15 11:46:41 2021 -0600 updated changelog / release notes commit 0265f75fd85509081d5992db0d729149521254f5 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Mon Dec 13 20:48:27 2021 -0600 update changelog commit cd28c73c8a1dcb569fe3629e03b8d9646c832e5f Author: Matthew Chambers <nr0q@gridtracker.org> Date: Mon Dec 13 19:04:23 2021 -0600 update changelog commit 058dbea415898134f345653532a3789ee7855ef0 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Mon Dec 13 19:03:46 2021 -0600 Fix #76 commit f50ea44466328d0d632955b8a8725bf780417068 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Mon Dec 13 16:18:51 2021 -0600 update changelog to recent bug fixes commit 3b0c9b5acc8cf3c57a2b0526451edf8250c11b89 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Mon Dec 13 16:18:37 2021 -0600 Fix #91 commit d906ee7d5f18e682ab0b47277474170dd89622de Author: Matthew Chambers <nr0q@gridtracker.org> Date: Mon Dec 13 15:54:51 2021 -0600 Fixes #107 commit 8252ca3f82843758edf5594d804989c3c4a1d6f0 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Mon Dec 13 12:13:23 2021 -0600 fix hunting commit c1f3ae9e1c7605a31635bad8ed5e793f8a5d39d1 Author: Sebastian Delmont <sd@notso.net> Date: Mon Dec 13 13:09:46 2021 -0500 Really fix roster counts commit 0054993dc8ab1406da8b0b4644382f453f9b4584 Author: Sebastian Delmont <sd@notso.net> Date: Mon Dec 13 11:54:19 2021 -0500 Fix roster counts commit 69e1152e7883369b3a818f516f3302681800c241 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Mon Dec 13 10:09:19 2021 -0600 update check for bad dxcc commit a0b2595e9ea38e0a936fb97e691aaa7a7bb2d31e Author: Sebastian Delmont <sd@notso.net> Date: Mon Dec 13 11:04:53 2021 -0500 Fixed spot sorting in refactored code commit 298e8cfbd7b9ee9b4560cb6c66e642e14abcae87 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Sun Dec 12 16:37:52 2021 -0600 update changelog commit eb793d5607721231574a301fe1a4ea577628abf8 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Thu Dec 16 14:47:21 2021 -0600 Update Copyright for 2022 commit 0eb2fac9a0efa2e1b97389a5a09cba4ba83ccfa1 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Thu Dec 16 14:46:52 2021 -0600 change vars to lets per Tag's suggestion commit c78ea075b4f948dc88c91447ff66e471b21cc192 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Sun Dec 12 15:46:17 2021 -0600 RC build commit 0c5cde472bffa1d2e2fe502449164aca153dd159 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Tue Nov 16 04:11:44 2021 +0000 Update .gitlab-ci.yml file commit 492b791bc058555e49a16616ecb32c3cd9dd4ca4 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Tue Nov 16 04:10:31 2021 +0000 Update .gitlab-ci.yml commit e77b9922ed1eea9c0ecd00860a4755b2523dba5b Author: Matthew Chambers <nr0q@gridtracker.org> Date: Tue Nov 16 03:56:53 2021 +0000 Update .gitlab-ci.yml - include security scanning commit 13c1236f7bf50c60756f1688b061f56d14f3afb9 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Thu Dec 16 14:46:20 2021 -0600 Fix acknowledgement icons commit 28772768e8253edfb6b14b3a97908bf8102ad239 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Thu Dec 16 14:45:31 2021 -0600 Add support for Apple Silicon Macs, by hardcoding x64 mode in Phoenix commit 0cec076dbb43d513ec93a63aaf51cf1423a9ebbb Author: Matthew Chambers <nr0q@gridtracker.org> Date: Thu Dec 16 14:45:05 2021 -0600 allow package-lock to be uploaded to repo commit 8b23a4ef25d12c417747b663334b046b723d703a Author: Matthew Chambers <nr0q@gridtracker.org> Date: Sun Dec 12 09:11:24 2021 -0600 beta III of call roster testing commit cc476c84ed84cb7e55e68cf6d482bfdd569f78a0 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Sun Dec 12 09:09:57 2021 -0600 if dxcc = -1, no roster commit ca5a4db664876a48b7d8a5ffaff28d7b067d99d0 Author: nr0q <nr0q@gridtracker.org> Date: Thu Dec 9 20:59:15 2021 -0600 beta version for testing fix to CR commit 5556bbfee08d0d1480d987dc396130cceed6cf20 Author: nr0q <nr0q@gridtracker.org> Date: Thu Dec 9 14:31:02 2021 -0600 a few of SD's roster tweaks commit 2b65f293a788b5c083efd04cfd4c803796df1b03 Author: nr0q <nr0q@gridtracker.org> Date: Thu Dec 9 13:53:20 2021 -0600 could this cure the free text messages breaking the CR? commit 43ea47a09d1058baa6bee5a109d7454cab6218c8 Author: nr0q <nr0q@gridtracker.org> Date: Mon Oct 25 20:43:48 2021 -0500 roll v for beta build commit f1d9db2e6fd14362a4fbf4d742be9a95ee871f0e Author: nr0q <nr0q@gridtracker.org> Date: Mon Oct 25 15:17:33 2021 -0500 better handling of /MM so that it doesn't tear a hole in space-time commit 9fed1b4aca10997081f32e5e1777b52a3072d3d6 Author: nr0q <nr0q@gridtracker.org> Date: Mon Oct 25 14:00:29 2021 -0500 remove the exception handler for callObj.style because need to fix the root cause commit 7a73c988dac34545da26fd4a736a964215ebc872 Author: nr0q <nr0q@gridtracker.org> Date: Mon Oct 25 13:31:15 2021 -0500 handle undefined callObj.style commit 71a2df7e20e8e424aa0ec90ea5d8d9d3492487ff Author: nr0q <nr0q@gridtracker.org> Date: Mon Oct 25 12:42:58 2021 -0500 handle bug line 114 commit 8d5117b76b6844df4eeced0e9f0e01d1e28be2e2 Author: nr0q <nr0q@gridtracker.org> Date: Sun Oct 24 20:36:10 2021 -0500 inc v for beta 2 commit b199c4c4fad3558843d6d21958761ef6b9996fa7 Author: christian <christian_bay@gmx.de> Date: Sun Oct 24 21:23:40 2021 -0400 fixed linting commit 7830e52978f964c5da015b1bb0928f56028c260b Author: nr0q <nr0q@gridtracker.org> Date: Sun Oct 24 20:15:07 2021 -0500 cleaned up linting commit ac51710ff3fb3d296ddd4edeeff4957e677fb6ec Author: Christian Bayer <christian_bay@gmx.de> Date: Sun Oct 24 20:56:21 2021 -0400 fixed reference error on huntedCount commit 66f7ad87b3d91397cab29bc8c0bcca9e137e682e Author: Matthew Chambers <nr0q@gridtracker.org> Date: Thu Dec 16 14:44:39 2021 -0600 fix pack.json and changelog to reflect test V# commit 7a43853533e364cf85e70262b6573afe47542fbc Author: Matthew Chambers <nr0q@gridtracker.org> Date: Thu Dec 16 14:44:14 2021 -0600 add settings.json to gitignore commit 4f2ce9d89099b674fed2c5053cc80f7f9866f325 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Thu Oct 21 00:41:12 2021 +0000 Update package.json commit dbc297a00c6405971219ccba4ad27416ef321282 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Thu Dec 16 14:43:52 2021 -0600 Update package.json commit 6c68a190dbd73b385fbaea9878f513ba0684dc2c Author: Matthew Chambers <nr0q@gridtracker.org> Date: Thu Dec 16 14:43:31 2021 -0600 Update changelog commit 3125b01a17f9fa4c44ec139a4a58fcd8effbf3cd Author: christian <christian@t530> Date: Wed Jul 7 15:08:03 2021 -0400 clear call roster on band change: option added commit 6f4c15c157ff956352bebd9e20a06610ef3d3196 Author: christian <christian@t530> Date: Sun Jul 4 23:07:51 2021 -0400 unknown dxxc filter for roster commit a444d163cae7fd3256992571a2f95b6ac5b921a1 Author: christian <christian@t530> Date: Thu Jul 1 21:39:50 2021 -0400 fixed other sorts commit cb73f21a937c95541ca756ee9988d54f8056fd16 Author: christian <christian@t530> Date: Wed Jun 30 20:37:27 2021 -0400 fixed alert script call commit 2226f707bd41ab4f271ca3b2c8c72f8028735894 Author: christian <christian@t530> Date: Wed Jun 30 07:52:36 2021 -0400 fixed dxcc sorting commit d395b8dd0e0df8fcee8d8da9701428803ef0c5af Author: Matthew Chambers <nr0q@gridtracker.org> Date: Mon Jun 28 23:18:43 2021 -0500 tweak for compact mode commit 86fb507d5a45a3418ae7f98d828e91f74f5af9a9 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Mon Jun 28 23:08:13 2021 -0500 IT WORKS! commit d55ac551d1c1d923b184c121af69d065ccc3eb70 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Mon Jun 28 22:51:52 2021 -0500 fix grid commit 0a85e764931371591899a503609bcafb35babb30 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Mon Jun 28 22:50:49 2021 -0500 bunch of stuff moved to the right places commit 68f81c62003e0826f2766b5065f464d008b95db7 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Mon Jun 28 22:37:49 2021 -0500 fix some small stuff commit db738a4230fd6d6f79c122643ba48d687da783b7 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Mon Jun 28 22:26:40 2021 -0500 lost show bands/modes on render call rows commit 68f7544b1a2e8dfca87bbfc3708aa30aae4b2b31 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Mon Jun 28 22:24:32 2021 -0500 fix line 73 commit 95920077bd64eea14a6dee6f4d112f4f65031450 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Mon Jun 28 22:21:19 2021 -0500 fix line 34 commit 84059439c1108a083f52aed5b2302adca2bb7ead Author: Matthew Chambers <nr0q@gridtracker.org> Date: Mon Jun 28 22:18:32 2021 -0500 fix broken array commit 817e9c5e18868bee13b7dfa029b4bbc008ded300 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Mon Jun 28 22:12:23 2021 -0500 fix sendAlerts undefined object commit 7a0b16d262f77dfbaf56bdeb678637f67f4c45a0 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Mon Jun 28 22:08:06 2021 -0500 more broke fixed commit 6a9896ce4112b3b84fb9f1429285885ed5f8085b Author: Matthew Chambers <nr0q@gridtracker.org> Date: Mon Jun 28 22:00:27 2021 -0500 re-added r_sortFunction that somehow wondered off commit 856a49b720f41c68b91cb38ca135b82cb5a36e09 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Mon Jun 28 21:58:05 2021 -0500 fix some more broken stuff commit 076a7e5eec824af2db9edf8e083807d0dff4fb8d Author: Matthew Chambers <nr0q@gridtracker.org> Date: Mon Jun 28 20:42:07 2021 -0500 fixed a bunch of broken refs to rosterSettings commit 443409b90253c2e45d7d080819286a9b6dd39e88 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Mon Jun 28 19:19:26 2021 -0500 refactor so far commit 1f452992861643d61caf5bcf85739c199a28582b Author: Matthew Chambers <nr0q@gridtracker.org> Date: Mon Jun 28 17:26:44 2021 -0500 big roster refactor - starting Co-authored-by: Sebastian Delmont <sd@notso.net> Matthew Chambers <nr0q@gridtracker.org> commit 4ed8b2c3cbd7e1f850256d4589c7cc6621825eed Author: Matthew Chambers <nr0q@gridtracker.org> Date: Thu Jun 24 18:46:42 2021 -0500 missing comma line 422 commit b089caf50ad28215280b343eca43e816d0e8aaad Author: Matthew Chambers <nr0q@gridtracker.org> Date: Thu Jun 24 18:04:46 2021 -0500 add array with exception test function names, need to create functions yet commit 0b27feb3677218b7a3185ecb8c187384572451eb Author: Matthew Chambers <nr0q@gridtracker.org> Date: Thu Jun 24 11:06:31 2021 -0500 some notes that might aid in refactoring commit 0518d6e40caf7cede1b1a3ecced412d910f3bdeb Author: Matthew Chambers <nr0q@gridtracker.org> Date: Thu Dec 16 14:42:44 2021 -0600 add functions to get acks json off website and overwrite file commit 268459833bdd6bfbb84cd8d05df2a649ab34f1cc Author: Matthew Chambers <nr0q@gridtracker.org> Date: Thu Dec 16 14:41:03 2021 -0600 Initial workup for LoTW throttling & diff fetching commit 9330df84f38f9705d8c6f8ff56bd2479cacd108a Author: nr0q <nr0q@gridtracker.org> Date: Sun Oct 24 12:59:29 2021 -0500 save work so far commit 0761163ddd2b851c617ca6d4cc497f32063c2bf6 Author: nr0q <nr0q@gridtracker.org> Date: Tue Oct 19 21:54:26 2021 -0500 adding i18n to other html files, need to call scripts I think to make them "work" commit 3a00b5b3d0bbbdbb494bd90ba8638f9be0434e6a Author: nr0q <nr0q@gridtracker.org> Date: Tue Oct 19 21:16:02 2021 -0500 i18n chat html and format chat.css commit 220fc036b8b6d200ffbe79a5e293770b9a17d88c Author: nr0q <nr0q@gridtracker.org> Date: Tue Oct 19 20:57:05 2021 -0500 refactor chat css into it's own css file, fix linting in gt.js start adding i18n in chat and bandactivity htmls commit fceaaaa4aa8076ae5dbb544bbe63eef812606503 Author: nr0q <nr0q@gridtracker.org> Date: Tue Oct 19 19:39:21 2021 -0500 update all except hover/title elements with i18n in GridTracker.html commit 215bc2c55c770575a5594a48872b1fb28bb160b1 Author: nr0q <nr0q@gridtracker.org> Date: Tue Oct 19 18:28:48 2021 -0500 mostly finished with gridtracker.html file's i18n commit 9a63953b7d407530cebd9c341ddda3dd08346750 Author: nr0q <nr0q@gridtracker.org> Date: Tue Oct 19 17:58:13 2021 -0500 all through Audio Alerts done commit bbe38ea60d0c7ba8359a4a599ecc2d4e8e8537f7 Author: nr0q <nr0q@gridtracker.org> Date: Tue Oct 19 17:05:47 2021 -0500 check in everything up to mid alert settings commit 99d89f68fca24ded7d4080942aa8303898a3d86c Author: nr0q <nr0q@gridtracker.org> Date: Tue Oct 19 13:00:00 2021 -0500 fix badly broken HTML commit 934f097b7019c9d02e220bd26ab4e2dbf96d252c Author: nr0q <nr0q@gridtracker.org> Date: Tue Oct 19 12:39:04 2021 -0500 update through to Lookup tab commit efd03b85aee05e489a558d3d9769bf524340f769 Author: chrbayer84 <christian_bay@gmx.de> Date: Wed Sep 29 18:04:22 2021 +0000 Update README.md commit ac5299cbb516fefce635a5cd99c72048e4bb678d Author: nr0q <nr0q@gridtracker.org> Date: Wed Sep 29 12:26:50 2021 -0500 add Getting GridTracker to readme commit 8f3a7f81ae27b6d7382ac4b75e89f5582c79c4d2 Author: nr0q <nr0q@gridtracker.org> Date: Tue Sep 28 14:58:22 2021 -0500 copy of NWJS's license commit 645b2222b084b575b8b0b4fb8ea61be8c972b010 Author: T Loomis <tag.loomis@gmail.com> Date: Tue Sep 28 19:09:45 2021 +0000 Removed OAMS messaging pop-up reset commit 17035c84a092be7cabeff4648f9827bc87cf445e Author: Matthew Chambers <nr0q@gridtracker.org> Date: Mon Sep 27 18:04:00 2021 +0000 updated arm to NWJS 0.54.2 with 64 bit capability rolled to v1.21.0928 commit 75421054f92497a4a8f7466eefa4c30684206ac2 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Mon Sep 27 18:00:48 2021 +0000 Treat adif record values as byte length vs string length commit 44d54dd5dfecb3389317f3c6a88793c38c78f7ff Author: Matthew Chambers <NR0Q@gridtracker.org> Date: Thu Sep 16 20:37:04 2021 -0500 updated V-num for beta build commit 50c65ac2c4bdc10da679d495f794e4424981f935 Author: jangliss <jon+gh@netdork.net> Date: Thu Sep 16 20:27:21 2021 -0500 Remove looking at fetched records for last fetch date for LoTW. Use only header commit 421601e36d3bde33c13ae7646f12d4cc1c617eff Author: Matthew Chambers <NR0Q@gridtracker.org> Date: Sun Aug 29 14:39:18 2021 -0500 new donors yay commit 3eb3fa4b21f6ab580ed6f1f8cf348b1e6e1fbe2d Author: Matthew Chambers <NR0Q@gridtracker.org> Date: Sat Aug 28 13:06:48 2021 -0500 acks data update commit cdb524a887cbabfeac288fad2d04f6126665b601 Author: Matthew Chambers <NR0Q@gridtracker.org> Date: Wed Aug 25 14:38:51 2021 -0500 data update commit f91cc0968cdb25164894739693c8bfc15aa7af9d Author: Matthew Chambers <nr0q@gridtracker.org> Date: Mon Jul 5 11:47:16 2021 -0500 acks update 5-july-2021 commit 0ca37bf71eaef8c7423944a478f9b3836d7320c7 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Tue Jun 29 16:41:47 2021 -0500 ack update 29 July 2021 commit 53f6168e2363e26c548d108f735805dcfba8330e Author: Matthew Chambers <nr0q@gridtracker.org> Date: Tue Jun 22 11:49:53 2021 -0500 update acknowledgements.json for 6/22/2021 commit 2b79d75f0989c1fcb35ea90d72266e9238bd285e Author: Matthew Chambers <nr0q@gridtracker.org> Date: Sun Jun 20 13:13:40 2021 -0500 update acknowledgements.json commit c30d004c69824a71d8391129cf38ece5a84dc3a7 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Sat Jun 19 16:19:52 2021 -0500 update acknowledgements.json commit c3bef85eabb56709833ac36fd299cbb90e07aa4f Author: Matthew Chambers <nr0q@gridtracker.org> Date: Sat Jun 19 20:58:02 2021 +0000 Update acks json commit 260e4bc9bc3d15d02b45e5efe0c955c5beaddd27 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Sat Jun 19 12:01:43 2021 -0500 general updates for new general release commit fc742c95a868269ff691b0579aef3c61d6643591 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Sat Jun 19 14:36:13 2021 -0500 fix line 15581 commit 6a04b9cb7bc2c11f458cae3aad8e9569ae7a0a58 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Sat Jun 19 13:44:44 2021 -0500 more better commit 229efb099a1688b00af4469d9d5f3b15f067d84a Author: Matthew Chambers <nr0q@gridtracker.org> Date: Sat Jun 19 13:26:06 2021 -0500 better get acks code (Thanks Tag) commit 7b30fb3093212e034ea57f42090f72ec768f6320 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Sat Jun 19 11:43:05 2021 -0500 fix missing " around http line 11141 commit 24e180ffdcb34c8f26dcf183607c83f704168695 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Sat Jun 19 11:33:04 2021 -0500 call checkForNewAcks when checkForNewVersion commit e9d9f8b24a3bf927040bd7f77227edcaafd631e8 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Sat Jun 19 11:17:29 2021 -0500 add functions to get acks json off website and overwrite file commit 56e4d5816918078152fb74ca8a542179d87b6077 Author: jangliss <jon+gh@netdork.net> Date: Fri Jun 18 20:28:25 2021 -0500 Date.parse behavior to local time instead of UTC commit 74db81d764f165d1c45aab54cd24137062e7a204 Author: jangliss <jon+gh@netdork.net> Date: Thu Jun 17 17:56:37 2021 -0500 More LoTW Fixes to do diff fetching commit cedeef59f878ca42e6190b41d8774ee4ce4eb640 Author: jangliss <jon+gh@netdork.net> Date: Tue Jun 15 21:03:15 2021 -0500 Initial workup for LoTW throttling & diff fetching commit 4576c519c85b0445dad7ba655e2d22b387c9a26f Author: Santiago Mejia <santiago.hi8smx@gmail.com> Date: Wed Jun 16 19:59:05 2021 +0000 Upload New File commit f79010707a3fac0e29c63ef1b741a737bcab522c Author: jangliss <jon+gh@netdork.net> Date: Sat Jun 19 15:44:51 2021 -0500 Fix linting warning commit 9b31e8c1a859fe94109f295f6376d4cffd87a1c2 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Sat Jun 12 22:13:03 2021 -0500 update changelog etc for v1.21.0613 commit 3706978e8b45855f70e4c5723898d0797e7066b5 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Sun Jun 13 03:27:38 2021 +0000 Update acks json commit bbd17c1e32dc2685a57871a446ee8e3d5bc5b3c9 Author: jangliss <jon+gh@netdork.net> Date: Sat Jun 12 22:20:32 2021 -0500 Linting hates me. Remove space on comment. commit 80466b0edab9b138fd78c45ef270ce8a7b644fc1 Author: jangliss <jon+gh@netdork.net> Date: Sat Jun 12 22:08:47 2021 -0500 Fix npm wanting a space after comment syntax commit 5791ba583e4c04de01058807a61af9fb49599114 Author: jangliss <jon+gh@netdork.net> Date: Sat Jun 12 21:55:50 2021 -0500 Temporarily disable LoTW full downloads on startup commit d5478ee4ab7730af7eac637f839a05348558b517 Author: nr0q <nr0q@gridtracker.org> Date: Mon Oct 18 17:17:41 2021 -0500 small fixes in typos in data-i18n tags commit ec541a5a835eec2233d752a88b809ff0dbc9e78b Author: nr0q <nr0q@gridtracker.org> Date: Mon Oct 18 14:08:50 2021 -0500 it all works and created es file for Santiago to start on commit 6c14637639be2e5ff7535c26c5c4f3db07c5add2 Author: nr0q <nr0q@gridtracker.org> Date: Mon Oct 18 13:51:09 2021 -0500 loading the local file helps, added a statup function to do that commit 635431735822ad0385fd713c8def0ffd094fd2ec Author: nr0q <nr0q@gridtracker.org> Date: Wed Oct 13 16:25:07 2021 -0500 add .vscode to gitignore commit 27cc542b65cf486a25ba93fb06901ff7b0a888d8 Author: nr0q <nr0q@gridtracker.org> Date: Wed Oct 13 10:20:55 2021 -0500 finished i18n tags through map vew filters commit ef4683c8ea3235670509a17b4a2b6108c7d27bab Author: nr0q <nr0q@gridtracker.org> Date: Tue Oct 12 20:23:12 2021 -0500 added data-i18n tags up through mapFilter.mode commit 0aa862afbe239cd062902804de9ccad95e354839 Author: nr0q <nr0q@gridtracker.org> Date: Tue Oct 12 16:49:03 2021 -0500 more data-i18n tags commit bbd39a640fd5b31366b141bb687fad04b27c64fd Author: nr0q <nr0q@gridtracker.org> Date: Tue Oct 12 16:07:39 2021 -0500 adding data-i18n fields to tags commit 603c8c039d6ba6113cd2de62c994d8c5bba42e08 Author: nr0q <nr0q@gridtracker.org> Date: Mon Oct 11 17:37:11 2021 -0500 all HTML files done commit 7e97e9d2af6db22b95205ace9a00887b493a2be8 Author: nr0q <nr0q@gridtracker.org> Date: Mon Oct 11 16:08:52 2021 -0500 i18n up to the about tab commit 0c65ab8f3ae0b54f80be894067547bbc5674f5d5 Author: nr0q <nr0q@gridtracker.org> Date: Mon Oct 11 13:51:09 2021 -0500 i18n en strings through audio settings commit 39152109a5156f08f4984364a0f7488cd617dd18 Author: nr0q <nr0q@gridtracker.org> Date: Mon Oct 11 13:18:35 2021 -0500 cleaner keys commit 59a93e3f30cabdc7529aef005b085c3a9e582ecf Author: nr0q <nr0q@gridtracker.org> Date: Mon Oct 11 11:46:28 2021 -0500 i18n through control panel commit 17be5a28434dda24fff0fb7e198cc89ac0bbfb5c Author: nr0q <nr0q@gridtracker.org> Date: Mon Oct 11 10:43:25 2021 -0500 check in what I have so far commit aa65ad9936c7c37ada7b5d8b7263adddf60dec8f Author: christian <christian@t530> Date: Sun Jun 13 14:21:43 2021 -0400 added jquery.i18n commit 9d31645823b45417f393d68951a18b4d05bb8e93 Author: christian <christian@t530> Date: Wed Jun 9 21:29:23 2021 -0400 i18n hook for main gt.html commit 7e9e5b9cfe1bdbbee391565f1fda282a27f0bb55 Author: christian <christian@t530> Date: Mon May 24 21:08:15 2021 -0400 WIP banana i18n
2022-09-06 01:57:15 +00:00
}
2023-12-02 01:09:18 +00:00
function toggleShowControls()
{
CR.rosterSettings.controls = !CR.rosterSettings.controls;
let newLabel = CR.rosterSettings.controls ? $.i18n("roster.menu.HideControls") : $.i18n("roster.menu.ShowControls");
CR.compactMenu.items[0].label = newLabel;
CR.menu.items[0].label = newLabel;
writeRosterSettings();
setVisual();
}
// From i18n.js
Squashed commit of the following: commit afb25f406b51a9d52d35e25cebb78547c964884a Author: Christian Bayer <chrbayer84@googlemail.com> Date: Mon Sep 5 21:45:16 2022 -0400 WIP german translation commit 3abbf5cd5fe89fbe474ade395a1ad2d0ddd8c1b0 Author: Christian Bayer <chrbayer84@googlemail.com> Date: Sat Sep 3 15:06:47 2022 -0400 WIP german translation and some programmatic translation from CR commit 4c8fcc656b4085e88151cb5a3ce9f6c5e5bf3a21 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Mon Aug 15 22:14:16 2022 -0500 progress so far, fixed what got broke in CR and fixed being able to close and reopen CR. still need to get i18n figured out commit 78aaaed2ade1094add163d5850bef6ab1b2226fb Author: Matthew Chambers <nr0q@gridtracker.org> Date: Mon Aug 15 20:19:09 2022 -0500 one step forward, 2 steps backwards commit 903319452bf0c5ed8a2da879281d8b08ef7ff05e Author: Christian Bayer <chrbayer84@googlemail.com> Date: Mon Aug 15 23:23:51 2022 +0200 WIP translating strings in js: roster.js commit 934f619af63a97363dcff19ef2343b3e12e269ee Author: Matthew Chambers <nr0q@gridtracker.org> Date: Mon Aug 15 00:06:13 2022 -0500 add JA because may have a JA contributor commit 8c7bd091acf83b45a8e0957e4990c4660f3673a2 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Sun Aug 14 23:41:29 2022 -0500 all JS files have been passed through, may need another pass through all files though commit 835892b70b7b229fe0d353831271b21fc2fa716a Author: Matthew Chambers <nr0q@gridtracker.org> Date: Sun Aug 14 20:03:18 2022 -0500 Finished gt.js tags commit 404dd1a2477e27b2c665dc3ecaba77dafcc7be20 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Sun Aug 14 18:10:34 2022 -0500 progress so far (up to line 9871 in gt.js) commit c59473f8986fab8b2b336f212b0ead9d10617899 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Sun Aug 14 12:43:01 2022 -0500 add comment between adif and alerts js files in en.json commit 80cb9d5178a255dcc1a15482b0bcabce1555aa61 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Sun Aug 14 12:42:27 2022 -0500 Fix Chinese label to a more proper one commit 08a00eeae86d7d9a97cf17aa6029468024bf6784 Author: Christian Bayer <chrbayer84@googlemail.com> Date: Sun Aug 14 16:54:32 2022 +0200 moved scripts commit 8c9569b1c5f6b4d1b4b92db1ce7806b7246862fe Author: Christian Bayer <chrbayer84@googlemail.com> Date: Sun Aug 14 16:51:10 2022 +0200 started german translation commit b857ecf91e97bed0479ca759eddf234da65c5313 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Sun Aug 14 01:37:39 2022 -0500 tags for adif and alerts js files commit 9c328de842bbe773746beddaeec0d2ea81225752 Author: Christian Bayer <chrbayer84@googlemail.com> Date: Sun Aug 14 08:23:51 2022 +0200 fixed cn.json additonal keys commit 7bc459195f8738cf77835329acf962274cd9cc38 Author: Christian Bayer <chrbayer84@googlemail.com> Date: Sun Aug 14 08:20:22 2022 +0200 Revert "fixed CN.json" This reverts commit f2f71c94dbb8f270aff76223a5d30769d8819b1a. commit 236bea23bd13324f25cbcdbd39c3ec008a679f10 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Sat Aug 13 19:02:49 2022 -0500 cleanup and lint commit a78d32ed1bb5457be0d7e227492cdd1c3e77c431 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Sat Aug 13 19:01:47 2022 -0500 THis works! commit edc0d40256b32f81a135f5efc3819c04018774d6 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Sat Aug 13 18:17:15 2022 -0500 more tweaks trying to make it work commit f2f71c94dbb8f270aff76223a5d30769d8819b1a Author: Matthew Chambers <nr0q@gridtracker.org> Date: Sat Aug 13 17:09:39 2022 -0500 fixed CN.json commit 9b90cf4b142f0c52bd0e4ba7ce926ad145f90ecd Author: Matthew Chambers <nr0q@gridtracker.org> Date: Sat Aug 13 16:33:09 2022 -0500 language change so far commit dd60fc5012fa8f7a8655dacc9b8e0c0237e33f4e Author: Christian Bayer <chrbayer84@googlemail.com> Date: Sat Aug 13 22:19:25 2022 +0200 added missing keys to cn.json commit fc5e25c81a7541d2fe03ed9b79950c4ddbd71abb Author: Matthew Chambers <nr0q@gridtracker.org> Date: Sat Aug 13 15:18:54 2022 -0500 Fixed linting` commit 485adc6da114a28f58e2d112f5f83f7541af9843 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Sat Aug 13 14:57:30 2022 -0500 slight cleanup commit dada794ccdf699fe4eaf179b2cfef2a96e6a82fb Author: Christian Bayer <chrbayer84@googlemail.com> Date: Sat Aug 13 21:55:55 2022 +0200 fixed cn json commit 82809c0458e0b99159e87e1d22eba4cde6339015 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Sat Aug 13 14:45:21 2022 -0500 added dropdown for language in settings commit 3159040b514f497a23b7169fb9512b032ee8b942 Author: Christian Bayer <chrbayer84@googlemail.com> Date: Fri Aug 12 22:29:51 2022 +0200 added raw output of the i18n extractor. needs cleanup commit 8f31e9e757f6c6a29678f0c0bddad1c6dc360df4 Author: Christian Bayer <chrbayer84@googlemail.com> Date: Thu Aug 11 22:29:12 2022 +0200 added i18n generator script based off of a patch file commit de81e35754dd2bb4c838aa6c7bf12a2025b1ded1 Author: Christian Bayer <chrbayer84@googlemail.com> Date: Mon Aug 8 22:20:47 2022 +0200 added cascading install for nested package.json commit bf7ecfeb4f44b0c65bbea0c5a43eb0e809652384 Author: Christian Bayer <chrbayer84@googlemail.com> Date: Mon Aug 8 22:11:18 2022 +0200 added pota key commit e14bca8172272d4a4f53eb5282d3d5576e057a2a Merge: f8c7232 91145aa Author: Matthew Chambers <nr0q@gridtracker.org> Date: Sun Aug 7 18:39:40 2022 +0000 Merge branch 'master' into 'cbayer-i18n' Master See merge request gridtracker.org/gridtracker!182 If this is changing anything in the UI or operational behavior, please prepare to update the wiki! commit f8c7232c38ea4194fa8f69fe5721a74689b7ef2a Author: Matthew Chambers <nr0q@gridtracker.org> Date: Sun Aug 7 12:54:04 2022 -0500 add jquery to npm depends commit 734e972d9e3a66ca8d85debbe1a8f75c6f824020 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Sun Aug 7 12:53:24 2022 -0500 wip, i18n debugging commit 013d9c8ebfc67f0f4ce8a4df8bea86bf812fd880 Author: Christian Bayer <chrbayer84@googlemail.com> Date: Sun Aug 7 10:34:19 2022 +0200 small fixes commit 8da135bb6db8e15069eefb07397c9ceeee6d8bac Merge: 0183434 c1f7f1b Author: Christian Bayer <chrbayer84@googlemail.com> Date: Sat Aug 6 22:39:24 2022 +0200 Merge branch 'master' into cbayer-i18n commit 0183434bba0d7c6b7652b3b8700bac3630902737 Author: Christian Bayer <chrbayer84@googlemail.com> Date: Sat Aug 6 22:27:35 2022 +0200 removed banana import commit 670001a6db028dc93bc56ddb8b29d2e897974ffa Merge: c120df0 236ff10 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Tue May 17 18:38:11 2022 -0500 Merge branch 'master' into cbayer-i18n commit c120df0e3ba77a985fdbd8c9a76028aee9a8d8d0 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Thu Dec 16 15:15:21 2021 -0600 the linter lints commit 2243beddb2aaa1a163b1ba142a95fce60774e2e7 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Thu Dec 16 14:39:00 2021 -0600 mostly finished with gridtracker.html file's i18n commit 33d69c950145dc398d10723f56102dbec77ba0b5 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Thu Dec 16 14:36:34 2021 -0600 add functions to get acks json off website and overwrite file commit 98170dce4f1313cbf42bd0ae4bf5d1c490a077da Author: Matthew Chambers <nr0q@gridtracker.org> Date: Thu Dec 16 15:02:46 2021 -0600 Initial workup for LoTW throttling & diff fetching commit 655c0416635c5cafecaa612f8f6fd9a20db21f58 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Thu Dec 16 14:31:19 2021 -0600 WIP banana i18n commit 26495c1f1436e5b99c317d8305101dbecd8f2b95 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Wed Dec 15 11:52:08 2021 -0600 update rpm spec 1.21.1212 commit e00269304da44ea6da20362f96714584164ba8b2 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Thu Dec 16 14:47:50 2021 -0600 Trigger COPR and AUR repos and build .deb commit 2b2e660108ca4f000a6ac31c347f80010e7b11b8 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Wed Dec 15 11:46:41 2021 -0600 updated changelog / release notes commit 0265f75fd85509081d5992db0d729149521254f5 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Mon Dec 13 20:48:27 2021 -0600 update changelog commit cd28c73c8a1dcb569fe3629e03b8d9646c832e5f Author: Matthew Chambers <nr0q@gridtracker.org> Date: Mon Dec 13 19:04:23 2021 -0600 update changelog commit 058dbea415898134f345653532a3789ee7855ef0 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Mon Dec 13 19:03:46 2021 -0600 Fix #76 commit f50ea44466328d0d632955b8a8725bf780417068 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Mon Dec 13 16:18:51 2021 -0600 update changelog to recent bug fixes commit 3b0c9b5acc8cf3c57a2b0526451edf8250c11b89 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Mon Dec 13 16:18:37 2021 -0600 Fix #91 commit d906ee7d5f18e682ab0b47277474170dd89622de Author: Matthew Chambers <nr0q@gridtracker.org> Date: Mon Dec 13 15:54:51 2021 -0600 Fixes #107 commit 8252ca3f82843758edf5594d804989c3c4a1d6f0 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Mon Dec 13 12:13:23 2021 -0600 fix hunting commit c1f3ae9e1c7605a31635bad8ed5e793f8a5d39d1 Author: Sebastian Delmont <sd@notso.net> Date: Mon Dec 13 13:09:46 2021 -0500 Really fix roster counts commit 0054993dc8ab1406da8b0b4644382f453f9b4584 Author: Sebastian Delmont <sd@notso.net> Date: Mon Dec 13 11:54:19 2021 -0500 Fix roster counts commit 69e1152e7883369b3a818f516f3302681800c241 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Mon Dec 13 10:09:19 2021 -0600 update check for bad dxcc commit a0b2595e9ea38e0a936fb97e691aaa7a7bb2d31e Author: Sebastian Delmont <sd@notso.net> Date: Mon Dec 13 11:04:53 2021 -0500 Fixed spot sorting in refactored code commit 298e8cfbd7b9ee9b4560cb6c66e642e14abcae87 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Sun Dec 12 16:37:52 2021 -0600 update changelog commit eb793d5607721231574a301fe1a4ea577628abf8 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Thu Dec 16 14:47:21 2021 -0600 Update Copyright for 2022 commit 0eb2fac9a0efa2e1b97389a5a09cba4ba83ccfa1 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Thu Dec 16 14:46:52 2021 -0600 change vars to lets per Tag's suggestion commit c78ea075b4f948dc88c91447ff66e471b21cc192 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Sun Dec 12 15:46:17 2021 -0600 RC build commit 0c5cde472bffa1d2e2fe502449164aca153dd159 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Tue Nov 16 04:11:44 2021 +0000 Update .gitlab-ci.yml file commit 492b791bc058555e49a16616ecb32c3cd9dd4ca4 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Tue Nov 16 04:10:31 2021 +0000 Update .gitlab-ci.yml commit e77b9922ed1eea9c0ecd00860a4755b2523dba5b Author: Matthew Chambers <nr0q@gridtracker.org> Date: Tue Nov 16 03:56:53 2021 +0000 Update .gitlab-ci.yml - include security scanning commit 13c1236f7bf50c60756f1688b061f56d14f3afb9 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Thu Dec 16 14:46:20 2021 -0600 Fix acknowledgement icons commit 28772768e8253edfb6b14b3a97908bf8102ad239 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Thu Dec 16 14:45:31 2021 -0600 Add support for Apple Silicon Macs, by hardcoding x64 mode in Phoenix commit 0cec076dbb43d513ec93a63aaf51cf1423a9ebbb Author: Matthew Chambers <nr0q@gridtracker.org> Date: Thu Dec 16 14:45:05 2021 -0600 allow package-lock to be uploaded to repo commit 8b23a4ef25d12c417747b663334b046b723d703a Author: Matthew Chambers <nr0q@gridtracker.org> Date: Sun Dec 12 09:11:24 2021 -0600 beta III of call roster testing commit cc476c84ed84cb7e55e68cf6d482bfdd569f78a0 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Sun Dec 12 09:09:57 2021 -0600 if dxcc = -1, no roster commit ca5a4db664876a48b7d8a5ffaff28d7b067d99d0 Author: nr0q <nr0q@gridtracker.org> Date: Thu Dec 9 20:59:15 2021 -0600 beta version for testing fix to CR commit 5556bbfee08d0d1480d987dc396130cceed6cf20 Author: nr0q <nr0q@gridtracker.org> Date: Thu Dec 9 14:31:02 2021 -0600 a few of SD's roster tweaks commit 2b65f293a788b5c083efd04cfd4c803796df1b03 Author: nr0q <nr0q@gridtracker.org> Date: Thu Dec 9 13:53:20 2021 -0600 could this cure the free text messages breaking the CR? commit 43ea47a09d1058baa6bee5a109d7454cab6218c8 Author: nr0q <nr0q@gridtracker.org> Date: Mon Oct 25 20:43:48 2021 -0500 roll v for beta build commit f1d9db2e6fd14362a4fbf4d742be9a95ee871f0e Author: nr0q <nr0q@gridtracker.org> Date: Mon Oct 25 15:17:33 2021 -0500 better handling of /MM so that it doesn't tear a hole in space-time commit 9fed1b4aca10997081f32e5e1777b52a3072d3d6 Author: nr0q <nr0q@gridtracker.org> Date: Mon Oct 25 14:00:29 2021 -0500 remove the exception handler for callObj.style because need to fix the root cause commit 7a73c988dac34545da26fd4a736a964215ebc872 Author: nr0q <nr0q@gridtracker.org> Date: Mon Oct 25 13:31:15 2021 -0500 handle undefined callObj.style commit 71a2df7e20e8e424aa0ec90ea5d8d9d3492487ff Author: nr0q <nr0q@gridtracker.org> Date: Mon Oct 25 12:42:58 2021 -0500 handle bug line 114 commit 8d5117b76b6844df4eeced0e9f0e01d1e28be2e2 Author: nr0q <nr0q@gridtracker.org> Date: Sun Oct 24 20:36:10 2021 -0500 inc v for beta 2 commit b199c4c4fad3558843d6d21958761ef6b9996fa7 Author: christian <christian_bay@gmx.de> Date: Sun Oct 24 21:23:40 2021 -0400 fixed linting commit 7830e52978f964c5da015b1bb0928f56028c260b Author: nr0q <nr0q@gridtracker.org> Date: Sun Oct 24 20:15:07 2021 -0500 cleaned up linting commit ac51710ff3fb3d296ddd4edeeff4957e677fb6ec Author: Christian Bayer <christian_bay@gmx.de> Date: Sun Oct 24 20:56:21 2021 -0400 fixed reference error on huntedCount commit 66f7ad87b3d91397cab29bc8c0bcca9e137e682e Author: Matthew Chambers <nr0q@gridtracker.org> Date: Thu Dec 16 14:44:39 2021 -0600 fix pack.json and changelog to reflect test V# commit 7a43853533e364cf85e70262b6573afe47542fbc Author: Matthew Chambers <nr0q@gridtracker.org> Date: Thu Dec 16 14:44:14 2021 -0600 add settings.json to gitignore commit 4f2ce9d89099b674fed2c5053cc80f7f9866f325 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Thu Oct 21 00:41:12 2021 +0000 Update package.json commit dbc297a00c6405971219ccba4ad27416ef321282 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Thu Dec 16 14:43:52 2021 -0600 Update package.json commit 6c68a190dbd73b385fbaea9878f513ba0684dc2c Author: Matthew Chambers <nr0q@gridtracker.org> Date: Thu Dec 16 14:43:31 2021 -0600 Update changelog commit 3125b01a17f9fa4c44ec139a4a58fcd8effbf3cd Author: christian <christian@t530> Date: Wed Jul 7 15:08:03 2021 -0400 clear call roster on band change: option added commit 6f4c15c157ff956352bebd9e20a06610ef3d3196 Author: christian <christian@t530> Date: Sun Jul 4 23:07:51 2021 -0400 unknown dxxc filter for roster commit a444d163cae7fd3256992571a2f95b6ac5b921a1 Author: christian <christian@t530> Date: Thu Jul 1 21:39:50 2021 -0400 fixed other sorts commit cb73f21a937c95541ca756ee9988d54f8056fd16 Author: christian <christian@t530> Date: Wed Jun 30 20:37:27 2021 -0400 fixed alert script call commit 2226f707bd41ab4f271ca3b2c8c72f8028735894 Author: christian <christian@t530> Date: Wed Jun 30 07:52:36 2021 -0400 fixed dxcc sorting commit d395b8dd0e0df8fcee8d8da9701428803ef0c5af Author: Matthew Chambers <nr0q@gridtracker.org> Date: Mon Jun 28 23:18:43 2021 -0500 tweak for compact mode commit 86fb507d5a45a3418ae7f98d828e91f74f5af9a9 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Mon Jun 28 23:08:13 2021 -0500 IT WORKS! commit d55ac551d1c1d923b184c121af69d065ccc3eb70 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Mon Jun 28 22:51:52 2021 -0500 fix grid commit 0a85e764931371591899a503609bcafb35babb30 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Mon Jun 28 22:50:49 2021 -0500 bunch of stuff moved to the right places commit 68f81c62003e0826f2766b5065f464d008b95db7 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Mon Jun 28 22:37:49 2021 -0500 fix some small stuff commit db738a4230fd6d6f79c122643ba48d687da783b7 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Mon Jun 28 22:26:40 2021 -0500 lost show bands/modes on render call rows commit 68f7544b1a2e8dfca87bbfc3708aa30aae4b2b31 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Mon Jun 28 22:24:32 2021 -0500 fix line 73 commit 95920077bd64eea14a6dee6f4d112f4f65031450 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Mon Jun 28 22:21:19 2021 -0500 fix line 34 commit 84059439c1108a083f52aed5b2302adca2bb7ead Author: Matthew Chambers <nr0q@gridtracker.org> Date: Mon Jun 28 22:18:32 2021 -0500 fix broken array commit 817e9c5e18868bee13b7dfa029b4bbc008ded300 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Mon Jun 28 22:12:23 2021 -0500 fix sendAlerts undefined object commit 7a0b16d262f77dfbaf56bdeb678637f67f4c45a0 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Mon Jun 28 22:08:06 2021 -0500 more broke fixed commit 6a9896ce4112b3b84fb9f1429285885ed5f8085b Author: Matthew Chambers <nr0q@gridtracker.org> Date: Mon Jun 28 22:00:27 2021 -0500 re-added r_sortFunction that somehow wondered off commit 856a49b720f41c68b91cb38ca135b82cb5a36e09 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Mon Jun 28 21:58:05 2021 -0500 fix some more broken stuff commit 076a7e5eec824af2db9edf8e083807d0dff4fb8d Author: Matthew Chambers <nr0q@gridtracker.org> Date: Mon Jun 28 20:42:07 2021 -0500 fixed a bunch of broken refs to rosterSettings commit 443409b90253c2e45d7d080819286a9b6dd39e88 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Mon Jun 28 19:19:26 2021 -0500 refactor so far commit 1f452992861643d61caf5bcf85739c199a28582b Author: Matthew Chambers <nr0q@gridtracker.org> Date: Mon Jun 28 17:26:44 2021 -0500 big roster refactor - starting Co-authored-by: Sebastian Delmont <sd@notso.net> Matthew Chambers <nr0q@gridtracker.org> commit 4ed8b2c3cbd7e1f850256d4589c7cc6621825eed Author: Matthew Chambers <nr0q@gridtracker.org> Date: Thu Jun 24 18:46:42 2021 -0500 missing comma line 422 commit b089caf50ad28215280b343eca43e816d0e8aaad Author: Matthew Chambers <nr0q@gridtracker.org> Date: Thu Jun 24 18:04:46 2021 -0500 add array with exception test function names, need to create functions yet commit 0b27feb3677218b7a3185ecb8c187384572451eb Author: Matthew Chambers <nr0q@gridtracker.org> Date: Thu Jun 24 11:06:31 2021 -0500 some notes that might aid in refactoring commit 0518d6e40caf7cede1b1a3ecced412d910f3bdeb Author: Matthew Chambers <nr0q@gridtracker.org> Date: Thu Dec 16 14:42:44 2021 -0600 add functions to get acks json off website and overwrite file commit 268459833bdd6bfbb84cd8d05df2a649ab34f1cc Author: Matthew Chambers <nr0q@gridtracker.org> Date: Thu Dec 16 14:41:03 2021 -0600 Initial workup for LoTW throttling & diff fetching commit 9330df84f38f9705d8c6f8ff56bd2479cacd108a Author: nr0q <nr0q@gridtracker.org> Date: Sun Oct 24 12:59:29 2021 -0500 save work so far commit 0761163ddd2b851c617ca6d4cc497f32063c2bf6 Author: nr0q <nr0q@gridtracker.org> Date: Tue Oct 19 21:54:26 2021 -0500 adding i18n to other html files, need to call scripts I think to make them "work" commit 3a00b5b3d0bbbdbb494bd90ba8638f9be0434e6a Author: nr0q <nr0q@gridtracker.org> Date: Tue Oct 19 21:16:02 2021 -0500 i18n chat html and format chat.css commit 220fc036b8b6d200ffbe79a5e293770b9a17d88c Author: nr0q <nr0q@gridtracker.org> Date: Tue Oct 19 20:57:05 2021 -0500 refactor chat css into it's own css file, fix linting in gt.js start adding i18n in chat and bandactivity htmls commit fceaaaa4aa8076ae5dbb544bbe63eef812606503 Author: nr0q <nr0q@gridtracker.org> Date: Tue Oct 19 19:39:21 2021 -0500 update all except hover/title elements with i18n in GridTracker.html commit 215bc2c55c770575a5594a48872b1fb28bb160b1 Author: nr0q <nr0q@gridtracker.org> Date: Tue Oct 19 18:28:48 2021 -0500 mostly finished with gridtracker.html file's i18n commit 9a63953b7d407530cebd9c341ddda3dd08346750 Author: nr0q <nr0q@gridtracker.org> Date: Tue Oct 19 17:58:13 2021 -0500 all through Audio Alerts done commit bbe38ea60d0c7ba8359a4a599ecc2d4e8e8537f7 Author: nr0q <nr0q@gridtracker.org> Date: Tue Oct 19 17:05:47 2021 -0500 check in everything up to mid alert settings commit 99d89f68fca24ded7d4080942aa8303898a3d86c Author: nr0q <nr0q@gridtracker.org> Date: Tue Oct 19 13:00:00 2021 -0500 fix badly broken HTML commit 934f097b7019c9d02e220bd26ab4e2dbf96d252c Author: nr0q <nr0q@gridtracker.org> Date: Tue Oct 19 12:39:04 2021 -0500 update through to Lookup tab commit efd03b85aee05e489a558d3d9769bf524340f769 Author: chrbayer84 <christian_bay@gmx.de> Date: Wed Sep 29 18:04:22 2021 +0000 Update README.md commit ac5299cbb516fefce635a5cd99c72048e4bb678d Author: nr0q <nr0q@gridtracker.org> Date: Wed Sep 29 12:26:50 2021 -0500 add Getting GridTracker to readme commit 8f3a7f81ae27b6d7382ac4b75e89f5582c79c4d2 Author: nr0q <nr0q@gridtracker.org> Date: Tue Sep 28 14:58:22 2021 -0500 copy of NWJS's license commit 645b2222b084b575b8b0b4fb8ea61be8c972b010 Author: T Loomis <tag.loomis@gmail.com> Date: Tue Sep 28 19:09:45 2021 +0000 Removed OAMS messaging pop-up reset commit 17035c84a092be7cabeff4648f9827bc87cf445e Author: Matthew Chambers <nr0q@gridtracker.org> Date: Mon Sep 27 18:04:00 2021 +0000 updated arm to NWJS 0.54.2 with 64 bit capability rolled to v1.21.0928 commit 75421054f92497a4a8f7466eefa4c30684206ac2 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Mon Sep 27 18:00:48 2021 +0000 Treat adif record values as byte length vs string length commit 44d54dd5dfecb3389317f3c6a88793c38c78f7ff Author: Matthew Chambers <NR0Q@gridtracker.org> Date: Thu Sep 16 20:37:04 2021 -0500 updated V-num for beta build commit 50c65ac2c4bdc10da679d495f794e4424981f935 Author: jangliss <jon+gh@netdork.net> Date: Thu Sep 16 20:27:21 2021 -0500 Remove looking at fetched records for last fetch date for LoTW. Use only header commit 421601e36d3bde33c13ae7646f12d4cc1c617eff Author: Matthew Chambers <NR0Q@gridtracker.org> Date: Sun Aug 29 14:39:18 2021 -0500 new donors yay commit 3eb3fa4b21f6ab580ed6f1f8cf348b1e6e1fbe2d Author: Matthew Chambers <NR0Q@gridtracker.org> Date: Sat Aug 28 13:06:48 2021 -0500 acks data update commit cdb524a887cbabfeac288fad2d04f6126665b601 Author: Matthew Chambers <NR0Q@gridtracker.org> Date: Wed Aug 25 14:38:51 2021 -0500 data update commit f91cc0968cdb25164894739693c8bfc15aa7af9d Author: Matthew Chambers <nr0q@gridtracker.org> Date: Mon Jul 5 11:47:16 2021 -0500 acks update 5-july-2021 commit 0ca37bf71eaef8c7423944a478f9b3836d7320c7 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Tue Jun 29 16:41:47 2021 -0500 ack update 29 July 2021 commit 53f6168e2363e26c548d108f735805dcfba8330e Author: Matthew Chambers <nr0q@gridtracker.org> Date: Tue Jun 22 11:49:53 2021 -0500 update acknowledgements.json for 6/22/2021 commit 2b79d75f0989c1fcb35ea90d72266e9238bd285e Author: Matthew Chambers <nr0q@gridtracker.org> Date: Sun Jun 20 13:13:40 2021 -0500 update acknowledgements.json commit c30d004c69824a71d8391129cf38ece5a84dc3a7 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Sat Jun 19 16:19:52 2021 -0500 update acknowledgements.json commit c3bef85eabb56709833ac36fd299cbb90e07aa4f Author: Matthew Chambers <nr0q@gridtracker.org> Date: Sat Jun 19 20:58:02 2021 +0000 Update acks json commit 260e4bc9bc3d15d02b45e5efe0c955c5beaddd27 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Sat Jun 19 12:01:43 2021 -0500 general updates for new general release commit fc742c95a868269ff691b0579aef3c61d6643591 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Sat Jun 19 14:36:13 2021 -0500 fix line 15581 commit 6a04b9cb7bc2c11f458cae3aad8e9569ae7a0a58 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Sat Jun 19 13:44:44 2021 -0500 more better commit 229efb099a1688b00af4469d9d5f3b15f067d84a Author: Matthew Chambers <nr0q@gridtracker.org> Date: Sat Jun 19 13:26:06 2021 -0500 better get acks code (Thanks Tag) commit 7b30fb3093212e034ea57f42090f72ec768f6320 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Sat Jun 19 11:43:05 2021 -0500 fix missing " around http line 11141 commit 24e180ffdcb34c8f26dcf183607c83f704168695 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Sat Jun 19 11:33:04 2021 -0500 call checkForNewAcks when checkForNewVersion commit e9d9f8b24a3bf927040bd7f77227edcaafd631e8 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Sat Jun 19 11:17:29 2021 -0500 add functions to get acks json off website and overwrite file commit 56e4d5816918078152fb74ca8a542179d87b6077 Author: jangliss <jon+gh@netdork.net> Date: Fri Jun 18 20:28:25 2021 -0500 Date.parse behavior to local time instead of UTC commit 74db81d764f165d1c45aab54cd24137062e7a204 Author: jangliss <jon+gh@netdork.net> Date: Thu Jun 17 17:56:37 2021 -0500 More LoTW Fixes to do diff fetching commit cedeef59f878ca42e6190b41d8774ee4ce4eb640 Author: jangliss <jon+gh@netdork.net> Date: Tue Jun 15 21:03:15 2021 -0500 Initial workup for LoTW throttling & diff fetching commit 4576c519c85b0445dad7ba655e2d22b387c9a26f Author: Santiago Mejia <santiago.hi8smx@gmail.com> Date: Wed Jun 16 19:59:05 2021 +0000 Upload New File commit f79010707a3fac0e29c63ef1b741a737bcab522c Author: jangliss <jon+gh@netdork.net> Date: Sat Jun 19 15:44:51 2021 -0500 Fix linting warning commit 9b31e8c1a859fe94109f295f6376d4cffd87a1c2 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Sat Jun 12 22:13:03 2021 -0500 update changelog etc for v1.21.0613 commit 3706978e8b45855f70e4c5723898d0797e7066b5 Author: Matthew Chambers <nr0q@gridtracker.org> Date: Sun Jun 13 03:27:38 2021 +0000 Update acks json commit bbd17c1e32dc2685a57871a446ee8e3d5bc5b3c9 Author: jangliss <jon+gh@netdork.net> Date: Sat Jun 12 22:20:32 2021 -0500 Linting hates me. Remove space on comment. commit 80466b0edab9b138fd78c45ef270ce8a7b644fc1 Author: jangliss <jon+gh@netdork.net> Date: Sat Jun 12 22:08:47 2021 -0500 Fix npm wanting a space after comment syntax commit 5791ba583e4c04de01058807a61af9fb49599114 Author: jangliss <jon+gh@netdork.net> Date: Sat Jun 12 21:55:50 2021 -0500 Temporarily disable LoTW full downloads on startup commit d5478ee4ab7730af7eac637f839a05348558b517 Author: nr0q <nr0q@gridtracker.org> Date: Mon Oct 18 17:17:41 2021 -0500 small fixes in typos in data-i18n tags commit ec541a5a835eec2233d752a88b809ff0dbc9e78b Author: nr0q <nr0q@gridtracker.org> Date: Mon Oct 18 14:08:50 2021 -0500 it all works and created es file for Santiago to start on commit 6c14637639be2e5ff7535c26c5c4f3db07c5add2 Author: nr0q <nr0q@gridtracker.org> Date: Mon Oct 18 13:51:09 2021 -0500 loading the local file helps, added a statup function to do that commit 635431735822ad0385fd713c8def0ffd094fd2ec Author: nr0q <nr0q@gridtracker.org> Date: Wed Oct 13 16:25:07 2021 -0500 add .vscode to gitignore commit 27cc542b65cf486a25ba93fb06901ff7b0a888d8 Author: nr0q <nr0q@gridtracker.org> Date: Wed Oct 13 10:20:55 2021 -0500 finished i18n tags through map vew filters commit ef4683c8ea3235670509a17b4a2b6108c7d27bab Author: nr0q <nr0q@gridtracker.org> Date: Tue Oct 12 20:23:12 2021 -0500 added data-i18n tags up through mapFilter.mode commit 0aa862afbe239cd062902804de9ccad95e354839 Author: nr0q <nr0q@gridtracker.org> Date: Tue Oct 12 16:49:03 2021 -0500 more data-i18n tags commit bbd39a640fd5b31366b141bb687fad04b27c64fd Author: nr0q <nr0q@gridtracker.org> Date: Tue Oct 12 16:07:39 2021 -0500 adding data-i18n fields to tags commit 603c8c039d6ba6113cd2de62c994d8c5bba42e08 Author: nr0q <nr0q@gridtracker.org> Date: Mon Oct 11 17:37:11 2021 -0500 all HTML files done commit 7e97e9d2af6db22b95205ace9a00887b493a2be8 Author: nr0q <nr0q@gridtracker.org> Date: Mon Oct 11 16:08:52 2021 -0500 i18n up to the about tab commit 0c65ab8f3ae0b54f80be894067547bbc5674f5d5 Author: nr0q <nr0q@gridtracker.org> Date: Mon Oct 11 13:51:09 2021 -0500 i18n en strings through audio settings commit 39152109a5156f08f4984364a0f7488cd617dd18 Author: nr0q <nr0q@gridtracker.org> Date: Mon Oct 11 13:18:35 2021 -0500 cleaner keys commit 59a93e3f30cabdc7529aef005b085c3a9e582ecf Author: nr0q <nr0q@gridtracker.org> Date: Mon Oct 11 11:46:28 2021 -0500 i18n through control panel commit 17be5a28434dda24fff0fb7e198cc89ac0bbfb5c Author: nr0q <nr0q@gridtracker.org> Date: Mon Oct 11 10:43:25 2021 -0500 check in what I have so far commit aa65ad9936c7c37ada7b5d8b7263adddf60dec8f Author: christian <christian@t530> Date: Sun Jun 13 14:21:43 2021 -0400 added jquery.i18n commit 9d31645823b45417f393d68951a18b4d05bb8e93 Author: christian <christian@t530> Date: Wed Jun 9 21:29:23 2021 -0400 i18n hook for main gt.html commit 7e9e5b9cfe1bdbbee391565f1fda282a27f0bb55 Author: christian <christian@t530> Date: Mon May 24 21:08:15 2021 -0400 WIP banana i18n
2022-09-06 01:57:15 +00:00
function addControls()
{
WANTED_LABELS = {
cont: $.i18n("rosterColumns.Wanted.cont"),
cqz: $.i18n("rosterColumns.Wanted.cqz"),
ituz: $.i18n("rosterColumns.Wanted.ituz"),
dxcc: $.i18n("rosterColumns.Wanted.dxcc"),
dxccMarathon: $.i18n("rosterColumns.Wanted.dxccMarathon"),
cqzMarathon: $.i18n("rosterColumns.Wanted.cqzMarathon"),
state: $.i18n("rosterColumns.Wanted.state"),
grid: $.i18n("rosterColumns.Wanted.grid"),
cnty: $.i18n("rosterColumns.Wanted.cnty"),
wpx: $.i18n("rosterColumns.Wanted.wpx"),
call: $.i18n("rosterColumns.Wanted.call"),
2023-12-02 01:09:18 +00:00
watcher: $.i18n("roster.watcher.label"),
oams: $.i18n("rosterColumns.Wanted.oams"),
pota: $.i18n("rosterColumns.Wanted.pota")
}
window.opener.setRosterSpot(CR.rosterSettings.columns.Spot);
for (const key in CR.rosterSettings.wanted)
2020-12-14 02:10:27 +00:00
{
if (document.getElementById(key))
{ document.getElementById(key).checked = CR.rosterSettings.wanted[key]; }
}
CR.menu = new nw.Menu();
CR.compactMenu = new nw.Menu();
let showControlsText = $.i18n("roster.menu.ShowControls");
let hideControlsText = $.i18n("roster.menu.HideControls");
let item = new nw.MenuItem({
type: "normal",
label: CR.rosterSettings.controls ? hideControlsText : showControlsText,
2020-12-14 02:10:27 +00:00
click: function ()
{
2023-12-02 01:09:18 +00:00
toggleShowControls();
2020-12-14 02:10:27 +00:00
}
});
CR.menu.append(item);
item = new nw.MenuItem({
type: "normal",
label: CR.rosterSettings.controls ? hideControlsText : showControlsText,
2020-12-14 02:10:27 +00:00
click: function ()
{
2023-12-02 01:09:18 +00:00
toggleShowControls();
2020-12-14 02:10:27 +00:00
}
});
CR.compactMenu.append(item);
2023-12-02 01:09:18 +00:00
CR.callMenu = new nw.Menu();
item = new nw.MenuItem({
type: "normal",
2023-12-02 01:09:18 +00:00
label: $.i18n("roster.menu.Lookup"),
2020-12-14 02:10:27 +00:00
click: function ()
{
2023-12-02 01:09:18 +00:00
callLookup(CR.targetHash, "");
2020-12-14 02:10:27 +00:00
}
});
2023-12-02 01:09:18 +00:00
CR.callMenu.append(item);
item = new nw.MenuItem({
type: "normal",
2023-12-02 01:09:18 +00:00
label: $.i18n("roster.menu.GenMesg"),
2020-12-14 02:10:27 +00:00
click: function ()
{
2023-12-02 01:09:18 +00:00
callGenMessage(CR.targetHash, "");
2020-12-14 02:10:27 +00:00
}
});
CR.callMenu.append(item);
item = new nw.MenuItem({
type: "normal",
2023-12-02 01:09:18 +00:00
label: $.i18n("roster.add.watcher.label"),
2020-12-14 02:10:27 +00:00
click: function ()
{
2023-12-02 01:09:18 +00:00
addWatcher(CR.callRoster[CR.targetHash].DEcall, "Callsign");
2020-12-14 02:10:27 +00:00
}
});
2023-12-02 01:09:18 +00:00
CR.callMenu.append(item);
item = new nw.MenuItem({ type: "separator" });
CR.callMenu.append(item);
if (window.opener.GT.pstrotatorSettings.enable)
2022-11-09 19:06:40 +00:00
{
item = new nw.MenuItem({
type: "normal",
label: $.i18n("roster.menu.AimRotator"),
click: function ()
{
let target = CR.callRoster[CR.targetHash]
2022-11-09 19:06:40 +00:00
window.opener.aimRotator(target, "");
}
});
CR.callMenu.append(item);
2022-11-09 19:06:40 +00:00
item = new nw.MenuItem({ type: "separator" });
CR.callMenu.append(item);
2022-11-09 19:06:40 +00:00
}
item = new nw.MenuItem({
type: "normal",
label: $.i18n("roster.menu.IgnoreCall"),
2020-12-14 02:10:27 +00:00
click: function ()
{
2023-12-02 01:09:18 +00:00
ignoreCallsign(CR.callRoster[CR.targetHash].DEcall);
}
});
CR.callMenu.append(item);
item = new nw.MenuItem({
type: "normal",
label: $.i18n("roster.menu.EditIgnores"),
enabled: true,
click: function ()
{
openIgnores();
2020-12-14 02:10:27 +00:00
}
});
CR.callMenu.append(item);
CR.callingMenu = new nw.Menu();
item = new nw.MenuItem({
type: "normal",
label: $.i18n("roster.menu.Lookup"),
2020-12-14 02:10:27 +00:00
click: function ()
{
callingLookup(CR.targetHash, "");
2020-12-14 02:10:27 +00:00
}
});
CR.callingMenu.append(item);
item = new nw.MenuItem({
type: "normal",
label: $.i18n("roster.menu.GenMesg"),
2020-12-14 02:10:27 +00:00
click: function ()
{
callingGenMessage(CR.targetHash, "");
2020-12-14 02:10:27 +00:00
}
});
CR.callingMenu.append(item);
2023-12-02 01:09:18 +00:00
item = new nw.MenuItem({
type: "normal",
label: $.i18n("roster.add.watcher.label"),
click: function ()
{
addWatcher(CR.callRoster[CR.targetHash].DXcall, "Callsign");
}
});
CR.callingMenu.append(item);
item = new nw.MenuItem({ type: "separator" });
CR.menu.append(item);
2023-12-02 01:09:18 +00:00
item = new nw.MenuItem({ type: "separator" });
CR.callingMenu.append(item);
if (window.opener.GT.pstrotatorSettings.enable)
2022-11-09 19:06:40 +00:00
{
item = new nw.MenuItem({
type: "normal",
label: $.i18n("roster.menu.AimRotator"),
click: function ()
{
let target = CR.callRoster[CR.targetHash]
2022-11-09 19:06:40 +00:00
window.opener.aimRotator(target, "");
}
});
CR.callingMenu.append(item);
2022-11-09 19:06:40 +00:00
}
item = new nw.MenuItem({
type: "checkbox",
label: $.i18n("roster.menu.Realtime"),
checked: CR.rosterSettings.realtime,
2020-12-14 02:10:27 +00:00
click: function ()
{
CR.rosterSettings.realtime = this.checked;
writeRosterSettings();
2023-02-17 01:50:47 +00:00
viewRoster();
2020-12-14 02:10:27 +00:00
}
});
CR.menu.append(item);
2023-12-02 01:09:18 +00:00
CR.columnMenu = new nw.Menu();
2023-12-02 01:09:18 +00:00
CR.menuItemForMoveLeftColumn = new nw.MenuItem({
2022-01-04 19:30:09 +00:00
type: "normal",
label: $.i18n("roster.menu.MoveLeft"),
2022-01-04 19:30:09 +00:00
click: function ()
{
moveColumnLeft(CR.currentColumnName);
2022-01-04 19:30:09 +00:00
}
})
2023-12-02 01:09:18 +00:00
CR.columnMenu.append(CR.menuItemForMoveLeftColumn)
CR.menuItemForMoveRightColumn = new nw.MenuItem({
type: "normal",
label: $.i18n("roster.menu.MoveRight"),
click: function ()
{
moveColumnRight(CR.currentColumnName);
}
})
CR.columnMenu.append(CR.menuItemForMoveRightColumn)
2022-01-04 19:30:09 +00:00
item = new nw.MenuItem({ type: "separator" });
2023-12-02 01:09:18 +00:00
CR.columnMenu.append(item);
2022-01-04 19:30:09 +00:00
for (const columnIndex in CR.rosterSettings.columnOrder)
2020-12-14 02:10:27 +00:00
{
let key = CR.rosterSettings.columnOrder[columnIndex];
2022-09-21 22:46:27 +00:00
if (key != "Callsign")
{
let itemx = new nw.MenuItem({
type: "checkbox",
label: key,
checked: CR.rosterSettings.columns[key],
2022-09-21 22:46:27 +00:00
click: function ()
{
2023-12-02 01:09:18 +00:00
toggleColumn(this);
2022-09-21 22:46:27 +00:00
}
});
2022-03-05 03:25:45 +00:00
2023-12-02 01:09:18 +00:00
CR.columnMenu.append(itemx);
CR.columnMembers[key] = itemx;
2022-09-21 22:46:27 +00:00
}
}
2023-12-02 01:09:18 +00:00
CR.MsgMenu = new nw.Menu();
2023-12-02 01:09:18 +00:00
item = new nw.MenuItem({
type: "normal",
2023-12-02 01:09:18 +00:00
label: $.i18n("roster.add.watcher.label"),
2020-12-14 02:10:27 +00:00
click: function ()
{
2023-12-02 01:09:18 +00:00
addWatcher(CR.callRoster[CR.targetHash].callObj.msg, "Message");
2020-12-14 02:10:27 +00:00
}
});
2023-12-02 01:09:18 +00:00
CR.MsgMenu.append(item);
CR.CQMenu = new nw.Menu();
item = new nw.MenuItem({
type: "normal",
2023-12-02 01:09:18 +00:00
label: $.i18n("roster.add.watcher.label"),
2020-12-14 02:10:27 +00:00
click: function ()
{
2023-12-02 01:09:18 +00:00
addWatcher(CR.callRoster[CR.targetCQ].DXcall, "Calling");
2020-12-14 02:10:27 +00:00
}
});
CR.CQMenu.append(item);
item = new nw.MenuItem({
type: "normal",
2023-12-02 01:09:18 +00:00
label: "Ignore CQ from DXCC",
2020-12-14 02:10:27 +00:00
click: function ()
{
2023-12-02 01:09:18 +00:00
ignoreCQ(CR.callRoster[CR.targetCQ].DXcall, CR.callRoster[CR.targetCQ].callObj.dxcc);
2020-12-14 02:10:27 +00:00
}
});
CR.CQMenu.append(item);
item = new nw.MenuItem({
type: "normal",
2023-12-02 01:09:18 +00:00
label: "Ignore CQ from All",
2020-12-14 02:10:27 +00:00
click: function ()
{
2023-12-02 01:09:18 +00:00
ignoreCQ(CR.callRoster[CR.targetCQ].DXcall, -1);
2020-12-14 02:10:27 +00:00
}
});
2023-12-02 01:09:18 +00:00
CR.CQMenu.append(item);
CR.CQzMenu = new nw.Menu();
2021-12-14 01:03:46 +00:00
item = new nw.MenuItem({
type: "normal",
2023-12-02 01:09:18 +00:00
label: $.i18n("roster.menu.IgnoreCQZone"),
2021-12-14 01:03:46 +00:00
click: function ()
{
2023-12-02 01:09:18 +00:00
ignoreCQz(CR.callRoster[CR.targetCQz].callObj.cqz);
2021-12-14 01:03:46 +00:00
}
});
CR.CQzMenu.append(item);
2021-12-14 01:03:46 +00:00
item = new nw.MenuItem({
type: "normal",
2023-12-02 01:09:18 +00:00
label: $.i18n("roster.menu.EditIgnores"),
2021-12-14 01:03:46 +00:00
enabled: true,
click: function ()
{
2023-12-02 01:09:18 +00:00
openIgnores();
2021-12-14 01:03:46 +00:00
}
});
CR.CQzMenu.append(item);
2021-12-14 01:03:46 +00:00
CR.ITUzMenu = new nw.Menu();
2021-12-14 01:03:46 +00:00
item = new nw.MenuItem({
type: "normal",
2023-12-02 01:09:18 +00:00
label: $.i18n("roster.menu.IgnoreITUZone"),
2021-12-14 01:03:46 +00:00
click: function ()
{
2023-12-02 01:09:18 +00:00
ignoreITUz(CR.callRoster[CR.targetITUz].callObj.itu);
2021-12-14 01:03:46 +00:00
}
});
CR.ITUzMenu.append(item);
2021-12-14 01:03:46 +00:00
item = new nw.MenuItem({
type: "normal",
2023-12-02 01:09:18 +00:00
label: $.i18n("roster.menu.EditIgnores"),
2021-12-14 01:03:46 +00:00
enabled: true,
click: function ()
{
2023-12-02 01:09:18 +00:00
openIgnores();
2021-12-14 01:03:46 +00:00
}
});
CR.ITUzMenu.append(item);
2021-12-14 01:03:46 +00:00
CR.dxccMenu = new nw.Menu();
item = new nw.MenuItem({
type: "normal",
2023-12-02 01:09:18 +00:00
label: $.i18n("roster.menu.IgnoreDXCC"),
2020-12-14 02:10:27 +00:00
click: function ()
{
2023-12-02 01:09:18 +00:00
ignoreDxcc(CR.targetDxcc);
2020-12-14 02:10:27 +00:00
}
});
CR.dxccMenu.append(item);
item = new nw.MenuItem({
type: "normal",
2023-12-02 01:09:18 +00:00
label: $.i18n("roster.menu.EditIgnores"),
enabled: true,
2020-12-14 02:10:27 +00:00
click: function ()
{
2023-12-02 01:09:18 +00:00
openIgnores();
2020-12-14 02:10:27 +00:00
}
});
CR.dxccMenu.append(item);
CR.GridMenu = new nw.Menu();
item = new nw.MenuItem({
type: "normal",
label: $.i18n("roster.add.watcher.label"),
click: function ()
{
addWatcher(CR.callRoster[CR.targetHash].callObj.grid, "Grid");
}
});
CR.GridMenu.append(item);
item = new nw.MenuItem({
type: "normal",
label: "Ignore Grid",
click: function ()
{
ignoreGrid(CR.callRoster[CR.targetHash].callObj.grid);
}
});
CR.GridMenu.append(item);
item = new nw.MenuItem({
type: "normal",
label: $.i18n("roster.menu.EditIgnores"),
enabled: true,
click: function ()
{
openIgnores();
}
});
CR.GridMenu.append(item);
callsignNeed.value = CR.rosterSettings.callsign;
huntMode.value = CR.rosterSettings.hunting;
huntNeed.value = CR.rosterSettings.huntNeed;
wantGrid.checked = CR.rosterSettings.requireGrid;
wantMaxDT.checked = CR.rosterSettings.wantMaxDT;
wantMinDB.checked = CR.rosterSettings.wantMinDB;
wantMinFreq.checked = CR.rosterSettings.wantMinFreq;
wantMaxFreq.checked = CR.rosterSettings.wantMaxFreq;
wantRRCQ.checked = CR.rosterSettings.wantRRCQ;
maxDTView.innerHTML = maxDT.value = CR.rosterSettings.maxDT;
minDbView.innerHTML = minDb.value = CR.rosterSettings.minDb;
minFreqView.innerHTML = minFreq.value = CR.rosterSettings.minFreq;
maxFreqView.innerHTML = maxFreq.value = CR.rosterSettings.maxFreq;
maxLoTW.value = CR.rosterSettings.maxLoTW;
maxLoTWView.innerHTML = maxLoTW.value < 27 ? toYM(Number(maxLoTW.value)) : "<b>&infin;</b>";
cqOnly.checked = CR.rosterSettings.cqOnly;
noMyDxcc.checked = CR.rosterSettings.noMyDxcc;
onlyMyDxcc.checked = CR.rosterSettings.onlyMyDxcc;
usesLoTW.checked = CR.rosterSettings.usesLoTW;
useseQSL.checked = CR.rosterSettings.useseQSL;
onlySpot.checked = CR.rosterSettings.onlySpot;
usesOQRS.checked = CR.rosterSettings.usesOQRS;
2023-12-02 01:09:18 +00:00
referenceNeed.value = CR.rosterSettings.reference;
allOnlyNew.checked = CR.rosterSettings.allOnlyNew;
clearRosterOnBandChange.checked = CR.rosterSettings.clearRosterOnBandChange;
rosterAlwaysOnTop.checked = CR.rosterSettings.rosterAlwaysOnTop;
animateCQGT.checked = CR.rosterSettings.animateCQGT;
rosterDelayOnFocus.checked = CR.rosterSettings.rosterDelayOnFocus;
displayDelayOnFocus();
rosterDelayTime.value = CR.rosterSettings.rosterDelayTime;
rosterDelayTimeTd.innerHTML = rosterDelayTime.value + "ms";
setRosterTimeView();
setCompactView();
initSelectors();
setVisual();
document.addEventListener("keydown", onMyKeyDown, false);
CR.timerInterval = nodeTimers.setInterval(realtimeRoster, 1000);
updateInstances();
2020-08-19 17:01:51 +00:00
}
2023-12-02 01:09:18 +00:00
function setCompactView()
{
compactModeDiv.innerHTML = CR.rosterSettings.compact ? $.i18n("roster.menu.RosterMode") : $.i18n("roster.menu.CompactMode");
compactEnityDiv.style.display = CR.rosterSettings.compact ? "" : "none";
columnsBoxDiv.style.display = columnsbox.style.display = CR.rosterSettings.compact ? "none" : "";
}
function compactModeChanged()
{
CR.rosterSettings.compact = !CR.rosterSettings.compact;
writeRosterSettings();
setCompactView();
viewRoster();
}
2023-01-21 21:49:07 +00:00
function compactEntityChanged()
{
CR.rosterSettings.compactEntity = compactEntitySelect.value;
2023-12-02 01:09:18 +00:00
writeRosterSettings();
2023-01-21 21:49:07 +00:00
viewRoster();
}
2023-01-17 12:42:36 +00:00
function clearRosterOnBandChangeValueChanged(what)
{
CR.rosterSettings.clearRosterOnBandChange = clearRosterOnBandChange.checked;
2023-01-17 12:42:36 +00:00
writeRosterSettings();
}
function rosterDelayOnFocusValueChanged(what)
{
CR.rosterSettings.rosterDelayOnFocus = rosterDelayOnFocus.checked;
2023-01-19 21:03:43 +00:00
displayDelayOnFocus();
2023-01-17 12:42:36 +00:00
writeRosterSettings();
}
2023-01-19 21:03:43 +00:00
function displayDelayOnFocus()
{
if (CR.rosterSettings.rosterDelayOnFocus)
2023-01-19 21:03:43 +00:00
{
rosterDelayTimeTd.style.display = "block";
rosterDelayTime.style.display = "block";
}
else
{
rosterDelayTimeTd.style.display = "none";
rosterDelayTime.style.display = "none";
}
}
2023-01-17 12:42:36 +00:00
function changeRosterDelayTime()
{
CR.rosterSettings.rosterDelayTime = rosterDelayTime.value;
2023-01-17 12:42:36 +00:00
rosterDelayTimeTd.innerHTML = rosterDelayTime.value + "ms";
writeRosterSettings();
}
function changeRosterTime()
{
CR.rosterSettings.rosterTime = rosterTime.value;
2023-01-17 12:42:36 +00:00
setRosterTimeView();
writeRosterSettings();
viewRoster();
}
2023-12-02 01:09:18 +00:00
function changeAnimateCQGT(butt)
{
CR.rosterSettings.animateCQGT = butt.checked;
viewRoster();
}
2023-01-17 12:42:36 +00:00
function changeRosterTop(butt)
{
CR.rosterSettings.rosterAlwaysOnTop = butt.checked;
2023-01-17 12:42:36 +00:00
setRosterTop();
}
function setRosterTop()
{
nw.Window.get().setAlwaysOnTop(CR.rosterSettings.rosterAlwaysOnTop);
2023-01-17 12:42:36 +00:00
}
function setRosterTimeView()
{
rosterTime.value = CR.rosterSettings.rosterTime;
rosterTimeTd.innerHTML = toDHMS(Number(rosterTime.value));
2023-01-17 12:42:36 +00:00
}
2020-12-14 02:10:27 +00:00
function handleContextMenu(ev)
{
let mouseX = Math.round(ev.x);
let mouseY = Math.round(ev.y);
2020-12-14 02:10:27 +00:00
if (typeof ev.target != "undefined")
{
2023-12-02 01:09:18 +00:00
if (ev.target.className == "inputTextValue") return true;
if (CR.developerMode)
{
if ((ev.target.id == "ShowMoreControlsLink") ||
(ev.target.id == "ShowFewerControlsLink") ||
(ev.target.id == "txrxdec"))
{
// Allow event to bubble up so that NWJS will show the developer menu
return true;
}
}
2022-09-26 18:45:04 +00:00
let name = "";
2023-12-02 01:09:18 +00:00
let target = ev.target;
let parent = ev.target.parentNode;
if (target.tagName == "SPAN")
2022-09-26 18:45:04 +00:00
{
2023-12-02 01:09:18 +00:00
target = ev.target.parentNode;
parent = target.parentNode;
}
if (target.tagName == "TD" || (CR.rosterSettings.compact && target.tagName == "DIV"))
{
name = target.getAttribute("name");
}
if (CR.rosterSettings.compact && name != "Callsign")
{
parent = parent.parentNode;
2022-09-26 18:45:04 +00:00
}
2020-12-14 02:10:27 +00:00
if (name == "Callsign")
{
2023-12-02 01:09:18 +00:00
CR.targetHash = parent.id;
CR.callMenu.popup(mouseX, mouseY);
2020-12-14 02:10:27 +00:00
}
else if (name == "Calling")
{
2023-12-02 01:09:18 +00:00
CR.targetHash = parent.id;
CR.callingMenu.popup(mouseX, mouseY);
2020-12-14 02:10:27 +00:00
}
2023-12-02 01:09:18 +00:00
else if (name == "Msg")
{
CR.targetHash = parent.id;
CR.MsgMenu.popup(mouseX, mouseY);
}
else if (name == "Grid")
{
if (CR.callRoster[parent.id].callObj.grid.length == 4)
{
CR.targetHash = parent.id;
CR.GridMenu.popup(mouseX, mouseY);
}
}
2020-12-14 02:10:27 +00:00
else if (name == "CQ")
{
2023-12-02 01:09:18 +00:00
if (CR.callRoster[parent.id].DXcall != "CQ")
2020-12-14 02:10:27 +00:00
{
2023-12-02 01:09:18 +00:00
CR.targetCQ = parent.id;
CR.CQMenu.popup(mouseX, mouseY);
}
2020-12-14 02:10:27 +00:00
}
2021-12-14 01:03:46 +00:00
else if (name == "CQz")
{
2023-12-02 01:09:18 +00:00
CR.targetCQz = parent.id;
CR.CQzMenu.popup(mouseX, mouseY);
2021-12-14 01:03:46 +00:00
}
else if (name == "ITUz")
{
2023-12-02 01:09:18 +00:00
CR.targetITUz = parent.id;
CR.ITUzMenu.popup(mouseX, mouseY);
2021-12-14 01:03:46 +00:00
}
2022-10-07 23:51:33 +00:00
else if (name && name.startsWith("DXCC"))
2020-12-14 02:10:27 +00:00
{
let dxcca = name.split("(");
let dxcc = parseInt(dxcca[1]);
CR.targetDxcc = dxcc;
CR.dxccMenu.popup(mouseX, mouseY);
2020-12-14 02:10:27 +00:00
}
else
{
if (CR.rosterSettings.compact)
2020-12-14 02:10:27 +00:00
{
CR.compactMenu.popup(mouseX, mouseY);
2020-12-14 02:10:27 +00:00
}
else
{
2023-12-02 01:09:18 +00:00
if (target.tagName == "TH" && target.getAttribute("name"))
2022-01-04 19:30:09 +00:00
{
2023-12-02 01:09:18 +00:00
CR.menuItemForMoveLeftColumn.enabled = true;
CR.menuItemForMoveRightColumn.enabled = true;
CR.currentColumnName = target.getAttribute("name");
const columns = rosterColumnList(CR.rosterSettings.columns, { Callsign: true });
const pos = columns.indexOf(CR.currentColumnName);
if (pos == 0)
{
CR.menuItemForMoveLeftColumn.enabled = false;
CR.menuItemForMoveRightColumn.enabled = false;
}
else if (pos == 1)
{
CR.menuItemForMoveLeftColumn.enabled = false;
}
if (pos + 1 == Object.keys(columns).length)
{
CR.menuItemForMoveRightColumn.enabled = false;
}
CR.columnMenu.popup(mouseX, mouseY);
2022-01-04 19:30:09 +00:00
}
else
{
2023-12-02 01:09:18 +00:00
CR.menu.popup(mouseX, mouseY);
2022-01-04 19:30:09 +00:00
}
}
}
2020-12-14 02:10:27 +00:00
}
else
{
if (CR.rosterSettings.compact == false)
2020-12-14 02:10:27 +00:00
{
CR.menu.popup(mouseX, mouseY);
2020-12-14 02:10:27 +00:00
}
else
{
CR.compactMenu.popup(mouseX, mouseY);
}
}
ev.preventDefault();
return false;
}
2020-12-14 02:10:27 +00:00
function getTypeFromMode(mode)
{
if (mode in CR.modes)
2020-12-14 02:10:27 +00:00
{
if (CR.modes[mode] == true) return "Digital";
else if (CR.modes_phone[mode] == true) return "Phone";
}
return "";
}
2020-12-14 02:10:27 +00:00
function testAward(awardName, obj, baseHash)
{
if (
CR.awardTracker[awardName].test.dxcc &&
CR.awardTracker[awardName].rule.dxcc.indexOf(obj.dxcc) == -1
)
2020-12-14 02:10:27 +00:00
{ return false; }
if (
CR.awardTracker[awardName].test.mode &&
CR.awardTracker[awardName].rule.mode.indexOf(obj.mode) == -1
)
2020-12-14 02:10:27 +00:00
{ return false; }
if (
CR.awardTracker[awardName].test.band &&
CR.awardTracker[awardName].rule.band.indexOf(obj.band) == -1
)
2020-12-14 02:10:27 +00:00
{ return false; }
if (
CR.awardTracker[awardName].test.DEcall &&
CR.awardTracker[awardName].rule.call.indexOf(obj.DEcall) == -1
)
2020-12-14 02:10:27 +00:00
{ return false; }
if (
CR.awardTracker[awardName].test.cont &&
CR.awardTracker[awardName].rule.cont.indexOf(obj.cont) == -1
)
2020-12-14 02:10:27 +00:00
{ return false; }
2020-09-28 19:28:09 +00:00
if (
CR.awardTracker[awardName].test.prop &&
CR.awardTracker[awardName].rule.propMode != obj.propMode
)
2020-12-14 02:10:27 +00:00
{ return false; }
if (
CR.awardTracker[awardName].test.sat &&
CR.awardTracker[awardName].rule.satName.indexOf(obj.satName) == -1
)
2020-12-14 02:10:27 +00:00
{ return false; }
return CR.awardTypes[CR.awardTracker[awardName].rule.type].test(
CR.awardTracker[awardName],
obj,
baseHash
);
2020-08-19 17:01:51 +00:00
}
2020-12-14 02:10:27 +00:00
function processAward(awardName)
{
let award =
CR.awards[CR.awardTracker[awardName].sponsor].awards[
CR.awardTracker[awardName].name
];
CR.awardTracker[awardName].rule = award.rule;
let test = (CR.awardTracker[awardName].test = {});
let mode = award.rule.mode.slice();
let Index = mode.indexOf("Mixed");
if (Index > -1) mode.splice(Index, 1);
Index = mode.indexOf("Digital");
if (Index > -1) mode.splice(Index, 1);
Index = mode.indexOf("Phone");
if (Index > -1) mode.splice(Index, 1);
test.mode = mode.length > 0;
test.confirmed = "qsl_req" in CR.awards[CR.awardTracker[awardName].sponsor].awards[CR.awardTracker[awardName].name].rule ? CR.awards[CR.awardTracker[awardName].sponsor].awards[CR.awardTracker[awardName].name].rule.qsl_req == "confirmed" : CR.awards[CR.awardTracker[awardName].sponsor].qsl_req == "confirmed";
test.look = "confirmed";
test.qsl_req = "qsl_req" in CR.awards[CR.awardTracker[awardName].sponsor].awards[CR.awardTracker[awardName].name].rule ? CR.awards[CR.awardTracker[awardName].sponsor].awards[CR.awardTracker[awardName].name].rule.qsl_req : CR.awards[CR.awardTracker[awardName].sponsor].qsl_req;
test.DEcall = "call" in award.rule;
test.band = "band" in award.rule && award.rule.band.indexOf("Mixed") == -1;
test.dxcc = "dxcc" in award.rule;
test.cont = "cont" in award.rule;
test.prop = "propMode" in award.rule;
test.sat = "satName" in award.rule;
CR.awardTracker[awardName].stat = {};
for (const i in window.opener.GT.QSOhash)
2020-12-14 02:10:27 +00:00
{
let obj = window.opener.GT.QSOhash[i];
if (test.confirmed && !obj.confirmed) continue;
if (obj.dxcc < 1) continue;
if (test.dxcc && award.rule.dxcc.indexOf(obj.dxcc) == -1) continue;
if (test.mode && award.rule.mode.indexOf(obj.mode) == -1) continue;
if (test.band && award.rule.band.indexOf(obj.band) == -1) continue;
if (test.DEcall && award.rule.call.indexOf(obj.DEcall) == -1) continue;
if (test.cont && award.rule.cont.indexOf(obj.cont) == -1) continue;
if (test.prop && award.rule.propMode != obj.propMode) continue;
if (test.sat && award.rule.satName.indexOf(obj.satName) == -1) continue;
CR.awardTypes[award.rule.type].score(CR.awardTracker[awardName], obj);
}
CR.awardTracker[awardName].comp = CR.awardTypes[award.rule.type].compile(
CR.awardTracker[awardName],
CR.awardTracker[awardName].stat
);
CR.awardTracker[awardName].stat = {};
}
2020-12-14 02:10:27 +00:00
function newAwardCountObject()
{
let statCountObject = {};
statCountObject.bands = {};
2020-12-14 02:10:27 +00:00
statCountObject.bands.Mixed = {};
statCountObject.bands.Digital = {};
statCountObject.bands.Phone = {};
statCountObject.modes = {};
2020-12-14 02:10:27 +00:00
statCountObject.modes.Mixed = {};
statCountObject.modes.Digital = {};
statCountObject.modes.Phone = {};
statCountObject.unique = null;
return statCountObject;
}
2020-12-14 02:10:27 +00:00
function workAwardObject(obj, band, mode, isDigital, isPhone, unique = null)
{
obj.bands.Mixed[band] = ~~obj.bands.Mixed[band] + 1;
if (!(mode in obj.bands)) obj.bands[mode] = {};
obj.bands[mode][band] = ~~obj.bands[mode][band] + 1;
2020-12-14 02:10:27 +00:00
obj.modes.Mixed[mode] = ~~obj.modes.Mixed[mode] + 1;
2020-12-14 02:10:27 +00:00
if (isDigital)
{
obj.bands.Digital[band] = ~~obj.bands.Digital[band] + 1;
obj.modes.Digital[mode] = ~~obj.modes.Digital[mode] + 1;
}
2020-12-14 02:10:27 +00:00
if (isPhone)
{
obj.bands.Phone[band] = ~~obj.bands.Phone[band] + 1;
obj.modes.Phone[mode] = ~~obj.modes.Phone[mode] + 1;
}
2020-12-14 02:10:27 +00:00
if (unique)
{
if (obj.unique == null) obj.unique = {};
if (!(unique in obj.unique)) obj.unique[unique] = newAwardCountObject();
workAwardObject(obj.unique[unique], band, mode, isDigital, isPhone);
}
return true;
}
2020-12-14 02:10:27 +00:00
function buildAwardTypeHandlers()
{
CR.awardTypes = {
IOTA: { name: "Islands On The Air" },
call: { name: "Callsign" },
callarea: { name: "Call Area" },
calls2dxcc: { name: "Stations per DXCC" },
cnty: { name: "County" },
cont: { name: "Continents" },
cont5: { name: "5 Continents" },
cont52band: { name: "5 Continents per Band" },
cqz: { name: "CQ Zone" },
dxcc: { name: "DXCC" },
grids: { name: "Grids" },
numsfx: { name: "Call Area + Suffix" },
px: { name: "Prefix" },
pxa: { name: "Prefixes" },
pxplus: { name: "Special Calls" },
sfx: { name: "Suffix" },
states: { name: "States" },
cont2band: { name: "Continents per Band" },
calls2band: { name: "Stations per Band" },
dxcc2band: { name: "DXCC per Band" },
2020-12-14 02:10:27 +00:00
states2band: { name: "States per Band" }
};
CR.awardTypes.IOTA.score = scoreAIOTA;
CR.awardTypes.call.score = scoreAcall;
CR.awardTypes.callarea.score = scoreAcallarea;
CR.awardTypes.calls2dxcc.score = scoreAcalls2dxcc;
CR.awardTypes.cnty.score = scoreAcnty;
CR.awardTypes.cont.score = scoreAcont;
CR.awardTypes.cont5.score = scoreAcont5;
CR.awardTypes.cont52band.score = scoreAcont52band;
CR.awardTypes.cqz.score = scoreAcqz;
CR.awardTypes.dxcc.score = scoreAdxcc;
CR.awardTypes.grids.score = scoreAgrids;
CR.awardTypes.numsfx.score = scoreAnumsfx;
CR.awardTypes.px.score = scoreApx;
CR.awardTypes.pxa.score = scoreApxa;
CR.awardTypes.pxplus.score = scoreApxplus;
CR.awardTypes.sfx.score = scoreAsfx;
CR.awardTypes.states.score = scoreAstates;
CR.awardTypes.cont2band.score = scoreAcont2band;
CR.awardTypes.calls2band.score = scoreAcalls2band;
CR.awardTypes.dxcc2band.score = scoreAdxcc2band;
CR.awardTypes.states2band.score = scoreAstates2band;
CR.awardTypes.IOTA.test = testAIOTA;
CR.awardTypes.call.test = testAcall;
CR.awardTypes.callarea.test = testAcallarea;
CR.awardTypes.calls2dxcc.test = testAcalls2dxcc;
CR.awardTypes.cnty.test = testAcnty;
CR.awardTypes.cont.test = testAcont;
CR.awardTypes.cont5.test = testAcont5;
CR.awardTypes.cont52band.test = testAcont52band;
CR.awardTypes.cqz.test = testAcqz;
CR.awardTypes.dxcc.test = testAdxcc;
CR.awardTypes.grids.test = testAgrids;
CR.awardTypes.numsfx.test = testAnumsfx;
CR.awardTypes.px.test = testApx;
CR.awardTypes.pxa.test = testApxa;
CR.awardTypes.pxplus.test = testApxplus;
CR.awardTypes.sfx.test = testAsfx;
CR.awardTypes.states.test = testAstates;
CR.awardTypes.cont2band.test = testAcont2band;
CR.awardTypes.calls2band.test = testAcalls2band;
CR.awardTypes.dxcc2band.test = testAdxcc2band;
CR.awardTypes.states2band.test = testAstates;
CR.awardTypes.IOTA.compile = singleCompile;
CR.awardTypes.call.compile = singleCompile;
CR.awardTypes.callarea.compile = singleCompile;
CR.awardTypes.calls2dxcc.compile = doubleCompile;
CR.awardTypes.cnty.compile = singleCompile;
CR.awardTypes.cont.compile = singleCompile;
CR.awardTypes.cont5.compile = singleCompile;
CR.awardTypes.cont52band.compile = doubleCompile;
CR.awardTypes.cqz.compile = singleCompile;
CR.awardTypes.dxcc.compile = singleCompile;
CR.awardTypes.grids.compile = singleCompile;
CR.awardTypes.numsfx.compile = singleCompile;
CR.awardTypes.px.compile = singleCompile;
CR.awardTypes.pxa.compile = singleCompile;
CR.awardTypes.pxplus.compile = singleCompile;
CR.awardTypes.sfx.compile = singleCompile;
CR.awardTypes.states.compile = singleCompile;
CR.awardTypes.cont2band.compile = doubleCompile;
CR.awardTypes.calls2band.compile = doubleCompile;
CR.awardTypes.dxcc2band.compile = doubleCompile;
CR.awardTypes.states2band.compile = doubleCompile;
2020-12-14 02:10:27 +00:00
}
function scoreAstates(award, obj)
{
if (obj.state)
{
if (!(obj.state in award.stat))
2020-12-14 02:10:27 +00:00
{ award.stat[obj.state] = newAwardCountObject(); }
return workAwardObject(
award.stat[obj.state],
obj.band,
obj.mode,
obj.digital,
obj.phone
);
}
return false;
}
2020-12-14 02:10:27 +00:00
function testAstates(award, obj, baseHash)
{
2023-02-01 02:57:39 +00:00
// calls with empty state will not match anything in the hash map. so filter those out
if (!obj.state || obj.state + baseHash in CR.tracker[award.test.look].state)
2020-12-14 02:10:27 +00:00
{
return false;
}
return true;
}
2020-12-14 02:10:27 +00:00
function scoreAstates2band(award, obj)
{
if (obj.state)
{
if (!(obj.band in award.stat)) award.stat[obj.band] = newAwardCountObject();
return workAwardObject(
award.stat[obj.band],
obj.band,
obj.mode,
obj.digital,
obj.phone,
obj.state
);
}
return false;
}
2020-12-14 02:10:27 +00:00
function scoreAdxcc(award, obj)
{
if (!(obj.dxcc in award.stat)) award.stat[obj.dxcc] = newAwardCountObject();
return workAwardObject(
award.stat[obj.dxcc],
obj.band,
obj.mode,
obj.digital,
obj.phone
);
}
2020-12-14 02:10:27 +00:00
function testAdxcc(award, obj, baseHash)
{
if (String(obj.dxcc) + "|" + baseHash in CR.tracker[award.test.look].dxcc)
2020-12-14 02:10:27 +00:00
{
return false;
}
return true;
}
2020-12-14 02:10:27 +00:00
function scoreAcont(award, obj)
{
if (obj.cont)
{
let cont = obj.cont;
if (cont == "AN") cont = "OC";
if (!(cont in award.stat)) award.stat[cont] = newAwardCountObject();
return workAwardObject(
award.stat[cont],
obj.band,
obj.mode,
obj.digital,
obj.phone
);
}
return false;
}
2020-12-14 02:10:27 +00:00
function testAcont(award, obj, baseHash)
{
if (obj.cont)
{
let cont = obj.cont;
if (cont == "AN") cont = "OC";
if (cont + baseHash in CR.tracker[award.test.look].cont)
2020-12-14 02:10:27 +00:00
{
return false;
}
}
return true;
}
2020-12-14 02:10:27 +00:00
function scoreAcont5(award, obj, baseHash)
{
if (obj.cont)
{
let cont = obj.cont;
if (cont == "NA" || cont == "SA") cont = "AM";
if (cont == "AN") cont = "OC";
if (!(cont in award.stat)) award.stat[cont] = newAwardCountObject();
return workAwardObject(
award.stat[cont],
obj.band,
obj.mode,
obj.digital,
obj.phone
);
}
return false;
}
2020-12-14 02:10:27 +00:00
function testAcont5(award, obj, baseHash)
{
if (obj.cont)
{
let cont = obj.cont;
if (cont == "NA" || cont == "SA") cont = "AM";
if (cont == "AN") cont = "OC";
if (cont + baseHash in CR.tracker[award.test.look].cont)
2020-12-14 02:10:27 +00:00
{
return false;
}
}
return true;
}
2020-09-28 19:28:09 +00:00
2020-12-14 02:10:27 +00:00
function scoreAcont2band(award, obj)
{
if (!(obj.band in award.stat)) award.stat[obj.band] = newAwardCountObject();
return workAwardObject(
award.stat[obj.band],
obj.band,
obj.mode,
obj.digital,
obj.phone,
obj.cont
);
}
2020-09-28 19:28:09 +00:00
2020-12-14 02:10:27 +00:00
function testAcont2band(award, obj, baseHash)
{
if (obj.cont)
{
let cont = obj.cont;
if (cont == "AN") cont = "OC";
if (cont + baseHash in CR.tracker[award.test.look].cont)
2020-12-14 02:10:27 +00:00
{
return false;
}
}
return true;
}
2020-12-14 02:10:27 +00:00
function scoreAcont52band(award, obj)
{
if (obj.cont)
{
let cont = obj.cont;
if (cont == "NA" || cont == "SA") cont = "AM";
if (cont == "AN") cont = "OC";
if (!(obj.band in award.stat)) award.stat[obj.band] = newAwardCountObject();
return workAwardObject(
award.stat[obj.band],
obj.band,
obj.mode,
obj.digital,
obj.phone,
cont
);
}
return false;
}
2020-12-14 02:10:27 +00:00
function testAcont52band(award, obj, baseHash)
{
if (obj.cont)
{
let cont = obj.cont;
if (cont == "NA" || cont == "SA") cont = "AM";
if (cont == "AN") cont = "OC";
if (cont + baseHash in CR.tracker[award.test.look].cont)
2020-12-14 02:10:27 +00:00
{
return false;
}
}
return true;
}
2020-12-14 02:10:27 +00:00
function scoreAgrids(award, obj)
{
if (obj.grid && obj.grid.length > 0)
2020-12-14 02:10:27 +00:00
{
let grid = obj.grid.substr(0, 4);
if (!(grid in award.stat)) award.stat[grid] = newAwardCountObject();
return workAwardObject(
award.stat[grid],
obj.band,
obj.mode,
obj.digital,
obj.phone
);
}
return false;
}
2020-12-14 02:10:27 +00:00
function testAgrids(award, obj, baseHash)
{
if (obj.grid && obj.grid + baseHash in CR.tracker[award.test.look].grid)
2020-12-14 02:10:27 +00:00
{
return false;
}
if (!obj.grid || obj.grid.length == 0)
{
return false;
}
return true;
}
2020-12-14 02:10:27 +00:00
function scoreAcnty(award, obj)
{
if (obj.cnty)
{
if (!(obj.cnty in award.stat)) award.stat[obj.cnty] = newAwardCountObject();
return workAwardObject(
award.stat[obj.cnty],
obj.band,
obj.mode,
obj.digital,
obj.phone
);
}
return false;
}
2020-12-14 02:10:27 +00:00
function testAcnty(award, obj, baseHash)
{
if (obj.cnty && obj.cnty + baseHash in CR.tracker[award.test.look].cnty)
2020-12-14 02:10:27 +00:00
{
return false;
}
return true;
}
2020-12-14 02:10:27 +00:00
function scoreAcall(award, obj)
{
let call = obj.DEcall;
2020-12-14 02:10:27 +00:00
if (call.indexOf("/") > -1)
{
if (call.endsWith("/MM")) return false;
call = call.replace("/P", "").replace("/R", "").replace("/QRP");
}
if (!(call in award.stat)) award.stat[call] = newAwardCountObject();
return workAwardObject(
award.stat[call],
obj.band,
obj.mode,
obj.digital,
obj.phone
);
}
2020-12-14 02:10:27 +00:00
function testAcall(award, obj, baseHash)
{
if (obj.DEcall.indexOf("/") > -1 && obj.DEcall.endsWith("/MM")) return false;
if (obj.DEcall + baseHash in CR.tracker[award.test.look].call)
2020-12-14 02:10:27 +00:00
{
return false;
}
return true;
}
2020-12-14 02:10:27 +00:00
function scoreAIOTA(award, obj)
{
if (obj.IOTA)
{
let test = CR.awards[award.sponsor].awards[award.name];
if ("IOTA" in test.rule && test.rule.IOTA.indexOf(obj.IOTA) == -1)
2020-12-14 02:10:27 +00:00
{ return false; }
if (!(obj.IOTA in award.stat)) award.stat[obj.IOTA] = newAwardCountObject();
return workAwardObject(
award.stat[obj.IOTA],
obj.band,
obj.mode,
obj.digital,
obj.phone
);
}
return false;
2020-08-19 17:01:51 +00:00
}
// NO IOTA YET
2020-12-14 02:10:27 +00:00
function testAIOTA(award, obj, baseHash)
{
/* if ( obj.IOTA )
{
let test = CR.awards[award.sponsor].awards[award.name];
2020-09-28 19:28:09 +00:00
if ( "IOTA" in test.rule && test.rule.IOTA.indexOf(obj.IOTA) == -1 )
return false;
2020-09-28 19:28:09 +00:00
2020-12-14 02:10:27 +00:00
} */
2020-09-28 19:28:09 +00:00
return false;
2020-08-19 17:01:51 +00:00
}
2020-12-14 02:10:27 +00:00
function scoreAcallarea(award, obj)
{
if (obj.zone != null)
{
let test = CR.awards[award.sponsor].awards[award.name];
2020-09-28 19:28:09 +00:00
if ("zone" in test.rule && test.rule.zone.indexOf(obj.zone) == -1)
2020-12-14 02:10:27 +00:00
{ return false; }
2020-09-28 19:28:09 +00:00
if (!(obj.zone in award.stat)) award.stat[obj.zone] = newAwardCountObject();
return workAwardObject(
award.stat[obj.zone],
obj.band,
obj.mode,
obj.digital,
obj.phone
);
}
return false;
2020-08-19 16:55:41 +00:00
}
2020-12-14 02:10:27 +00:00
function testAcallarea(award, obj, baseHash)
{
if (obj.zone != null)
{
let test = CR.awards[award.sponsor].awards[award.name];
2020-09-28 19:28:09 +00:00
if ("zone" in test.rule && test.rule.zone.indexOf(obj.zone) == -1)
2020-12-14 02:10:27 +00:00
{ return false; }
}
return true;
2020-08-19 16:55:41 +00:00
}
2020-12-14 02:10:27 +00:00
function scoreApx(award, obj)
{
if (obj.px)
{
let test = CR.awards[award.sponsor].awards[award.name];
let px = obj.px;
2020-12-14 02:10:27 +00:00
if ("px" in test.rule)
{
px = px.substr(0, test.rule.px[0].length);
if (test.rule.px.indexOf(px) == -1) return false;
}
2020-08-19 16:55:41 +00:00
if (!(px in award.stat)) award.stat[px] = newAwardCountObject();
return workAwardObject(
award.stat[px],
obj.band,
obj.mode,
obj.digital,
obj.phone
);
}
return false;
}
2020-12-14 02:10:27 +00:00
function testApx(award, obj, baseHash)
{
if (obj.px)
{
let test = CR.awards[award.sponsor].awards[award.name];
let px = obj.px;
2020-12-14 02:10:27 +00:00
if ("px" in test.rule)
{
px = px.substr(0, test.rule.px[0].length);
if (test.rule.px.indexOf(px) == -1) return false;
}
2020-09-28 19:28:09 +00:00
if (String(obj.px) + baseHash in CR.tracker[award.test.look].px)
2020-12-14 02:10:27 +00:00
{
return false;
}
}
return true;
}
2020-12-14 02:10:27 +00:00
function scoreApxa(award, obj)
{
if (obj.px)
{
let test = CR.awards[award.sponsor].awards[award.name];
2022-10-05 00:23:50 +00:00
for (const i in test.rule.pxa)
2020-12-14 02:10:27 +00:00
{
if (test.rule.pxa[i].indexOf(obj.px) > -1)
{
if (!(i in award.stat)) award.stat[i] = newAwardCountObject();
return workAwardObject(
award.stat[i],
obj.band,
obj.mode,
obj.digital,
obj.phone
);
}
}
}
return false;
}
2020-12-14 02:10:27 +00:00
function testApxa(award, obj, baseHash)
{
if (obj.px)
{
let test = CR.awards[award.sponsor].awards[award.name];
2022-10-05 00:23:50 +00:00
for (const i in test.rule.pxa)
2020-12-14 02:10:27 +00:00
{
if (test.rule.pxa[i].indexOf(obj.px) > -1)
{
if (String(obj.px) + baseHash in CR.tracker[award.test.look].px)
2020-12-14 02:10:27 +00:00
{
return false;
2020-12-14 02:10:27 +00:00
}
else
{
return true;
}
}
}
}
return false;
}
2020-12-14 02:10:27 +00:00
function scoreAsfx(award, obj)
{
let test = CR.awards[award.sponsor].awards[award.name];
let suf = obj.DEcall.replace(obj.px, "");
2022-10-05 00:23:50 +00:00
for (const i in test.rule.sfx)
2020-12-14 02:10:27 +00:00
{
2022-10-05 00:23:50 +00:00
for (const s in test.rule.sfx[i])
2020-12-14 02:10:27 +00:00
{
if (suf.indexOf(test.rule.sfx[i][s]) == 0)
{
if (!(i in award.stat)) award.stat[i] = newAwardCountObject();
return workAwardObject(
award.stat[i],
obj.band,
obj.mode,
obj.digital,
obj.phone
);
}
}
}
2020-08-19 16:55:41 +00:00
return false;
2020-08-19 17:01:51 +00:00
}
2020-08-19 16:55:41 +00:00
2020-12-14 02:10:27 +00:00
function testAsfx(award, obj, baseHash)
{
let test = CR.awards[award.sponsor].awards[award.name];
let suf = obj.DEcall.replace(obj.px, "");
2022-10-05 00:23:50 +00:00
for (const i in test.rule.sfx)
2020-12-14 02:10:27 +00:00
{
2022-10-05 00:23:50 +00:00
for (const s in test.rule.sfx[i])
2020-12-14 02:10:27 +00:00
{
if (suf.indexOf(test.rule.sfx[i][s]) == 0)
{
return false;
}
}
}
2020-08-19 17:01:51 +00:00
return true;
2020-08-19 17:01:51 +00:00
}
2020-12-14 02:10:27 +00:00
function scoreAcalls2dxcc(award, obj)
{
if (!(obj.dxcc in award.stat)) award.stat[obj.dxcc] = newAwardCountObject();
2020-09-28 19:28:09 +00:00
return workAwardObject(
award.stat[obj.dxcc],
obj.band,
obj.mode,
obj.digital,
obj.phone,
obj.DEcall
);
2020-08-19 16:55:41 +00:00
}
2020-12-14 02:10:27 +00:00
function testAcalls2dxcc(award, obj, baseHash)
{
if (obj.DEcall + baseHash in CR.tracker[award.test.look].call)
2020-12-14 02:10:27 +00:00
{
return false;
}
return true;
2020-08-19 16:55:41 +00:00
}
2020-12-14 02:10:27 +00:00
function scoreAcalls2band(award, obj)
{
if (!(obj.band in award.stat)) award.stat[obj.band] = newAwardCountObject();
2020-08-19 17:01:51 +00:00
return workAwardObject(
award.stat[obj.band],
obj.band,
obj.mode,
obj.digital,
obj.phone,
obj.DEcall
);
2020-08-19 17:01:51 +00:00
}
2020-12-14 02:10:27 +00:00
function testAcalls2band(award, obj, baseHash)
{
if (obj.DEcall + baseHash in CR.tracker[award.test.look].call)
2020-12-14 02:10:27 +00:00
{
return false;
}
return true;
2020-08-19 17:01:51 +00:00
}
2020-12-14 02:10:27 +00:00
function scoreAdxcc2band(award, obj)
{
if (!(obj.band in award.stat)) award.stat[obj.band] = newAwardCountObject();
2020-08-19 17:01:51 +00:00
return workAwardObject(
award.stat[obj.band],
obj.band,
obj.mode,
obj.digital,
obj.phone,
obj.dxcc
);
2020-08-19 17:01:51 +00:00
}
2020-12-14 02:10:27 +00:00
function testAdxcc2band(award, obj, baseHash)
{
if (String(obj.dxcc) + "|" + baseHash in CR.tracker[award.test.look].dxcc)
2020-12-14 02:10:27 +00:00
{
return false;
}
return true;
2020-08-19 17:01:51 +00:00
}
2020-12-14 02:10:27 +00:00
function scoreAcqz(award, obj)
{
if (obj.cqz)
{
if (!(obj.cqz in award.stat)) award.stat[obj.cqz] = newAwardCountObject();
2020-09-28 19:28:09 +00:00
return workAwardObject(
award.stat[obj.cqz],
obj.band,
obj.mode,
obj.digital,
obj.phone
);
}
return false;
2020-08-19 17:01:51 +00:00
}
2020-12-14 02:10:27 +00:00
function testAcqz(award, obj, baseHash)
{
2023-02-01 02:57:39 +00:00
// calls with empty cqz will not match anything in the hash map. so filter those out
if (!obj.cqz || obj.cqz + "|" + baseHash in CR.tracker[award.test.look].cqz)
2023-02-01 02:57:39 +00:00
{
return false;
}
return true;
}
2020-12-14 02:10:27 +00:00
function scoreAnumsfx(award, obj)
{
if (obj.px)
2020-12-14 02:10:27 +00:00
{
let test = CR.awards[award.sponsor].awards[award.name];
let px = obj.px.substr(0, obj.px.length - 1);
let suf = obj.DEcall.replace(px, "");
suf = suf.substr(0, test.rule.numsfx[0][0].length);
for (const i in test.rule.numsfx)
2020-12-14 02:10:27 +00:00
{
for (const s in test.rule.numsfx[i])
2020-12-14 02:10:27 +00:00
{
if (suf.indexOf(test.rule.numsfx[i][s]) == 0)
{
if (!(i in award.stat)) award.stat[i] = newAwardCountObject();
return workAwardObject(
award.stat[i],
obj.band,
obj.mode,
obj.digital,
obj.phone
);
}
}
}
}
return false;
2020-08-19 17:01:51 +00:00
}
2020-12-14 02:10:27 +00:00
function testAnumsfx(award, obj)
{
if (obj.px)
2020-12-14 02:10:27 +00:00
{
let test = CR.awards[award.sponsor].awards[award.name];
let px = obj.px.substr(0, obj.px.length - 1);
let suf = obj.DEcall.replace(px, "");
suf = suf.substr(0, test.rule.numsfx[0][0].length);
for (const i in test.rule.numsfx)
2020-12-14 02:10:27 +00:00
{
for (const s in test.rule.numsfx[i])
2020-12-14 02:10:27 +00:00
{
if (suf.indexOf(test.rule.numsfx[i][s]) == 0)
{
return false;
}
}
}
}
return true;
}
2020-12-14 02:10:27 +00:00
function scoreApxplus(award, obj)
{
let test = CR.awards[award.sponsor].awards[award.name];
2020-12-14 02:10:27 +00:00
if (test.rule.pxplus)
{
2022-10-05 00:23:50 +00:00
for (const i in test.rule.pxplus)
2020-12-14 02:10:27 +00:00
{
if (obj.DEcall.indexOf(test.rule.pxplus[i]) == 0)
{
if (!(i in award.stat)) award.stat[i] = newAwardCountObject();
return workAwardObject(
award.stat[i],
obj.band,
obj.mode,
obj.digital,
obj.phone
);
}
}
}
return false;
2020-08-19 17:01:51 +00:00
}
2020-08-19 16:55:41 +00:00
2020-12-14 02:10:27 +00:00
function testApxplus(award, obj)
{
let test = CR.awards[award.sponsor].awards[award.name];
2020-08-19 17:01:51 +00:00
2020-12-14 02:10:27 +00:00
if (test.rule.pxplus)
{
2022-10-05 00:23:50 +00:00
for (const i in test.rule.pxplus)
2020-12-14 02:10:27 +00:00
{
if (obj.DEcall.indexOf(test.rule.pxplus[i]) == 0)
{
return false;
}
}
}
return true;
}
2020-12-14 02:10:27 +00:00
function loadAwardJson()
{
CR.awards = {};
let fs = require("fs");
2020-12-14 02:10:27 +00:00
if (fs.existsSync("./data/awards.json"))
{
fileBuf = fs.readFileSync("./data/awards.json");
2020-12-14 02:10:27 +00:00
try
{
CR.awards = JSON.parse(fileBuf);
// fs.writeFileSync("./data/awards.json", JSON.stringify(CR.awards,null,2));
for (const sp in CR.awards)
2020-12-14 02:10:27 +00:00
{
for (const aw in CR.awards[sp].awards)
2020-12-14 02:10:27 +00:00
{
if (!("unique" in CR.awards[sp].awards[aw].rule))
{ CR.awards[sp].awards[aw].rule.unique = 1; }
if (CR.awards[sp].awards[aw].rule.band[0] == "Mixed")
2020-12-14 02:10:27 +00:00
{
CR.awards[sp].awards[aw].rule.band.shift();
}
if (CR.awards[sp].awards[aw].rule.band.length == 0)
2020-12-14 02:10:27 +00:00
{
CR.awards[sp].awards[aw].rule.band = [];
for (let key in CR.awards[sp].mixed)
2020-12-14 02:10:27 +00:00
{
CR.awards[sp].awards[aw].rule.band.push(CR.awards[sp].mixed[key]);
}
}
if (
CR.awards[sp].awards[aw].rule.endorse.length == 1 &&
CR.awards[sp].awards[aw].rule.endorse[0] == "Mixed"
2020-12-14 02:10:27 +00:00
)
{
CR.awards[sp].awards[aw].rule.endorse = [];
for (let key in CR.awards[sp].mixed)
2020-12-14 02:10:27 +00:00
{
CR.awards[sp].awards[aw].rule.endorse.push(
CR.awards[sp].mixed[key]
);
}
}
}
}
2020-09-28 19:28:09 +00:00
buildAwardTypeHandlers();
2020-12-14 02:10:27 +00:00
}
catch (e)
{
alert("Core awards.json : " + e);
CR.awards = {};
}
2020-12-14 02:10:27 +00:00
}
else alert("Missing core awards.json");
}
2020-12-14 02:10:27 +00:00
function processAllAwardTrackers()
{
for (let tracker in CR.awardTracker)
2020-12-14 02:10:27 +00:00
{
if (!(CR.awardTracker[tracker].sponsor in CR.awards))
2020-12-14 02:10:27 +00:00
{
delete CR.awardTracker[tracker];
continue;
}
if (
!(
CR.awardTracker[tracker].name in
CR.awards[CR.awardTracker[tracker].sponsor].awards
)
2020-12-14 02:10:27 +00:00
)
{
delete CR.awardTracker[tracker];
continue;
}
processAward(tracker);
}
updateAwardList();
}
2020-12-14 02:10:27 +00:00
function newAwardTrackerObject(sponsor, award, enable)
{
let newAward = {};
newAward.sponsor = sponsor;
newAward.name = award;
newAward.enable = enable;
newAward.mode = CR.awards[sponsor].awards[award].rule.mode[0];
newAward.band = CR.awards[sponsor].awards[award].rule.band[0];
newAward.count = CR.awards[sponsor].awards[award].rule.count[0];
newAward.stat = {};
newAward.comp = {};
newAward.test = {};
return newAward;
}
2020-12-14 02:10:27 +00:00
function addAllAwards()
{
for (let sponsor in CR.awards)
2020-12-14 02:10:27 +00:00
{
for (let award in CR.awards[sponsor].awards)
2020-12-14 02:10:27 +00:00
{
let awardToAdd = newAwardTrackerObject(sponsor, award, true);
let hash = awardToAdd.name + "-" + awardToAdd.sponsor;
if (!(hash in CR.awardTracker))
2020-12-14 02:10:27 +00:00
{
CR.awardTracker[hash] = awardToAdd;
processAward(hash);
storeAwardTracker();
}
}
}
updateAwardList();
2023-02-17 01:50:47 +00:00
viewRoster();
}
2020-09-28 19:28:09 +00:00
2020-12-14 02:10:27 +00:00
function delAllAwards()
{
CR.awardTracker = {};
storeAwardTracker();
updateAwardList();
2023-02-17 01:50:47 +00:00
viewRoster();
}
2020-09-28 19:28:09 +00:00
2020-12-14 02:10:27 +00:00
function newCompileCountObject()
{
let compileCountObject = {};
compileCountObject.bands = {};
compileCountObject.modes = {};
compileCountObject.endorse = {};
compileCountObject.counts = {};
return compileCountObject;
}
2020-08-19 17:01:51 +00:00
2020-12-14 02:10:27 +00:00
function singleCompile(award, obj)
{
let test = CR.awards[award.sponsor].awards[award.name];
let rule = test.rule;
let comp = newCompileCountObject();
for (let mode in rule.mode)
2020-12-14 02:10:27 +00:00
{
comp.modes[rule.mode[mode]] = 0;
comp.bands[rule.mode[mode]] = {};
2020-08-19 16:55:41 +00:00
for (let band in rule.band)
2020-12-14 02:10:27 +00:00
{
comp.bands[rule.mode[mode]][rule.band[band]] = 0;
}
for (let key in obj)
2020-12-14 02:10:27 +00:00
{
if (
rule.mode[mode] in obj[key].bands &&
Object.keys(obj[key].bands[rule.mode[mode]]).length
2020-12-14 02:10:27 +00:00
)
{
comp.modes[rule.mode[mode]] += 1;
for (let band in rule.band)
2020-12-14 02:10:27 +00:00
{
if (rule.band[band] in obj[key].bands[rule.mode[mode]])
2020-12-14 02:10:27 +00:00
{ comp.bands[rule.mode[mode]][rule.band[band]] += 1; }
}
}
}
}
for (let mode in comp.modes)
2020-12-14 02:10:27 +00:00
{
comp.endorse[mode] = {};
comp.counts[mode] = {};
for (let cnts in rule.count)
2020-12-14 02:10:27 +00:00
{
comp.counts[mode][rule.count[cnts]] = {
num: comp.modes[mode],
per: parseInt(
Math.min(100, (comp.modes[mode] / rule.count[cnts]) * 100.0)
2020-12-14 02:10:27 +00:00
)
};
}
2020-09-28 19:28:09 +00:00
for (let endorse in rule.endorse)
2020-12-14 02:10:27 +00:00
{
comp.endorse[mode][rule.endorse[endorse]] = {};
for (let cnts in rule.count)
2020-12-14 02:10:27 +00:00
{
comp.endorse[mode][rule.endorse[endorse]][rule.count[cnts]] =
comp.bands[mode][rule.endorse[endorse]] >= rule.count[cnts];
}
}
}
2020-08-19 17:01:51 +00:00
return comp;
2020-08-19 16:55:41 +00:00
}
2020-08-19 17:01:51 +00:00
2020-12-14 02:10:27 +00:00
function doubleCompile(award, firstLevel)
{
let test = CR.awards[award.sponsor].awards[award.name];
let rule = test.rule;
2020-08-19 17:01:51 +00:00
for (let k in firstLevel)
2020-12-14 02:10:27 +00:00
{
firstLevel[k].bands = {};
2020-12-14 02:10:27 +00:00
// firstLevel[k].modes = {};
let obj = singleCompile(award, firstLevel[k].unique);
2020-09-28 19:28:09 +00:00
for (let mode in obj.bands)
2020-12-14 02:10:27 +00:00
{
for (let cnt in test.rule.count)
2020-12-14 02:10:27 +00:00
{
if (obj.counts[mode][test.rule.count[cnt]].num >= test.rule.unique)
2020-12-14 02:10:27 +00:00
{
for (let band in obj.bands[mode])
2020-12-14 02:10:27 +00:00
{
if (!(mode in firstLevel[k].bands)) firstLevel[k].bands[mode] = {};
2020-08-19 17:01:51 +00:00
if (obj.bands[mode][band] > 0)
2020-12-14 02:10:27 +00:00
{
firstLevel[k].bands[mode][band] =
~~firstLevel[k].bands[mode][band] + 1;
2020-12-14 02:10:27 +00:00
}
}
2020-12-14 02:10:27 +00:00
}
}
}
/* for ( let mode in obj.modes )
{
if ( !(mode in firstLevel[k].modes) )
firstLevel[k].modes[mode] = 0;
if ( obj.modes[mode] > 0 )
firstLevel[k].modes[mode] += 1;
2020-12-14 02:10:27 +00:00
} */
2020-09-28 19:28:09 +00:00
delete firstLevel[k].unique;
firstLevel[k].unique = null;
}
2020-09-28 19:28:09 +00:00
return singleCompile(award, firstLevel);
2020-09-04 23:14:05 +00:00
}
function listShortInstances()
{
2022-07-17 05:32:05 +00:00
let shortInstances = [];
if (typeof window.opener.GT.instancesIndex != "undefined" && typeof window.opener.GT.instances != "undefined")
2022-07-17 05:32:05 +00:00
{
if (window.opener.GT.instancesIndex.length > 1)
{
let instances = window.opener.GT.instances;
2022-07-17 05:32:05 +00:00
let keys = Object.keys(instances).sort();
for (let key in keys)
{
2022-07-17 05:32:05 +00:00
let inst = keys[key];
let sp = inst.split(" - ");
let shortInst = sp[sp.length - 1].substring(0, 18);
shortInstances.push(shortInst);
}
}
2022-07-17 05:32:05 +00:00
}
return shortInstances;
2023-01-24 20:12:04 +00:00
}
2023-12-02 01:09:18 +00:00
function openInfoTab(evt, tabName, callFunc, callObj)
{
// Declare all variables
var i, infoTabcontent, infoTablinks;
// Get all elements with class="infoTabcontent" and hide them
infoTabcontent = document.getElementsByClassName("infoTabcontent");
for (i = 0; i < infoTabcontent.length; i++)
{
infoTabcontent[i].style.display = "none";
}
// Get all elements with class="infoTablinks" and remove the class "active"
infoTablinks = document.getElementsByClassName("infoTablinks");
for (i = 0; i < infoTablinks.length; i++)
{
infoTablinks[i].className = infoTablinks[i].className.replace(
" active",
""
);
}
// Show the current tab, and add an "active" class to the button that opened the tab
document.getElementById(tabName).style.display = "block";
if (typeof evt == "string")
{
for (i = 0; i < infoTablinks.length; i++)
{
if (infoTablinks[i].id == evt)
{
infoTablinks[i].className += " active";
}
}
}
else if (typeof evt.currentTarget != "undefined")
{
evt.currentTarget.className += " active";
}
else
{
evt.className += " active";
}
if (callFunc)
{
if (typeof callFunc == "function")
{
if (callObj) callFunc(callObj);
else callFunc();
}
}
}
function ValidateTextInput(inputText, validDiv = null)
{
if (inputText.value.length > 0)
{
var passed = false;
inputText.value = inputText.value.toUpperCase();
if (/\d/.test(inputText.value) || /[A-Z]/.test(inputText.value))
{
passed = true;
}
if (passed)
{
inputText.style.color = "#FF0";
inputText.style.backgroundColor = "green";
if (validDiv) validDiv.innerHTML = "";
return true;
}
else
{
inputText.style.color = "#000";
inputText.style.backgroundColor = "yellow";
if (validDiv) validDiv.innerHTML = $.i18n("stats.Validate.Invalid");
return false;
}
}
else
{
inputText.style.color = "#000";
inputText.style.backgroundColor = "yellow";
if (validDiv) validDiv.innerHTML = $.i18n("stats.Validate.Invalid");
return false;
}
}
function watcherOnName()
{
watcherName.value = watcherName.value.replace(/[$%.'",<>]/g, "");
watcherNameValidate();
}
function watcherNameValidate()
{
if (watcherName.value.length == 0 || (watcherName.value in CR.watchers && watcherName.value != CR.watcherEditKey))
{
watcherName.style.color = "#000";
watcherName.style.backgroundColor = "red";
return false;
}
else
{
watcherName.style.color = "";
watcherName.style.backgroundColor = "";
return true;
}
}
function watcherTypeChanged(value)
{
watcherType.value = value;
if (value == "Callsign")
{
watcherTextTh.innerHTML = $.i18n("roster.controls.hunting.callsign");
2023-12-02 01:09:18 +00:00
}
if (value == "Calling")
{
watcherTextTh.innerHTML = $.i18n("alerts.QRZ.speech");
}
if (value == "Grid")
{
watcherTextTh.innerHTML = $.i18n("roster.controls.hunting.grid");
2023-12-02 01:09:18 +00:00
}
if (value == "Message")
{
watcherTextTh.innerHTML = $.i18n("gt.WSJTMessage.Message");
}
watcherStartDateEnable(watcherStartDateCheckbox.checked);
watcherEndDateEnable(watcherEndDateCheckbox.checked);
}
function watcherRegexChanged(checked)
{
watcherOnText();
}
function watcherOnText()
{
var testCallsign = false;
if (watcherRegexCheckbox.checked == false)
{
if (watcherType.value == "Message")
{
watcherText.value = watcherText.value.toUpperCase().replace(/[^A-Z0-9/<>\s]+/g, "");
}
else if (watcherType.value == "Calling")
{
testCallsign = true;
watcherText.value = watcherText.value.toUpperCase().replace(/[^A-Z0-9/\s]+/g, "");
}
else if (watcherType.value == "Grid")
{
gridInputValidate(watcherText);
return;
}
2023-12-02 01:09:18 +00:00
else
{
testCallsign = true;
watcherText.value = watcherText.value.toUpperCase().replace(/[^A-Z0-9/]+/g, "");
}
}
watcherTextValidate(testCallsign);
}
function watcherTextValidate(testCallsign = false)
{
if (watcherText.value.length == 0)
{
watcherText.style.color = "#000";
watcherText.style.backgroundColor = "red";
return false;
}
else
{
if (testCallsign && !watcherText.value.match(CALLSIGN_REGEXP))
{
watcherText.style.color = "#000";
watcherText.style.backgroundColor = "yellow";
}
else
{
watcherText.style.color = "";
watcherText.style.backgroundColor = "";
}
return true;
}
}
function watcherStartDateEnable(checked)
{
watcherStartDateTh.style.display = watcherStartDateTd.style.display = (checked ? "" : "none");
}
function watcherEndDateEnable(checked)
{
watcherAutoDeleteTd.style.display = watcherAutoDeleteTh.style.display = watcherEndDateTh.style.display = watcherEndDateTd.style.display = (checked ? "" : "none");
}
function newWatcherEntry()
{
let entry = Object();
entry.watch = true;
entry.type = "Callsign";
entry.regex = false;
entry.text = "";
entry.test = null;
entry.start = false;
entry.end = false;
entry.startTime = Date.now();
entry.startTime -= (entry.startTime % 86400000);
entry.endTime = Date.now();
entry.endTime -= (entry.endTime % 86400000);
entry.autoDelete = false;
return entry;
}
function saveWatcher()
{
watcherName.value = watcherName.value.trim();
watcherText.value = watcherText.value.trim();
if (watcherNameValidate() == false || watcherTextValidate() == false) return;
if (CR.watcherEditKey.length > 0 && CR.watcherEditKey in CR.watchers)
{
delete CR.watchers[CR.watcherEditKey];
}
let entry = newWatcherEntry();
entry.watch = true;
entry.type = watcherType.value;
entry.regex = watcherRegexCheckbox.checked;
entry.text = watcherText.value;
entry.test = null;
entry.start = watcherStartDateCheckbox.checked;
entry.end = watcherEndDateCheckbox.checked;
entry.autoDelete = entry.end ? watcherAutoDeleteCheckbox.checked : false;
if (entry.start)
{
if (watcherStartDate.value.length == 0)
{
entry.startTime = Date.now();
}
else
{
entry.startTime = Date.parse(watcherStartDate.value + "Z");
}
}
if (entry.end)
{
if (watcherEndDate.value.length == 0)
{
entry.endTime = Date.now();
}
else
{
entry.endTime = Date.parse(watcherEndDate.value + "Z");
}
if (entry.start && entry.endTime <= entry.startTime)
{
// Good for a minute, least we can do :)
entry.endTime = entry.startTime + 60000;
}
}
CR.watchers[watcherName.value] = entry;
writeRosterSettings();
openWathcherTab();
window.opener.goProcessRoster();
}
function addWatcher(value, type)
{
if (!(value in CR.watchers))
{
let entry = newWatcherEntry();
entry.watch = true;
entry.type = type;
entry.regex = false;
entry.text = value;
entry.test = null;
entry.autoDelete = false;
CR.watchers[value] = entry;
CR.rosterSettings.wanted.huntWatcher = huntWatcher.checked = true;
writeRosterSettings();
window.opener.goProcessRoster();
wantRenderWatchersTab();
}
}
function clearWatcher()
{
CR.watcherEditKey = "";
watcherName.style.color = "";
watcherName.style.backgroundColor = "";
watcherText.style.color = "";
watcherText.style.backgroundColor = "";
loadWatcherValues("", newWatcherEntry());
}
function toggleWatcher(key)
{
CR.watchers[key].watch = !CR.watchers[key].watch;
writeRosterSettings();
wantRenderWatchersTab();
window.opener.goProcessRoster();
}
function deleteWatcher(key)
{
delete CR.watchers[key];
writeRosterSettings();
wantRenderWatchersTab();
window.opener.goProcessRoster();
}
CR.watcherEditKey = "";
function editWatcher(key)
{
CR.watcherEditKey = key;
loadWatcherValues(key, CR.watchers[key]);
}
function loadWatcherValues(key, entry)
{
watcherName.value = key;
watcherType.vale = entry.type;
watcherRegexCheckbox.checked = entry.regex;
watcherText.value = entry.text;
watcherStartDateCheckbox.checked = entry.start;
watcherEndDateCheckbox.checked = entry.end;
let date = new Date(entry.startTime);
watcherStartDate.value = date.toISOString().slice(0, 16);
date = new Date(entry.endTime);
watcherEndDate.value = date.toISOString().slice(0, 16);
watcherAutoDeleteCheckbox.checked = entry.autoDelete;
watcherTypeChanged(entry.type);
}
function htmlEntities(str)
{
return String(str)
.replace(/&/g, "&amp;")
.replace(/</g, "&lt;")
.replace(/>/g, "&gt;")
.replace(/"/g, "&quot;");
}
function openWathcherTab()
{
clearWatcher();
wantRenderWatchersTab();
}
function wantRenderWatchersTab()
{
if (watcherBoxDiv.style.display != "none")
{
renderWatchersTab();
}
}
function renderWatchersTab()
{
if (Object.keys(CR.watchers).length > 0)
{
let worker = "<div id='watcherTable'><table class='darkTable' align=center><tr><td>👁️</td><th>Name</th><th>Type</th><th>Regex</th><th>Text</th><th>Start Date</th><th>End Date</th><th>Edit</th><th>Delete</th></tr>";
Object.keys(CR.watchers)
.sort((a, b) => a.toLowerCase() < b.toLowerCase() ? -1 : 1)
.forEach(function (key)
{
worker += "<tr><td style='cursor:pointer;font-size:larger;' onclick='toggleWatcher(\"" + key + "\")'>" + (CR.watchers[key].watch ? "👀" : "🙈") + "</td>";
worker += "<td align=left style='color:yellow;' >" + key + "</td><td>" + CR.watchers[key].type + "</td><td>" + (CR.watchers[key].regex ? "☑️" : "") + "</td>";
let text = htmlEntities(CR.watchers[key].text);
worker += "<td style='color:cyan;'>" + (CR.watchers[key].regex ? text : formatCallsign(text)) + "</td>";
worker += "<td>" + (CR.watchers[key].start ? window.opener.userTimeString(CR.watchers[key].startTime) : "") + "</td>";
worker += "<td>" + (CR.watchers[key].end ? window.opener.userTimeString(CR.watchers[key].endTime) : "") + "</td>";
worker += "<td style='cursor:pointer;font-size:larger;' onclick='editWatcher(\"" + key + "\")'>📝</td>";
worker += "<td style='cursor:pointer;font-size:larger;' onclick='deleteWatcher(\"" + key + "\")'>";
worker += CR.watchers[key].autoDelete ? "🤖" : "🚮";
worker += "</td></tr>";
});
worker += "</table></div>";
watcherEditView.innerHTML = worker;
let height = 40;
if (watcherBoxDiv.offsetHeight >= window.innerHeight - height)
{
watcherBoxDiv.style.height = (window.innerHeight - height) + "px";
}
else
{
watcherBoxDiv.style.height = "";
}
}
else
{
watcherBoxDiv.style.height = "";
watcherEditView.innerHTML = "";
}
}