Skip to content

Instantly share code, notes, and snippets.

@elqahtani
Created July 21, 2015 21:04
Show Gist options
  • Select an option

  • Save elqahtani/6fbf43b120ba787a6892 to your computer and use it in GitHub Desktop.

Select an option

Save elqahtani/6fbf43b120ba787a6892 to your computer and use it in GitHub Desktop.
// This used to use jQuery, but was rewritten in plan DOM for speed and to get rid of the jQuery dependency.
document.addEventListener('DOMContentLoaded', function() {
// Click handler for collapsing and expanding objects and arrays
function collapse(evt) {
var collapser = evt.target;
var target = collapser.parentNode.getElementsByClassName('collapsible');
if ( ! target.length ) {
return;
}
target = target[0];
if ( target.style.display == 'none' ) {
var ellipsis = target.parentNode.getElementsByClassName('ellipsis')[0];
target.parentNode.removeChild(ellipsis);
target.style.display = '';
collapser.innerHTML = '-';
} else {
target.style.display = 'none';
var ellipsis = document.createElement('span');
ellipsis.className = 'ellipsis';
ellipsis.innerHTML = ' … ';
target.parentNode.insertBefore(ellipsis, target);
collapser.innerHTML = '+';
}
}
function addCollapser(item) {
// This mainly filters out the root object (which shouldn't be collapsible)
if ( item.nodeName != 'LI' ) {
return;
}
var collapser = document.createElement('div');
collapser.className = 'collapser';
collapser.innerHTML = '-';
collapser.addEventListener('click', collapse, false);
item.insertBefore(collapser, item.firstChild);
}
var items = document.getElementsByClassName('collapsible');
for( var i = 0; i < items.length; i++) {
addCollapser(items[i].parentNode);
}
}, false);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment