michielbdejong/solid-panes

View on GitHub
src/tableViewPane.js

Summary

Maintainability
A
0 mins
Test Coverage
// Format an array of RDF statements as an HTML table.
//
// This can operate in one of three modes: when the class of object is given
// or when the source document from which data is taken is given,
// or if a prepared query object is given.
// (In principle it could operate with neither class nor document
// given but typically
// there would be too much data.)
// When the tableClass is not given, it looks for common  classes in the data,
// and gives the user the option.
//
// 2008 Written, Ilaria Liccardi
// 2014 core functionality now in common/table.js   -timbl

// ///////////////////////////////////////////////////////////////////

// Table view pane  -- view of a class/
var UI = require('solid-ui')

module.exports = {
  icon: UI.icons.originalIconBase + 'table.png',

  name: 'tableOfClass',

  label: function (subject, context) {
    const store = context.session.store
    // if (!store.holds(subject, UI.ns.rdf('type'),UI.ns.rdfs('Class'))) return null
    if (!store.any(undefined, UI.ns.rdf('type'), subject)) {
      return null
    }
    var n = store.statementsMatching(undefined, UI.ns.rdf('type'), subject)
      .length
    if (n === 0) {
      // None, suppress pane
      return null
    }
    if (n > 15) {
      // @@ At the moment this pane can be slow with too many @@ fixme by using limits
      return null
    }
    return UI.utils.label(subject) + ' table'
  },

  render: function (subject, context) {
    const myDocument = context.dom
    var div = myDocument.createElement('div')
    div.setAttribute('class', 'tablePane')
    div.appendChild(UI.table(myDocument, { tableClass: subject }))
    return div
  }
}