whole_func_string: function(elem, ignoreScroll) {
          var rect = elem.getBoundingClientRect();
          var result = {
            top:    rect.top | 0,
            left:   rect.left | 0,
            right:  rect.right | 0,
            bottom: rect.bottom | 0,
            width:  (rect.right - rect.left) | 0,
            height: (rect.bottom - rect.top) | 0
          };
  
          if (ignoreScroll) { return result; }
  
          var body = env.doc.body;
          result.top += env.root.pageYOffset || body.scrollTop;
          result.top += env.root.pageXOffset || body.scrollLeft;
          return result;
      }
func_code_string: function(elem, ignoreScroll) {
          var rect = elem.getBoundingClientRect();
          var result = {
            top:    rect.top | 0,
            left:   rect.left | 0,
            right:  rect.right | 0,
            bottom: rect.bottom | 0,
            width:  (rect.right - rect.left) | 0,
            height: (rect.bottom - rect.top) | 0
          };
  
          if (ignoreScroll) { return result; }
  
          var body = env.doc.body;
          result.top += env.root.pageYOffset || body.scrollTop;
          result.top += env.root.pageXOffset || body.scrollLeft;
          return result;
      }
func_documentation_string: client rect adjusted to window scroll