565 lines
		
	
	
		
			No EOL
		
	
	
		
			19 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			565 lines
		
	
	
		
			No EOL
		
	
	
		
			19 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
const resName = GetParentResourceName();
 | 
						|
 | 
						|
/* Forms stuff */
 | 
						|
var forms = document.querySelectorAll('.needs-validation')
 | 
						|
 | 
						|
// Loop over them and prevent submission
 | 
						|
Array.prototype.slice.call(forms)
 | 
						|
.forEach(function (form) {
 | 
						|
	form.addEventListener('submit', function (event) {
 | 
						|
 | 
						|
	event.preventDefault();
 | 
						|
 | 
						|
	form.classList.add('was-validated')
 | 
						|
	}, false)
 | 
						|
})
 | 
						|
 | 
						|
async function getJobLabel(jobName) {
 | 
						|
	return new Promise((resolve, reject) => {
 | 
						|
		$.post(`https://${resName}/getJobLabel`, JSON.stringify({jobName: jobName}), function(jobLabel) {
 | 
						|
			resolve(jobLabel);
 | 
						|
		})
 | 
						|
	})
 | 
						|
}
 | 
						|
 | 
						|
/* Language stuff */
 | 
						|
let TRANSLATIONS = {};
 | 
						|
let ENGLISH_TRANSLATIONS = {};
 | 
						|
 | 
						|
function translateEverything() {
 | 
						|
	$("body").find("[data-translation-id], [data-bs-toggle='tooltip']").each(function() {
 | 
						|
		let translationId = $(this).data("translationId")
 | 
						|
 | 
						|
		if( $(this).data("bsToggle") == "tooltip" ) {
 | 
						|
			$(this).prop("title", getLocalizedText(translationId));
 | 
						|
			$(this).tooltip();
 | 
						|
		} else {
 | 
						|
			$(this).prop("innerHTML", getLocalizedText(translationId));
 | 
						|
		}
 | 
						|
 | 
						|
	})
 | 
						|
} 
 | 
						|
 | 
						|
async function refreshTranslations(locale) {
 | 
						|
	let rawEnglishTranslations = await $.get("menu_translations/en.json");
 | 
						|
	ENGLISH_TRANSLATIONS = typeof rawEnglishTranslations == "object" ? rawEnglishTranslations : JSON.parse(rawEnglishTranslations);
 | 
						|
 | 
						|
	let rawTranslations = await $.get(`menu_translations/${locale}.json`);
 | 
						|
	TRANSLATIONS = typeof rawTranslations == "object" ? rawTranslations : JSON.parse(rawTranslations);
 | 
						|
 | 
						|
	translateEverything();
 | 
						|
}
 | 
						|
 | 
						|
async function loadTranslations() {
 | 
						|
	const locale = await $.post(`https://${resName}/getLocale`);
 | 
						|
 | 
						|
	refreshTranslations(locale);
 | 
						|
} loadTranslations();
 | 
						|
 | 
						|
function getLocalizedText(text) {
 | 
						|
	return TRANSLATIONS[text] || ENGLISH_TRANSLATIONS[text] || text;
 | 
						|
}
 | 
						|
 | 
						|
/* Utils */
 | 
						|
 | 
						|
function getFramework() {
 | 
						|
	return new Promise((resolve) => {
 | 
						|
		$.post(`https://${resName}/getFramework`, {}, (framework) => {
 | 
						|
			resolve(framework)
 | 
						|
		})
 | 
						|
	}) 
 | 
						|
}
 | 
						|
async function getCurrentCoords() {
 | 
						|
	return new Promise((resolve, reject) => {
 | 
						|
		$.post(`https://${resName}/getCurrentCoords`, {}, function(coords) {
 | 
						|
			resolve(coords);
 | 
						|
		})
 | 
						|
	});
 | 
						|
}
 | 
						|
 | 
						|
async function getCurrentCoordsAndHeading() {
 | 
						|
	return new Promise((resolve, reject) => {
 | 
						|
		$.post(`https://${resName}/getCurrentCoordsAndHeading`, {}, function(data) {
 | 
						|
			resolve(data);
 | 
						|
		})
 | 
						|
	});
 | 
						|
}
 | 
						|
 | 
						|
// Open/Close menu
 | 
						|
