aprsd 1.0.0__py3-none-any.whl → 3.4.2__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- aprsd/__init__.py +6 -4
- aprsd/cli_helper.py +151 -0
- aprsd/client/__init__.py +13 -0
- aprsd/client/aprsis.py +132 -0
- aprsd/client/base.py +105 -0
- aprsd/client/drivers/__init__.py +0 -0
- aprsd/client/drivers/aprsis.py +228 -0
- aprsd/client/drivers/fake.py +73 -0
- aprsd/client/drivers/kiss.py +119 -0
- aprsd/client/factory.py +88 -0
- aprsd/client/fake.py +48 -0
- aprsd/client/kiss.py +103 -0
- aprsd/client/stats.py +38 -0
- aprsd/cmds/__init__.py +0 -0
- aprsd/cmds/completion.py +22 -0
- aprsd/cmds/dev.py +162 -0
- aprsd/cmds/fetch_stats.py +156 -0
- aprsd/cmds/healthcheck.py +86 -0
- aprsd/cmds/list_plugins.py +319 -0
- aprsd/cmds/listen.py +231 -0
- aprsd/cmds/send_message.py +171 -0
- aprsd/cmds/server.py +137 -0
- aprsd/cmds/webchat.py +674 -0
- aprsd/conf/__init__.py +56 -0
- aprsd/conf/client.py +131 -0
- aprsd/conf/common.py +301 -0
- aprsd/conf/log.py +65 -0
- aprsd/conf/opts.py +80 -0
- aprsd/conf/plugin_common.py +182 -0
- aprsd/conf/plugin_email.py +105 -0
- aprsd/exception.py +13 -0
- aprsd/log/__init__.py +0 -0
- aprsd/log/log.py +138 -0
- aprsd/main.py +104 -867
- aprsd/packets/__init__.py +20 -0
- aprsd/packets/collector.py +79 -0
- aprsd/packets/core.py +823 -0
- aprsd/packets/log.py +161 -0
- aprsd/packets/packet_list.py +110 -0
- aprsd/packets/seen_list.py +49 -0
- aprsd/packets/tracker.py +103 -0
- aprsd/packets/watch_list.py +119 -0
- aprsd/plugin.py +474 -284
- aprsd/plugin_utils.py +86 -0
- aprsd/plugins/__init__.py +0 -0
- aprsd/plugins/email.py +709 -0
- aprsd/plugins/fortune.py +61 -0
- aprsd/plugins/location.py +179 -0
- aprsd/plugins/notify.py +61 -0
- aprsd/plugins/ping.py +31 -0
- aprsd/plugins/time.py +115 -0
- aprsd/plugins/version.py +31 -0
- aprsd/plugins/weather.py +405 -0
- aprsd/stats/__init__.py +20 -0
- aprsd/stats/app.py +49 -0
- aprsd/stats/collector.py +37 -0
- aprsd/threads/__init__.py +11 -0
- aprsd/threads/aprsd.py +119 -0
- aprsd/threads/keep_alive.py +131 -0
- aprsd/threads/log_monitor.py +121 -0
- aprsd/threads/registry.py +56 -0
- aprsd/threads/rx.py +354 -0
- aprsd/threads/stats.py +44 -0
- aprsd/threads/tx.py +255 -0
- aprsd/utils/__init__.py +218 -0
- aprsd/utils/counter.py +51 -0
- aprsd/utils/json.py +80 -0
- aprsd/utils/objectstore.py +123 -0
- aprsd/utils/ring_buffer.py +40 -0
- aprsd/utils/trace.py +180 -0
- aprsd/web/__init__.py +0 -0
- aprsd/web/admin/__init__.py +0 -0
- aprsd/web/admin/static/css/index.css +84 -0
- aprsd/web/admin/static/css/prism.css +4 -0
- aprsd/web/admin/static/css/tabs.css +35 -0
- aprsd/web/admin/static/images/Untitled.png +0 -0
- aprsd/web/admin/static/images/aprs-symbols-16-0.png +0 -0
- aprsd/web/admin/static/images/aprs-symbols-16-1.png +0 -0
- aprsd/web/admin/static/images/aprs-symbols-64-0.png +0 -0
- aprsd/web/admin/static/images/aprs-symbols-64-1.png +0 -0
- aprsd/web/admin/static/images/aprs-symbols-64-2.png +0 -0
- aprsd/web/admin/static/js/charts.js +235 -0
- aprsd/web/admin/static/js/echarts.js +465 -0
- aprsd/web/admin/static/js/logs.js +26 -0
- aprsd/web/admin/static/js/main.js +231 -0
- aprsd/web/admin/static/js/prism.js +12 -0
- aprsd/web/admin/static/js/send-message.js +114 -0
- aprsd/web/admin/static/js/tabs.js +28 -0
- aprsd/web/admin/templates/index.html +196 -0
- aprsd/web/chat/static/css/chat.css +115 -0
- aprsd/web/chat/static/css/index.css +66 -0
- aprsd/web/chat/static/css/style.css.map +1 -0
- aprsd/web/chat/static/css/tabs.css +41 -0
- aprsd/web/chat/static/css/upstream/bootstrap.min.css +6 -0
- aprsd/web/chat/static/css/upstream/font.woff2 +0 -0
- aprsd/web/chat/static/css/upstream/google-fonts.css +23 -0
- aprsd/web/chat/static/css/upstream/jquery-ui.css +1311 -0
- aprsd/web/chat/static/css/upstream/jquery.toast.css +28 -0
- aprsd/web/chat/static/css/upstream/themes/default/assets/fonts/LatoLatin-Bold.woff +0 -0
- aprsd/web/chat/static/css/upstream/themes/default/assets/fonts/LatoLatin-Bold.woff2 +0 -0
- aprsd/web/chat/static/css/upstream/themes/default/assets/fonts/LatoLatin-Regular.woff +0 -0
- aprsd/web/chat/static/css/upstream/themes/default/assets/fonts/LatoLatin-Regular.woff2 +0 -0
- aprsd/web/chat/static/css/upstream/themes/default/assets/fonts/icons.woff +0 -0
- aprsd/web/chat/static/css/upstream/themes/default/assets/fonts/icons.woff2 +0 -0
- aprsd/web/chat/static/css/upstream/themes/default/assets/fonts/outline-icons.woff +0 -0
- aprsd/web/chat/static/css/upstream/themes/default/assets/fonts/outline-icons.woff2 +0 -0
- aprsd/web/chat/static/images/Untitled.png +0 -0
- aprsd/web/chat/static/images/aprs-symbols-16-0.png +0 -0
- aprsd/web/chat/static/images/aprs-symbols-16-1.png +0 -0
- aprsd/web/chat/static/images/aprs-symbols-64-0.png +0 -0
- aprsd/web/chat/static/images/aprs-symbols-64-1.png +0 -0
- aprsd/web/chat/static/images/aprs-symbols-64-2.png +0 -0
- aprsd/web/chat/static/images/globe.svg +3 -0
- aprsd/web/chat/static/js/gps.js +84 -0
- aprsd/web/chat/static/js/main.js +45 -0
- aprsd/web/chat/static/js/send-message.js +585 -0
- aprsd/web/chat/static/js/tabs.js +28 -0
- aprsd/web/chat/static/js/upstream/bootstrap.bundle.min.js +7 -0
- aprsd/web/chat/static/js/upstream/jquery-3.7.1.min.js +2 -0
- aprsd/web/chat/static/js/upstream/jquery-ui.min.js +13 -0
- aprsd/web/chat/static/js/upstream/jquery.toast.js +374 -0
- aprsd/web/chat/static/js/upstream/semantic.min.js +11 -0
- aprsd/web/chat/static/js/upstream/socket.io.min.js +7 -0
- aprsd/web/chat/templates/index.html +139 -0
- aprsd/wsgi.py +315 -0
- aprsd-3.4.2.dist-info/AUTHORS +13 -0
- aprsd-3.4.2.dist-info/LICENSE +175 -0
- aprsd-3.4.2.dist-info/METADATA +793 -0
- aprsd-3.4.2.dist-info/RECORD +133 -0
- {aprsd-1.0.0.dist-info → aprsd-3.4.2.dist-info}/WHEEL +1 -1
- aprsd-3.4.2.dist-info/entry_points.txt +8 -0
- aprsd/fake_aprs.py +0 -83
- aprsd/utils.py +0 -166
- aprsd-1.0.0.dist-info/AUTHORS +0 -6
- aprsd-1.0.0.dist-info/METADATA +0 -181
- aprsd-1.0.0.dist-info/RECORD +0 -13
- aprsd-1.0.0.dist-info/entry_points.txt +0 -4
- aprsd-1.0.0.dist-info/pbr.json +0 -1
- /aprsd/{fuzzyclock.py → utils/fuzzyclock.py} +0 -0
- {aprsd-1.0.0.dist-info → aprsd-3.4.2.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,196 @@
|
|
1
|
+
<html>
|
2
|
+
<head>
|
3
|
+
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
|
4
|
+
<link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/themes/smoothness/jquery-ui.css">
|
5
|
+
<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js"></script>
|
6
|
+
<script src="https://cdn.socket.io/4.7.1/socket.io.min.js" integrity="sha512-+NaO7d6gQ1YPxvc/qHIqZEchjGm207SszoNeMgppoqD/67fEqmc1edS8zrbxPD+4RQI3gDgT/83ihpFW61TG/Q==" crossorigin="anonymous"></script>
|
7
|
+
|
8
|
+
<script src="https://cdn.jsdelivr.net/npm/chart.js@2.9.4/dist/Chart.bundle.js"></script>
|
9
|
+
<script src="https://cdn.jsdelivr.net/npm/echarts@5.4.3/dist/echarts.min.js"></script>
|
10
|
+
|
11
|
+
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/semantic-ui@2.4.2/dist/semantic.min.css">
|
12
|
+
<script src="https://cdn.jsdelivr.net/npm/semantic-ui@2.4.2/dist/semantic.min.js"></script>
|
13
|
+
|
14
|
+
<link rel="stylesheet" href="/static/css/index.css">
|
15
|
+
<link rel="stylesheet" href="/static/css/tabs.css">
|
16
|
+
<link rel="stylesheet" href="/static/css/prism.css">
|
17
|
+
<script src="/static/js/prism.js"></script>
|
18
|
+
<script src="/static/js/main.js"></script>
|
19
|
+
<script src="/static/js/echarts.js"></script>
|
20
|
+
<script src="/static/js/tabs.js"></script>
|
21
|
+
<script src="/static/js/send-message.js"></script>
|
22
|
+
<script src="/static/js/logs.js"></script>
|
23
|
+
|
24
|
+
|
25
|
+
<script type="text/javascript">
|
26
|
+
var initial_stats = {{ initial_stats|tojson|safe }};
|
27
|
+
|
28
|
+
var memory_chart = null
|
29
|
+
var message_chart = null
|
30
|
+
var color = Chart.helpers.color;
|
31
|
+
|
32
|
+
$(document).ready(function() {
|
33
|
+
start_update();
|
34
|
+
start_charts();
|
35
|
+
init_messages();
|
36
|
+
init_logs();
|
37
|
+
|
38
|
+
$("#toggleStats").click(function() {
|
39
|
+
$("#jsonstats").fadeToggle(1000);
|
40
|
+
});
|
41
|
+
|
42
|
+
// Pretty print the config json so it's readable
|
43
|
+
var cfg_data = $("#configjson").text();
|
44
|
+
var cfg_json = JSON.parse(cfg_data);
|
45
|
+
var cfg_pretty = JSON.stringify(cfg_json, null, '\t');
|
46
|
+
const html_pretty = Prism.highlight( cfg_pretty, Prism.languages.json, 'json');
|
47
|
+
$("#configjson").html(html_pretty);
|
48
|
+
$("#jsonstats").fadeToggle(1000);
|
49
|
+
|
50
|
+
//var log_text_pretty = $('#logtext').text();
|
51
|
+
//const log_pretty = Prism.highlight( log_text_pretty, Prism.languages.log, 'log');
|
52
|
+
//$('#logtext').html(log_pretty);
|
53
|
+
|
54
|
+
$('.ui.accordion').accordion({exclusive: false});
|
55
|
+
$('.menu .item').tab('change tab', 'charts-tab');
|
56
|
+
});
|
57
|
+
</script>
|
58
|
+
</head>
|
59
|
+
|
60
|
+
<body>
|
61
|
+
<div class='ui text container'>
|
62
|
+
<h1 class='ui dividing header'>APRSD {{ version }}</h1>
|
63
|
+
</div>
|
64
|
+
|
65
|
+
<div class='ui grid text container'>
|
66
|
+
<div class='left floated ten wide column'>
|
67
|
+
<span style='color: green'>{{ callsign }}</span>
|
68
|
+
connected to
|
69
|
+
<span style='color: blue' id='aprs_connection'>{{ aprs_connection|safe }}</span>
|
70
|
+
</div>
|
71
|
+
|
72
|
+
<div class='right floated four wide column'>
|
73
|
+
<span id='uptime'>NONE</span>
|
74
|
+
</div>
|
75
|
+
</div>
|
76
|
+
|
77
|
+
<!-- Tab links -->
|
78
|
+
<div class="ui top attached tabular menu">
|
79
|
+
<div class="active item" data-tab="charts-tab">Charts</div>
|
80
|
+
<div class="item" data-tab="msgs-tab">Messages</div>
|
81
|
+
<div class="item" data-tab="seen-tab">Seen List</div>
|
82
|
+
<div class="item" data-tab="watch-tab">Watch List</div>
|
83
|
+
<div class="item" data-tab="plugin-tab">Plugins</div>
|
84
|
+
<div class="item" data-tab="threads-tab">Threads</div>
|
85
|
+
<div class="item" data-tab="config-tab">Config</div>
|
86
|
+
<div class="item" data-tab="log-tab">LogFile</div>
|
87
|
+
<!-- <div class="item" data-tab="oslo-tab">OSLO CONFIG</div> //-->
|
88
|
+
<div class="item" data-tab="raw-tab">Raw JSON</div>
|
89
|
+
</div>
|
90
|
+
|
91
|
+
<!-- Tab content -->
|
92
|
+
<div class="ui bottom attached active tab segment" data-tab="charts-tab">
|
93
|
+
<h3 class="ui dividing header">Charts</h3>
|
94
|
+
<div class="ui equal width relaxed grid">
|
95
|
+
<div class="row">
|
96
|
+
<div class="column">
|
97
|
+
<div class="ui segment" style="height: 300px" id="packetsChart"></div>
|
98
|
+
</div>
|
99
|
+
</div>
|
100
|
+
<div class="row">
|
101
|
+
<div class="column">
|
102
|
+
<div class="ui segment" style="height: 300px" id="messagesChart"></div>
|
103
|
+
</div>
|
104
|
+
<div class="column">
|
105
|
+
<div class="ui segment" style="height: 300px" id="acksChart"></div>
|
106
|
+
</div>
|
107
|
+
</div>
|
108
|
+
<div class="row">
|
109
|
+
<div class="column">
|
110
|
+
<div class="ui segment" style="height: 300px" id="packetTypesChart"></div>
|
111
|
+
</div>
|
112
|
+
</div>
|
113
|
+
<div class="row">
|
114
|
+
<div class="column">
|
115
|
+
<div class="ui segment" style="height: 300px" id="threadChart"></div>
|
116
|
+
</div>
|
117
|
+
</div>
|
118
|
+
<div class="row">
|
119
|
+
<div class="column">
|
120
|
+
<div class="ui segment" style="height: 300px" id="memChart"></div>
|
121
|
+
</div>
|
122
|
+
</div>
|
123
|
+
<!-- <div class="row">
|
124
|
+
<div id="stats" class="two column">
|
125
|
+
<button class="ui button" id="toggleStats">Toggle raw json</button>
|
126
|
+
<pre id="jsonstats" class="language-json">{{ stats }}</pre>
|
127
|
+
</div> //-->
|
128
|
+
</div>
|
129
|
+
</div>
|
130
|
+
|
131
|
+
</div>
|
132
|
+
|
133
|
+
<div class="ui bottom attached tab segment" data-tab="msgs-tab">
|
134
|
+
<h3 class="ui dividing header">Messages (<span id="packets_count">0</span>)</h3>
|
135
|
+
<div class="ui styled fluid accordion" id="accordion">
|
136
|
+
<div id="packetsDiv" class="ui mini text">Loading</div>
|
137
|
+
</div>
|
138
|
+
</div>
|
139
|
+
|
140
|
+
<div class="ui bottom attached tab segment" data-tab="seen-tab">
|
141
|
+
<h3 class="ui dividing header">
|
142
|
+
Callsign Seen List (<span id="seen_count">{{ seen_count }}</span>)
|
143
|
+
</h3>
|
144
|
+
<div id="seenDiv" class="ui mini text">Loading</div>
|
145
|
+
</div>
|
146
|
+
|
147
|
+
<div class="ui bottom attached tab segment" data-tab="watch-tab">
|
148
|
+
<h3 class="ui dividing header">
|
149
|
+
Callsign Watch List (<span id="watch_count">{{ watch_count }}</span>)
|
150
|
+
|
151
|
+
Notification age - <span id="watch_age">{{ watch_age }}</span>
|
152
|
+
</h3>
|
153
|
+
<div id="watchDiv" class="ui mini text">Loading</div>
|
154
|
+
</div>
|
155
|
+
|
156
|
+
<div class="ui bottom attached tab segment" data-tab="plugin-tab">
|
157
|
+
<h3 class="ui dividing header">
|
158
|
+
Plugins Loaded (<span id="plugin_count">{{ plugin_count }}</span>)
|
159
|
+
</h3>
|
160
|
+
<div id="pluginDiv" class="ui mini text">Loading</div>
|
161
|
+
</div>
|
162
|
+
|
163
|
+
<div class="ui bottom attached tab segment" data-tab="threads-tab">
|
164
|
+
<h3 class="ui dividing header">
|
165
|
+
Threads Loaded (<span id="thread_count">{{ thread_count }}</span>)
|
166
|
+
</h3>
|
167
|
+
<div id="threadsDiv" class="ui mini text">Loading</div>
|
168
|
+
</div>
|
169
|
+
|
170
|
+
<div class="ui bottom attached tab segment" data-tab="config-tab">
|
171
|
+
<h3 class="ui dividing header">Config</h3>
|
172
|
+
<pre id="configjson" class="language-json">{{ config_json|safe }}</pre>
|
173
|
+
</div>
|
174
|
+
|
175
|
+
<div class="ui bottom attached tab segment" data-tab="log-tab">
|
176
|
+
<h3 class="ui dividing header">LOGFILE</h3>
|
177
|
+
<pre id="logContainer" style="height: 600px;overflow-y:auto;overflow-x:auto;"><code id="logtext" class="language-log" ></code></pre>
|
178
|
+
</div>
|
179
|
+
|
180
|
+
<!--
|
181
|
+
<div class="ui bottom attached tab segment" data-tab="oslo-tab">
|
182
|
+
<h3 class="ui dividing header">OSLO</h3>
|
183
|
+
<pre id="osloContainer" style="height:600px;overflow-y:auto;" class="language-json">{{ oslo_out|safe }}</pre>
|
184
|
+
</div> //-->
|
185
|
+
|
186
|
+
<div class="ui bottom attached tab segment" data-tab="raw-tab">
|
187
|
+
<h3 class="ui dividing header">Raw JSON</h3>
|
188
|
+
<pre id="jsonstats" class="language-yaml" style="height:600px;overflow-y:auto;">{{ initial_stats|safe }}</pre>
|
189
|
+
</div>
|
190
|
+
|
191
|
+
<div class="ui text container">
|
192
|
+
<a href="https://badge.fury.io/py/aprsd"><img src="https://badge.fury.io/py/aprsd.svg" alt="PyPI version" height="18"></a>
|
193
|
+
<a href="https://github.com/craigerl/aprsd"><img src="https://img.shields.io/badge/Made%20with-Python-1f425f.svg" height="18"></a>
|
194
|
+
</div>
|
195
|
+
</body>
|
196
|
+
</html>
|
@@ -0,0 +1,115 @@
|
|
1
|
+
input[type=search]::-webkit-search-cancel-button {
|
2
|
+
-webkit-appearance: searchfield-cancel-button;
|
3
|
+
}
|
4
|
+
|
5
|
+
.speech-wrapper {
|
6
|
+
padding-top: 0px;
|
7
|
+
padding: 5px 30px;
|
8
|
+
background-color: #CCCCCC;
|
9
|
+
}
|
10
|
+
|
11
|
+
.bubble-row {
|
12
|
+
display: flex;
|
13
|
+
width: 100%;
|
14
|
+
justify-content: flex-start;
|
15
|
+
}
|
16
|
+
|
17
|
+
.bubble-row.alt {
|
18
|
+
justify-content: flex-end;
|
19
|
+
}
|
20
|
+
|
21
|
+
.bubble {
|
22
|
+
/*width: 350px; */
|
23
|
+
height: auto;
|
24
|
+
display: block;
|
25
|
+
background: #f5f5f5;
|
26
|
+
border-radius: 4px;
|
27
|
+
box-shadow: 2px 8px 5px #555;
|
28
|
+
position: relative;
|
29
|
+
margin: 0 0 15px;
|
30
|
+
}
|
31
|
+
|
32
|
+
.bubble.alt {
|
33
|
+
margin: 0 0 15px;
|
34
|
+
}
|
35
|
+
|
36
|
+
.bubble-text {
|
37
|
+
padding: 5px 5px 0px 8px;
|
38
|
+
}
|
39
|
+
|
40
|
+
.bubble-name {
|
41
|
+
width: 280px;
|
42
|
+
font-weight: 600;
|
43
|
+
font-size: 12px;
|
44
|
+
margin: 0 0 0px;
|
45
|
+
color: #3498db;
|
46
|
+
display: flex;
|
47
|
+
align-items: center;
|
48
|
+
.material-symbols-rounded {
|
49
|
+
margin-left: auto;
|
50
|
+
font-weight: normal;
|
51
|
+
color: #808080;
|
52
|
+
}
|
53
|
+
}
|
54
|
+
.bubble-name.alt {
|
55
|
+
color: #2ecc71;
|
56
|
+
}
|
57
|
+
|
58
|
+
.bubble-timestamp {
|
59
|
+
margin-right: auto;
|
60
|
+
font-size: 11px;
|
61
|
+
text-transform: uppercase;
|
62
|
+
color: #bbb
|
63
|
+
}
|
64
|
+
|
65
|
+
.bubble-message {
|
66
|
+
font-size: 16px;
|
67
|
+
margin: 0px;
|
68
|
+
padding: 0px 0px 0px 0px;
|
69
|
+
color: #2b2b2b;
|
70
|
+
text-align: left;
|
71
|
+
}
|
72
|
+
|
73
|
+
.bubble-arrow {
|
74
|
+
position: absolute;
|
75
|
+
width: 0;
|
76
|
+
bottom:30px;
|
77
|
+
left: -16px;
|
78
|
+
height: 0px;
|
79
|
+
}
|
80
|
+
|
81
|
+
.bubble-arrow.alt {
|
82
|
+
right: -2px;
|
83
|
+
bottom: 30px;
|
84
|
+
left: auto;
|
85
|
+
}
|
86
|
+
|
87
|
+
.bubble-arrow:after {
|
88
|
+
content: "";
|
89
|
+
position: absolute;
|
90
|
+
border: 0 solid transparent;
|
91
|
+
border-top: 9px solid #f5f5f5;
|
92
|
+
border-radius: 0 20px 0;
|
93
|
+
width: 15px;
|
94
|
+
height: 30px;
|
95
|
+
transform: rotate(145deg);
|
96
|
+
}
|
97
|
+
.bubble-arrow.alt:after {
|
98
|
+
transform: rotate(45deg) scaleY(-1);
|
99
|
+
}
|
100
|
+
|
101
|
+
.popover {
|
102
|
+
max-width: 400px;
|
103
|
+
}
|
104
|
+
.popover-header {
|
105
|
+
font-size: 8pt;
|
106
|
+
max-width: 400px;
|
107
|
+
padding: 5px;
|
108
|
+
background-color: #ee;
|
109
|
+
}
|
110
|
+
|
111
|
+
.popover-body {
|
112
|
+
white-space: pre-line;
|
113
|
+
max-width: 400px;
|
114
|
+
padding: 5px;
|
115
|
+
}
|
@@ -0,0 +1,66 @@
|
|
1
|
+
body {
|
2
|
+
background: #eeeeee;
|
3
|
+
/*margin: 1em;*/
|
4
|
+
text-align: center;
|
5
|
+
font-family: system-ui, sans-serif;
|
6
|
+
height: 100%;
|
7
|
+
}
|
8
|
+
|
9
|
+
#title {
|
10
|
+
font-size: 4em;
|
11
|
+
}
|
12
|
+
#version{
|
13
|
+
font-size: .5em;
|
14
|
+
}
|
15
|
+
|
16
|
+
#uptime, #aprsis {
|
17
|
+
font-size: 1em;
|
18
|
+
}
|
19
|
+
#callsign {
|
20
|
+
font-size: 1.4em;
|
21
|
+
color: #00F;
|
22
|
+
padding-top: 8px;
|
23
|
+
margin:10px;
|
24
|
+
}
|
25
|
+
|
26
|
+
#title_rx {
|
27
|
+
background-color: darkseagreen;
|
28
|
+
text-align: left;
|
29
|
+
}
|
30
|
+
|
31
|
+
#title_tx {
|
32
|
+
background-color: lightcoral;
|
33
|
+
text-align: left;
|
34
|
+
}
|
35
|
+
|
36
|
+
.aprsd_1 {
|
37
|
+
background-image: url(/static/images/aprs-symbols-16-0.png);
|
38
|
+
background-repeat: no-repeat;
|
39
|
+
background-position: -160px -48px;
|
40
|
+
width: 16px;
|
41
|
+
height: 16px;
|
42
|
+
}
|
43
|
+
|
44
|
+
.wc-container {
|
45
|
+
display: flex;
|
46
|
+
flex-flow: column;
|
47
|
+
height: 100%;
|
48
|
+
}
|
49
|
+
.wc-container .wc-row {
|
50
|
+
/*border: 1px dotted #0313fc;*/
|
51
|
+
padding: 2px;
|
52
|
+
}
|
53
|
+
.wc-container .wc-row.header {
|
54
|
+
flex: 0 1 auto;
|
55
|
+
}
|
56
|
+
.wc-container .wc-row.content {
|
57
|
+
flex: 1 1 auto;
|
58
|
+
overflow-y: auto;
|
59
|
+
}
|
60
|
+
.wc-container .wc-row.footer {
|
61
|
+
flex: 0 1 0px;
|
62
|
+
}
|
63
|
+
|
64
|
+
.material-symbols-rounded.md-10 {
|
65
|
+
font-size: 18px !important;
|
66
|
+
}
|