whole_func_string: function outlineCollapse (p, subject) {
      var row = UI.utils.ancestor(p, 'TR')
      row = UI.utils.ancestor(row.parentNode, 'TR') // two levels up
      if (row) var statement = row.AJAR_statement
      var level // find level (the enclosing TD)
      for (level = p.parentNode; level.tagName !== 'TD'; level = level.parentNode) {
        if (typeof level === 'undefined') {
          alert('Not enclosed in TD!')
          return
        }
      }
  
      UI.log.debug('Collapsing subject ' + subject)
      var myview
      if (statement) {
        UI.log.debug('looking up pred ' + statement.predicate.uri + 'in defaults')
        myview = views.defaults[statement.predicate.uri]
      }
      UI.log.debug('view= ' + myview)
      if (level.parentNode.parentNode.id === 'outline') {
        var deleteNode = level.parentNode
      }
      thisOutline.replaceTD(thisOutline.outlineObjectTD(subject, myview, deleteNode, statement), level)
    }
func_code_string: function outlineCollapse (p, subject) {
      var row = UI.utils.ancestor(p, 'TR')
      row = UI.utils.ancestor(row.parentNode, 'TR') // two levels up
      if (row) var statement = row.AJAR_statement
      var level // find level (the enclosing TD)
      for (level = p.parentNode; level.tagName !== 'TD'; level = level.parentNode) {
        if (typeof level === 'undefined') {
          alert('Not enclosed in TD!')
          return
        }
      }
  
      UI.log.debug('Collapsing subject ' + subject)
      var myview
      if (statement) {
        UI.log.debug('looking up pred ' + statement.predicate.uri + 'in defaults')
        myview = views.defaults[statement.predicate.uri]
      }
      UI.log.debug('view= ' + myview)
      if (level.parentNode.parentNode.id === 'outline') {
        var deleteNode = level.parentNode
      }
      thisOutline.replaceTD(thisOutline.outlineObjectTD(subject, myview, deleteNode, statement), level)
    }
func_documentation_string: outlineExpand