@@ -1116,12 +1122,28 @@ function switchTab(name) {
active.classList.remove('bg-gray-200', 'text-gray-700', 'dark:bg-slate-700', 'dark:text-slate-300');
active.classList.add('bg-blue-600', 'text-white', 'dark:bg-blue-500', 'dark:text-white');
if (name === 'c-apdu') cApduSwitchSubtab('sim');
- else if (name === 'sp') setHelpAnchor('secured-packet');
+ else if (name === 'scp80') setHelpAnchor(scp80HelpAnchor);
else if (name === 'response') setHelpAnchor('response-parser');
- else if (name === 'cards') setHelpAnchor('cards');
else if (name === 'pysim') setHelpAnchor(pysimHelpAnchor);
}
+let scp80HelpAnchor = 'secured-packet';
+function scp80SwitchSubtab(name) {
+ document.querySelectorAll('.scp80-subtab').forEach(btn => {
+ const isActive = btn.dataset.scp80Sub === name;
+ btn.classList.toggle('bg-blue-600', isActive);
+ btn.classList.toggle('text-white', isActive);
+ btn.classList.toggle('bg-gray-200', !isActive);
+ btn.classList.toggle('dark:bg-slate-700', !isActive);
+ btn.classList.toggle('text-gray-700', !isActive);
+ btn.classList.toggle('dark:text-slate-300', !isActive);
+ });
+ document.getElementById('scp80-sub-sp').classList.toggle('hidden', name !== 'sp');
+ document.getElementById('scp80-sub-cards').classList.toggle('hidden', name !== 'cards');
+ scp80HelpAnchor = { sp: 'secured-packet', cards: 'cards' }[name] || 'secured-packet';
+ setHelpAnchor(scp80HelpAnchor);
+}
+
function cApduSwitchSubtab(name) {
document.querySelectorAll('.c-apdu-subtab').forEach(btn => {
const active = btn.dataset.sub === name;
@@ -1884,7 +1906,8 @@ function genConvert() {
function packToSp(sourceId) {
const val = document.getElementById(sourceId).value;
if (!val) return;
- switchTab('sp');
+ switchTab('scp80');
+ scp80SwitchSubtab('sp');
document.getElementById('sp-apdu').value = val;
}
function spCntrAdjust(delta) {
diff --git a/frontend/sw.js b/frontend/sw.js
index 91bae7f..c6c9dbf 100644
--- a/frontend/sw.js
+++ b/frontend/sw.js
@@ -1,4 +1,4 @@
-const CACHE = 'otaman-v19';
+const CACHE = 'otaman-v20';
const URLS = [
'index.html',
'help.html',
diff --git a/pyproject.toml b/pyproject.toml
index a45e534..f0f127a 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
[project]
name = "pysim-otaman-server"
-version = "1.9.8"
+version = "1.9.9"
description = "HTTP REST server wrapping pysim for the OTAMan PWA"
requires-python = ">=3.8"
# pysim is a git-only dependency installed explicitly by setup.bat/setup.sh.
diff --git a/pysim_otaman_server/server.py b/pysim_otaman_server/server.py
index c6fa9e9..e4a5439 100644
--- a/pysim_otaman_server/server.py
+++ b/pysim_otaman_server/server.py
@@ -18,7 +18,7 @@ from osmocom.construct import GsmOrUcs2Adapter
from osmocom.tlv import BER_TLV_IE
-VERSION = '1.9.8'
+VERSION = '1.9.9'
# Static file serving (the PWA lives in /frontend, served by this server