Initial commit: OP Extension Chrome Extension

This commit is contained in:
2026-01-27 10:50:29 +01:00
commit aa67a890e7
9 changed files with 938 additions and 0 deletions

96
popup.js Normal file
View File

@@ -0,0 +1,96 @@
// check for auto-detected username
chrome.tabs.query({active: true, currentWindow: true}, (tabs) => {
if (tabs[0] && tabs[0].url && tabs[0].url.includes('openfront.io')) {
chrome.scripting.executeScript({
target: {tabId: tabs[0].id},
func: () => localStorage.getItem('username')
}, (results) => {
if (results && results[0] && results[0].result) {
document.getElementById('autoDetected').textContent = `detected: ${results[0].result}`;
}
});
}
});
chrome.storage.sync.get(['serverUrl', 'roomId', 'playerName', 'enabled'], (data) => {
// set defaults
const serverUrl = data.serverUrl || 'wss://op.lopensed.dev';
const roomId = data.roomId || 'default';
document.getElementById('serverUrl').value = serverUrl;
document.getElementById('roomId').value = roomId;
if (data.playerName) document.getElementById('playerName').value = data.playerName;
// auto-save defaults and enable if not already done
if (!data.enabled || !data.serverUrl || !data.roomId) {
chrome.storage.sync.set({
serverUrl: serverUrl,
roomId: roomId,
enabled: true
});
}
// ping server for debug
pingServer(serverUrl);
});
function pingServer(url) {
const debug = document.getElementById('debug');
debug.textContent = 'checking server...';
debug.className = 'debug checking';
const ws = new WebSocket(url);
const timeout = setTimeout(() => {
ws.close();
debug.textContent = 'server: timeout';
debug.className = 'debug error';
}, 5000);
ws.onopen = () => {
clearTimeout(timeout);
debug.textContent = 'server: ok';
debug.className = 'debug ok';
setTimeout(() => ws.close(), 100);
};
ws.onerror = () => {
clearTimeout(timeout);
debug.textContent = 'server: unreachable';
debug.className = 'debug error';
};
}
document.getElementById('saveBtn').addEventListener('click', () => {
const serverUrl = document.getElementById('serverUrl').value.trim() || 'wss://op.lopensed.dev';
const roomId = document.getElementById('roomId').value.trim() || 'default';
const playerName = document.getElementById('playerName').value.trim();
chrome.storage.sync.set({
serverUrl: serverUrl,
roomId: roomId,
playerName: playerName,
enabled: true
}, () => {
showStatus('saved - refresh page', 'success');
});
});
document.getElementById('disableBtn').addEventListener('click', () => {
chrome.storage.sync.set({
enabled: false
}, () => {
showStatus('disabled - refresh page', 'success');
});
});
function showStatus(message, type) {
const status = document.getElementById('status');
status.textContent = message;
status.className = `status ${type}`;
status.style.display = 'block';
setTimeout(() => {
status.style.display = 'none';
}, 3000);
}