outline/userInput.js
function pasteFromClipboard (address, selectedTd) {
      function termFrom (fromCode) {
        var term = outline.clipboard[fromCode].shift()
        if (term === null) {
          UI.log.warn('no more element in clipboard!')
          return
        }
        switch (fromCode) {
          case 'predicates':
          case 'objects':
            var allArray = outline.clipboard.all
            for (var i = 0; true; i++) {
              if (term.sameTerm(allArray[i])) {
                allArray.splice(i, 1)
                break
              }
            }
            break
          case 'all':
            throw new Error('hostorical code not understood - what is theCollection?')
            /*
            var isObject = term.sameTerm(theCollection('objects').elements[0])
            isObject ? outline.clipboard.objecs.shift() : outline.clipboard.predicates.shift() // drop the corresponding term
            return [term, isObject]
            break
            */
        }
        return term
      }
      var term
      switch (selectedTd.className) {
        case 'undetermined selected':
          term = selectedTd.nextSibling ? termFrom('predicates') : termFrom('objects')
          if (!term) return
          break
        case 'pred selected': // paste objects into this predicate
          term = termFrom('objects')
          if (!term) return
          break
        case 'selected': // header <TD>, undetermined generated
          var returnArray = termFrom('all')
          if (!returnArray) return
          term = returnArray[0]
          this.insertTermTo(selectedTd, term, returnArray[1])
          return
      }
      this.insertTermTo(selectedTd, term)
    }
function pasteFromClipboard (address, selectedTd) {
      function termFrom (fromCode) {
        var term = outline.clipboard[fromCode].shift()
        if (term === null) {
          UI.log.warn('no more element in clipboard!')
          return
        }
        switch (fromCode) {
          case 'predicates':
          case 'objects':
            var allArray = outline.clipboard.all
            for (var i = 0; true; i++) {
              if (term.sameTerm(allArray[i])) {
                allArray.splice(i, 1)
                break
              }
            }
            break
          case 'all':
            throw new Error('hostorical code not understood - what is theCollection?')
            /*
            var isObject = term.sameTerm(theCollection('objects').elements[0])
            isObject ? outline.clipboard.objecs.shift() : outline.clipboard.predicates.shift() // drop the corresponding term
            return [term, isObject]
            break
            */
        }
        return term
      }
      var term
      switch (selectedTd.className) {
        case 'undetermined selected':
          term = selectedTd.nextSibling ? termFrom('predicates') : termFrom('objects')
          if (!term) return
          break
        case 'pred selected': // paste objects into this predicate
          term = termFrom('objects')
          if (!term) return
          break
        case 'selected': // header <TD>, undetermined generated
          var returnArray = termFrom('all')
          if (!returnArray) return
          term = returnArray[0]
          this.insertTermTo(selectedTd, term, returnArray[1])
          return
      }
      this.insertTermTo(selectedTd, term)
    }
Called when paste is called (Ctrl+v)