Ejemplo n.º 1
0
  render: function (subject, dom) {
    var filter = function (pred, inverse) {
      if (typeof panes.internal.predicates[pred.uri] !== 'undefined') {
        return false
      }
      if (inverse && (pred.uri ===
        'http://www.w3.org/1999/02/22-rdf-syntax-ns#type')) return false
      return true
    }

    var outliner = panes.getOutliner(dom)
    var kb = UI.store
    // var outline = outliner; // @@
    UI.log.info('@defaultPane.render, dom is now ' + dom.location)
    subject = kb.canon(subject)
    var div = dom.createElement('div')
    div.setAttribute('class', 'defaultPane')
    //        appendRemoveIcon(div, subject, div)

    var plist = kb.statementsMatching(subject)
    outliner.appendPropertyTRs(div, plist, false, filter)
    plist = kb.statementsMatching(undefined, undefined, subject)
    outliner.appendPropertyTRs(div, plist, true, filter)
    if ((subject.termType === 'Literal') && (subject.value.slice(0, 7) === 'http://')) {
      outliner.appendPropertyTRs(div,
        [$rdf.st(kb.sym(subject.value), UI.ns.link('uri'), subject)],
        true, filter)
    }
    if ((subject.termType === 'NamedNode' &&
      kb.updater.editable(UI.rdf.Util.uri.docpart(subject.uri), kb)) ||
        (subject.termType === 'BlankNode' &&
        kb.anyStatementMatching(subject) &&
        kb.anyStatementMatching(subject).why &&
        kb.anyStatementMatching(subject).why.uri &&
        kb.updater.editable(kb.anyStatementMatching(subject).why.uri)
      // check the document containing something about of the bnode @@ what about as object?
      /*  ! && HCIoptions["bottom insert highlights"].enabled  */)) {
      var holdingTr = dom.createElement('tr') // these are to minimize required changes
      var holdingTd = dom.createElement('td') // in userinput.js
      holdingTd.setAttribute('colspan', '2')
      holdingTd.setAttribute('notSelectable', 'true')
      var img = dom.createElement('img')
      img.src = UI.icons.originalIconBase + 'tango/22-list-add-new.png'
      img.addEventListener('click', function addNewTripleIconMouseDownListener (e) {
        outliner.UserInput.addNewPredicateObject(e)
        e.stopPropagation()
        e.preventDefault()
      })
      img.className = 'bottom-border-active'
      // img.addEventListener('click', thisOutline.UserInput.addNewPredicateObject,false)
      div.appendChild(holdingTr).appendChild(holdingTd).appendChild(img)
    }
    return div
  }
Ejemplo n.º 2
0
  render: function (subject, myDocument) {
    function alternativeRendering () {
      var sz = UI.rdf.Serializer(UI.store)
      var res = sz.rootSubjects(sts)
      var roots = res.roots
      var p = {}
      p.render = function (s2) {
        var div = myDocument.createElement('div')
        div.setAttribute('class', 'withinDocumentPane')
        var plist = kb.statementsMatching(s2, undefined, undefined, subject)
        outliner.appendPropertyTRs(div, plist, false, function (pred, inverse) { return true })
        return div
      }
      for (var i = 0; i < roots.length; i++) {
        var tr = myDocument.createElement('TR')
        var root = roots[i]
        tr.style.verticalAlign = 'top'
        var td = outliner.outlineObjectTD(root, undefined, tr)
        tr.appendChild(td)
        div.appendChild(tr)
        outliner.outlineExpand(td, root, {'pane': p})
      }
    }

    function mainRendering () {
      var initialRoots = [] // Ordering: start with stuff about this doc
      if (kb.holds(subject, undefined, undefined, subject)) initialRoots.push(subject)
      // Then about the primary topic of the document if any
      var ps = kb.any(subject, UI.ns.foaf('primaryTopic'), undefined, subject)
      if (ps) initialRoots.push(ps)
      div.appendChild(panes.dataContents.statementsAsTables(sts, myDocument, initialRoots))
    }

    var outliner = panes.getOutliner(myDocument)
    var kb = UI.store
    var div = myDocument.createElement('div')
    div.setAttribute('class', 'dataContentPane')
    // Because of smushing etc, this will not be a copy of the original source
    // We could instead either fetch and re-parse the source,
    // or we could keep all the pre-smushed triples.
    var sts = kb.statementsMatching(undefined, undefined, undefined, subject) // @@ slow with current store!

    if ($rdf.keepThisCodeForLaterButDisableFerossConstantConditionPolice) {
      alternativeRendering()
    } else {
      mainRendering()
    }
    return div
  }