function openMenu(version, fullConfig) {
 | 
						|
	$("#trackers-creator-version").text(version);
 | 
						|
 | 
						|
	loadTrackers();
 | 
						|
	loadSettings(fullConfig);
 | 
						|
 | 
						|
    $("#trackers-creator").show()
 | 
						|
}
 | 
						|
 | 
						|
function closeMenu() {
 | 
						|
	// Resets current active tab
 | 
						|
	$("#trackers-creator").find(".nav-link, .tab-pane").each(function() {
 | 
						|
		if($(this).data("isDefault") == "1") {
 | 
						|
			$(this).addClass(["active", "show"])
 | 
						|
		} else {
 | 
						|
			$(this).removeClass(["active", "show"])
 | 
						|
		}
 | 
						|
	})
 | 
						|
	
 | 
						|
    $("#trackers-creator").hide();
 | 
						|
 | 
						|
    $.post(`https://${resName}/close`, {})
 | 
						|
}
 | 
						|
$("#close-main-btn").click(closeMenu);
 | 
						|
 | 
						|
// Messages received by client
 | 
						|
window.addEventListener('message', (event) => {
 | 
						|
	let data = event.data;
 | 
						|
	let action = data.action;
 | 
						|
 | 
						|
	switch(action) {
 | 
						|
 | 
						|
		case "openMenu": {
 | 
						|
			openMenu(data.version, data.fullConfig);
 | 
						|
 | 
						|
			break;
 | 
						|
		}
 | 
						|
	}
 | 
						|
});
 | 
						|
 | 
						|
/*
 | 
						|
███████ ███████ ████████ ████████ ██ ███    ██  ██████  ███████ 
 | 
						|
██      ██         ██       ██    ██ ████   ██ ██       ██      
 | 
						|
███████ █████      ██       ██    ██ ██ ██  ██ ██   ███ ███████ 
 | 
						|
     ██ ██         ██       ██    ██ ██  ██ ██ ██    ██      ██ 
 | 
						|
███████ ███████    ██       ██    ██ ██   ████  ██████  ███████ 
 | 
						|
*/
 | 
						|
 | 
						|
$("#settings-private-tracker-customize-blip-btn").click(async function() {
 | 
						|
	let oldBlipData = $(this).data("privateTrackerBlipData");
 | 
						|
	let newBlipData = await blipDialog(oldBlipData);
 | 
						|
		
 | 
						|
	$(this).data("privateTrackerBlipData", newBlipData);
 | 
						|
})
 | 
						|
 | 
						|
/* Discord logs */
 | 
						|
function toggleDiscordLogsInSettings(enable) {
 | 
						|
	$("#settings-mainDiscordWebhook").prop("disabled", !enable);
 | 
						|
	$("#settings-mainDiscordWebhook").prop("required", enable);
 | 
						|
	
 | 
						|
	$("#settings-specific-webooks-div").find(`.form-control`).prop("disabled", !enable);
 | 
						|
}
 | 
						|
 | 
						|
$("#settings-areDiscordLogsActive").change(function() {
 | 
						|
	let enabled = $(this).prop("checked");
 | 
						|
 | 
						|
	toggleDiscordLogsInSettings(enabled);
 | 
						|
})
 | 
						|
 | 
						|
function getSeparatedDiscordWebhooks() {
 | 
						|
	let webhooks = {};
 | 
						|
 | 
						|
	$("#settings-specific-webooks-div").find(".form-control").each(function(index, element) {
 | 
						|
		let logType = $(element).data("logType");
 | 
						|
		let webhook = $(element).val();
 | 
						|
 | 
						|
		if(webhook) {
 | 
						|
			webhooks[logType] = webhook;
 | 
						|
		}
 | 
						|
	});
 | 
						|
 | 
						|
	return webhooks;
 | 
						|
}
 | 
						|
/* Discord logs END */
 | 
						|
 | 
						|
