From 3e30ab57a6d115c401e81e1869a46a94fdae85be Mon Sep 17 00:00:00 2001 From: Jakob Ketterl Date: Wed, 9 Dec 2020 19:26:34 +0100 Subject: [PATCH] move wsjt message panel logic to own class --- htdocs/index.html | 11 +---- htdocs/lib/MessagePanel.js | 92 ++++++++++++++++++++++++++++++++++++++ htdocs/openwebrx.js | 59 +----------------------- 3 files changed, 95 insertions(+), 67 deletions(-) create mode 100644 htdocs/lib/MessagePanel.js diff --git a/htdocs/index.html b/htdocs/index.html index 6aaff14..59301c9 100644 --- a/htdocs/index.html +++ b/htdocs/index.html @@ -60,16 +60,7 @@ - - - - - - - - - - + diff --git a/htdocs/lib/MessagePanel.js b/htdocs/lib/MessagePanel.js new file mode 100644 index 0000000..1ceb1a7 --- /dev/null +++ b/htdocs/lib/MessagePanel.js @@ -0,0 +1,92 @@ +function MessagePanel(el) { + this.el = el; + this.render(); +} + +MessagePanel.prototype.render = function() { +}; + +MessagePanel.prototype.pushMessage = function(message) { +}; + +// automatic clearing is not enabled by default. call this method from the constructor to enable +MessagePanel.prototype.initClearTimer = function() { + var me = this; + if (me.removalInterval) clearInterval(me.removalInterval); + me.removalInterval = setInterval(function () { + var $elements = $(me.el).find('tbody tr'); + // limit to 1000 entries in the list since browsers get laggy at some point + var toRemove = $elements.length - 1000; + if (toRemove <= 0) return; + $elements.slice(0, toRemove).remove(); + }, 15000); +} + +function WsjtMessagePanel(el) { + MessagePanel.call(this, el); + this.initClearTimer(); +} + +WsjtMessagePanel.prototype = new MessagePanel(); + +WsjtMessagePanel.prototype.render = function() { + $(this.el).append($( + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '
UTCdBDTFreqMessage
' + )); +}; + +WsjtMessagePanel.prototype.pushMessage = function(msg) { + var $b = $(this.el).find('tbody'); + var t = new Date(msg['timestamp']); + var pad = function (i) { + return ('' + i).padStart(2, "0"); + }; + var linkedmsg = msg['msg']; + var matches; + + var html_escape = function(input) { + return $('
').text(input).html() + }; + + if (['FT8', 'JT65', 'JT9', 'FT4', 'FST4', 'FST4W'].indexOf(msg['mode']) >= 0) { + matches = linkedmsg.match(/(.*\s[A-Z0-9]+\s)([A-R]{2}[0-9]{2})$/); + if (matches && matches[2] !== 'RR73') { + linkedmsg = html_escape(matches[1]) + '' + matches[2] + ''; + } else { + linkedmsg = html_escape(linkedmsg); + } + } else if (msg['mode'] === 'WSPR') { + matches = linkedmsg.match(/([A-Z0-9]*\s)([A-R]{2}[0-9]{2})(\s[0-9]+)/); + if (matches) { + linkedmsg = html_escape(matches[1]) + '' + matches[2] + '' + html_escape(matches[3]); + } else { + linkedmsg = html_escape(linkedmsg); + } + } + $b.append($( + '' + + '' + pad(t.getUTCHours()) + pad(t.getUTCMinutes()) + pad(t.getUTCSeconds()) + '' + + '' + msg['db'] + '' + + '' + msg['dt'] + '' + + '' + msg['freq'] + '' + + '' + linkedmsg + '' + + '' + )); + $b.scrollTop($b[0].scrollHeight); +} + +$.fn.wsjtMessagePanel = function(){ + if (!this.data('panel')) { + this.data('panel', new WsjtMessagePanel(this)); + }; + return this.data('panel'); +}; \ No newline at end of file diff --git a/htdocs/openwebrx.js b/htdocs/openwebrx.js index 9c0b627..56ddb56 100644 --- a/htdocs/openwebrx.js +++ b/htdocs/openwebrx.js @@ -774,7 +774,7 @@ function on_ws_recv(evt) { $("#openwebrx-panel-js8-message").js8().pushMessage(json['value']); break; case "wsjt_message": - update_wsjt_panel(json['value']); + $("#openwebrx-panel-wsjt-message").wsjtMessagePanel().pushMessage(json['value']); break; case "dial_frequencies": var as_bookmarks = json['value'].map(function (d) { @@ -941,61 +941,6 @@ function update_metadata(meta) { } -function html_escape(input) { - return $('
').text(input).html() -} - -function update_wsjt_panel(msg) { - var $b = $('#openwebrx-panel-wsjt-message').find('tbody'); - var t = new Date(msg['timestamp']); - var pad = function (i) { - return ('' + i).padStart(2, "0"); - }; - var linkedmsg = msg['msg']; - var matches; - if (['FT8', 'JT65', 'JT9', 'FT4', 'FST4', 'FST4W'].indexOf(msg['mode']) >= 0) { - matches = linkedmsg.match(/(.*\s[A-Z0-9]+\s)([A-R]{2}[0-9]{2})$/); - if (matches && matches[2] !== 'RR73') { - linkedmsg = html_escape(matches[1]) + '' + matches[2] + ''; - } else { - linkedmsg = html_escape(linkedmsg); - } - } else if (msg['mode'] === 'WSPR') { - matches = linkedmsg.match(/([A-Z0-9]*\s)([A-R]{2}[0-9]{2})(\s[0-9]+)/); - if (matches) { - linkedmsg = html_escape(matches[1]) + '' + matches[2] + '' + html_escape(matches[3]); - } else { - linkedmsg = html_escape(linkedmsg); - } - } - $b.append($( - '' + - '' + pad(t.getUTCHours()) + pad(t.getUTCMinutes()) + pad(t.getUTCSeconds()) + '' + - '' + msg['db'] + '' + - '' + msg['dt'] + '' + - '' + msg['freq'] + '' + - '' + linkedmsg + '' + - '' - )); - $b.scrollTop($b[0].scrollHeight); -} - -var digital_removal_interval; - -// remove old wsjt messages in fixed intervals -function init_digital_removal_timer() { - if (digital_removal_interval) clearInterval(digital_removal_interval); - digital_removal_interval = setInterval(function () { - ['#openwebrx-panel-wsjt-message', '#openwebrx-panel-packet-message'].forEach(function (root) { - var $elements = $(root + ' tbody tr'); - // limit to 1000 entries in the list since browsers get laggy at some point - var toRemove = $elements.length - 1000; - if (toRemove <= 0) return; - $elements.slice(0, toRemove).remove(); - }); - }, 15000); -} - function update_packet_panel(msg) { var $b = $('#openwebrx-panel-packet-message').find('tbody'); var pad = function (i) { @@ -1588,7 +1533,7 @@ function secondary_demod_init() { .mousedown(secondary_demod_canvas_container_mousedown) .mouseenter(secondary_demod_canvas_container_mousein) .mouseleave(secondary_demod_canvas_container_mouseleave); - init_digital_removal_timer(); + $('#openwebrx-panel-wsjt-message').wsjtMessagePanel(); } function secondary_demod_push_data(x) {