2026-04-14 17:41:39 +02:00

796 lines
24 KiB
JavaScript

const resName = GetParentResourceName();
const DOORS_COLORS = {
0: "green",
1: "red",
}
const ENGINE_COLORS = {
0: "red",
1: "green",
}
const LIGHTS_COLORS = {
0: "red",
1: "green",
2: "blue",
}
const VEHICLE_LOCK_COLORS = {
0: "green",
1: "red",
}
$(".door").click(function() {
let doorIndex = $(this).data("doorIndex");
$.post(`https://${resName}/toggleDoor`, JSON.stringify({doorIndex: doorIndex}));
})
$("#vehicle-engine").click(function() {
$.post(`https://${resName}/toggleEngine`);
});
$("#vehicle-lock").click(function() {
$.post(`https://${resName}/toggleVehicleLock`);
})
function setColorToElement(element, color) {
element.find("i").css("color", color);
return;
}
function updateDoorsClosedStatus(doorsClosedStatus) {
for(const[doorIndex, doorStatus] of Object.entries(doorsClosedStatus)) {
let door = $(`.door[data-door-index="${doorIndex}"]`);
if(doorStatus < 0) { // If less than 0 it means the door is destroyed or doesn't exist on the vehicle
door.css("opacity", "15%");
door.toggleClass("clickable", false);
} else {
door.css("opacity", "100%");
door.toggleClass("clickable", true);
}
const color = DOORS_COLORS[doorStatus];
setColorToElement(door, color);
}
}
function updateEngineStatus(isEngineStarted) {
const color = ENGINE_COLORS[isEngineStarted];
setColorToElement($("#vehicle-engine"), color);
}
function updateVehicleLightsStatus(vehicleLightsStatus) {
const color = LIGHTS_COLORS[vehicleLightsStatus];
setColorToElement($("#vehicle-light"), color);
}
function updateVehicleLockStatus(isVehicleLocked) {
const color = VEHICLE_LOCK_COLORS[isVehicleLocked];
setColorToElement($("#vehicle-lock"), color);
}
function updateVehicleName(vehicleName) {
$("#vehicle-name").text(vehicleName);
var carname = document.getElementById('vehicle-name');
var carnameLength = carname.innerHTML.length;
if (carnameLength >= 25) {
$("#vehiclemenu").css("padding-top", "150px")
} else if (carnameLength >= 15) {
$("#vehiclemenu").css("padding-top", "125px")
} else {
$("#vehiclemenu").css("padding-top", "100px")
}
}
function updateSelectedVehiclePlate(event) {
let plate = $(this).data("plate");
let netId = $(this).data("netId");
$.post(`https://${resName}/selectVehiclePlate`, JSON.stringify({plate: plate, netId: netId}));
}
function updateOwnedPlates(ownedPlates) {
let ownedPlatesDiv = $("#owned-plates");
ownedPlatesDiv.empty();
if(ownedPlates) {
for(const[plate, vehiclesNetIDs] of Object.entries(ownedPlates)) {
for(const[netID, vehicleLabel] of Object.entries(vehiclesNetIDs)) {
if(!vehicleLabel) continue; // It may happen that if the vehicle net ID is below or 10 or similar, javascript fills the Object as an array
let plateElement = $(`<li class="list-group-item vehicle-plate text-center fw-bold" data-net-id="${netID}" data-plate="${plate}">${plate.toUpperCase()} - ${vehicleLabel}</li>`);
plateElement.click(updateSelectedVehiclePlate);
ownedPlatesDiv.append(plateElement);
}
}
}
}
// So dropdown won't be closed when clicking on it
$(".allow-focus").click(function(e) {
e.stopPropagation();
})
$(".setting").change(function() {
let setting = $(this).data("setting");
let value = $(this).prop("checked");
$.post(`https://${resName}/setPlayerSetting`, JSON.stringify({settingName: setting, settingValue: value}));
})
function updatePlayerSettings(settings) {
for(const[settingName, settingValue] of Object.entries(settings)) {
let setting = $(`.setting[data-setting="${settingName}"]`);
setting.prop("checked", settingValue);
}
}
function updateServerSettings(settings) {
if(!settings.allowAutoCloseDoorsOnVehicleLock) {
$(`.setting[data-setting="autoCloseDoorsOnVehicleLock"]`).prop("checked", false).prop("disabled", true);
}
if(!settings.allowAutoOpenDriverDoorOnUnlock) {
$(`.setting[data-setting="autoOpenDriverDoorOnUnlock"]`).prop("checked", false).prop("disabled", true);
}
}
/* ADMIN MENU STUFF */
$("#new-job-vehicle-btn").click(function() {
let jobVehiclesModal = $("#job-vehicle-modal");
// Converts from edit modal to create modal
jobVehiclesModal.data("action", "create");
$("#delete-job-vehicle-btn").hide();
$("#save-job-vehicle-btn").text( getLocalizedText("menu:create") );
// Sets the vehicle name and DISABLES the edit of the vehicle
$("#job-vehicle-id").val("").prop("disabled", false);
$(`input[type=radio][name="job-vehicle-type"]`).prop("disabled", false);
setAllowedJob({}); // Clears the old allowed jobs
$("#leave-vehicle-if-not-allowed").prop("checked", false).change();
jobVehiclesModal.modal("show");
})
async function getJobLabel(jobName) {
return new Promise((resolve, reject) => {
$.post(`https://${resName}/getJobLabel`, JSON.stringify({jobName: jobName}), function(jobLabel) {
resolve(jobLabel);
})
})
}
async function setAllowedJob(allowedJobs) {
let allowedJobsDiv = $("#allowed-jobs");
allowedJobsDiv.val("");
allowedJobsDiv.data("allowedJobs", allowedJobs);
if(allowedJobs === false) {
allowedJobsDiv.val(getLocalizedText("menu:all_jobs_allowed"));
return;
}
let text = "";
let isTheFirst = true;
for(const[jobName, _] of Object.entries(allowedJobs)) {
if(isTheFirst) {
text = await getJobLabel(jobName);
isTheFirst = false;
} else {
text += `, ${await getJobLabel(jobName)}`;
}
}
allowedJobsDiv.val(text);
}
/* JOBS VEHICLES */
let jobVehiclesDatatable = $("#job-vehicles-container").DataTable( {
"lengthMenu": [10, 15, 20],
"createdRow": function ( row, data, index ) {
$(row).addClass("clickable");
$(row).click(function() {
let id = data[0]
editJobVehicle(id);
})
},
});
let jobVehicles = {};
function loadJobVehicles() {
$.post(`https://${resName}/getAllJobVehicles`, {}, async function(rawJobVehicles) {
// Manually create the table to avoid incompatibilities due table indexing
jobVehicles = {};
for(const[k, jobVehicleData] of Object.entries(rawJobVehicles)) {
jobVehicles[jobVehicleData.id] = jobVehicleData;
}
jobVehiclesDatatable.clear();
for(const[id, jobVehicleData] of Object.entries(jobVehicles)) {
let jobNames = "";
let isTheFirstName = true;
if(jobVehicleData.allowedJobs) {
for(const[jobName, _] of Object.entries(jobVehicleData.allowedJobs)) {
if(isTheFirstName) {
jobNames = await getJobLabel(jobName);;
isTheFirstName = false;
} else {
jobNames += `, ${ await getJobLabel(jobName) }`;
}
}
}
// If isTheFirstName is still to true, it means that there is no job allowed
if(isTheFirstName) {
jobNames = "None";
}
jobVehiclesDatatable.row.add([
id,
jobNames,
jobVehicleData.type == "plate" ? getLocalizedText("menu:plate") : getLocalizedText("menu:vehicle_model"),
]);
}
jobVehiclesDatatable.draw();
})
}
$("#job-vehicle-choose-jobs-btn").click(async function() {
let currentAllowedJobs = $("#allowed-jobs").data("allowedJobs");
let allowedJobs = await jobsDialog(currentAllowedJobs);
setAllowedJob(allowedJobs);
});
function editJobVehicle(id) {
let jobVehiclesModal = $("#job-vehicle-modal");
let jobVehicleData = jobVehicles[id];
// Converts from create modal to edit modal
jobVehiclesModal.data("action", "edit");
jobVehiclesModal.data("id", id);
$("#delete-job-vehicle-btn").show();
$("#save-job-vehicle-btn").text( getLocalizedText("menu:save") );
// Sets the vehicle name and DISABLES the edit of the id
$("#job-vehicle-id").val(jobVehicleData.id).prop("disabled", true);
$(`input[type=radio][name="job-vehicle-type"]`).prop("disabled", true);
setAllowedJob(jobVehicleData.allowedJobs);
switchJobVehicleType(jobVehicleData.type);
if(jobVehicleData.kickIfNotAllowed >= 1) {
$("#leave-vehicle-if-not-allowed").prop("checked", true).change();
if(jobVehicleData.kickIfNotAllowed == 2) {
$("#leave-vehicle-if-not-allowed-only-driver").prop("checked", true);
}
} else {
$("#leave-vehicle-if-not-allowed").prop("checked", false).change()
}
jobVehiclesModal.modal("show");
}
$("#delete-job-vehicle-btn").click(function() {
let jobVehiclesModal = $("#job-vehicle-modal");
let id = jobVehiclesModal.data("id");
$.post(`https://${resName}/deleteJobVehicle`, JSON.stringify({id: id}), function(isSuccessful) {
if(isSuccessful) {
loadJobVehicles();
jobVehiclesModal.modal("hide");
}
});
})
$("#leave-vehicle-if-not-allowed").change(function() {
let enabled = $(this).prop("checked");
$("#leave-vehicle-if-not-allowed-only-driver").prop("disabled", !enabled)
if(!enabled) {
$("#leave-vehicle-if-not-allowed-only-driver").prop("checked", false);
}
})
$("#job-vehicle-form").submit(function(event) {
if(isThereAnyErrorInForm(event)) return;
let jobVehiclesModal = $("#job-vehicle-modal");
let action = jobVehiclesModal.data("action");
// 0 = disabled, 1 = all seats, 2 = only driver
let kickIfNotAllowedStatus = $("#leave-vehicle-if-not-allowed").prop("checked") ? ( $("#leave-vehicle-if-not-allowed-only-driver").prop("checked") ? 2 : 1 ) : 0
let jobVehicleData = {
id: $("#job-vehicle-id").val(),
allowedJobs: $("#allowed-jobs").data("allowedJobs"),
kickIfNotAllowed: kickIfNotAllowedStatus,
type: $("input[name='job-vehicle-type']:checked").val(),
}
switch(action) {
case "create": {
$.post(`https://${resName}/createJobVehicle`, JSON.stringify(jobVehicleData), function(isSuccessful) {
if(isSuccessful) {
loadJobVehicles();
jobVehiclesModal.modal("hide");
}
});
break;
}
case "edit": {
$.post(`https://${resName}/updateJobVehicle`, JSON.stringify(jobVehicleData), function(isSuccessful) {
if(isSuccessful) {
loadJobVehicles();
jobVehiclesModal.modal("hide");
}
});
break;
}
}
})
function switchJobVehicleType(type) {
$(`input[type=radio][name="job-vehicle-type"][value="${type}"]`).prop("checked", true);
switch(type) {
case "plate": {
$("#job-vehicle-id-label").text( getLocalizedText("menu:plate") );
break;
}
case "vehicle": {
$("#job-vehicle-id-label").text( getLocalizedText("menu:vehicle_model") );
break;
}
}
}
// On radio button change named "job-vehicle-type"
$("input[name='job-vehicle-type']").change(function() {
let type = $(this).val();
switchJobVehicleType(type);
});
// Open/Close menu
function openMenu(version, fullConfig) {
$("#vehicles-keys-version").text(version);
loadJobVehicles();
loadSettings(fullConfig);
$("#vehicles-keys").show()
}
function closeMenu() {
// Resets current active tab
$("#vehicles-keys").find(".nav-link, .tab-pane").each(function() {
if($(this).data("isDefault") == "1") {
$(this).addClass(["active", "show"])
} else {
$(this).removeClass(["active", "show"])
}
})
$("#vehicles-keys").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 "updateDoorsClosedStatus": {
updateDoorsClosedStatus(data.doorsClosedStatus);
break;
}
case "updateVehicleEngineStatus": {
updateEngineStatus(data.vehicleEngineStatus);
break;
}
case "updateVehicleLightsStatus": {
updateVehicleLightsStatus(data.vehicleLightsStatus);
break;
}
case "updateVehicleLockStatus": {
updateVehicleLockStatus(data.vehicleLockStatus);
break;
}
case "updateVehicleName": {
updateVehicleName(data.vehicleName);
break;
}
case "updateOwnedPlates": {
updateOwnedPlates(data.ownedPlates);
break;
}
case "updatePlayerSettings": {
updatePlayerSettings(data.settings);
break;
}
case "updateServerSettings": {
updateServerSettings(data.settings);
break;
}
case "openMenu": {
openMenu(data.version, data.fullConfig);
break;
}
case "vehicleTransfer": {
$("#vehicle-transfer-plate").val(data.plate);
$("#vehicle-transfer-vehicle").val(data.vehicleLabel);
$("#vehicle-transfer-price").val(0);
$("#vehicle-transfer-modal").modal("show");
break;
}
case "vehicleTransferAskConfirm": {
$("#vehicle-transfer-ask-confirm-plate").val(data.plate);
$("#vehicle-transfer-ask-confirm-vehicle").val(data.vehicleLabel);
$("#vehicle-transfer-ask-confirm-price").val(data.price);
$("#vehicle-transfer-ask-confirm-modal").modal("show");
break;
}
}
});
/* SETTINGS */
function setVehicleAlarmsItems(vehicleAlarmsItems) {
for(const[alarmType, itemName] of Object.entries(vehicleAlarmsItems)) {
$("#settings_vehicleAlarmsItems").find(`[data-alarm-type="${alarmType}"]`).val(itemName);
}
}
function getVehicleAlarmsItems() {
let alarms = {};
$("#settings_vehicleAlarmsItems").find(`input`).each(function() {
alarms[$(this).data("alarmType")] = $(this).val();
})
return alarms;
}
function setAlarmRadarBlip(blip) {
$("#alarm-radar-blip-sprite").val(blip.sprite);
$("#alarm-radar-blip-color").val(blip.color);
$("#alarm-radar-blip-scale").val(blip.scale);
$("#alarm-radar-blip-interval").val(blip.interval);
$("#alarm-radar-blip-duration").val(blip.duration);
}
function getAlarmRadarBlip() {
return {
sprite: parseInt( $("#alarm-radar-blip-sprite").val() ),
color: parseInt( $("#alarm-radar-blip-color").val() ),
scale: parseFloat( $("#alarm-radar-blip-scale").val() ),
interval: parseInt( $("#alarm-radar-blip-interval").val() ),
duration: parseInt( $("#alarm-radar-blip-duration").val() )
}
}
function setVehicleLockAnim(anim) {
$("#vehiclelock-anim-dict").val(anim.dict);
$("#vehiclelock-anim-name").val(anim.name);
$("#vehiclelock-anim-duration").val(anim.duration);
}
function getVehicleLockAnim() {
return {
dict: $("#vehiclelock-anim-dict").val(),
name: $("#vehiclelock-anim-name").val(),
duration: parseInt( $("#vehiclelock-anim-duration").val() )
}
}
function setAlarmBlip(blip) {
$("#alarm-blip-sprite").val(blip.sprite);
$("#alarm-blip-color").val(blip.color);
$("#alarm-blip-scale").val(blip.scale);
$("#alarm-blip-duration").val(blip.duration);
}
function getAlarmBlip() {
return {
sprite: parseInt( $("#alarm-blip-sprite").val() ),
color: parseInt( $("#alarm-blip-color").val() ),
scale: parseFloat( $("#alarm-blip-scale").val() ),
duration: parseInt( $("#alarm-blip-duration").val() )
}
}
$("#settings-choose-jobs-for-alarms-btn").click(async function() {
const oldJobs = $(this).data("allowedJobs");
const newJobs = await jobsDialog(oldJobs);
$(this).data("allowedJobs", newJobs);
});
function loadSettings(fullConfig) {
// Generic
setTomSelectValue("#settings_locale", fullConfig.locale);
$("#settings_acePermission").val(fullConfig.acePermission);
$("#can-move-visual-with-keys-menu-opened").prop("checked", fullConfig.canMoveVisualWithKeysMenuOpened);
// NPCs vehicles
$("#lock-driving-vehicles-npc").prop("checked", fullConfig.lockDrivingVehiclesNPC);
$("#lock-parked-vehicles").prop("checked", fullConfig.lockParkedVehicles);
$("#probability-police-alert-npc-stolen-vehicles").val(fullConfig.probabilityPoliceAlertNpcStolenVehicles);
$("#can-target-driving-npcs").prop("checked", fullConfig.canTargetDrivingNPCs);
$("#can-search-for-keys").prop("checked", fullConfig.canSearchForKeys);
$("#probability-to-find-keys").val(fullConfig.chancesToFindKeys);
$("#seconds-to-search-for-keys").val(fullConfig.secondsToSearchForKeys);
// Vehicle contract item name
$("#vehicle-transfer-contract-item-name").val(fullConfig.vehicleTransferContractItemName);
// Alarms
setVehicleAlarmsItems(fullConfig.vehicleAlarmsItems);
setAlarmRadarBlip(fullConfig.alarmRadarBlip);
setVehicleLockAnim(fullConfig.vehicleLockAnim);
$("#settings-choose-jobs-for-alarms-btn").data("allowedJobs", fullConfig.jobsThatCanInstallAlarms);
$("#default-vehiclelock-key").val(fullConfig.defaultVehiclelockKey);
$("#allow-auto-close-doors-on-vehicle-lock").prop("checked", fullConfig.allowAutoCloseDoorsOnVehicleLock);
$("#allow-auto-open-driver-door-on-unlock").prop("checked", fullConfig.allowAutoOpenDriverDoorOnUnlock);
$("#time-to-hotwire").val(fullConfig.timeToHotwire);
$("#hotwire-anim-dict").val(fullConfig.hotwireAnimDict);
$("#hotwire-anim-name").val(fullConfig.hotwireAnimName);
$("#hotwire-probability-of-success").val(fullConfig.hotwireProbabilityOfSuccess);
setTomSelectValue("#settings_menuPosition", fullConfig.menuPosition);
$("#alarm-seconds-duration").val(fullConfig.alarmSecondsDuration);
setAlarmBlip(fullConfig.alarmBlip);
$("#seconds-to-install-alarm").val(fullConfig.secondsToInstallAlarm);
$("#allow-breaking-windows-of-players-owned-vehicles").prop("checked", fullConfig.allowBreakingWindowsOfPlayersOwnedVehicles);
$("#completely-disable-window-destroy-feature").prop("checked", fullConfig.completelyDisableWindowDestroy);
$("#is-hotwire-required").prop("checked", fullConfig.isHotwireRequired);
$("#default-vehiclekeys-menu-key").val(fullConfig.defaultVehiclekeysMenuKey);
$("#use-3d-text").prop("checked", fullConfig.use3Dtext);
$("#can-players-share-keys").prop("checked", fullConfig.canPlayersShareKeys);
$("#auto-start-engine-if-the-vehicle-is-owned").prop("checked", fullConfig.autoStartEngineIfTheVehicleIsOwned);
// Lockpick
$("#lockpick-item-name").val(fullConfig.lockpick.itemName)
$("#lockpick-lose-on-use").prop("checked", fullConfig.lockpick.loseOnUse)
$("#time-to-lockpick").val(fullConfig.lockpick.timeToLockpick)
$("#lockpick-disable-on-player-owned").prop("checked", fullConfig.lockpick.disableOnPlayerOwnedVehicles)
// Toggle engine
$("#default-toggle-engine-key").val(fullConfig.defaultToggleEngineKey);
$("#enable-toggle-engine-key").prop("checked", fullConfig.enableKeyToToggleEngine);
// Discord webhooks
$("#enable-discord-logs").prop("checked", fullConfig.areDiscordLogsActive).change();
$("#main-discord-webhook").val(fullConfig.mainDiscordWebhook);
if(fullConfig.specificWebhooks) {
for(const[webhookType, webhookUrl] of Object.entries(fullConfig.specificWebhooks)) {
$("#discord-specific-webhooks").find(`[data-webhook-type="${webhookType}"]`).val(webhookUrl);
}
}
}
function getSpecificWebhooks() {
let webhooks = {};
$("#discord-specific-webhooks").find(".webhook").each(function() {
let webhookType = $(this).data("webhookType");
let webhook = $(this).val();
if(webhook) {
webhooks[webhookType] = webhook;
}
});
return webhooks;
}
$("#enable-discord-logs").change(function() {
let enabled = $(this).prop("checked");
$("#main-discord-webhook").prop("disabled", !enabled);
$("#main-discord-webhook").prop("required", enabled);
$("#discord-specific-webhooks").find(".webhook").each(function() {
$(this).prop("disabled", !enabled);
});
});
$("#settings").submit(async function(event) {
if(isThereAnyErrorInForm(event)) return;
let clientSettings = {
vehicleLockAnim: getVehicleLockAnim(),
defaultVehiclelockKey: $("#default-vehiclelock-key").val(),
allowAutoCloseDoorsOnVehicleLock: $("#allow-auto-close-doors-on-vehicle-lock").prop("checked"),
allowAutoOpenDriverDoorOnUnlock: $("#allow-auto-open-driver-door-on-unlock").prop("checked"),
timeToHotwire: parseInt( $("#time-to-hotwire").val() ),
hotwireAnimDict: $("#hotwire-anim-dict").val(),
hotwireAnimName: $("#hotwire-anim-name").val(),
hotwireProbabilityOfSuccess: parseInt( $("#hotwire-probability-of-success").val() ),
menuPosition: $("#settings_menuPosition").val(),
alarmSecondsDuration: parseInt( $("#alarm-seconds-duration").val() ),
alarmBlip: getAlarmBlip(),
secondsToInstallAlarm: parseInt( $("#seconds-to-install-alarm").val() ),
allowBreakingWindowsOfPlayersOwnedVehicles: $("#allow-breaking-windows-of-players-owned-vehicles").prop("checked"),
isHotwireRequired: $("#is-hotwire-required").prop("checked"),
defaultVehiclekeysMenuKey: $("#default-vehiclekeys-menu-key").val(),
use3Dtext: $("#use-3d-text").prop("checked"),
canPlayersShareKeys: $("#can-players-share-keys").prop("checked"),
autoStartEngineIfTheVehicleIsOwned: $("#auto-start-engine-if-the-vehicle-is-owned").prop("checked"),
defaultToggleEngineKey: $("#default-toggle-engine-key").val(),
lockDrivingVehiclesNPC: $("#lock-driving-vehicles-npc").prop("checked"),
lockParkedVehicles: $("#lock-parked-vehicles").prop("checked"),
completelyDisableWindowDestroy: $("#completely-disable-window-destroy-feature").prop("checked"),
// NPC vehicles
canTargetDrivingNPCs: $("#can-target-driving-npcs").prop("checked"),
canSearchForKeys: $("#can-search-for-keys").prop("checked"),
chancesToFindKeys: parseInt( $("#probability-to-find-keys").val() ),
secondsToSearchForKeys: parseInt( $("#seconds-to-search-for-keys").val() ),
enableKeyToToggleEngine: $("#enable-toggle-engine-key").prop("checked"),
canMoveVisualWithKeysMenuOpened: $("#can-move-visual-with-keys-menu-opened").prop("checked")
}
let sharedSettings = {
locale: $("#settings_locale").val(),
alarmRadarBlip: getAlarmRadarBlip(),
lockpick: {
itemName: $("#lockpick-item-name").val(),
loseOnUse: $("#lockpick-lose-on-use").prop("checked"),
timeToLockpick: parseInt( $("#time-to-lockpick").val() ),
disableOnPlayerOwnedVehicles: $("#lockpick-disable-on-player-owned").prop("checked")
}
}
let serverSettings = {
acePermission: $("#settings_acePermission").val(),
vehicleAlarmsItems: getVehicleAlarmsItems(),
probabilityPoliceAlertNpcStolenVehicles: parseInt( $("#probability-police-alert-npc-stolen-vehicles").val() ),
vehicleTransferContractItemName: $("#vehicle-transfer-contract-item-name").val(),
jobsThatCanInstallAlarms: $("#settings-choose-jobs-for-alarms-btn").data("allowedJobs"),
areDiscordLogsActive: $("#enable-discord-logs").prop("checked"),
mainDiscordWebhook: $("#main-discord-webhook").val(),
specificWebhooks: getSpecificWebhooks(),
}
const response = await $.post(`https://${resName}/saveSettings`, JSON.stringify({
clientSettings: clientSettings,
serverSettings: serverSettings,
sharedSettings: sharedSettings,
}));
showServerResponse(response);
refreshTranslations(sharedSettings.locale);
});
$("#vehicle-transfer-choose-target-btn").click(function() {
const transferModal = $("#vehicle-transfer-modal");
transferModal.modal("hide");
$.post(`https://${resName}/chooseTarget`, JSON.stringify({}), function(targetServerId) {
$("#vehicle-transfer-target").val(targetServerId);
transferModal.modal("show");
});
})
$("#vehicle-transfer-cancel").click(function() {
$.post(`https://${resName}/cancelVehicleTransfer`, {});
})
$("#vehicle-transfer-form").submit(function(event) {
if(isThereAnyErrorInForm(event)) return;
const targetServerId = parseInt( $("#vehicle-transfer-target").val() );
const plate = $("#vehicle-transfer-plate").val();
const vehicleLabel = $("#vehicle-transfer-vehicle").val();
const price = parseInt( $("#vehicle-transfer-price").val() );
$.post(`https://${resName}/transferVehicle`, JSON.stringify({
targetServerId: targetServerId,
plate: plate,
vehicleLabel: vehicleLabel,
price: price,
}));
$("#vehicle-transfer-modal").modal("hide");
});
$("#vehicle-transfer-ask-confirm-form").submit(function(event) {
if(isThereAnyErrorInForm(event)) return;
$.post(`https://${resName}/confirmTransfer`);
$("#vehicle-transfer-ask-confirm-modal").modal("hide");
})
$("#vehicle-transfer-ask-confirm-cancel").click(function() {
$.post(`https://${resName}/cancelTransfer`);
})