(node)
| 63 | } |
| 64 | |
| 65 | function createCollapsibles(node) { |
| 66 | let save = false |
| 67 | if (!node) { |
| 68 | node = document |
| 69 | save = true |
| 70 | } |
| 71 | let collapsibles = node.querySelectorAll(".collapsible") |
| 72 | collapsibles.forEach(function (c) { |
| 73 | if (save && c.parentElement.id) { |
| 74 | COLLAPSIBLE_PANELS.push(c.parentElement) |
| 75 | } |
| 76 | let handle = document.createElement("span") |
| 77 | handle.className = "collapsible-handle" |
| 78 | |
| 79 | if (c.classList.contains("active")) { |
| 80 | handle.innerHTML = "➖" // minus |
| 81 | } else { |
| 82 | handle.innerHTML = "➕" // plus |
| 83 | } |
| 84 | c.insertBefore(handle, c.firstChild) |
| 85 | |
| 86 | c.addEventListener("click", function () { |
| 87 | toggleCollapsible(c.parentElement) |
| 88 | }) |
| 89 | }) |
| 90 | if (save) { |
| 91 | let saved = localStorage.getItem(COLLAPSIBLES_KEY) |
| 92 | if (!saved) { |
| 93 | saved = tryLoadOldCollapsibles() |
| 94 | } |
| 95 | if (!saved) { |
| 96 | saveCollapsibles() |
| 97 | saved = localStorage.getItem(COLLAPSIBLES_KEY) |
| 98 | } |
| 99 | let values = JSON.parse(saved) |
| 100 | COLLAPSIBLE_PANELS.forEach((element) => { |
| 101 | let value = element.querySelector(".collapsible").className.indexOf("active") !== -1 |
| 102 | if (values[element.id] != value) { |
| 103 | toggleCollapsible(element) |
| 104 | } |
| 105 | }) |
| 106 | COLLAPSIBLES_INITIALIZED = true |
| 107 | } |
| 108 | } |
| 109 | |
| 110 | function tryLoadOldCollapsibles() { |
| 111 | const old_map = { |
no test coverage detected