diff --git a/web/root/api/events.ssjs b/web/root/api/events.ssjs index 075802061238652f48ab84ce50807e2286ce8922..bc73e9029da5993e1a3513aae3a7e3f1e54f5b57 100644 --- a/web/root/api/events.ssjs +++ b/web/root/api/events.ssjs @@ -1,8 +1,8 @@ load('sbbsdefs.js'); load('modopts.js'); -var settings = get_mod_options('web'); +const settings = get_mod_options('web'); load(settings.web_directory + '/lib/init.js'); -load(settings.web_lib + 'auth.js'); +const auth_lib = load({}, settings.web_lib + 'auth.js'); http_reply.header['Cache-Control'] = 'no-cache'; http_reply.header['Content-type'] = 'text/event-stream'; @@ -35,7 +35,7 @@ if (file_isdir(settings.web_lib + 'events')) { try { if (file_exists(script)) callbacks[e] = load({}, script); } catch (err) { - log(LOG_ERR, 'Failed to load event module ' + e + ': ' + err); + log(LOG_ERR, 'Failed to load event module ' + e + ': ' + err); } }); } diff --git a/web/root/js/common.js b/web/root/js/common.js index 53151221af4ff24e865c5c32a66f86059698452e..f7812e70a6bbd352912cd04f1a53c676948ee00d 100644 --- a/web/root/js/common.js +++ b/web/root/js/common.js @@ -59,6 +59,17 @@ function sendTelegram(alias) { $('#popUpModal').modal('show'); } +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 + }; +} + window.onload = function () { $('#button-logout').click(logout); @@ -79,14 +90,14 @@ window.onload = function () { if ($('#button-logout').length > 0) { - _sbbs_events.mail = function (e) { + 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); - } - - _sbbs_events.telegram = function (e) { + }); + + registerEventListener('telegram', function (e) { const tg = JSON.parse(e.data).replace(/\1./g, '').replace( /\r?\n/g, '<br>' ); @@ -94,16 +105,17 @@ window.onload = function () { $('#popUpModalBody').append(tg); $('#popUpModalActionButton').hide(); $('#popUpModal').modal('show'); - } + }); } - const _evtqs = Object.keys(_sbbs_events).reduce(function (a, c, i) { - return a + (i == 0 ? '?' : '&') + 'subscribe=' + c; }, '' - ); - const _es = new EventSource('/api/events.ssjs' + _evtqs); + const qs = Object.keys(_sbbs_events).reduce(function (a, c, i) { + return a + (i == 0 ? '?' : '&') + _sbbs_events[c].qs; + }, ''); + + const es = new EventSource('/api/events.ssjs' + qs); Object.keys(_sbbs_events).forEach(function (e) { - _es.addEventListener(e, _sbbs_events[e]); + es.addEventListener(e, _sbbs_events[e].callback); }); } diff --git a/web/sidebar/.examples/001-nodelist.xjs b/web/sidebar/.examples/001-nodelist.xjs index 6a9a352fcfea56d7e4615b7268c2ea6ad9b4a623..395728f42f2730dfbec0dc66f442fd1bf3c30fb9 100644 --- a/web/sidebar/.examples/001-nodelist.xjs +++ b/web/sidebar/.examples/001-nodelist.xjs @@ -80,7 +80,7 @@ $('#sidebar').find('.sb-nodes-available').text(nll - niu); } - _sbbs_events.nodelist = _sb_nodelist; + registerEventListener('nodelist', _sb_nodelist); <?xjs if (settings.nodelist_ibbs) { ?> function _send_ibbs_telegram(sys, host, user) { @@ -109,7 +109,7 @@ $('#popUpModal').modal('show'); } - _sbbs_events.sbbsimsg = function (e) { + registerEventListener('sbbsimsg', function (e) { const data = JSON.parse(e.data); var users = 0; $('#sbbsimsg-nodelist').addClass('hidden'); @@ -145,7 +145,7 @@ $('#sbbsimsg-nodelist').removeClass('hidden'); $('#sbbs-nodelist').parent().removeClass('hidden'); } - } + }); <?xjs } ?> </script>