260 lines
		
	
	
		
			No EOL
		
	
	
		
			6.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			260 lines
		
	
	
		
			No EOL
		
	
	
		
			6.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
async function itemsDialog() {
 | 
						|
	return new Promise((resolve, reject) => {
 | 
						|
		let inputItemsModal = $("#input-items-dialog-modal")
 | 
						|
		inputItemsModal.modal("show");
 | 
						|
	
 | 
						|
		$("#input-item-search").val("");
 | 
						|
		
 | 
						|
		$.post(`https://${resName}/getAllItems`, JSON.stringify({}), function (items) {
 | 
						|
			let itemListDiv = $("#items-list");
 | 
						|
	
 | 
						|
			itemListDiv.empty();
 | 
						|
	
 | 
						|
			for(const[itemName, itemData] of Object.entries(items)) {
 | 
						|
				let itemDiv = $(`
 | 
						|
					<li class="list-group-item list-group-item-action" value=${itemName}>${itemData.label}</li>
 | 
						|
				`);
 | 
						|
	
 | 
						|
				itemDiv.click(function() {
 | 
						|
					inputItemsModal.modal("hide");
 | 
						|
					resolve(itemName);
 | 
						|
				});
 | 
						|
	
 | 
						|
				itemListDiv.append(itemDiv);
 | 
						|
			}
 | 
						|
		});
 | 
						|
	})
 | 
						|
}
 | 
						|
 | 
						|
$("#input-item-search").on("keyup", function() {
 | 
						|
	let text = $(this).val().toLowerCase();
 | 
						|
 | 
						|
	$("#items-list li").filter(function() {
 | 
						|
      $(this).toggle($(this).text().toLowerCase().indexOf(text) > -1)
 | 
						|
    });
 | 
						|
})
 | 
						|
 | 
						|
async function weaponsDialog() {
 | 
						|
	return new Promise((resolve, reject) => {
 | 
						|
		let inputWeaponsModal = $("#input-weapons-dialog-modal")
 | 
						|
		inputWeaponsModal.modal("show");
 | 
						|
 | 
						|
		$("#input-weapon-search").val();
 | 
						|
 | 
						|
		$.post(`https://${resName}/getAllWeapons`, JSON.stringify({}), function (weapons) {
 | 
						|
			let weaponListDiv = $("#weapons-list");
 | 
						|
 | 
						|
			weaponListDiv.empty();
 | 
						|
 | 
						|
			weapons.forEach(weaponData => {
 | 
						|
				let weaponDiv = $(`
 | 
						|
					<li class="list-group-item list-group-item-action" value=${weaponData.name}>${weaponData.label}</li>
 | 
						|
				`);
 | 
						|
 | 
						|
				weaponDiv.click(function() {
 | 
						|
					inputWeaponsModal.modal("hide");
 | 
						|
					resolve(weaponData.name);
 | 
						|
				});
 | 
						|
 | 
						|
				weaponListDiv.append(weaponDiv);
 | 
						|
			})
 | 
						|
		});
 | 
						|
	})
 | 
						|
}
 | 
						|
 | 
						|
$("#input-weapon-search").on("keyup", function() {
 | 
						|
	let text = $(this).val().toLowerCase();
 | 
						|
 | 
						|
	$("#weapons-list li").filter(function() {
 | 
						|
      $(this).toggle($(this).text().toLowerCase().indexOf(text) > -1)
 | 
						|
    });
 | 
						|
})
 | 
						|
 | 
						|
async function objectDialog(type) {
 | 
						|
	return new Promise(async function(resolve, reject) {
 | 
						|
		switch(type) {
 | 
						|
			case "item": {
 | 
						|
				resolve( await itemsDialog() );
 | 
						|
	
 | 
						|
				break;
 | 
						|
			}
 | 
						|
	
 | 
						|
			case "account": {
 | 
						|
				resolve( await accountsDialog() );
 | 
						|
 | 
						|
				break;
 | 
						|
			}
 | 
						|
	
 | 
						|
			case "weapon": {
 | 
						|
				resolve( await weaponsDialog() );
 | 
						|
 | 
						|
				break;
 | 
						|
			}
 | 
						|
		}
 | 
						|
	});
 | 
						|
}
 | 
						|
 | 
						|
