whole_func_string: function viewAsBoringDefault (obj) {
        // UI.log.debug('entered viewAsBoringDefault...');
      var rep // representation in html
  
      if (obj.termType === 'Literal') {
        var styles = {
          'integer': 'text-align: right;',
          'decimal': 'text-align: \'.\';',
          'double': 'text-align: \'.\';'
        }
        rep = dom.createElement('span')
        rep.textContent = obj.value
          // Newlines have effect and overlong lines wrapped automatically
        var style = ''
        if (obj.datatype && obj.datatype.uri) {
          var xsd = UI.ns.xsd('').uri
          if (obj.datatype.uri.slice(0, xsd.length) === xsd) { style = styles[obj.datatype.uri.slice(xsd.length)] }
        }
        rep.setAttribute('style', style || 'white-space: pre-wrap;')
      } else if (obj.termType === 'NamedNode' || obj.termType === 'BlankNode') {
        rep = dom.createElement('span')
        rep.setAttribute('about', obj.toNT())
        thisOutline.appendAccessIcons(kb, rep, obj)
  
        if (obj.termType === 'NamedNode') {
          if (obj.uri.slice(0, 4) === 'tel:') {
            var num = obj.uri.slice(4)
            var anchor = dom.createElement('a')
            rep.appendChild(dom.createTextNode(num))
            anchor.setAttribute('href', obj.uri)
            anchor.appendChild(UI.utils.AJARImage(outlineIcons.src.icon_telephone,
                'phone', 'phone ' + num, dom))
            rep.appendChild(anchor)
            anchor.firstChild.setAttribute('class', 'phoneIcon')
          } else { // not tel:
            rep.appendChild(dom.createTextNode(UI.utils.label(obj)))
            UI.widgets.makeDraggable(rep, obj) // 2017
          }
        } else { // bnode
          rep.appendChild(dom.createTextNode(UI.utils.label(obj)))
        }
      } else if (obj.termType === 'Collection') {
          // obj.elements is an array of the elements in the collection
        rep = dom.createElement('table')
        rep.setAttribute('style', 'width: 100%;')
        rep.setAttribute('about', obj.toNT())
          /* Not sure which looks best -- with or without. I think without
  
                  var tr = rep.appendChild(document.createElement('tr'));
                  tr.appendChild(document.createTextNode(
                          obj.elements.length ? '(' + obj.elements.length+')' : '(none)'));
          */
        for (var i = 0; i < obj.elements.length; i++) {
          var elt = obj.elements[i]
          var row = rep.appendChild(dom.createElement('tr'))
          var numcell = row.appendChild(dom.createElement('td'))
          numcell.setAttribute('style', 'margin: 0.2em; border: none; padding: 0; vertical-align: top;')
          numcell.setAttribute('notSelectable', 'false')
          numcell.setAttribute('about', obj.toNT())
          numcell.innerHTML = (i + 1) + ')'
          row.appendChild(thisOutline.outlineObjectTD(elt))
        }
      } else if (obj.termType === 'Graph') {
        rep = panes.dataContentPane.statementsAsTables(obj.statements, dom)
        rep.setAttribute('class', 'nestedFormula')
      } else {
        UI.log.error('Object ' + obj + ' has unknown term type: ' + obj.termType)
        rep = dom.createTextNode('[unknownTermType:' + obj.termType + ']')
      } // boring defaults.
      UI.log.debug('contents: ' + rep.innerHTML)
      return rep
    }
func_code_string: function viewAsBoringDefault (obj) {
        // UI.log.debug('entered viewAsBoringDefault...');
      var rep // representation in html
  
      if (obj.termType === 'Literal') {
        var styles = {
          'integer': 'text-align: right;',
          'decimal': 'text-align: \'.\';',
          'double': 'text-align: \'.\';'
        }
        rep = dom.createElement('span')
        rep.textContent = obj.value
          // Newlines have effect and overlong lines wrapped automatically
        var style = ''
        if (obj.datatype && obj.datatype.uri) {
          var xsd = UI.ns.xsd('').uri
          if (obj.datatype.uri.slice(0, xsd.length) === xsd) { style = styles[obj.datatype.uri.slice(xsd.length)] }
        }
        rep.setAttribute('style', style || 'white-space: pre-wrap;')
      } else if (obj.termType === 'NamedNode' || obj.termType === 'BlankNode') {
        rep = dom.createElement('span')
        rep.setAttribute('about', obj.toNT())
        thisOutline.appendAccessIcons(kb, rep, obj)
  
        if (obj.termType === 'NamedNode') {
          if (obj.uri.slice(0, 4) === 'tel:') {
            var num = obj.uri.slice(4)
            var anchor = dom.createElement('a')
            rep.appendChild(dom.createTextNode(num))
            anchor.setAttribute('href', obj.uri)
            anchor.appendChild(UI.utils.AJARImage(outlineIcons.src.icon_telephone,
                'phone', 'phone ' + num, dom))
            rep.appendChild(anchor)
            anchor.firstChild.setAttribute('class', 'phoneIcon')
          } else { // not tel:
            rep.appendChild(dom.createTextNode(UI.utils.label(obj)))
            UI.widgets.makeDraggable(rep, obj) // 2017
          }
        } else { // bnode
          rep.appendChild(dom.createTextNode(UI.utils.label(obj)))
        }
      } else if (obj.termType === 'Collection') {
          // obj.elements is an array of the elements in the collection
        rep = dom.createElement('table')
        rep.setAttribute('style', 'width: 100%;')
        rep.setAttribute('about', obj.toNT())
          /* Not sure which looks best -- with or without. I think without
  
                  var tr = rep.appendChild(document.createElement('tr'));
                  tr.appendChild(document.createTextNode(
                          obj.elements.length ? '(' + obj.elements.length+')' : '(none)'));
          */
        for (var i = 0; i < obj.elements.length; i++) {
          var elt = obj.elements[i]
          var row = rep.appendChild(dom.createElement('tr'))
          var numcell = row.appendChild(dom.createElement('td'))
          numcell.setAttribute('style', 'margin: 0.2em; border: none; padding: 0; vertical-align: top;')
          numcell.setAttribute('notSelectable', 'false')
          numcell.setAttribute('about', obj.toNT())
          numcell.innerHTML = (i + 1) + ')'
          row.appendChild(thisOutline.outlineObjectTD(elt))
        }
      } else if (obj.termType === 'Graph') {
        rep = panes.dataContentPane.statementsAsTables(obj.statements, dom)
        rep.setAttribute('class', 'nestedFormula')
      } else {
        UI.log.error('Object ' + obj + ' has unknown term type: ' + obj.termType)
        rep = dom.createTextNode('[unknownTermType:' + obj.termType + ']')
      } // boring defaults.
      UI.log.debug('contents: ' + rep.innerHTML)
      return rep
    }
func_documentation_string: var thisOutline = this   dup some builtin simple views *