|
199 | 199 | {% endif %}
|
200 | 200 |
|
201 | 201 | <script>
|
202 |
| - function Toggler() { |
| 202 | + function Toggler(togglerStorage) { |
203 | 203 | "use strict";
|
204 | 204 |
|
205 | 205 | var expand = function (button) {
|
|
210 | 210 | throw "Toggle target " + targetId + " does not exist";
|
211 | 211 | }
|
212 | 212 |
|
| 213 | + togglerStorage.store(targetId, 'visible'); |
| 214 | +
|
213 | 215 | Sfjs.removeClass(button, 'closed');
|
214 | 216 | Sfjs.removeClass(target, 'hidden');
|
215 | 217 | },
|
|
222 | 224 | throw "Toggle target " + targetId + " does not exist";
|
223 | 225 | }
|
224 | 226 |
|
| 227 | + togglerStorage.store(targetId, 'hidden'); |
| 228 | +
|
225 | 229 | Sfjs.addClass(button, 'closed');
|
226 | 230 | Sfjs.addClass(target, 'hidden');
|
227 | 231 | },
|
|
271 | 275 | };
|
272 | 276 | }
|
273 | 277 |
|
| 278 | + function TogglerStorage(key) { |
| 279 | + var key = 'sf_' + (key || 'toggle_data'), |
| 280 | + store = function (id, state) { |
| 281 | + var toggleData = sessionStorage.getItem(key); |
| 282 | + if (!toggleData) { |
| 283 | + toggleData = []; |
| 284 | + } else { |
| 285 | + toggleData = toggleData.split('|'); |
| 286 | + } |
| 287 | +
|
| 288 | + if ('visible' == state) { |
| 289 | + toggleData.push(id); |
| 290 | + } else { |
| 291 | + var index = toggleData.indexOf(id); |
| 292 | + if (-1 < index) { |
| 293 | + toggleData.splice(index, 1); |
| 294 | + } |
| 295 | + } |
| 296 | +
|
| 297 | + sessionStorage.setItem(key, toggleData.join('|')); |
| 298 | + }, |
| 299 | +
|
| 300 | + initStorage = function (buttonsSelector) { |
| 301 | + var toggleData = sessionStorage.getItem(key); |
| 302 | +
|
| 303 | + if (!toggleData) { |
| 304 | + return; |
| 305 | + } |
| 306 | + toggleData = toggleData.split('|'); |
| 307 | +
|
| 308 | + var buttons = document.getElementsByClassName(buttonsSelector || 'toggle-button'); |
| 309 | + for (i in toggleData) { |
| 310 | + var element = document.getElementById(toggleData[i]); |
| 311 | + if (!element) { |
| 312 | + continue; |
| 313 | + } |
| 314 | +
|
| 315 | + if (Sfjs.hasClass(element, 'hidden')) { |
| 316 | + for (var i = -1; button = buttons[++i]; ) { |
| 317 | + if (button.dataset.toggleTargetId && button.dataset.toggleTargetId == element.getAttribute('id')) { |
| 318 | + break; |
| 319 | + } |
| 320 | + } |
| 321 | +
|
| 322 | + Sfjs.removeClass(element, 'hidden'); |
| 323 | + Sfjs.removeClass(button, 'closed'); |
| 324 | + } |
| 325 | + } |
| 326 | + }; |
| 327 | +
|
| 328 | + return { |
| 329 | + store: store, |
| 330 | +
|
| 331 | + initStorage: initStorage |
| 332 | + }; |
| 333 | + } |
| 334 | +
|
274 | 335 | function TabView() {
|
275 | 336 | "use strict";
|
276 | 337 |
|
|
335 | 396 | }
|
336 | 397 |
|
337 | 398 | var tabTarget = new TabView(),
|
338 |
| - toggler = new Toggler(); |
| 399 | + storage = new TogglerStorage(), |
| 400 | + toggler = new Toggler(storage); |
339 | 401 |
|
340 | 402 | tabTarget.initTabs(document.querySelectorAll('.tree .tree-inner'));
|
341 | 403 | toggler.initButtons(document.querySelectorAll('a.toggle-button'));
|
| 404 | + storage.initStorage(); |
342 | 405 | </script>
|
343 | 406 | {% endblock %}
|
344 | 407 |
|
|
0 commit comments