/* Limited objects dialog */
 | 
						|
async function limitedObjectsDialog(oldLimitedObjects) {
 | 
						|
	return new Promise((resolve, reject) => {
 | 
						|
		let limitedObjectsModal = $("#limited-objects-dialog-modal")
 | 
						|
		limitedObjectsModal.modal("show");
 | 
						|
	
 | 
						|
		$("#limited-objects-list").empty();
 | 
						|
 | 
						|
		if(oldLimitedObjects) {
 | 
						|
			
 | 
						|
			if(oldLimitedObjects.item) {
 | 
						|
				for(const objectName of Object.keys(oldLimitedObjects.item)) {
 | 
						|
					let objectData = {
 | 
						|
						name: objectName,
 | 
						|
						type: "item",
 | 
						|
					}
 | 
						|
	
 | 
						|
					addLimitedObjectToList(objectData);
 | 
						|
				}
 | 
						|
			}
 | 
						|
			
 | 
						|
			if(oldLimitedObjects.weapon) {
 | 
						|
				for(const objectName of Object.keys(oldLimitedObjects.weapon)) {
 | 
						|
					let objectData = {
 | 
						|
						name: objectName,
 | 
						|
						type: "weapon",
 | 
						|
					}
 | 
						|
	
 | 
						|
					addLimitedObjectToList(objectData);
 | 
						|
				}
 | 
						|
			}
 | 
						|
		}
 | 
						|
		
 | 
						|
		$("#limited-objects-form").unbind().submit(function(event) {
 | 
						|
			if (!this.checkValidity()) {
 | 
						|
				event.preventDefault();
 | 
						|
				event.stopPropagation();
 | 
						|
		
 | 
						|
				return;
 | 
						|
			} else {
 | 
						|
				$(this).removeClass("was-validated");
 | 
						|
			}
 | 
						|
 | 
						|
			let limitedObjects = {
 | 
						|
				"item": {},
 | 
						|
				"weapon": {},
 | 
						|
			};
 | 
						|
 | 
						|
			$("#limited-objects-list .limited-object").each(function() {
 | 
						|
				let type = $(this).find(".item-type").val();
 | 
						|
				let name = $(this).find(".item-name").val();
 | 
						|
 | 
						|
				limitedObjects[type][name] = true;
 | 
						|
			})
 | 
						|
			
 | 
						|
			limitedObjectsModal.modal("hide");
 | 
						|
 | 
						|
			resolve(limitedObjects);
 | 
						|
		})
 | 
						|
	})
 | 
						|
}
 | 
						|
 | 
						|
