// ==UserScript==
// @name           Collapse All
// @namespace      scripting enabled tools
// @include        *
// ==/UserScript==

window.addEventListener('load', function(e) {
  var threshold = [100,100];
  var skipthreshold = [1000,1000];
  var toCollapse = [];

  addTo('ul');
  addTo('div');
  addTo('p');
  addTo('tr');
  addTo('table');

  for(var i=0,j=toCollapse.length;i<j;i++){
    var cur = toCollapse[i];

    var a = document.createElement('a');
    styleLink(a);
    a.appendChild(document.createTextNode('-'));

    a.addEventListener('click',function(e){
      if(this.firstChild.nodeValue === '-'){
        this.nextSibling.style.display = 'none';
        this.firstChild.nodeValue = '+';
      } else {
        this.nextSibling.style.display = 'block';
        this.firstChild.nodeValue = '-';
      }
      e.preventDefault();
    },false);
    cur.style.borderLeft = '1px solid #ccc';
    cur.parentNode.insertBefore(a,cur);
  }
  
  function addTo(elm){
    var elms = document.getElementsByTagName(elm);
    for(var i=0;elms[i];i++){
      var w = elms[i].offsetWidth;
      var h = elms[i].offsetHeight;
      if(w > threshold[0] && w < skipthreshold[0] &&  
        h > threshold[1] && h < skipthreshold[1]){
        toCollapse.push(elms[i]);
      }
    }  
  }
  
  function styleLink(a){
    a.href = '#';
    a.style.fontWeight = 'bold';
    a.style.background = '#eee';
    a.style.border = '1px solid #333';
    a.style.color = 'black';
    a.style.padding = '0 5px';
    a.style.textDecoration = 'none';
    a.style.width = '1em';
    a.style.height = '1em';
    a.style.textAlign = 'center';
    a.style.fontSize = '150%';
  }
}, false);
