MediaWiki:Common.js: различия между версиями
Pok (обсуждение | вклад) Нет описания правки |
Pok (обсуждение | вклад) Нет описания правки |
||
| Строка 820: | Строка 820: | ||
container.dataset.checkboxInitialized = '1'; | container.dataset.checkboxInitialized = '1'; | ||
}); | }); | ||
} | |||
// Привязка expand/collapse к чекбоксу по id | |||
function registerCheckboxExpander(checkboxId, options) { | |||
options = options || {}; | |||
// если нужно — использовать только expand (по умолчанию false = делаем и collapse) | |||
var onlyExpand = !!options.onlyExpand; | |||
var checkbox = document.getElementById(checkboxId); | |||
if (!checkbox) { | |||
// Если чекбокс ещё не на странице — попробуем навесить через делегирование (MutationObserver опционально) | |||
console.warn('registerCheckboxExpander: checkbox not found by id:', checkboxId); | |||
return; | |||
} | |||
function expandAll() { | |||
var collapsed = document.querySelectorAll('.mw-collapsed'); | |||
for (var i = 0; i < collapsed.length; i++) { | |||
collapsed[i].classList.remove('mw-collapsed'); | |||
} | |||
var togglesCollapsed = document.querySelectorAll('.mw-collapsible-toggle-collapsed'); | |||
for (var j = 0; j < togglesCollapsed.length; j++) { | |||
togglesCollapsed[j].classList.remove('mw-collapsible-toggle-collapsed'); | |||
togglesCollapsed[j].classList.add('mw-collapsible-toggle-expanded'); | |||
} | |||
var contents = document.querySelectorAll('.mw-collapsible-content'); | |||
for (var k = 0; k < contents.length; k++) { | |||
if (contents[k].style && contents[k].style.display) { | |||
contents[k].style.removeProperty('display'); | |||
} | |||
} | |||
} | |||
function collapseAll() { | |||
var collapsibleContainers = document.querySelectorAll('.mw-collapsible'); | |||
for (var i = 0; i < collapsibleContainers.length; i++) { | |||
var el = collapsibleContainers[i]; | |||
if (!el.classList.contains('mw-collapsed')) el.classList.add('mw-collapsed'); | |||
} | |||
var togglesExpanded = document.querySelectorAll('.mw-collapsible-toggle-expanded'); | |||
for (var j = 0; j < togglesExpanded.length; j++) { | |||
togglesExpanded[j].classList.remove('mw-collapsible-toggle-expanded'); | |||
togglesExpanded[j].classList.add('mw-collapsible-toggle-collapsed'); | |||
} | |||
var contents = document.querySelectorAll('.mw-collapsible-content'); | |||
for (var k = 0; k < contents.length; k++) { | |||
contents[k].style.setProperty('display', 'none', 'important'); | |||
} | |||
} | |||
checkbox.addEventListener('change', function (e) { | |||
if (checkbox.checked) { | |||
try { expandAll(); } catch (err) { console.error(err); } | |||
} else { | |||
if (!onlyExpand) { | |||
try { collapseAll(); } catch (err) { console.error(err); } | |||
} | |||
} | |||
}); | |||
if (checkbox.checked) { | |||
try { expandAll(); } catch (err) { console.error(err); } | |||
} | |||
} | } | ||
const currentPageTitle = document.title; | const currentPageTitle = document.title; | ||
| Строка 921: | Строка 987: | ||
initCheckboxCreator(); | initCheckboxCreator(); | ||
} | } | ||
registerCheckboxExpander('js-checkbox-mw-collapsible'); | |||
}); | }); | ||
/*WikiEditor/Викификатор*/ | /*WikiEditor/Викификатор*/ | ||