Newer
Older
// How often to check for unread mail, new telegrams (milliseconds)
var updateInterval = 60000;
const _sbbs_events = {};
async function v4_fetch(url, method, body) {
const init = { method, headers: {} };
if (method == 'POST' && body) {
init.body = body;
if (body instanceof URLSearchParams) {
init.headers['Content-Type'] = 'application/x-www-form-urlencoded';
}
}
try {
return await fetch(url, init).then(res => res.json());
} catch (err) {
console.log('Error on fetch', url, init);
}
}
function v4_get(url) {
return v4_fetch(url);
}
// May need adjustment for multipart/form-data at some point
function v4_post(url, data) {
const fd = new URLSearchParams();
for (let e in data) {
if (Array.isArray(data[e])) {
data[e].forEach(ee => fd.append(e, ee));
} else {
fd.append(e, data[e]);
}
}
return v4_fetch(url, 'POST', fd);
}
async function login(evt) {
if ($('#input-username').val() == '' || $('#input-password').val() == '') {
}
if (typeof evt !== 'undefined') evt.preventDefault();
const res = await v4_post('./api/auth.ssjs', {
username: $('#input-username').val(),
password: $('#input-password').val()
if (res.authenticated) {
window.location.reload(true);
} else {
$('#login-form').append('<p class="text-danger">Login failed</p>');
}
if (!res.authenticated) window.location.href = '/';
function scrollUp() {
if (window.location.hash === '') return;
if ($('#navbar').length < 1) return;
window.scrollBy(0, -document.getElementById('navbar').offsetHeight);
}
function sendTelegram(alias) {
function send_tg(evt) {
if (typeof evt !== 'undefined') evt.preventDefault();
v4_post('./api/system.ssjs', { call: 'send-telegram', user: alias, telegram: $('#telegram').val() });
$('#popUpModal').modal('hide');
}
$('#popUpModalTitle').html('Send a telegram to ' + alias);
$('#popUpModalBody').html(
'<form id="send-telegram-form">'
+ '<input type="text" class="form-control" placeholder="My message" name="telegram" id="telegram">'
+ '<input type="submit" value="submit" class="hidden">'
+ '</form>'
);
$('#send-telegram-form').submit(send_tg);
$('#popUpModalActionButton').click(send_tg);
function registerEventListener(scope, callback, params) {
params = Object.keys(params || {}).reduce(function (a, c) {
a += '&' + c + '=' + params[c];
return a;
}, '');
_sbbs_events[scope] = {
qs: 'subscribe=' + scope + params,
callback: callback
};
}
document.addEventListener("DOMContentLoaded", function () {
// originally based on dark-mode-switch by Christian Oliff
var darkSwitch = document.getElementById("darkSwitch");
if (darkSwitch) {
initTheme();
darkSwitch.addEventListener("change", function (event) {
var darkThemeSelected;
if (localStorage.getItem("darkSwitch") !== null) {
darkThemeSelected = localStorage.getItem("darkSwitch") === "dark";
} else {
darkThemeSelected = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;
}
darkSwitch.checked = darkThemeSelected;
if (darkThemeSelected) {
jQuery("body").addClass("dark")
} else {
jQuery("body").removeClass("dark");
}
}
function resetTheme() {
if (darkSwitch.checked) {
jQuery("body").addClass("dark");
localStorage.setItem("darkSwitch", "dark");
} else {
jQuery("body").removeClass("dark");
localStorage.setItem("darkSwitch", "light");
}
}
}
jQuery('html').removeClass('hidden');
});
window.onload = function () {
$('#button-logout').click(logout);
$('#button-login').click(login);
$('#form-login').submit(login);
$('#popUpModal').on('hidden.bs.modal', function (e) {
$('#popUpModalActionButton').off('click');
$('#popUpModalTitle').empty();
$('#popUpModalBody').empty();
});
$("#popUpModalCloseButton").click(function () {
$('#popUpModal').modal('hide');
});
if ($('#button-logout').length > 0) {
registerEventListener('mail', function (e) {
const data = JSON.parse(e.data);
if (typeof data.count != 'number') return;
$('#badge-unread-mail').text(data.count < 1 ? '' : data.count);
$('#badge-unread-mail-inner').text(data.count < 1 ? '' : data.count);
});
registerEventListener('telegram', function (e) {
const tg = JSON.parse(e.data).replace(/\1./g, '').replace(
/\r?\n/g, '<br>'
);
$('#popUpModalTitle').html('New telegram(s) received');
$('#popUpModalBody').append(tg);
$('#popUpModalActionButton').hide();
$('#popUpModal').modal('show');
const qs = Object.keys(_sbbs_events).reduce(function (a, c, i) {
return a + (i == 0 ? '?' : '&') + _sbbs_events[c].qs;
}, '');
echicken
committed
const es = new EventSource('./api/events.ssjs' + qs);
Object.keys(_sbbs_events).forEach(function (e) {
es.addEventListener(e, _sbbs_events[e].callback);