whole_func_string: function (swap, container, transition, complete) {
      var enter;
      var containerDirection;
      var swapDirection;
  
      if (!transition) {
        if (container) container.innerHTML = swap.innerHTML;
        else if (swap.classList.contains('content')) document.body.appendChild(swap);
        else document.body.insertBefore(swap, document.querySelector('.content'));
      } else {
        enter  = /in$/.test(transition);
  
        if (transition == 'fade') {
          container.classList.add('in');
          container.classList.add('fade');
          swap.classList.add('fade');
        }
  
        if (/slide/.test(transition)) {
          swap.classList.add(enter ? 'right' : 'left');
          swap.classList.add('slide');
          container.classList.add('slide');
        }
  
        container.parentNode.insertBefore(swap, container);
      }
  
      if (!transition) complete && complete();
  
      if (transition == 'fade') {
        container.offsetWidth; // force reflow
        container.classList.remove('in');
        container.addEventListener('webkitTransitionEnd', fadeContainerEnd);
  
        function fadeContainerEnd() {
          container.removeEventListener('webkitTransitionEnd', fadeContainerEnd);
          swap.classList.add('in');
          swap.addEventListener('webkitTransitionEnd', fadeSwapEnd);
        }
        function fadeSwapEnd () {
          swap.removeEventListener('webkitTransitionEnd', fadeSwapEnd);
          container.parentNode.removeChild(container);
          swap.classList.remove('fade');
          swap.classList.remove('in');
          complete && complete();
        }
      }
  
      if (/slide/.test(transition)) {
        container.offsetWidth; // force reflow
        swapDirection      = enter ? 'right' : 'left'
        containerDirection = enter ? 'left' : 'right'
        container.classList.add(containerDirection);
        swap.classList.remove(swapDirection);
        swap.addEventListener('webkitTransitionEnd', slideEnd);
  
        function slideEnd() {
          swap.removeEventListener('webkitTransitionEnd', slideEnd);
          swap.classList.remove('slide');
          swap.classList.remove(swapDirection);
          container.parentNode.removeChild(container);
          complete && complete();
        }
      }
    }
func_code_string: function (swap, container, transition, complete) {
      var enter;
      var containerDirection;
      var swapDirection;
  
      if (!transition) {
        if (container) container.innerHTML = swap.innerHTML;
        else if (swap.classList.contains('content')) document.body.appendChild(swap);
        else document.body.insertBefore(swap, document.querySelector('.content'));
      } else {
        enter  = /in$/.test(transition);
  
        if (transition == 'fade') {
          container.classList.add('in');
          container.classList.add('fade');
          swap.classList.add('fade');
        }
  
        if (/slide/.test(transition)) {
          swap.classList.add(enter ? 'right' : 'left');
          swap.classList.add('slide');
          container.classList.add('slide');
        }
  
        container.parentNode.insertBefore(swap, container);
      }
  
      if (!transition) complete && complete();
  
      if (transition == 'fade') {
        container.offsetWidth; // force reflow
        container.classList.remove('in');
        container.addEventListener('webkitTransitionEnd', fadeContainerEnd);
  
        function fadeContainerEnd() {
          container.removeEventListener('webkitTransitionEnd', fadeContainerEnd);
          swap.classList.add('in');
          swap.addEventListener('webkitTransitionEnd', fadeSwapEnd);
        }
        function fadeSwapEnd () {
          swap.removeEventListener('webkitTransitionEnd', fadeSwapEnd);
          container.parentNode.removeChild(container);
          swap.classList.remove('fade');
          swap.classList.remove('in');
          complete && complete();
        }
      }
  
      if (/slide/.test(transition)) {
        container.offsetWidth; // force reflow
        swapDirection      = enter ? 'right' : 'left'
        containerDirection = enter ? 'left' : 'right'
        container.classList.add(containerDirection);
        swap.classList.remove(swapDirection);
        swap.addEventListener('webkitTransitionEnd', slideEnd);
  
        function slideEnd() {
          swap.removeEventListener('webkitTransitionEnd', slideEnd);
          swap.classList.remove('slide');
          swap.classList.remove(swapDirection);
          container.parentNode.removeChild(container);
          complete && complete();
        }
      }
    }
func_documentation_string: PUSH helpers ============