fix(ui): expose reliable block deletion

main
AlexsandrSnytkin 11 hours ago
parent 3157cb9650
commit b81e913227

@ -1601,6 +1601,7 @@ HTML = """<!doctype html>
<span class="config-toolbar-title">Блоки конфигурации</span> <span class="config-toolbar-title">Блоки конфигурации</span>
<button id="configResetLayout" type="button">сбросить раскладку</button> <button id="configResetLayout" type="button">сбросить раскладку</button>
<button id="configRestoreToggle" type="button" aria-expanded="false">структура</button> <button id="configRestoreToggle" type="button" aria-expanded="false">структура</button>
<button id="configDeleteSelected" class="command danger" type="button" disabled>удалить выбранные</button>
<label class="config-scale-control" title="Масштаб элементов и текста выбранного блока: 50200%"><span id="configScaleLabel">масштаб блока</span><input id="configContentScale" type="range" min="50" max="200" step="5" value="100" aria-label="Масштаб содержимого выбранного блока, от 50 до 200 процентов" disabled><output id="configContentScaleValue">100%</output></label> <label class="config-scale-control" title="Масштаб элементов и текста выбранного блока: 50200%"><span id="configScaleLabel">масштаб блока</span><input id="configContentScale" type="range" min="50" max="200" step="5" value="100" aria-label="Масштаб содержимого выбранного блока, от 50 до 200 процентов" disabled><output id="configContentScaleValue">100%</output></label>
<span id="configLayoutState" class="config-layout-state">Ctrl/Cmd + клик выбрать несколько · перетаскивайте группу</span> <span id="configLayoutState" class="config-layout-state">Ctrl/Cmd + клик выбрать несколько · перетаскивайте группу</span>
</div> </div>
@ -1826,6 +1827,7 @@ HTML = """<!doctype html>
<span class="config-toolbar-title">Блоки сети</span> <span class="config-toolbar-title">Блоки сети</span>
<button id="networkResetLayout" type="button">сбросить раскладку</button> <button id="networkResetLayout" type="button">сбросить раскладку</button>
<button id="networkStructureToggle" type="button" aria-expanded="false">структура</button> <button id="networkStructureToggle" type="button" aria-expanded="false">структура</button>
<button id="networkDeleteSelected" class="command danger" type="button" disabled>удалить выбранные</button>
<label class="config-scale-control" title="Масштаб элементов и текста выбранного сетевого блока"><span>масштаб блока</span><input id="networkContentScale" type="range" min="50" max="200" step="5" value="100" aria-label="Масштаб содержимого выбранного сетевого блока" disabled><output id="networkContentScaleValue">100%</output></label> <label class="config-scale-control" title="Масштаб элементов и текста выбранного сетевого блока"><span>масштаб блока</span><input id="networkContentScale" type="range" min="50" max="200" step="5" value="100" aria-label="Масштаб содержимого выбранного сетевого блока" disabled><output id="networkContentScaleValue">100%</output></label>
<span id="networkLayoutState" class="config-layout-state">Ctrl/Cmd + клик выбрать несколько · перетаскивайте группу</span> <span id="networkLayoutState" class="config-layout-state">Ctrl/Cmd + клик выбрать несколько · перетаскивайте группу</span>
</div> </div>
@ -2145,8 +2147,10 @@ HTML = """<!doctype html>
configBlocks.forEach(other => other.classList.toggle('is-selected', selectedConfigBlocks.has(other))); configBlocks.forEach(other => other.classList.toggle('is-selected', selectedConfigBlocks.has(other)));
$('configRestorePanel')?.querySelectorAll('.config-restore-item').forEach(item => item.classList.toggle('is-selected', selectedConfigBlocks.has(item._configBlock))); $('configRestorePanel')?.querySelectorAll('.config-restore-item').forEach(item => item.classList.toggle('is-selected', selectedConfigBlocks.has(item._configBlock)));
const control = $('configContentScale'); const control = $('configContentScale');
const remove = $('configDeleteSelected');
if (!selectedConfigBlock) { if (!selectedConfigBlock) {
if (control) control.disabled = true; if (control) control.disabled = true;
if (remove) remove.disabled = true;
return; return;
} }
const entry = configLayout[selectedConfigBlock.dataset.section] || {}; const entry = configLayout[selectedConfigBlock.dataset.section] || {};
@ -2155,6 +2159,7 @@ HTML = """<!doctype html>
setValue('configContentScale', value); setValue('configContentScale', value);
setText('configContentScaleValue', `${value}%`); setText('configContentScaleValue', `${value}%`);
if (control) control.disabled = selectedConfigBlocks.size !== 1; if (control) control.disabled = selectedConfigBlocks.size !== 1;
if (remove) remove.disabled = !selectedConfigBlocks.size;
updateConfigBlockScale(selectedConfigBlock); updateConfigBlockScale(selectedConfigBlock);
if (selectedConfigBlocks.size > 1) setText('configLayoutState', `выбрано ${selectedConfigBlocks.size} блока · перетаскивайте группу`); if (selectedConfigBlocks.size > 1) setText('configLayoutState', `выбрано ${selectedConfigBlocks.size} блока · перетаскивайте группу`);
} }
@ -2749,6 +2754,7 @@ HTML = """<!doctype html>
renderConfigRestorePanel(); renderConfigRestorePanel();
selectConfigBlock(configBlocks.find(block => !configBlockState(block)) || null); selectConfigBlock(configBlocks.find(block => !configBlockState(block)) || null);
$('configResetLayout')?.addEventListener('click', resetConfigLayout); $('configResetLayout')?.addEventListener('click', resetConfigLayout);
$('configDeleteSelected')?.addEventListener('click', deleteSelectedConfigBlocks);
$('configRestoreToggle')?.addEventListener('click', () => { $('configRestoreToggle')?.addEventListener('click', () => {
restorePanelOpen = !restorePanelOpen; restorePanelOpen = !restorePanelOpen;
renderConfigRestorePanel(); renderConfigRestorePanel();
@ -2846,8 +2852,10 @@ HTML = """<!doctype html>
networkBlocks.forEach(item => item.classList.toggle('is-selected', selectedNetworkBlocks.has(item))); networkBlocks.forEach(item => item.classList.toggle('is-selected', selectedNetworkBlocks.has(item)));
$('networkRestorePanel')?.querySelectorAll('.config-restore-item').forEach(item => item.classList.toggle('is-selected', selectedNetworkBlocks.has(item._networkBlock))); $('networkRestorePanel')?.querySelectorAll('.config-restore-item').forEach(item => item.classList.toggle('is-selected', selectedNetworkBlocks.has(item._networkBlock)));
const control = $('networkContentScale'); const control = $('networkContentScale');
const remove = $('networkDeleteSelected');
if (!networkSelectedBlock) { if (!networkSelectedBlock) {
if (control) control.disabled = true; if (control) control.disabled = true;
if (remove) remove.disabled = true;
return; return;
} }
const value = Math.max(50, Math.min(200, Math.round(Number(networkLayout[networkSelectedBlock.dataset.section]?.scale) || 100))); const value = Math.max(50, Math.min(200, Math.round(Number(networkLayout[networkSelectedBlock.dataset.section]?.scale) || 100)));
@ -2855,6 +2863,7 @@ HTML = """<!doctype html>
setValue('networkContentScale', value); setValue('networkContentScale', value);
setText('networkContentScaleValue', `${value}%`); setText('networkContentScaleValue', `${value}%`);
if (control) control.disabled = selectedNetworkBlocks.size !== 1; if (control) control.disabled = selectedNetworkBlocks.size !== 1;
if (remove) remove.disabled = !selectedNetworkBlocks.size;
updateNetworkBlockScale(networkSelectedBlock); updateNetworkBlockScale(networkSelectedBlock);
if (selectedNetworkBlocks.size > 1) setText('networkLayoutState', `выбрано ${selectedNetworkBlocks.size} блока · перетаскивайте группу`); if (selectedNetworkBlocks.size > 1) setText('networkLayoutState', `выбрано ${selectedNetworkBlocks.size} блока · перетаскивайте группу`);
} }
@ -3303,6 +3312,7 @@ HTML = """<!doctype html>
renderNetworkStructure(); renderNetworkStructure();
selectNetworkBlock(networkBlocks.find(block => !networkState(block)) || null); selectNetworkBlock(networkBlocks.find(block => !networkState(block)) || null);
$('networkResetLayout')?.addEventListener('click', resetNetworkLayout); $('networkResetLayout')?.addEventListener('click', resetNetworkLayout);
$('networkDeleteSelected')?.addEventListener('click', deleteSelectedNetworkBlocks);
$('networkStructureToggle')?.addEventListener('click', () => { $('networkStructureToggle')?.addEventListener('click', () => {
networkStructureOpen = !networkStructureOpen; networkStructureOpen = !networkStructureOpen;
renderNetworkStructure(); renderNetworkStructure();

Loading…
Cancel
Save