forked from Simnation/Main
128 lines
4.5 KiB
JavaScript
128 lines
4.5 KiB
JavaScript
document.addEventListener("DOMContentLoaded", function () {
|
|
const config = {
|
|
StandardEyeIcon: "fas fa-eye",
|
|
StandardColor: "var(--md-on-surface, white)",
|
|
SuccessColor: "var(--md-success, #386a20)",
|
|
};
|
|
|
|
const targetEye = document.getElementById("target-eye");
|
|
const targetLabel = document.getElementById("target-label");
|
|
const TargetEyeStyleObject = targetEye.style;
|
|
|
|
function OpenTarget() {
|
|
targetLabel.textContent = "";
|
|
targetEye.style.display = "block";
|
|
targetEye.className = config.StandardEyeIcon;
|
|
TargetEyeStyleObject.color = config.StandardColor;
|
|
}
|
|
|
|
function CloseTarget() {
|
|
targetLabel.textContent = "";
|
|
targetEye.style.display = "none";
|
|
}
|
|
|
|
function createTargetOption(index, itemData) {
|
|
if (itemData !== null) {
|
|
index = Number(index) + 1;
|
|
const targetOption = document.createElement("div");
|
|
targetOption.id = `target-option-${index}`;
|
|
const targetIcon = document.createElement("span");
|
|
targetIcon.id = `target-icon-${index}`;
|
|
const icon = document.createElement("i");
|
|
icon.className = itemData.icon;
|
|
targetIcon.appendChild(icon);
|
|
targetIcon.appendChild(document.createTextNode(" "));
|
|
targetOption.appendChild(targetIcon);
|
|
targetOption.appendChild(document.createTextNode(itemData.label));
|
|
targetLabel.appendChild(targetOption);
|
|
}
|
|
}
|
|
|
|
function FoundTarget(item) {
|
|
if (item.data) {
|
|
targetEye.className = item.data;
|
|
}
|
|
TargetEyeStyleObject.color = config.SuccessColor;
|
|
targetEye.classList.add("target-success");
|
|
targetLabel.textContent = "";
|
|
for (let [index, itemData] of Object.entries(item.options)) {
|
|
createTargetOption(index, itemData);
|
|
}
|
|
}
|
|
|
|
function ValidTarget(item) {
|
|
targetLabel.textContent = "";
|
|
for (let [index, itemData] of Object.entries(item.data)) {
|
|
createTargetOption(index, itemData);
|
|
}
|
|
}
|
|
|
|
function LeftTarget() {
|
|
targetLabel.textContent = "";
|
|
TargetEyeStyleObject.color = config.StandardColor;
|
|
targetEye.className = config.StandardEyeIcon;
|
|
targetEye.classList.remove("target-success");
|
|
}
|
|
|
|
function handleMouseDown(event) {
|
|
const element = event.target;
|
|
if (element.id) {
|
|
const split = element.id.split("-");
|
|
if (split[0] === "target" && split[1] !== "eye" && event.button === 0) {
|
|
fetch(`https://${GetParentResourceName()}/selectTarget`, {
|
|
method: "POST",
|
|
headers: { "Content-Type": "application/json; charset=UTF-8" },
|
|
body: JSON.stringify(split[2]),
|
|
}).catch((error) => console.error("Error:", error));
|
|
targetLabel.textContent = "";
|
|
}
|
|
}
|
|
if (event.button === 2) {
|
|
LeftTarget();
|
|
fetch(`https://${GetParentResourceName()}/leftTarget`, {
|
|
method: "POST",
|
|
headers: { "Content-Type": "application/json; charset=UTF-8" },
|
|
body: "",
|
|
}).catch((error) => console.error("Error:", error));
|
|
}
|
|
}
|
|
|
|
function handleKeyDown(event) {
|
|
if (event.key === "Escape" || event.key === "Backspace") {
|
|
CloseTarget();
|
|
fetch(`https://${GetParentResourceName()}/closeTarget`, {
|
|
method: "POST",
|
|
headers: { "Content-Type": "application/json; charset=UTF-8" },
|
|
body: "",
|
|
}).catch((error) => console.error("Error:", error));
|
|
}
|
|
}
|
|
|
|
window.addEventListener("message", function (event) {
|
|
switch (event.data.response) {
|
|
case "openTarget":
|
|
OpenTarget();
|
|
break;
|
|
case "closeTarget":
|
|
CloseTarget();
|
|
break;
|
|
case "foundTarget":
|
|
FoundTarget(event.data);
|
|
break;
|
|
case "validTarget":
|
|
ValidTarget(event.data);
|
|
break;
|
|
case "leftTarget":
|
|
LeftTarget();
|
|
break;
|
|
}
|
|
});
|
|
|
|
window.addEventListener("mousedown", handleMouseDown);
|
|
window.addEventListener("keydown", handleKeyDown);
|
|
|
|
window.addEventListener("unload", function () {
|
|
window.removeEventListener("mousedown", handleMouseDown);
|
|
window.removeEventListener("keydown", handleKeyDown);
|
|
});
|
|
});
|