the files
This commit is contained in:
@@ -0,0 +1,92 @@
|
||||
// ---- SETTINGS > QUICK CHAT: your own phrases for the in-game quick chat menu ----
|
||||
// Backed by SiteQuickChatController (/api/site/quickchat). Four sets, five phrases each, matching the four tabs of the in-game panel.
|
||||
// An empty box keeps the original phrase. Plain ASCII only, like every website write.
|
||||
(function () {
|
||||
const setSel = document.getElementById('qcSet');
|
||||
if (!setSel) return; // not on this page
|
||||
|
||||
const slotsBox = document.getElementById('qcSlots');
|
||||
const msg = document.getElementById('qcMsg');
|
||||
const saveBtn = document.getElementById('qcSave');
|
||||
const resetBtn = document.getElementById('qcReset');
|
||||
let data = null; // the last answer from the server
|
||||
|
||||
function say(text, bad) {
|
||||
msg.textContent = text || '';
|
||||
msg.style.color = bad ? '#c0392b' : '';
|
||||
}
|
||||
|
||||
function current() { return data && data.sets.find(s => s.key === setSel.value); }
|
||||
|
||||
function render() {
|
||||
const s = current();
|
||||
slotsBox.innerHTML = '';
|
||||
if (!s) return;
|
||||
for (let i = 0; i < s.defaults.length; i++) {
|
||||
const wrap = document.createElement('div');
|
||||
wrap.className = 'sfield';
|
||||
const label = document.createElement('label');
|
||||
label.textContent = 'Phrase ' + (i + 1);
|
||||
const input = document.createElement('input');
|
||||
input.type = 'text';
|
||||
input.maxLength = data.maxLength;
|
||||
input.id = 'qcSlot' + i;
|
||||
input.placeholder = s.defaults[i];
|
||||
input.value = s.mine[i] || '';
|
||||
wrap.appendChild(label);
|
||||
wrap.appendChild(input);
|
||||
slotsBox.appendChild(wrap);
|
||||
}
|
||||
say('');
|
||||
}
|
||||
|
||||
async function load() {
|
||||
try {
|
||||
const r = await fetch('/api/site/quickchat', { credentials: 'same-origin' });
|
||||
const d = await r.json();
|
||||
if (!d.ok) { say('Log in to change your quick chat.', true); saveBtn.disabled = true; resetBtn.disabled = true; return; }
|
||||
data = d;
|
||||
setSel.innerHTML = '';
|
||||
d.sets.forEach(s => {
|
||||
const o = document.createElement('option');
|
||||
o.value = s.key;
|
||||
o.textContent = s.label;
|
||||
setSel.appendChild(o);
|
||||
});
|
||||
render();
|
||||
} catch (e) { say('Could not load your quick chat.', true); }
|
||||
}
|
||||
|
||||
async function post(url, body) {
|
||||
const r = await fetch(url, {
|
||||
method: 'POST', credentials: 'same-origin',
|
||||
headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(body)
|
||||
});
|
||||
return r.json();
|
||||
}
|
||||
|
||||
saveBtn.addEventListener('click', async () => {
|
||||
const s = current();
|
||||
if (!s) return;
|
||||
const phrases = [];
|
||||
for (let i = 0; i < s.defaults.length; i++) phrases.push((document.getElementById('qcSlot' + i) || {}).value || '');
|
||||
const d = await post('/api/site/quickchat', { key: s.key, phrases });
|
||||
if (!d.ok) { say(d.error || 'Could not save.', true); return; }
|
||||
s.mine = d.mine;
|
||||
render();
|
||||
say('Saved. It shows the next time you start the game.');
|
||||
});
|
||||
|
||||
resetBtn.addEventListener('click', async () => {
|
||||
const s = current();
|
||||
if (!s) return;
|
||||
const d = await post('/api/site/quickchat/reset', { key: s.key });
|
||||
if (!d.ok) { say(d.error || 'Could not reset.', true); return; }
|
||||
s.mine = d.mine;
|
||||
render();
|
||||
say('Back to the original phrases. It shows the next time you start the game.');
|
||||
});
|
||||
|
||||
setSel.addEventListener('change', render);
|
||||
load();
|
||||
})();
|
||||
Reference in New Issue
Block a user