socialPane.js
function triageFriends (s) {
      outgoing = kb.each(s, foaf('knows'))
      incoming = kb.each(undefined, foaf('knows'), s) // @@ have to load the friends
      var confirmed = []
      var unconfirmed = []
      var requests = []

      for (let i = 0; i < outgoing.length; i++) {
        let friend = outgoing[i]
        let found = false
        for (let j = 0; j < incoming.length; j++) {
          if (incoming[j].sameTerm(friend)) {
            found = true
            break
          }
        }
        if (found) confirmed.push(friend)
        else unconfirmed.push(friend)
      } // outgoing

      for (let i = 0; i < incoming.length; i++) {
        let friend = incoming[i]
        // var lab = UI.utils.label(friend)
        let found = false
        for (let j = 0; j < outgoing.length; j++) {
          if (outgoing[j].sameTerm(friend)) {
            found = true
            break
          }
        }
        if (!found) requests.push(friend)
      } // incoming

      var cases = [['Acquaintances', outgoing], ['Mentioned as acquaintances by: ', requests]]
      for (let i = 0; i < cases.length; i++) {
        let thisCase = cases[i]
        let friends = thisCase[1]
        if (friends.length === 0) continue // Skip empty sections (sure?)

        let h3 = dom.createElement('h3')
        h3.textContent = thisCase[0]
        let htr = dom.createElement('tr')
        htr.appendChild(h3)
        mainTable.appendChild(htr)

        var items = []
        for (var j9 = 0; j9 < friends.length; j9++) {
          items.push([UI.utils.label(friends[j9]), friends[j9]])
        }
        items.sort()
        var last = null
        var fr
        for (var j7 = 0; j7 < items.length; j7++) {
          fr = items[j7][1]
          if (fr.sameTerm(last)) continue // unique
          last = fr
          if (UI.utils.label(fr) !== '...') { // This check is to avoid bnodes with no labels attached
            // appearing in the friends list with "..." - Oshani
            mainTable.appendChild(oneFriend(fr))
          }
        }
      }
    }
function triageFriends (s) {
      outgoing = kb.each(s, foaf('knows'))
      incoming = kb.each(undefined, foaf('knows'), s) // @@ have to load the friends
      var confirmed = []
      var unconfirmed = []
      var requests = []

      for (let i = 0; i < outgoing.length; i++) {
        let friend = outgoing[i]
        let found = false
        for (let j = 0; j < incoming.length; j++) {
          if (incoming[j].sameTerm(friend)) {
            found = true
            break
          }
        }
        if (found) confirmed.push(friend)
        else unconfirmed.push(friend)
      } // outgoing

      for (let i = 0; i < incoming.length; i++) {
        let friend = incoming[i]
        // var lab = UI.utils.label(friend)
        let found = false
        for (let j = 0; j < outgoing.length; j++) {
          if (outgoing[j].sameTerm(friend)) {
            found = true
            break
          }
        }
        if (!found) requests.push(friend)
      } // incoming

      var cases = [['Acquaintances', outgoing], ['Mentioned as acquaintances by: ', requests]]
      for (let i = 0; i < cases.length; i++) {
        let thisCase = cases[i]
        let friends = thisCase[1]
        if (friends.length === 0) continue // Skip empty sections (sure?)

        let h3 = dom.createElement('h3')
        h3.textContent = thisCase[0]
        let htr = dom.createElement('tr')
        htr.appendChild(h3)
        mainTable.appendChild(htr)

        var items = []
        for (var j9 = 0; j9 < friends.length; j9++) {
          items.push([UI.utils.label(friends[j9]), friends[j9]])
        }
        items.sort()
        var last = null
        var fr
        for (var j7 = 0; j7 < items.length; j7++) {
          fr = items[j7][1]
          if (fr.sameTerm(last)) continue // unique
          last = fr
          if (UI.utils.label(fr) !== '...') { // This check is to avoid bnodes with no labels attached
            // appearing in the friends list with "..." - Oshani
            mainTable.appendChild(oneFriend(fr))
          }
        }
      }
    }
Figure out which are reciprocated: @@ Does not look up profiles Does distinguish reciprocated from unreciprocated friendships