Fix Error Action Recovery Action: extract buildBerPcHtml, fix container vs element in genBerPcValue call

This commit is contained in:
2026-08-20 01:48:15 +03:00
parent 43242210ab
commit 6d8ef55398
+30 -28
View File
@@ -2120,33 +2120,8 @@ function buildErrorActionRow(rowIdx) {
</div>`; </div>`;
} }
function onBerSubTypeChange(sel) { function buildBerPcHtml() {
const body = sel.closest('.ber-sub-body') || sel.parentElement.querySelector('.ber-sub-body'); return `<div class="ber-pc">
const st = sel.value;
if (st === 'action') {
const row = sel.closest('.ber-row');
const type = row.querySelector('.ber-type').value;
if (type === 'error') {
body.innerHTML = buildErrorActionRow(row.dataset.berIdx);
const recoveryBuilder = body.querySelector('.error-recovery-builder');
recoveryBuilder.innerHTML = berRowHtml(0, 'immediate');
const recoverySubtype = recoveryBuilder.querySelector('.ber-subtype');
if (recoverySubtype) {
recoverySubtype.value = 'proactive';
onBerSubTypeChange(recoverySubtype);
}
} else {
body.innerHTML = `<select class="ber-action text-xs border border-gray-300 dark:border-slate-600 rounded px-1 py-1 dark:bg-slate-700 dark:text-slate-300 font-mono" onchange="updateBerRow(this)">
<option value="81">81 (Session indication)</option>
<option value="82">82 (Early response)</option>
</select>`;
}
} else if (st === 'custom') {
body.innerHTML = `<input class="ber-hex w-full font-mono text-xs border border-gray-300 dark:border-slate-600 rounded px-1 py-1 dark:bg-slate-700 dark:text-slate-300" placeholder="hex" oninput="updateBerRow(this)">`;
} else {
body.innerHTML = `<div class="ber-pc">
<div class="flex gap-1 mb-1 flex-wrap"> <div class="flex gap-1 mb-1 flex-wrap">
<select class="ber-pc-type text-xs border border-gray-300 dark:border-slate-600 rounded px-1 py-1 dark:bg-slate-700 dark:text-slate-300" onchange="onBerPcTypeChange(this)"> <select class="ber-pc-type text-xs border border-gray-300 dark:border-slate-600 rounded px-1 py-1 dark:bg-slate-700 dark:text-slate-300" onchange="onBerPcTypeChange(this)">
<option value="refresh">REFRESH</option> <option value="refresh">REFRESH</option>
@@ -2167,6 +2142,33 @@ function onBerSubTypeChange(sel) {
</div> </div>
<div class="ber-pc-fields text-xs"></div> <div class="ber-pc-fields text-xs"></div>
</div>`; </div>`;
}
function onBerSubTypeChange(sel) {
const body = sel.closest('.ber-sub-body') || sel.parentElement.querySelector('.ber-sub-body');
const st = sel.value;
if (st === 'action') {
const row = sel.closest('.ber-row');
const type = row.querySelector('.ber-type').value;
if (type === 'error') {
body.innerHTML = buildErrorActionRow(row.dataset.berIdx);
const recoveryBuilder = body.querySelector('.error-recovery-builder');
recoveryBuilder.innerHTML = buildBerPcHtml();
const pc = recoveryBuilder.querySelector('.ber-pc');
berPopulateDevices(pc);
onBerPcTypeChange(pc.querySelector('.ber-pc-type'));
} else {
body.innerHTML = `<select class="ber-action text-xs border border-gray-300 dark:border-slate-600 rounded px-1 py-1 dark:bg-slate-700 dark:text-slate-300 font-mono" onchange="updateBerRow(this)">
<option value="81">81 (Session indication)</option>
<option value="82">82 (Early response)</option>
</select>`;
}
} else if (st === 'custom') {
body.innerHTML = `<input class="ber-hex w-full font-mono text-xs border border-gray-300 dark:border-slate-600 rounded px-1 py-1 dark:bg-slate-700 dark:text-slate-300" placeholder="hex" oninput="updateBerRow(this)">`;
} else {
body.innerHTML = buildBerPcHtml();
const pc = body.querySelector('.ber-pc'); const pc = body.querySelector('.ber-pc');
berPopulateDevices(pc); berPopulateDevices(pc);
onBerPcTypeChange(pc.querySelector('.ber-pc-type')); onBerPcTypeChange(pc.querySelector('.ber-pc-type'));
@@ -2300,7 +2302,7 @@ function genErrorActionValue(row, tag) {
value += swMask + swValue; value += swMask + swValue;
if (recoveryBuilder) { if (recoveryBuilder) {
const recoveryValue = genBerPcValue(recoveryBuilder.querySelector('.ber-pc'), '81'); const recoveryValue = genBerPcValue(recoveryBuilder, '81');
if (recoveryValue) { if (recoveryValue) {
value += recoveryValue.slice(2); value += recoveryValue.slice(2);
} }