feature #9967 Form debugger storage (WouterJ)

This PR was squashed before being merged into the 2.5-dev branch (closes #9967).

Discussion
----------

Form debugger storage

This PR continues #9857

| Q             | A
| ------------- | ---
| Bug fix?      | no
| New feature?  | yes
| BC breaks?    | no
| Deprecations? | no
| Tests pass?   | yes
| Fixed tickets | #9123
| License       | MIT
| Doc PR        | -

Commits
-------

744da7f Form debugger storage
This commit is contained in:
Fabien Potencier 2014-01-13 21:44:32 +01:00
commit fff29a398d

View File

@ -199,7 +199,7 @@
{% endif %} {% endif %}
<script> <script>
function Toggler() { function Toggler(togglerStorage) {
"use strict"; "use strict";
var expand = function (button) { var expand = function (button) {
@ -210,6 +210,8 @@
throw "Toggle target " + targetId + " does not exist"; throw "Toggle target " + targetId + " does not exist";
} }
togglerStorage.store(targetId, 'visible');
Sfjs.removeClass(button, 'closed'); Sfjs.removeClass(button, 'closed');
Sfjs.removeClass(target, 'hidden'); Sfjs.removeClass(target, 'hidden');
}, },
@ -222,6 +224,8 @@
throw "Toggle target " + targetId + " does not exist"; throw "Toggle target " + targetId + " does not exist";
} }
togglerStorage.store(targetId, 'hidden');
Sfjs.addClass(button, 'closed'); Sfjs.addClass(button, 'closed');
Sfjs.addClass(target, 'hidden'); Sfjs.addClass(target, 'hidden');
}, },
@ -271,6 +275,63 @@
}; };
} }
function TogglerStorage(key) {
var key = 'sf_' + (key || 'toggle_data'),
store = function (id, state) {
var toggleData = sessionStorage.getItem(key);
if (!toggleData) {
toggleData = [];
} else {
toggleData = toggleData.split('|');
}
if ('visible' == state) {
toggleData.push(id);
} else {
var index = toggleData.indexOf(id);
if (-1 < index) {
toggleData.splice(index, 1);
}
}
sessionStorage.setItem(key, toggleData.join('|'));
},
initStorage = function (buttonsSelector) {
var toggleData = sessionStorage.getItem(key);
if (!toggleData) {
return;
}
toggleData = toggleData.split('|');
var buttons = document.getElementsByClassName(buttonsSelector || 'toggle-button');
for (i in toggleData) {
var element = document.getElementById(toggleData[i]);
if (!element) {
continue;
}
if (Sfjs.hasClass(element, 'hidden')) {
for (var i = -1; button = buttons[++i]; ) {
if (button.dataset.toggleTargetId && button.dataset.toggleTargetId == element.getAttribute('id')) {
break;
}
}
Sfjs.removeClass(element, 'hidden');
Sfjs.removeClass(button, 'closed');
}
}
};
return {
store: store,
initStorage: initStorage
};
}
function TabView() { function TabView() {
"use strict"; "use strict";
@ -335,10 +396,12 @@
} }
var tabTarget = new TabView(), var tabTarget = new TabView(),
toggler = new Toggler(); storage = new TogglerStorage(),
toggler = new Toggler(storage);
tabTarget.initTabs(document.querySelectorAll('.tree .tree-inner')); tabTarget.initTabs(document.querySelectorAll('.tree .tree-inner'));
toggler.initButtons(document.querySelectorAll('a.toggle-button')); toggler.initButtons(document.querySelectorAll('a.toggle-button'));
storage.initStorage();
</script> </script>
{% endblock %} {% endblock %}