(function() {
'use strict';
var STORAGE_KEY = 'guidebook-expanded-chapters';
function loadExpandedState() {
try {
var saved = localStorage.getItem(STORAGE_KEY);
return saved ? JSON.parse(saved) : {};
} catch (e) {
return {};
}
}
function saveExpandedState(state) {
try {
localStorage.setItem(STORAGE_KEY, JSON.stringify(state));
} catch (e) {
}
}
function getChapterId(chapter) {
var link = chapter.querySelector('a');
if (link && link.getAttribute('href')) {
return link.getAttribute('href');
}
var title = chapter.querySelector('.chapter-title');
if (title) {
return 'title:' + title.textContent.trim();
}
return null;
}
var expandedState = loadExpandedState();
var expandables = document.querySelectorAll('.chapter.expandable');
expandables.forEach(function(chapter) {
var toggle = chapter.querySelector('a, .chapter-title');
if (!toggle) return;
var chapterId = getChapterId(chapter);
var articles = chapter.querySelector('.articles');
var shouldExpand = false;
if (articles) {
var activeChild = articles.querySelector('.active');
if (activeChild || chapter.classList.contains('active')) {
shouldExpand = true;
if (chapterId) {
expandedState[chapterId] = true;
}
}
}
if (!shouldExpand && chapterId && expandedState[chapterId]) {
shouldExpand = true;
}
if (shouldExpand) {
chapter.classList.add('expanded');
}
var link = chapter.querySelector('a');
var titleSpan = chapter.querySelector('.chapter-title');
if (titleSpan) {
titleSpan.addEventListener('click', function(e) {
e.preventDefault();
chapter.classList.toggle('expanded');
if (chapterId) {
expandedState[chapterId] = chapter.classList.contains('expanded');
saveExpandedState(expandedState);
}
});
}
if (link && articles) {
var toggleBtn = document.createElement('span');
toggleBtn.className = 'toggle-btn';
toggleBtn.innerHTML = '';
toggleBtn.style.cssText = 'cursor: pointer; padding: 5px; margin-left: -20px; position: absolute;';
link.style.position = 'relative';
toggleBtn.addEventListener('click', function(e) {
e.preventDefault();
e.stopPropagation();
chapter.classList.toggle('expanded');
if (chapterId) {
expandedState[chapterId] = chapter.classList.contains('expanded');
saveExpandedState(expandedState);
}
});
}
if (link) {
link.addEventListener('click', function(e) {
var rect = link.getBoundingClientRect();
var clickX = e.clientX - rect.left;
if (clickX < 25 && articles) {
e.preventDefault();
e.stopPropagation();
chapter.classList.toggle('expanded');
if (chapterId) {
expandedState[chapterId] = chapter.classList.contains('expanded');
saveExpandedState(expandedState);
}
}
});
}
});
var active = document.querySelector('.chapter.active');
if (active) {
var parent = active.parentElement;
while (parent) {
if (parent.classList && parent.classList.contains('chapter')) {
parent.classList.add('expanded');
var parentId = getChapterId(parent);
if (parentId) {
expandedState[parentId] = true;
}
}
parent = parent.parentElement;
}
saveExpandedState(expandedState);
}
})();