Skip to content

Commit 97217b1

Browse files
Update index.html, editor.js, editor.css, ua.lua
1 parent 7536889 commit 97217b1

File tree

5 files changed

+65
-15
lines changed

5 files changed

+65
-15
lines changed

fxmanifest.lua

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ game 'gta5'
33
lua54 'yes'
44
author 'Kakarot'
55
description 'Core resource for the framework, contains all the core functionality and features'
6-
version '2.0.0'
6+
version '2.0.1'
77

88
shared_scripts {
99
'shared/locale.lua',

html/css/editor.css

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
@import url("styleguide.css");
22

33
/* Editor container base */
4+
.hidden { display: none !important; }
5+
46
#editor-container {
57
position: absolute;
68
top: 50%;

html/index.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,15 +19,15 @@
1919

2020
<script type="module" src="js/app.js"></script>
2121
<script src="js/drawtext.js"></script>
22-
<script src="js/editor.js"></script>
22+
<script src="js/editor.js" defer></script>
2323
</head>
2424
<body>
2525
<div id="q-app" style="min-height: 100vh"></div>
2626
<div id="drawtext-container">
2727
<div id="text" class="text"></div>
2828
</div>
2929

30-
<div id="editor-container">
30+
<div id="editor-container" class="hidden">
3131
<header>
3232
<h1>QBCore Config Editor</h1>
3333
<div class="controls">

html/js/editor.js

Lines changed: 55 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -341,21 +341,28 @@ async function saveConfig(configData) {
341341
try {
342342
const res = await fetch(`https://${GetParentResourceName()}/saveConfig`, {
343343
method: "POST",
344-
headers: {"Content-Type": "application/json"},
345-
body: JSON.stringify({file: currentFile, data: configData}),
344+
headers: { "Content-Type": "application/json" },
345+
body: JSON.stringify({ file: currentFile, data: configData }),
346346
});
347-
const result = await res.json();
348-
if (result === "ok") {
347+
348+
const raw = await res.text();
349+
let result;
350+
try { result = JSON.parse(raw); } catch { result = raw; }
351+
352+
if (result === "ok" || (result && result.status === "ok")) {
349353
allData[currentFile] = configData;
350354
console.log("Saved successfully!");
351355
closeModal();
352356
renderData();
353-
} else throw new Error(result);
357+
} else {
358+
throw new Error(typeof result === "string" ? result : JSON.stringify(result));
359+
}
354360
} catch (err) {
355361
console.error("Save failed.", err);
356362
}
357363
}
358364

365+
359366
// Modal close handlers
360367
function setupModalClose() {
361368
document.getElementById("close-modal-btn").onclick = closeModal;
@@ -365,6 +372,12 @@ function setupModalClose() {
365372
};
366373
}
367374

375+
function closeEditorUI() {
376+
const editor = document.getElementById("editor-container");
377+
editor.classList.add("hidden");
378+
fetch(`https://${GetParentResourceName()}/closeEditor`, { method: "POST" });
379+
}
380+
368381
function closeModal() {
369382
document.getElementById("edit-modal").classList.add("hidden");
370383
}
@@ -382,27 +395,63 @@ function setupSearch() {
382395
// Keyboard shortcuts
383396
function setupKeyboard() {
384397
window.addEventListener("keydown", (e) => {
385-
if (e.key === "Escape") closeModal();
398+
if (e.key === "Escape") {
399+
const modal = document.getElementById("edit-modal");
400+
if (modal && !modal.classList.contains("hidden")) {
401+
closeModal();
402+
} else {
403+
closeEditorUI();
404+
}
405+
}
386406
});
387407
}
388408

409+
389410
// Initialize UI
390411
window.addEventListener("DOMContentLoaded", () => {
391412
document.querySelectorAll(".file-list li").forEach((li) => {
392413
const file = li.dataset.file;
393414
li.addEventListener("click", () => selectFile(file, li));
394415
});
416+
417+
const closeBtn = document.getElementById("close-btn");
418+
if (closeBtn) {
419+
closeBtn.addEventListener("click", closeEditorUI);
420+
}
421+
422+
const saveBtn = document.getElementById("save-btn");
423+
if (saveBtn) {
424+
saveBtn.addEventListener("click", () => {
425+
if (!currentFile) return;
426+
const data = allData[currentFile];
427+
if (!data) return;
428+
saveConfig(data);
429+
});
430+
}
431+
395432
setupSearch();
396433
setupKeyboard();
397434
});
398435

436+
399437
// Listen for NUI messages and auto-select first file
400438
window.addEventListener("message", (event) => {
401439
if (event.data.action === "populateData") {
402440
allData = event.data.data;
441+
document.getElementById("editor-container").classList.remove("hidden");
403442
if (!currentFile) {
404443
const firstLi = document.querySelector(".file-list li");
405444
if (firstLi) firstLi.click();
406445
}
407446
}
447+
if (event.data.action === "closeEditor") {
448+
closeEditorUI();
449+
}
450+
});
451+
452+
document.getElementById("close-btn").addEventListener("click", () => {
453+
document.getElementById("editor-container").classList.add("hidden");
454+
fetch(`https://${GetParentResourceName()}/closeEditor`, {
455+
method: "POST"
456+
});
408457
});

locale/ua.lua

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -123,9 +123,8 @@ local Translations = {
123123
},
124124
},
125125
}
126-
if GetConvar('qb_locale', 'en') == 'ua' then
127-
Lang = Lang or Locale:new({
128-
phrases = Translations,
129-
warnOnMissing = true
130-
})
131-
end
126+
127+
Lang = Lang or Locale:new({
128+
phrases = Translations,
129+
warnOnMissing = true
130+
})

0 commit comments

Comments
 (0)