Ejemplo n.º 3
0
  render: function (subject, dom) {
    var $r = UI.rdf
    var kb = UI.store
    subject = kb.canon(subject)
    var types = kb.findTypeURIs(subject)
    function filter (pred, inverse) {
      if (types['http://www.w3.org/2007/ont/link#ProtocolEvent']) return true // display everything for them
      return !!(typeof panes.internal.predicates[pred.uri] !== 'undefined')
    }
    var div = dom.createElement('div')
    div.setAttribute('class', 'internalPane')
    div.setAttribute('style', 'background-color: #ddddff; padding: 0.5em; border-radius: 1em;')

    function deleteRecursive (kb, folder) {
      return new Promise(function (resolve, reject) {
        kb.fetcher.load(folder).then(function () {
          let promises = kb.each(folder, ns.ldp('contains')).map(file => {
            if (kb.holds(file, ns.rdf('type'), ns.ldp('BasicContainer'))) {
              return deleteRecursive(kb, file)
            } else {
              console.log('deleteRecursive leaf file: ' + file)
              return kb.fetcher.webOperation('DELETE', file.uri)
            }
          })
          Promise.all(promises).then(res => {
            console.log('deleteRecursive empty folder: ' + folder)
            kb.fetcher.webOperation('DELETE', folder.uri).then(res => {
              console.log('Deleted Ok: ' + folder)
              resolve()
            }, err => {
              var str = 'Unable to delete ' + folder + ': ' + err
              console.log(str)
              reject(new Error(str))
            })
            resolve()
          }, err => {
            alert(err)
            reject(err)
          })
        })
      })
    }

    const isDocument = subject.uri && !subject.uri.includes('#')
    if (isDocument) {
      const controls = div.appendChild(dom.createElement('table'))
      controls.style = 'width: 100%; margin: 1em;'
      const controlRow = controls.appendChild(dom.createElement('tr'))

      const deleteCell = controlRow.appendChild(dom.createElement('td'))
      const isFolder = ((subject.uri && subject.uri.endsWith('/')) ||
        kb.holds(subject, ns.rdf('type'), ns.ldp('Container')))
      const noun = isFolder ? 'folder' : 'file'
      var deleteButton = UI.widgets.deleteButtonWithCheck(dom, deleteCell, noun, function () {
        if (!confirm('Are you sure you want to delete ' + subject + '? This cannot be undone.')) return
        var promise = isFolder ? deleteRecursive(kb, subject)
          : kb.fetcher.webOperation('DELETE', subject.uri)
        promise.then(response => {
          var str = 'Deleted: ' + subject
          console.log(str)
        }, err => {
          var str = 'Unable to delete ' + subject + ': ' + err
          console.log(str)
          alert(str)
        })
      })
      deleteButton.style = 'height: 2em;'
      deleteButton.class = '' // Remove hover hide
      deleteCell.appendChild(deleteButton)

      const refreshCell = controlRow.appendChild(dom.createElement('td'))
      const refreshButton = UI.widgets.button(dom, UI.icons.iconBase + 'noun_479395.svg', 'refresh')
      refreshCell.appendChild(refreshButton)
      refreshButton.addEventListener('click', event => {
        kb.fetcher.refresh(subject, function (ok, errm, res) {
          let str
          if (ok) {
            str = 'Refreshed OK: ' + subject
          } else {
            str = 'Error refreshing: ' + subject + ': ' + errm
          }
          console.log(str)
          alert(str)
        })
      })
    }

    var plist = kb.statementsMatching(subject)
    var docURI = null
    if (subject.uri) {
      plist.push($r.st(subject,
        kb.sym('http://www.w3.org/2007/ont/link#uri'), subject.uri, UI.store.fetcher.appNode))
      if (subject.uri.indexOf('#') >= 0) {
        docURI = subject.uri.split('#')[0]
        plist.push($r.st(subject,
          kb.sym('http://www.w3.org/2007/ont/link#documentURI'),
          subject.uri.split('#')[0], UI.store.fetcher.appNode))
        plist.push($r.st(subject,
          kb.sym('http://www.w3.org/2007/ont/link#document'),
          kb.sym(subject.uri.split('#')[0]), UI.store.fetcher.appNode))
      } else {
        docURI = subject.uri
      }
    }
    if (docURI) {
      var ed = UI.store.updater.editable(docURI)
      if (ed) {
        plist.push($r.st(subject,
          kb.sym('http://www.w3.org/ns/rww#editable'),
          kb.literal(ed), UI.store.fetcher.appNode))
      }
    }
    var outliner = panes.getOutliner(dom)
    outliner.appendPropertyTRs(div, plist, false, filter)
    plist = kb.statementsMatching(undefined, undefined, subject)
    outliner.appendPropertyTRs(div, plist, true, filter)
    return div
  },
Ejemplo n.º 4
0
 .then(() => {
   var outliner = panes.getOutliner(dom)
   var display = outliner.propertyTable(x) //  ,table, pane
   preview.innerHTML = ''
   preview.appendChild(display)
 })