async function addLimitedObjectToList(objectData) {
 | 
						|
	let objectDiv = $(`
 | 
						|
		<div class="row g-2 row-cols-auto align-items-center text-body my-2 limited-object justify-content-center">
 | 
						|
			<button type="button" class="btn btn-danger delete-limited-object-btn me-3" ><i class="bi bi-trash-fill"></i></button>	
 | 
						|
 | 
						|
			<select class="form-select item-type" style="width: auto;">
 | 
						|
				<option selected value="item">${getLocalizedText("menu:item")}</option>
 | 
						|
				${await getFramework() == "ESX" ? `<option value="weapon">${getLocalizedText("menu:weapon")}</option>` : ""}
 | 
						|
			</select>
 | 
						|
			
 | 
						|
			<div class="form-floating col-6">
 | 
						|
				<input type="text" class="form-control item-name" placeholder="Name" required>
 | 
						|
				<label>${ getLocalizedText("menu:object_name") }</label>
 | 
						|
			</div>
 | 
						|
 | 
						|
			<button type="button" class="btn btn-secondary col-auto choose-item-btn" data-bs-toggle="tooltip" data-bs-placement="top" title="${ getLocalizedText("menu:choose") }"><i class="bi bi-list-ul"></i></button>	
 | 
						|
		</div>
 | 
						|
	`);
 | 
						|
 | 
						|
	objectDiv.find(".delete-limited-object-btn").click(function() {
 | 
						|
		objectDiv.remove();
 | 
						|
	});
 | 
						|
 | 
						|
	objectDiv.find(".choose-item-btn").click(async function() {
 | 
						|
		let objectType = objectDiv.find(".item-type").val();
 | 
						|
 | 
						|
		let objectName = await objectDialog(objectType);
 | 
						|
 | 
						|
		objectDiv.find(".item-name").val(objectName);
 | 
						|
	}).tooltip();
 | 
						|
 | 
						|
	if(objectData) {
 | 
						|
		objectDiv.find(".item-type").val(objectData.type);
 | 
						|
		objectDiv.find(".item-name").val(objectData.name);
 | 
						|
	}
 | 
						|
 | 
						|
	$("#limited-objects-list").append(objectDiv);
 | 
						|
}
 | 
						|
 | 
						|
$("#limited-objects-list-add-object-btn").click(function() {
 | 
						|
	addLimitedObjectToList();
 | 
						|
})
 | 
						|
 | 
						|
async function inputDialog(title, label) {
 | 
						|
	return new Promise((resolve, reject) => {
 | 
						|
		let inputDialogModal = $("#input-dialog-modal");
 | 
						|
		$("#input-dialog-modal-value").val("");
 | 
						|
		$("#input-dialog-modal-title").text(title);
 | 
						|
		$("#input-dialog-modal-label").text(label);
 | 
						|
	
 | 
						|
		inputDialogModal.modal("show");
 | 
						|
 | 
						|
		$("#input-dialog-modal-form").unbind().submit(function(event) {
 | 
						|
			if (!this.checkValidity()) {
 | 
						|
				event.preventDefault();
 | 
						|
				event.stopPropagation();
 | 
						|
		
 | 
						|
				return;
 | 
						|
			} else {
 | 
						|
				$(this).removeClass("was-validated");
 | 
						|
			}
 | 
						|
	
 | 
						|
			inputDialogModal.modal("hide");
 | 
						|
	
 | 
						|
			resolve( $("#input-dialog-modal-value").val() );
 | 
						|
		});
 | 
						|
	})
 | 
						|
}
 | 
						|
 | 
						|
function toggleCursor(enabled) {
 | 
						|
	if (enabled) {
 | 
						|
		$.post(`https://${resName}/enableCursor`, JSON.stringify({}));
 | 
						|
	} else {
 | 
						|
		$.post(`https://${resName}/disableCursor`, JSON.stringify({}));
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
function loadDialog(dialogName) {
 | 
						|
	var script = document.createElement('script');
 | 
						|
 | 
						|
	console.log(`../utils/dialogs/${dialogName}/${dialogName}.js`)
 | 
						|
	script.setAttribute('src',`../utils/dialogs/${dialogName}/${dialogName}.js`);
 | 
						|
 | 
						|
	document.head.appendChild(script);
 | 
						|
}
 | 
						|
 | 
						|
// Messages received by client
 | 
						|
window.addEventListener('message', (event) => {
 | 
						|
	let data = event.data;
 | 
						|
	let action = data.action;
 | 
						|
 | 
						|
	switch(action) {
 | 
						|
		case "loadDialog": {
 | 
						|
			var script = document.createElement('script');
 | 
						|
			script.setAttribute('src',`../utils/dialogs/${data.dialogName}/${data.dialogName}.js`);
 | 
						|
			document.head.appendChild(script);
 | 
						|
			break;
 | 
						|
		}
 | 
						|
	}
 | 
						|
})
 | 
						|
 | 
						|
$.post(`https://${resName}/nuiReady`, JSON.stringify({})); |