function loadSettings(fullConfig) {
 | 
						|
 | 
						|
	// Language
 | 
						|
	$("#settings-locale").val(fullConfig.locale);
 | 
						|
 | 
						|
	// Generic
 | 
						|
	$("#settings-ace-permission").val(fullConfig.acePermission);
 | 
						|
	$("#settings-enable-detailed-blip-sprite").prop("checked", fullConfig.enableDetailedBlipSprite);
 | 
						|
 | 
						|
	// Panic button
 | 
						|
	$("#settings-panic-button-default-key").val(fullConfig.defaultPanicButton);
 | 
						|
	$("#settings-panic-button-blip-sprite").val(fullConfig.panicButtonBlip.sprite);
 | 
						|
	$("#settings-panic-button-blip-color").val(fullConfig.panicButtonBlip.color);
 | 
						|
	$("#settings-panic-button-blip-scale").val(fullConfig.panicButtonBlip.scale);
 | 
						|
	$("#settings-panic-button-blip-duration").val(fullConfig.panicButtonBlip.duration);
 | 
						|
	$("#settings-panic-button-emits-sound").prop("checked", fullConfig.doesPanicButtonEmitsSound);
 | 
						|
	$("#settings-panic-button-enable-hotkey").prop("checked", fullConfig.enablePanicButtonHotkey);
 | 
						|
 | 
						|
	// Private tracker
 | 
						|
	$("#settings-private-tracker-enabled").prop("checked", fullConfig.privateTrackerOptions.isEnabled);
 | 
						|
	$("#settings-private-tracker-use-roleplay-name-as-blip-name").prop("checked", fullConfig.privateTrackerOptions.useRoleplayNameAsBlipName);
 | 
						|
	$("#settings-private-tracker-refresh-time").val(fullConfig.privateTrackerOptions.refreshTime);
 | 
						|
	$("#settings-private-tracker-item-name").val(fullConfig.privateTrackerOptions.itemName);
 | 
						|
	$("#settings-private-tracker-max-frequency").val(fullConfig.privateTrackerOptions.maxFrequency);
 | 
						|
	$("#settings-private-tracker-customize-blip-btn").data("privateTrackerBlipData", fullConfig.privateTrackerOptions.blipData);
 | 
						|
 | 
						|
	// Discord logs
 | 
						|
	$("#settings-areDiscordLogsActive").prop("checked", fullConfig.areDiscordLogsActive);
 | 
						|
	$("#settings-mainDiscordWebhook").val(fullConfig.mainDiscordWebhook);
 | 
						|
	
 | 
						|
	toggleDiscordLogsInSettings(fullConfig.areDiscordLogsActive);	
 | 
						|
 | 
						|
	for(const[logType, webhook] of Object.entries(fullConfig.specificWebhooks)) {
 | 
						|
		$("#settings-specific-webooks-div").find(`[data-log-type="${logType}"]`).val(webhook);
 | 
						|
	}
 | 
						|
	// Discord logs - END
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
$("#settings").submit(function(event) {
 | 
						|
	if (!this.checkValidity()) {
 | 
						|
		event.preventDefault();
 | 
						|
		event.stopPropagation();
 | 
						|
 | 
						|
		return;
 | 
						|
	} else {
 | 
						|
		$(this).removeClass("was-validated");
 | 
						|
	}
 | 
						|
 | 
						|
	let clientSettings = {
 | 
						|
		defaultPanicButton: $("#settings-panic-button-default-key").val(),
 | 
						|
		panicButtonBlip: {
 | 
						|
			sprite: parseInt( $("#settings-panic-button-blip-sprite").val() ),
 | 
						|
			color: parseInt( $("#settings-panic-button-blip-color").val() ),
 | 
						|
			scale: parseInt( $("#settings-panic-button-blip-scale").val() ),
 | 
						|
			duration: parseInt( $("#settings-panic-button-blip-duration").val() ),
 | 
						|
		},
 | 
						|
		doesPanicButtonEmitsSound: $("#settings-panic-button-emits-sound").prop("checked"),
 | 
						|
		enablePanicButtonHotkey: $("#settings-panic-button-enable-hotkey").prop("checked"),
 | 
						|
	}
 | 
						|
 | 
						|
	let sharedSettings = {
 | 
						|
		locale: $("#settings-locale").val(),
 | 
						|
		enableDetailedBlipSprite: $("#settings-enable-detailed-blip-sprite").prop("checked"),
 | 
						|
	}
 | 
						|
 | 
						|
	let serverSettings = {
 | 
						|
		// Generic
 | 
						|
		acePermission: $("#settings-ace-permission").val(),
 | 
						|
 | 
						|
		// Discord logs
 | 
						|
		areDiscordLogsActive: $("#settings-areDiscordLogsActive").prop("checked"),
 | 
						|
		mainDiscordWebhook: $("#settings-mainDiscordWebhook").val(),
 | 
						|
		specificWebhooks: getSeparatedDiscordWebhooks(),
 | 
						|
 | 
						|
		// Private tracker
 | 
						|
		privateTrackerOptions: {
 | 
						|
			isEnabled: $("#settings-private-tracker-enabled").prop("checked"),
 | 
						|
			useRoleplayNameAsBlipName: $("#settings-private-tracker-use-roleplay-name-as-blip-name").prop("checked"),
 | 
						|
			refreshTime: parseInt( $("#settings-private-tracker-refresh-time").val() ),
 | 
						|
			itemName: $("#settings-private-tracker-item-name").val(),
 | 
						|
			maxFrequency: parseInt( $("#settings-private-tracker-max-frequency").val() ),
 | 
						|
			blipData: $("#settings-private-tracker-customize-blip-btn").data("privateTrackerBlipData"),
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
	$.post(`https://${resName}/saveSettings`, JSON.stringify({
 | 
						|
		clientSettings: clientSettings,
 | 
						|
		sharedSettings: sharedSettings,
 | 
						|
		serverSettings: serverSettings,
 | 
						|
	}));
 | 
						|
 | 
						|
	refreshTranslations(sharedSettings.locale);
 | 
						|
});
 | 
						|
 | 
						|
/*
 | 
						|
████████ ██████   █████   ██████ ██   ██ ███████ ██████  ███████
 | 
						|
   ██    ██   ██ ██   ██ ██      ██  ██  ██      ██   ██ ██     
 | 
						|
   ██    ██████  ███████ ██      █████   █████   ██████  ███████
 | 
						|
   ██    ██   ██ ██   ██ ██      ██  ██  ██      ██   ██      ██
 | 
						|
   ██    ██   ██ ██   ██  ██████ ██   ██ ███████ ██   ██ ███████
 | 
						|
*/
 | 
						|
let trackersDatatable = $("#trackers-container").DataTable( {
 | 
						|
	"lengthMenu": [10, 15, 20],
 | 
						|
	"createdRow": function ( row, data, index ) {
 | 
						|
		$(row).addClass("clickable");
 | 
						|
 | 
						|
		$(row).click(function() {
 | 
						|
			let id = parseInt( data[0] );
 | 
						|
 | 
						|
			editTracker(id);
 | 
						|
		})
 | 
						|
	},
 | 
						|
});
 | 
						|
 | 
						|
let trackers = {};
 | 
						|
 | 
						|
function loadTrackers() {
 | 
						|
	$.post(`https://${resName}/getAllTrackers`, {}, async function(rawTrackers) {
 | 
						|
 | 
						|
		// Manually create the table to avoid incompatibilities due table indexing
 | 
						|
		trackers = {};
 | 
						|
 | 
						|
		for(const[k, trackerData] of Object.entries(rawTrackers)) {
 | 
						|
			trackers[trackerData.id] = trackerData;
 | 
						|
		}
 | 
						|
 | 
						|
		trackersDatatable.clear();
 | 
						|
 | 
						|
		for(const[id, trackerData] of Object.entries(trackers)) {
 | 
						|
			trackersDatatable.row.add([
 | 
						|
				id,
 | 
						|
				trackerData.label,
 | 
						|
			]);
 | 
						|
		}
 | 
						|
 | 
						|
		trackersDatatable.draw();
 | 
						|
	})
 | 
						|
}
 | 
						|
 | 
						|
function setDefaultDataOfTracker() {
 | 
						|
	$("#tracker-label").val("Default");
 | 
						|
	$("#tracker-refresh-time").val(5);
 | 
						|
 | 
						|
	$("#tracker-send-options-requires-item").prop("checked", false).change();
 | 
						|
	$("#tracker-receive-options-requires-item").prop("checked", false).change();
 | 
						|
	$("#tracker-use-rp-name-as-blip-name").prop("checked", false).change();
 | 
						|
 | 
						|
	let trackerModal = $("#tracker-modal");
 | 
						|
	trackerModal.data("blipData", getDefaultBlipCustomization());
 | 
						|
	trackerModal.data("signalLostBlipData", getDefaultBlipCustomizationForSignalLost());
 | 
						|
	setSendOptionsAllowedJobs(null);
 | 
						|
	trackerModal.data("receiveOptionsAllowedJobs", null);
 | 
						|
}
 | 
						|
 | 
						|
function setSendOptionsAllowedJobs(jobs) {
 | 
						|
	$("#tracker-modal").data("sendOptionsAllowedJobs", jobs);
 | 
						|
 | 
						|
	const btnDiv = $("#tracker-send-options-can-use-panic-button-div");
 | 
						|
 | 
						|
	if(jobs) {
 | 
						|
		btnDiv.show(jobs);
 | 
						|
	} else {
 | 
						|
		btnDiv.hide(jobs);
 | 
						|
		$("#tracker-send-options-can-use-panic-button").prop("checked", false);
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
$("#tracker-send-options-requires-item").change(function() {
 | 
						|
	const enabled = $(this).prop("checked");
 | 
						|
 | 
						|
	$("#tracker-send-options-item-name").prop("disabled", !enabled).prop("required", enabled);
 | 
						|
	$("#tracker-send-options-item-min-quantity").prop("disabled", !enabled).prop("required", enabled);
 | 
						|
	$("#tracker-send-options-choose-item-btn").prop("disabled", !enabled);
 | 
						|
 | 
						|
	if(!enabled) {
 | 
						|
		$("#tracker-send-options-item-name").val("");
 | 
						|
		$("#tracker-send-options-item-min-quantity").val("");
 | 
						|
	}
 | 
						|
 | 
						|
	// Signal lost 
 | 
						|
	$("#signal-lost-div").toggle(enabled);
 | 
						|
 | 
						|
	if(!enabled) {
 | 
						|
		$("#tracker-signal-lost-notification-enabled").prop("checked", false).change();
 | 
						|
	}
 | 
						|
});
 | 
						|
 | 
						|
$("#tracker-signal-lost-notification-enabled").change(function() {
 | 
						|
	const enabled = $(this).prop("checked");
 | 
						|
 | 
						|
	$("#tracker-signal-lost-duration").prop("required", enabled).prop("disabled", !enabled);
 | 
						|
	$("#tracker-signal-lost-customize-blip-btn").prop("disabled", !enabled);
 | 
						|
});
 | 
						|
 | 
						|
$("#tracker-signal-lost-customize-blip-btn").click(async function() {
 | 
						|
	let trackerModal = $("#tracker-modal");
 | 
						|
 | 
						|
	let oldBlipData = trackerModal.data("signalLostBlipData");
 | 
						|
	let newBlipData = await blipDialog(oldBlipData);
 | 
						|
		
 | 
						|
	trackerModal.data("signalLostBlipData", newBlipData);
 | 
						|
});
 | 
						|
 | 
						|
$("#tracker-send-options-choose-item-btn").click(async function() {
 | 
						|
	const itemName = await itemsDialog();
 | 
						|
 | 
						|
	$("#tracker-send-options-item-name").val(itemName);
 | 
						|
});
 | 
						|
 | 
						|
$("#tracker-receive-options-choose-item-btn").click(async function() {
 | 
						|
	const itemName = await itemsDialog();
 | 
						|
 | 
						|
	$("#tracker-receive-options-item-name").val(itemName);
 | 
						|
});
 | 
						|
 | 
						|
$("#tracker-receive-options-requires-item").change(function() {
 | 
						|
	const enabled = $(this).prop("checked");
 | 
						|
 | 
						|
	$("#tracker-receive-options-item-name").prop("disabled", !enabled).prop("required", enabled);
 | 
						|
	$("#tracker-receive-options-item-min-quantity").prop("disabled", !enabled).prop("required", enabled);
 | 
						|
	$("#tracker-receive-options-choose-item-btn").prop("disabled", !enabled);
 | 
						|
 | 
						|
	if(!enabled) {
 | 
						|
		$("#tracker-receive-options-item-name").val("");
 | 
						|
		$("#tracker-receive-options-item-min-quantity").val("");
 | 
						|
	}
 | 
						|
});
 | 
						|
 | 
						|
$("#tracker-receive-options-allowed-jobs-btn").click(async function() {
 | 
						|
	let trackerModal = $("#tracker-modal");
 | 
						|
 | 
						|
	let oldAllowedJobs = trackerModal.data("receiveOptionsAllowedJobs");
 | 
						|
	let newAllowedJobs = await jobsDialog(oldAllowedJobs);
 | 
						|
 | 
						|
	trackerModal.data("receiveOptionsAllowedJobs", newAllowedJobs);
 | 
						|
});
 | 
						|
 | 
						|
$("#tracker-send-options-allowed-jobs-btn").click(async function() {
 | 
						|
	let trackerModal = $("#tracker-modal");
 | 
						|
 | 
						|
	let oldAllowedJobs = trackerModal.data("sendOptionsAllowedJobs");
 | 
						|
	let newAllowedJobs = await jobsDialog(oldAllowedJobs);
 | 
						|
 | 
						|
	setSendOptionsAllowedJobs(newAllowedJobs);
 | 
						|
});
 | 
						|
 | 
						|
$("#tracker-customize-blip-btn").click(async function() {
 | 
						|
	let trackerModal = $("#tracker-modal");
 | 
						|
 | 
						|
	let oldBlipData = trackerModal.data("blipData");
 | 
						|
	let newBlipData = await blipDialog(oldBlipData);
 | 
						|
		
 | 
						|
	trackerModal.data("blipData", newBlipData);
 | 
						|
});
 | 
						|
 | 
						|
$("#new-tracker-btn").click(function() {
 | 
						|
	let trackerModal = $("#tracker-modal");
 | 
						|
 | 
						|
	// Converts from edit modal to create modal
 | 
						|
	trackerModal.data("action", "create");
 | 
						|
	
 | 
						|
	$("#delete-tracker-btn").hide();
 | 
						|
	$("#save-tracker-btn").text( getLocalizedText("menu:create") );
 | 
						|
	
 | 
						|
	setDefaultDataOfTracker();
 | 
						|
 | 
						|
	trackerModal.modal("show");
 | 
						|
});
 | 
						|
 | 
						|
function editTracker(id) {
 | 
						|
	let trackerModal = $("#tracker-modal");
 | 
						|
 | 
						|
	// Converts from create modal to edit modal
 | 
						|
	trackerModal.data("action", "edit");
 | 
						|
	trackerModal.data("trackerId", id);
 | 
						|
 | 
						|
	$("#delete-tracker-btn").show();
 | 
						|
	$("#save-tracker-btn").text( getLocalizedText("menu:save") );
 | 
						|
 | 
						|
	let trackerInfo = trackers[id];
 | 
						|
	let trackerData = trackerInfo.data;
 | 
						|
 | 
						|
	$("#tracker-label").val(trackerInfo.label);
 | 
						|
	$("#tracker-refresh-time").val(trackerData.refreshTime);
 | 
						|
	$("#tracker-use-rp-name-as-blip-name").prop("checked", trackerData.useRoleplayNameAsBlipName).change();
 | 
						|
 | 
						|
	// Send signal
 | 
						|
	$("#tracker-send-options-requires-item").prop("checked", trackerData.sendSignalOptions.requiredItem != null).change();
 | 
						|
	if(trackerData.sendSignalOptions.requiredItem) {
 | 
						|
		$("#tracker-send-options-item-name").val(trackerData.sendSignalOptions.requiredItem.name);
 | 
						|
		$("#tracker-send-options-item-min-quantity").val(trackerData.sendSignalOptions.requiredItem.minQuantity);
 | 
						|
	}
 | 
						|
 | 
						|
	$("#tracker-signal-lost-notification-enabled").prop("checked", trackerData.sendSignalOptions.hasSignalLostNotification).change();
 | 
						|
	$("#tracker-signal-lost-duration").val(trackerData.sendSignalOptions.signalLostDuration);
 | 
						|
	$("#tracker-send-options-can-use-panic-button").prop("checked", trackerData.sendSignalOptions.canUsePanicButton);
 | 
						|
 | 
						|
	// Receive signal
 | 
						|
	$("#tracker-receive-options-requires-item").prop("checked", trackerData.receiveSignalOptions.requiredItem != null).change();
 | 
						|
	if(trackerData.receiveSignalOptions.requiredItem) {
 | 
						|
		$("#tracker-receive-options-item-name").val(trackerData.receiveSignalOptions.requiredItem.name);
 | 
						|
		$("#tracker-receive-options-item-min-quantity").val(trackerData.receiveSignalOptions.requiredItem.minQuantity);
 | 
						|
	}
 | 
						|
 | 
						|
	trackerModal.data("blipData", trackerData.blipData);
 | 
						|
	trackerModal.data("signalLostBlipData", trackerData.sendSignalOptions.signalLostBlipData);
 | 
						|
	setSendOptionsAllowedJobs(trackerData.sendSignalOptions.allowedJobs);
 | 
						|
	trackerModal.data("receiveOptionsAllowedJobs", trackerData.receiveSignalOptions.allowedJobs);
 | 
						|
 | 
						|
	trackerModal.modal("show");
 | 
						|
}
 | 
						|
 | 
						|
$("#tracker-form").submit(function(event) {
 | 
						|
	if (!this.checkValidity()) {
 | 
						|
		event.preventDefault();
 | 
						|
		event.stopPropagation();
 | 
						|
 | 
						|
		return;
 | 
						|
	} else {
 | 
						|
		$(this).removeClass("was-validated");
 | 
						|
	}
 | 
						|
 | 
						|
	let trackerModal = $("#tracker-modal");
 | 
						|
	let action = trackerModal.data("action");
 | 
						|
 | 
						|
	let trackerData = {
 | 
						|
		label: $("#tracker-label").val(),
 | 
						|
		data: {
 | 
						|
			blipData: trackerModal.data("blipData") || [getDefaultBlipCustomization()],
 | 
						|
			refreshTime: parseInt( $("#tracker-refresh-time").val() ),
 | 
						|
			useRoleplayNameAsBlipName: $("#tracker-use-rp-name-as-blip-name").prop("checked"),
 | 
						|
 | 
						|
			sendSignalOptions: {
 | 
						|
				allowedJobs: trackerModal.data("sendOptionsAllowedJobs") || null,
 | 
						|
				requiredItem: $("#tracker-send-options-requires-item").prop("checked") ? {
 | 
						|
					name: $("#tracker-send-options-item-name").val(),
 | 
						|
					minQuantity: parseInt( $("#tracker-send-options-item-min-quantity").val() )
 | 
						|
				} : null,
 | 
						|
				hasSignalLostNotification: $("#tracker-signal-lost-notification-enabled").prop("checked"),
 | 
						|
				signalLostDuration: parseInt( $("#tracker-signal-lost-duration").val() ),
 | 
						|
				signalLostBlipData: trackerModal.data("signalLostBlipData") || [getDefaultBlipCustomizationForSignalLost()],
 | 
						|
				canUsePanicButton: $("#tracker-send-options-can-use-panic-button").prop("checked")
 | 
						|
			},
 | 
						|
 | 
						|
			receiveSignalOptions: {
 | 
						|
				allowedJobs: trackerModal.data("receiveOptionsAllowedJobs") || null,
 | 
						|
				requiredItem: $("#tracker-receive-options-requires-item").prop("checked") ? {
 | 
						|
					name: $("#tracker-receive-options-item-name").val(),
 | 
						|
					minQuantity: parseInt( $("#tracker-receive-options-item-min-quantity").val() )
 | 
						|
				} : null
 | 
						|
			}
 | 
						|
			
 | 
						|
		}
 | 
						|
	}
 | 
						|
	
 | 
						|
	switch(action) {
 | 
						|
		case "create": {
 | 
						|
			$.post(`https://${resName}/createTracker`, JSON.stringify(trackerData), function(isSuccessful) {
 | 
						|
				if(isSuccessful) {
 | 
						|
					trackerModal.modal("hide");
 | 
						|
					loadTrackers();
 | 
						|
				}
 | 
						|
			});
 | 
						|
 | 
						|
			break;
 | 
						|
		}
 | 
						|
 | 
						|
		case "edit": {
 | 
						|
			$.post(`https://${resName}/updateTracker`, JSON.stringify({trackerId: trackerModal.data("trackerId"), trackerData: trackerData}), function(isSuccessful) {
 | 
						|
				if(isSuccessful) {
 | 
						|
					trackerModal.modal("hide");
 | 
						|
					loadTrackers();
 | 
						|
				}
 | 
						|
			});
 | 
						|
 | 
						|
			break;
 | 
						|
		}
 | 
						|
	}
 | 
						|
})
 | 
						|
 | 
						|
$("#delete-tracker-btn").click(function() {
 | 
						|
	let trackerModal = $("#tracker-modal");
 | 
						|
	let trackerId = trackerModal.data("trackerId");
 | 
						|
 | 
						|
	$.post(`https://${resName}/deleteTracker`, JSON.stringify({trackerId: trackerId}), function(isSuccessful) {
 | 
						|
		if(isSuccessful) {
 | 
						|
			trackerModal.modal("hide");
 | 
						|
			loadTrackers();
 | 
						|
		}
 | 
						|
	});
 | 
						|
}); |