mirror of
https://gitverse.ru/kpa39l/vesti.git
synced 2026-09-29 09:55:03 +00:00
fix(web): keep bulk checkbox selection across post navigation (openspec change keep-bulk-checkboxes)
- Save/restore checked candidate ids in sessionStorage (vesti_bulk_candidates / vesti_bulk_selected) - Restore checks after page reload when opening a post via ?selected=N - Fix selector: checkboxes live outside <form> (form=bulk-form attribute), query input[name=ids] globally - Openspec: new capability candidates-bulk-selection, change archived
This commit is contained in:
@@ -196,14 +196,39 @@
|
||||
{% block scripts %}
|
||||
<script>
|
||||
(function(){
|
||||
var boxes = document.querySelectorAll('#bulk-form input[name="ids"]');
|
||||
var boxes = document.querySelectorAll('input[name="ids"]');
|
||||
var badge = document.getElementById('sel-count');
|
||||
var KEY = 'vesti_bulk_candidates';
|
||||
function selSet(){
|
||||
var s = new Set();
|
||||
try { s = new Set(JSON.parse(sessionStorage.getItem(KEY) || '[]')); } catch(e) {}
|
||||
return s;
|
||||
}
|
||||
function saveSet(s){
|
||||
try { sessionStorage.setItem(KEY, JSON.stringify(Array.from(s))); } catch(e) {}
|
||||
}
|
||||
function upd(){
|
||||
var n = 0;
|
||||
for (var i = 0; i < boxes.length; i++) if (boxes[i].checked) n++;
|
||||
badge.textContent = n;
|
||||
}
|
||||
for (var i = 0; i < boxes.length; i++) boxes[i].addEventListener('change', upd);
|
||||
// Восстановить сохранённые отметки (кроме текущего, сервер уже отметил его)
|
||||
var s = selSet();
|
||||
for (var i = 0; i < boxes.length; i++){
|
||||
if (s.has(boxes[i].value)) boxes[i].checked = true;
|
||||
}
|
||||
for (var i = 0; i < boxes.length; i++){
|
||||
boxes[i].addEventListener('change', function(){
|
||||
var st = selSet();
|
||||
if (this.checked) st.add(this.value); else st.delete(this.value);
|
||||
saveSet(st);
|
||||
upd();
|
||||
});
|
||||
}
|
||||
var form = document.getElementById('bulk-form');
|
||||
if (form) form.addEventListener('submit', function(){
|
||||
try { sessionStorage.removeItem(KEY); } catch(e) {}
|
||||
});
|
||||
upd();
|
||||
})();
|
||||
</script>
|
||||
|
||||
Reference in New Issue
Block a user