solid-ui 2.5.1 → 2.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -0
- package/dist/841.solid-ui.min.js +1 -1
- package/dist/841.solid-ui.min.js.map +1 -1
- package/dist/_2b19.solid-ui.js.map +1 -1
- package/dist/solid-ui.js +42754 -45728
- package/dist/solid-ui.js.map +1 -1
- package/dist/solid-ui.min.js +1 -1
- package/dist/solid-ui.min.js.LICENSE.txt +1 -5
- package/dist/solid-ui.min.js.map +1 -1
- package/lib/acl/access-controller.js +48 -49
- package/lib/acl/access-controller.js.map +1 -1
- package/lib/acl/access-groups.js +40 -40
- package/lib/acl/access-groups.js.map +1 -1
- package/lib/acl/acl-control.js +18 -19
- package/lib/acl/acl-control.js.map +1 -1
- package/lib/acl/acl.js +4 -5
- package/lib/acl/acl.js.map +1 -1
- package/lib/acl/add-agent-buttons.js +51 -52
- package/lib/acl/add-agent-buttons.js.map +1 -1
- package/lib/chat/bookmarks.js +76 -77
- package/lib/chat/bookmarks.js.map +1 -1
- package/lib/chat/chatLogic.js +74 -75
- package/lib/chat/chatLogic.js.map +1 -1
- package/lib/chat/dateFolder.js +66 -67
- package/lib/chat/dateFolder.js.map +1 -1
- package/lib/chat/infinite.js +218 -220
- package/lib/chat/infinite.js.map +1 -1
- package/lib/chat/keys.js +62 -63
- package/lib/chat/keys.js.map +1 -1
- package/lib/chat/message.js +98 -100
- package/lib/chat/message.js.map +1 -1
- package/lib/chat/messageTools.js +99 -100
- package/lib/chat/messageTools.js.map +1 -1
- package/lib/chat/signature.d.ts.map +1 -1
- package/lib/chat/signature.js +0 -1
- package/lib/chat/signature.js.map +1 -1
- package/lib/chat/thread.js +57 -61
- package/lib/chat/thread.js.map +1 -1
- package/lib/create/create.js +1 -2
- package/lib/create/create.js.map +1 -1
- package/lib/folders.js +1 -4
- package/lib/folders.js.map +1 -1
- package/lib/footer/index.d.ts.map +1 -1
- package/lib/footer/index.js +14 -16
- package/lib/footer/index.js.map +1 -1
- package/lib/header/index.js +34 -36
- package/lib/header/index.js.map +1 -1
- package/lib/iconBase.d.ts.map +1 -1
- package/lib/iconBase.js +0 -1
- package/lib/iconBase.js.map +1 -1
- package/lib/index.d.ts +1 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +5 -5
- package/lib/index.js.map +1 -1
- package/lib/log.d.ts +7 -7
- package/lib/log.d.ts.map +1 -1
- package/lib/log.js +2 -2
- package/lib/log.js.map +1 -1
- package/lib/login/login.js +217 -222
- package/lib/login/login.js.map +1 -1
- package/lib/matrix/matrix.js +1 -2
- package/lib/matrix/matrix.js.map +1 -1
- package/lib/matrix/types.js.map +1 -1
- package/lib/media/media-capture.js +3 -4
- package/lib/media/media-capture.js.map +1 -1
- package/lib/messageArea.js +1 -4
- package/lib/messageArea.js.map +1 -1
- package/lib/ns.js +1 -2
- package/lib/ns.js.map +1 -1
- package/lib/pad.js +1 -2
- package/lib/pad.js.map +1 -1
- package/lib/participation.js +1 -2
- package/lib/participation.js.map +1 -1
- package/lib/preferences.js +1 -2
- package/lib/preferences.js.map +1 -1
- package/lib/table.js +1 -2
- package/lib/table.js.map +1 -1
- package/lib/tabs.d.ts.map +1 -1
- package/lib/tabs.js +1 -2
- package/lib/tabs.js.map +1 -1
- package/lib/utils/headerFooterHelpers.d.ts.map +1 -1
- package/lib/utils/headerFooterHelpers.js +36 -36
- package/lib/utils/headerFooterHelpers.js.map +1 -1
- package/lib/utils/index.js +1 -2
- package/lib/utils/index.js.map +1 -1
- package/lib/utils/keyHelpers/accessData.d.ts.map +1 -1
- package/lib/utils/keyHelpers/accessData.js +33 -34
- package/lib/utils/keyHelpers/accessData.js.map +1 -1
- package/lib/utils/keyHelpers/acl.d.ts.map +1 -1
- package/lib/utils/keyHelpers/acl.js +21 -22
- package/lib/utils/keyHelpers/acl.js.map +1 -1
- package/lib/utils/keyHelpers/otherHelpers.d.ts.map +1 -1
- package/lib/utils/keyHelpers/otherHelpers.js +1 -2
- package/lib/utils/keyHelpers/otherHelpers.js.map +1 -1
- package/lib/utils/label.js +1 -2
- package/lib/utils/label.js.map +1 -1
- package/lib/versionInfo.d.ts +4 -3
- package/lib/versionInfo.d.ts.map +1 -1
- package/lib/versionInfo.js +30 -30
- package/lib/versionInfo.js.map +1 -1
- package/lib/widgets/buttons/iconLinks.d.ts.map +1 -1
- package/lib/widgets/buttons/iconLinks.js +2 -2
- package/lib/widgets/buttons/iconLinks.js.map +1 -1
- package/lib/widgets/buttons.d.ts +1 -1
- package/lib/widgets/buttons.d.ts.map +1 -1
- package/lib/widgets/buttons.js +1 -3
- package/lib/widgets/buttons.js.map +1 -1
- package/lib/widgets/dragAndDrop.js +1 -2
- package/lib/widgets/dragAndDrop.js.map +1 -1
- package/lib/widgets/error.js +1 -2
- package/lib/widgets/error.js.map +1 -1
- package/lib/widgets/forms/autocomplete/autocompleteBar.js +47 -48
- package/lib/widgets/forms/autocomplete/autocompleteBar.js.map +1 -1
- package/lib/widgets/forms/autocomplete/autocompleteField.js +38 -39
- package/lib/widgets/forms/autocomplete/autocompleteField.js.map +1 -1
- package/lib/widgets/forms/autocomplete/autocompletePicker.d.ts.map +1 -1
- package/lib/widgets/forms/autocomplete/autocompletePicker.js +44 -45
- package/lib/widgets/forms/autocomplete/autocompletePicker.js.map +1 -1
- package/lib/widgets/forms/autocomplete/language.js +23 -24
- package/lib/widgets/forms/autocomplete/language.js.map +1 -1
- package/lib/widgets/forms/autocomplete/publicData.d.ts.map +1 -1
- package/lib/widgets/forms/autocomplete/publicData.js +91 -93
- package/lib/widgets/forms/autocomplete/publicData.js.map +1 -1
- package/lib/widgets/forms/basic.js +2 -3
- package/lib/widgets/forms/basic.js.map +1 -1
- package/lib/widgets/forms/comment.js +1 -2
- package/lib/widgets/forms/comment.js.map +1 -1
- package/lib/widgets/forms/fieldParams.js +1 -2
- package/lib/widgets/forms/fieldParams.js.map +1 -1
- package/lib/widgets/forms/formStyle.js +1 -2
- package/lib/widgets/forms/formStyle.js.map +1 -1
- package/lib/widgets/forms.js +79 -80
- package/lib/widgets/forms.js.map +1 -1
- package/lib/widgets/index.js +1 -2
- package/lib/widgets/index.js.map +1 -1
- package/lib/widgets/multiSelect.js +1 -2
- package/lib/widgets/multiSelect.js.map +1 -1
- package/lib/widgets/peoplePicker.js +1 -2
- package/lib/widgets/peoplePicker.js.map +1 -1
- package/lib/widgets/widgetHelpers.d.ts.map +1 -1
- package/lib/widgets/widgetHelpers.js +3 -3
- package/lib/widgets/widgetHelpers.js.map +1 -1
- package/package.json +57 -57
package/lib/table.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"table.js","names":["debug","_interopRequireWildcard","require","_iconBase","_solidLogic","log","ns","rdf","utils","widgets","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","_typeof","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","UI","icons","renderTableViewPane","doc","options","sourceDocument","tableClass","givenQuery","query","RDFS_LITERAL","kb","store","rowsLookup","FORBIDDEN_COLUMNS","XSD_NUMBER_TYPES","XSD_DATE_TYPES","IMAGE_TYPES","keyVariable","subjectIdCounter","allType","types","typeSelectorDiv","addColumnDiv","lastQuery","mostCommonType","resultDiv","createElement","className","appendChild","generateControlBar","tableDiv","refresh","runQuery","table","logicalRows","columns","renderTableForQuery","s","calculateTable","generateTypeSelector","getMostCommonType","buildFilteredTable","result","setAttribute","tr","addSelectToQuery","type","selectedColumns","getColumns","length","variable","vars","push","setVariable","addWhereToQuery","rowVar","queryType","pat","add","addColumnsToQuery","column","formula","predicate","getVariable","optional","generateQuery","Query","slice","clearElement","generateColumnAddDropdown","updateTable","running","htmlTable","element","childNodes","removeChild","SubjectType","allColumns","useCount","getAllColumns","getUnusedColumns","indexOf","addColumn","removeColumn","filter","x","getLabel","label","addUse","Column","checkedAnyValues","possiblyLiteral","possiblyNumber","constraints","checkValue","term","termType","literalValue","value","match","getKey","toString","getHints","hints","toNT","sameTerm","superClass","setPredicate","inverse","other","concat","each","rdfs","alternatives","undefined","getConstraints","filterFunction","sortKey","toLowerCase","isImageColumn","uri","objectToArray","obj","property","optionElement","createTextNode","dropdown","addEventListener","typeSelectorChanged","selectedType","unusedColumns","sort","b","aLabel","bLabel","columnIndex","Number","getColumnForVariable","variableNT","predicateUri","Error","getColumnForPredicate","getTypeForObject","subjectType","discoverTypes","subjectList","statementsMatching","subjects","object","typeObj","subject","getSubjectProperties","properties","j","identifyColumnsForType","allColumnsList","sortColumns","typeUrl","sortFunction","renderColumnDeleteButton","button","renderTableHeader","linkTd","th","applyColumnSort","rows","reverse","columnKey","row1","row2","row1Value","row2Value","values","parentTable","_htmlRow","parentNode","applyColumnFiltersToRow","row","rowDisplayed","c","columnValue","htmlRow","style","display","applyColumnFilters","literalSort","literalToString","colValue","literalCompare","value1","value2","strValue1","strValue2","renderLiteralSelector","textBox","width","sort1","sort2","substring","renderEnumSelector","list","doMultiple","searchValue","initialSelection","ele","selected","opt","option","index","renderNumberSelector","minSelector","maxSelector","min","max","eventListener","fallbackRenderTableSelector","renderTableSelector","cs","range","choices","owl","elements","renderTableSelectors","td","selector","linkTo","linkText","linkFunction","openHrefInOutlineMode","preventDefault","stopPropagation","target","getTarget","getAttribute","linkToObject","renderImage","height","renderValue","cellFormat","shortDate","datatype","span","textContent","forEach","lastChild","renderTableRowInto","_downstream","_subject","orig","objects","different","originalValues","background","valueInList","key","updateRow","needUpdate","getSubjectId","_subject_id","startTime","Date","now","progressMessage","original","onResult","rowKey","rowKeyId","onDone","elapsedTimeMS","splice","sortBy","sortReverse","inferColumnsFromFormula","statements","statement","inferColumns","queryVar","bestCount","best","typeUri"],"sources":["../src/table.js"],"sourcesContent":["// Table Widget: Format an array of RDF statements as an HTML table.\n//\n// This can operate in one of three modes: when the class of object is given\n// or when the source document from whuch data is taken is given,\n// or if a prepared query object is given.\n// (In principle it could operate with neither class nor document\n// given but typically\n// there would be too much data.)\n// When the tableClass is not given, it looks for common classes in the data,\n// and gives the user the option.\n//\n// 2008 Written, Ilaria Liccardi as the tableViewPane.js\n// 2014 Core table widget moved into common/table.js - timbl\n//\n\nimport * as debug from './debug'\nimport { icons } from './iconBase'\nimport { store } from 'solid-logic'\nimport * as log from './log'\nimport * as ns from './ns'\nimport * as rdf from 'rdflib' // pull in first avoid cross-refs\nimport * as utils from './utils'\nimport * as widgets from './widgets'\n\nconst UI = { icons, log, ns, utils, widgets }\n\n// UI.widgets.renderTableViewPane\nexport function renderTableViewPane (doc, options) {\n const sourceDocument = options.sourceDocument\n const tableClass = options.tableClass\n const givenQuery = options.query\n\n const RDFS_LITERAL = 'http://www.w3.org/2000/01/rdf-schema#Literal'\n const ns = UI.ns\n const kb = store\n const rowsLookup = {} // Persistent mapping of subject URI to dom TR\n\n // Predicates that are never made into columns:\n\n const FORBIDDEN_COLUMNS = {\n 'http://www.w3.org/2002/07/owl#sameAs': true,\n 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type': true\n }\n\n // Number types defined in the XML schema:\n\n const XSD_NUMBER_TYPES = {\n 'http://www.w3.org/2001/XMLSchema#decimal': true,\n 'http://www.w3.org/2001/XMLSchema#float': true,\n 'http://www.w3.org/2001/XMLSchema#double': true,\n 'http://www.w3.org/2001/XMLSchema#integer': true,\n 'http://www.w3.org/2001/XMLSchema#nonNegativeInteger': true,\n 'http://www.w3.org/2001/XMLSchema#positiveInteger': true,\n 'http://www.w3.org/2001/XMLSchema#nonPositiveInteger': true,\n 'http://www.w3.org/2001/XMLSchema#negativeInteger': true,\n 'http://www.w3.org/2001/XMLSchema#long': true,\n 'http://www.w3.org/2001/XMLSchema#int': true,\n 'http://www.w3.org/2001/XMLSchema#short': true,\n 'http://www.w3.org/2001/XMLSchema#byte': true,\n 'http://www.w3.org/2001/XMLSchema#unsignedLong': true,\n 'http://www.w3.org/2001/XMLSchema#unsignedInt': true,\n 'http://www.w3.org/2001/XMLSchema#unsignedShort': true,\n 'http://www.w3.org/2001/XMLSchema#unsignedByte': true\n }\n\n const XSD_DATE_TYPES = {\n 'http://www.w3.org/2001/XMLSchema#dateTime': true,\n 'http://www.w3.org/2001/XMLSchema#date': true\n }\n\n // Classes that indicate an image:\n\n const IMAGE_TYPES = {\n 'http://xmlns.com/foaf/0.1/Image': true,\n 'http://purl.org/dc/terms/Image': true\n }\n\n // Name of the column used as a \"key\" value to look up the row.\n // This is necessary because in the normal view, the columns are\n // all \"optional\" values, meaning that we will get a result set\n // for every individual value that is found. The row key acts\n // as an anchor that can be used to combine this information\n // back into the same row.\n\n const keyVariable = options.keyVariable || '?_row'\n\n let subjectIdCounter = 0\n let allType, types\n let typeSelectorDiv, addColumnDiv\n\n // The last SPARQL query used:\n let lastQuery = null\n let mostCommonType = null\n\n const resultDiv = doc.createElement('div')\n resultDiv.className = 'tableViewPane'\n\n resultDiv.appendChild(generateControlBar()) // sets typeSelectorDiv\n\n const tableDiv = doc.createElement('div')\n resultDiv.appendChild(tableDiv)\n\n // Save a refresh function for use by caller\n resultDiv.refresh = function () {\n runQuery(table.query, table.logicalRows, table.columns, table)\n // updateTable(givenQuery, mostCommonType) // This could be a lot more incremental and efficient\n }\n\n // A specifically asked-for query\n let table\n if (givenQuery) {\n table = renderTableForQuery(givenQuery)\n // lastQuery = givenQuery\n tableDiv.appendChild(table)\n } else {\n // Find the most common type and select it by default\n\n const s = calculateTable()\n allType = s[0]\n types = s[1]\n if (!tableClass) {\n typeSelectorDiv.appendChild(generateTypeSelector(allType, types))\n }\n\n mostCommonType = getMostCommonType(types)\n\n if (mostCommonType) {\n buildFilteredTable(mostCommonType)\n } else {\n buildFilteredTable(allType)\n }\n }\n return resultDiv\n\n // /////////////////////////////////////////////////////////////////\n /*\n function closeDialog (dialog) {\n dialog.parentNode.removeChild(dialog)\n }\n\n function createActionButton (label, callback) {\n var button = doc.createElement('input')\n button.setAttribute('type', 'submit')\n button.setAttribute('value', label)\n button.addEventListener('click', callback, false)\n return button\n }\n// @@ Tdo: put these buttonsback in,\n// to allow user to see and edit and save the sparql query for the table they are looking at\n//\n\n function createSparqlWindow () {\n var dialog = doc.createElement('div')\n\n dialog.setAttribute('class', 'sparqlDialog')\n\n var title = doc.createElement('h3')\n title.appendChild(doc.createTextNode('Edit SPARQL query'))\n\n var inputbox = doc.createElement('textarea')\n inputbox.value = rdf.queryToSPARQL(lastQuery)\n\n dialog.appendChild(title)\n dialog.appendChild(inputbox)\n\n dialog.appendChild(createActionButton('Query', function () {\n var query = rdf.SPARQLToQuery(inputbox.value)\n updateTable(query)\n closeDialog(dialog)\n }))\n\n dialog.appendChild(createActionButton('Close', function () {\n closeDialog(dialog)\n }))\n\n return dialog\n }\n\n function sparqlButtonPressed () {\n var dialog = createSparqlWindow()\n\n resultDiv.appendChild(dialog)\n }\n\n function generateSparqlButton () {\n var image = doc.createElement('img')\n image.setAttribute('class', 'sparqlButton')\n image.setAttribute('src', UI.iconBase + 'icons/1pt5a.gif')\n image.setAttribute('alt', 'Edit SPARQL query')\n\n image.addEventListener('click', sparqlButtonPressed, false)\n\n return image\n }\n*/\n // Generate the control bar displayed at the top of the screen.\n\n function generateControlBar () {\n const result = doc.createElement('table')\n result.setAttribute('class', 'toolbar')\n\n const tr = doc.createElement('tr')\n\n /* @@ Add in later -- not debugged yet\n var sparqlButtonDiv = doc.createElement(\"td\")\n sparqlButtonDiv.appendChild(generateSparqlButton())\n tr.appendChild(sparqlButtonDiv)\n */\n typeSelectorDiv = doc.createElement('td')\n tr.appendChild(typeSelectorDiv)\n\n addColumnDiv = doc.createElement('td')\n tr.appendChild(addColumnDiv)\n\n result.appendChild(tr)\n\n return result\n }\n\n // Add the SELECT details to the query being built.\n\n function addSelectToQuery (query, type) {\n const selectedColumns = type.getColumns()\n\n for (let i = 0; i < selectedColumns.length; ++i) {\n // TODO: autogenerate nicer names for variables\n // variables have to be unambiguous\n\n const variable = kb.variable('_col' + i)\n\n query.vars.push(variable)\n selectedColumns[i].setVariable(variable)\n }\n }\n\n // Add WHERE details to the query being built.\n\n function addWhereToQuery (query, rowVar, type) {\n let queryType = type.type\n\n if (!queryType) {\n queryType = kb.variable('_any')\n }\n\n // _row a type\n query.pat.add(rowVar, UI.ns.rdf('type'), queryType)\n }\n\n // Generate OPTIONAL column selectors.\n\n function addColumnsToQuery (query, rowVar, type) {\n const selectedColumns = type.getColumns()\n\n for (let i = 0; i < selectedColumns.length; ++i) {\n const column = selectedColumns[i]\n\n const formula = kb.formula()\n\n formula.add(rowVar, column.predicate, column.getVariable())\n\n query.pat.optional.push(formula)\n }\n }\n\n // Generate a query object from the currently-selected type\n // object.\n\n function generateQuery (type) {\n const query = new rdf.Query()\n const rowVar = kb.variable(keyVariable.slice(1)) // don't pass '?'\n\n addSelectToQuery(query, type)\n addWhereToQuery(query, rowVar, type)\n addColumnsToQuery(query, rowVar, type)\n\n return query\n }\n\n // Build the contents of the tableDiv element, filtered according\n // to the specified type.\n\n function buildFilteredTable (type) {\n // Generate \"add column\" cell.\n\n clearElement(addColumnDiv)\n addColumnDiv.appendChild(generateColumnAddDropdown(type))\n\n const query = generateQuery(type)\n\n updateTable(query, type)\n }\n\n function updateTable (query, type) {\n // Stop the previous query from doing any updates.\n\n if (lastQuery) {\n lastQuery.running = false\n }\n\n // Render the HTML table.\n\n const htmlTable = renderTableForQuery(query, type)\n\n // Clear the tableDiv element, and replace with the new table.\n\n clearElement(tableDiv)\n tableDiv.appendChild(htmlTable)\n\n // Save the query for the edit dialog.\n\n lastQuery = query\n }\n\n // Remove all subelements of the specified element.\n\n function clearElement (element) {\n while (element.childNodes.length > 0) {\n element.removeChild(element.childNodes[0])\n }\n }\n\n // A SubjectType is created for each rdf:type discovered.\n\n function SubjectType (type) {\n this.type = type\n this.columns = null\n this.allColumns = []\n this.useCount = 0\n\n // Get a list of all columns used by this type.\n\n this.getAllColumns = function () {\n return this.allColumns\n }\n\n // Get a list of the current columns used by this type\n // (subset of allColumns)\n\n this.getColumns = function () {\n // The first time through, get a list of all the columns\n // and select only the six most popular columns.\n\n if (!this.columns) {\n const allColumns = this.getAllColumns()\n this.columns = allColumns.slice(0, 7)\n }\n\n return this.columns\n }\n\n // Get a list of unused columns\n\n this.getUnusedColumns = function () {\n const allColumns = this.getAllColumns()\n const columns = this.getColumns()\n\n const result = []\n\n for (let i = 0; i < allColumns.length; ++i) {\n if (columns.indexOf(allColumns[i]) === -1) {\n result.push(allColumns[i])\n }\n }\n\n return result\n }\n\n this.addColumn = function (column) {\n this.columns.push(column)\n }\n\n this.removeColumn = function (column) {\n this.columns = this.columns.filter(function (x) {\n return x !== column\n })\n }\n\n this.getLabel = function () {\n return utils.label(this.type)\n }\n\n this.addUse = function () {\n this.useCount += 1\n }\n }\n\n // Class representing a column in the table.\n\n function Column () {\n this.useCount = 0\n\n // Have we checked any values for this column yet?\n\n this.checkedAnyValues = false\n\n // If the range is unknown, but we just get literals in this\n // column, then we can generate a literal selector.\n\n this.possiblyLiteral = true\n\n // If the range is unknown, but we just get literals and they\n // match the regular expression for numbers, we can generate\n // a number selector.\n\n this.possiblyNumber = true\n\n // We accumulate classes which things in the column must be a member of\n\n this.constraints = []\n\n // Check values as they are read. If we don't know what the\n // range is, we might be able to infer that it is a literal\n // if all of the values are literals. Similarly, we might\n // be able to determine if the literal values are actually\n // numbers (using regexps).\n\n this.checkValue = function (term) {\n const termType = term.termType\n if (\n this.possiblyLiteral &&\n termType !== 'Literal' &&\n termType !== 'NamedNode'\n ) {\n this.possiblyNumber = false\n this.possiblyLiteral = false\n } else if (this.possiblyNumber) {\n if (termType !== 'Literal') {\n this.possiblyNumber = false\n } else {\n const literalValue = term.value\n\n if (!literalValue.match(/^-?\\d+(\\.\\d*)?$/)) {\n this.possiblyNumber = false\n }\n }\n }\n\n this.checkedAnyValues = true\n }\n\n this.getVariable = function () {\n return this.variable\n }\n\n this.setVariable = function (variable) {\n this.variable = variable\n }\n\n this.getKey = function () {\n return this.variable.toString()\n }\n\n this.addUse = function () {\n this.useCount += 1\n }\n\n this.getHints = function () {\n if (\n options &&\n options.hints &&\n this.variable &&\n options.hints[this.variable.toNT()]\n ) {\n return options.hints[this.variable.toNT()]\n }\n return {}\n }\n\n this.getLabel = function () {\n if (this.getHints().label) {\n return this.getHints().label\n }\n if (this.predicate) {\n if (this.predicate.sameTerm(ns.rdf('type')) && this.superClass) {\n return utils.label(this.superClass, true) // do initial cap\n }\n return utils.label(this.predicate)\n } else if (this.variable) {\n return this.variable.toString()\n } else {\n return 'unlabeled column?'\n }\n }\n\n this.setPredicate = function (predicate, inverse, other) {\n if (inverse) {\n // variable is in the subject pos\n this.inverse = predicate\n this.constraints = this.constraints.concat(\n kb.each(predicate, UI.ns.rdfs('domain'))\n )\n if (\n predicate.sameTerm(ns.rdfs('subClassOf')) &&\n other.termType === 'NamedNode'\n ) {\n this.superClass = other\n this.alternatives = kb.each(undefined, ns.rdfs('subClassOf'), other)\n }\n } else {\n // variable is the object\n this.predicate = predicate\n this.constraints = this.constraints.concat(\n kb.each(predicate, UI.ns.rdfs('range'))\n )\n }\n }\n\n this.getConstraints = function () {\n return this.constraints\n }\n\n this.filterFunction = function () {\n return true\n }\n\n this.sortKey = function () {\n return this.getLabel().toLowerCase()\n }\n\n this.isImageColumn = function () {\n for (let i = 0; i < this.constraints.length; i++) {\n if (this.constraints[i].uri in IMAGE_TYPES) return true\n }\n return false\n }\n }\n\n // Convert an object to an array.\n\n function objectToArray (obj, filter) {\n const result = []\n\n for (const property in obj) {\n // @@@ have to guard against methods\n const value = obj[property]\n\n if (!filter || filter(property, value)) {\n result.push(value)\n }\n }\n\n return result\n }\n\n // Generate an <option> in a drop-down list.\n\n function optionElement (label, value) {\n const result = doc.createElement('option')\n\n result.setAttribute('value', value)\n result.appendChild(doc.createTextNode(label))\n\n return result\n }\n\n // Generate drop-down list box for choosing type of data displayed\n\n function generateTypeSelector (allType, types) {\n const resultDiv = doc.createElement('div')\n\n resultDiv.appendChild(doc.createTextNode('Select type: '))\n\n const dropdown = doc.createElement('select')\n\n dropdown.appendChild(optionElement('All types', 'null'))\n\n for (const uri in types) {\n dropdown.appendChild(optionElement(types[uri].getLabel(), uri))\n }\n\n dropdown.addEventListener(\n 'click',\n function () {\n let type\n\n if (dropdown.value === 'null') {\n type = allType\n } else {\n type = types[dropdown.value]\n }\n\n typeSelectorChanged(type)\n },\n false\n )\n\n resultDiv.appendChild(dropdown)\n\n return resultDiv\n }\n\n // Callback invoked when the type selector drop-down list is changed.\n\n function typeSelectorChanged (selectedType) {\n buildFilteredTable(selectedType)\n }\n\n // Build drop-down list to add a new column\n\n function generateColumnAddDropdown (type) {\n const resultDiv = doc.createElement('div')\n\n const unusedColumns = type.getUnusedColumns()\n\n unusedColumns.sort(function (a, b) {\n const aLabel = a.sortKey()\n const bLabel = b.sortKey()\n return (aLabel > bLabel) - (aLabel < bLabel)\n })\n\n // If there are no unused columns, the div is empty.\n\n if (unusedColumns.length > 0) {\n resultDiv.appendChild(doc.createTextNode('Add column: '))\n\n // Build dropdown list of unused columns.\n\n const dropdown = doc.createElement('select')\n\n dropdown.appendChild(optionElement('', '-1'))\n\n for (let i = 0; i < unusedColumns.length; ++i) {\n const column = unusedColumns[i]\n dropdown.appendChild(optionElement(column.getLabel(), '' + i))\n }\n\n resultDiv.appendChild(dropdown)\n\n // Invoke callback when the dropdown is changed, to add\n // the column and reload the table.\n\n dropdown.addEventListener(\n 'click',\n function () {\n const columnIndex = Number(dropdown.value)\n\n if (columnIndex >= 0) {\n type.addColumn(unusedColumns[columnIndex])\n buildFilteredTable(type)\n }\n },\n false\n )\n }\n\n return resultDiv\n }\n\n // Find the column for a given variable\n\n function getColumnForVariable (columns, variableNT) {\n for (const predicateUri in columns) {\n const column = columns[predicateUri]\n if (column.variable.toNT() === variableNT) {\n return column\n }\n }\n throw new Error(`getColumnForVariable: no column for variable ${variableNT}`)\n // return null\n }\n\n // Find the column for a given predicate, creating a new column object\n // if necessary.\n\n function getColumnForPredicate (columns, predicate) {\n let column\n\n if (predicate.uri in columns) {\n column = columns[predicate.uri]\n } else {\n column = new Column()\n column.setPredicate(predicate)\n columns[predicate.uri] = column\n }\n\n return column\n }\n\n // Find a type by its URI, creating a new SubjectType object if\n // necessary.\n\n function getTypeForObject (types, type) {\n let subjectType\n\n if (type.uri in types) {\n subjectType = types[type.uri]\n } else {\n subjectType = new SubjectType(type)\n types[type.uri] = subjectType\n }\n\n return subjectType\n }\n\n // Discover types and subjects for search.\n\n function discoverTypes () {\n // rdf:type properties of subjects, indexed by URI for the type.\n\n const types = {}\n\n // Get a list of statements that match: ? rdfs:type ?\n // From this we can get a list of subjects and types.\n\n const subjectList = kb.statementsMatching(\n undefined,\n UI.ns.rdf('type'),\n tableClass, // can be undefined OR\n sourceDocument\n ) // can be undefined\n\n // Subjects for later lookup. This is a mapping of type URIs to\n // lists of subjects (it is necessary to record the type of\n // a subject).\n\n const subjects = {}\n\n for (let i = 0; i < subjectList.length; ++i) {\n const type = subjectList[i].object\n\n if (type.termType !== 'NamedNode') {\n // @@ no bnodes?\n continue\n }\n\n const typeObj = getTypeForObject(types, type)\n\n if (!(type.uri in subjects)) {\n subjects[type.uri] = []\n }\n\n subjects[type.uri].push(subjectList[i].subject)\n typeObj.addUse()\n }\n\n return [subjects, types]\n }\n\n // Get columns for the given subject.\n\n function getSubjectProperties (subject, columns) {\n // Get a list of properties of this subject.\n\n const properties = kb.statementsMatching(\n subject,\n undefined,\n undefined,\n sourceDocument\n )\n\n const result = {}\n\n for (let j = 0; j < properties.length; ++j) {\n const predicate = properties[j].predicate\n\n if (predicate.uri in FORBIDDEN_COLUMNS) {\n continue\n }\n\n // Find/create a column for this predicate.\n\n const column = getColumnForPredicate(columns, predicate)\n column.checkValue(properties[j].object)\n\n result[predicate.uri] = column\n }\n\n return result\n }\n\n // Identify the columns associated with a type.\n\n function identifyColumnsForType (type, subjects) {\n const allColumns = {}\n\n // Process each subject of this type to build up the\n // column list.\n\n for (let i = 0; i < subjects.length; ++i) {\n const columns = getSubjectProperties(subjects[i], allColumns)\n\n for (const predicateUri in columns) {\n const column = columns[predicateUri]\n\n column.addUse()\n }\n }\n\n // Generate the columns list\n\n const allColumnsList = objectToArray(allColumns)\n sortColumns(allColumnsList)\n type.allColumns = allColumnsList\n }\n\n // Build table information from parsing RDF statements.\n\n function calculateTable () {\n // Find the types that we will display in the dropdown\n // list box, and associated objects of those types.\n\n let subjects, types\n\n const s = discoverTypes()\n // eslint-disable-next-line prefer-const\n subjects = s[0]\n // eslint-disable-next-line prefer-const\n types = s[1] // no [ ] on LHS\n\n for (const typeUrl in subjects) {\n const subjectList = subjects[typeUrl]\n const type = types[typeUrl]\n\n identifyColumnsForType(type, subjectList)\n }\n\n // TODO: Special type that captures all rows.\n // Combine columns from all types\n\n const allType = new SubjectType(null)\n\n return [allType, objectToArray(types)]\n }\n\n // Sort the list of columns by the most common columns.\n\n function sortColumns (columns) {\n function sortFunction (a, b) {\n return (a.useCount < b.useCount) - (a.useCount > b.useCount)\n }\n\n columns.sort(sortFunction)\n }\n\n // Create the delete button for a column.\n\n function renderColumnDeleteButton (type, column) {\n const button = doc.createElement('a')\n\n button.appendChild(doc.createTextNode('[x]'))\n\n button.addEventListener(\n 'click',\n function () {\n type.removeColumn(column)\n buildFilteredTable(type)\n },\n false\n )\n\n return button\n }\n\n // Render the table header for the HTML table.\n\n function renderTableHeader (columns, type) {\n const tr = doc.createElement('tr')\n\n /* Empty header for link column */\n const linkTd = doc.createElement('th')\n tr.appendChild(linkTd)\n\n for (let i = 0; i < columns.length; ++i) {\n const th = doc.createElement('th')\n const column = columns[i]\n\n th.appendChild(doc.createTextNode(column.getLabel()))\n\n // We can only add a delete button if we are using the\n // proper interface and have a type to delete from:\n if (type) {\n th.appendChild(renderColumnDeleteButton(type, column))\n }\n\n tr.appendChild(th)\n }\n\n return tr\n }\n\n // Sort the rows in the rendered table by data from a specific\n // column, using the provided sort function to compare values.\n\n function applyColumnSort (rows, column, sortFunction, reverse) {\n const columnKey = column.getKey()\n\n // Sort the rows array.\n rows.sort(function (row1, row2) {\n let row1Value = null\n let row2Value = null\n\n if (columnKey in row1.values) {\n row1Value = row1.values[columnKey][0]\n }\n if (columnKey in row2.values) {\n row2Value = row2.values[columnKey][0]\n }\n\n const result = sortFunction(row1Value, row2Value)\n\n if (reverse) {\n return -result\n } else {\n return result\n }\n })\n\n // Remove all rows from the table:\n\n if (rows.length) {\n const parentTable = rows[0]._htmlRow.parentNode\n\n for (let i = 0; i < rows.length; ++i) {\n parentTable.removeChild(rows[i]._htmlRow)\n }\n\n // Add back the rows in the new sorted order:\n\n for (let i = 0; i < rows.length; ++i) {\n parentTable.appendChild(rows[i]._htmlRow)\n }\n }\n }\n\n // Filter the list of rows based on the selectors for the\n // columns.\n\n function applyColumnFiltersToRow (row, columns) {\n let rowDisplayed = true\n\n // Check the filter functions for every column.\n // The row should only be displayed if the filter functions\n // for all of the columns return true.\n\n for (let c = 0; c < columns.length; ++c) {\n const column = columns[c]\n const columnKey = column.getKey()\n\n let columnValue = null\n\n if (columnKey in row.values) {\n columnValue = row.values[columnKey][0]\n }\n\n if (!column.filterFunction(columnValue)) {\n rowDisplayed = false\n break\n }\n }\n\n // Show or hide the HTML row according to the result\n // from the filter function.\n\n const htmlRow = row._htmlRow\n\n if (rowDisplayed) {\n htmlRow.style.display = ''\n } else {\n htmlRow.style.display = 'none'\n }\n }\n\n // Filter the list of rows based on the selectors for the\n // columns.\n\n function applyColumnFilters (rows, columns) {\n // Apply filterFunction to each row.\n\n for (let r = 0; r < rows.length; ++r) {\n const row = rows[r]\n applyColumnFiltersToRow(row, columns)\n }\n }\n\n // /////////////////////////////////// Literal column handling\n\n // Sort by literal value\n\n function literalSort (rows, column, reverse) {\n function literalToString (colValue) {\n if (colValue) {\n if (colValue.termType === 'Literal') {\n return colValue.value.toLowerCase()\n } else if (colValue.termType === 'NamedNode') {\n return utils.label(colValue).toLowerCase()\n }\n return colValue.value.toLowerCase()\n } else {\n return ''\n }\n }\n\n function literalCompare (value1, value2) {\n const strValue1 = literalToString(value1)\n const strValue2 = literalToString(value2)\n\n if (strValue1 < strValue2) {\n return -1\n } else if (strValue1 > strValue2) {\n return 1\n } else {\n return 0\n }\n }\n\n applyColumnSort(rows, column, literalCompare, reverse)\n }\n\n // Generates a selector for an RDF literal column.\n\n function renderLiteralSelector (rows, columns, column) {\n const result = doc.createElement('div')\n\n const textBox = doc.createElement('input')\n textBox.setAttribute('type', 'text')\n textBox.style.width = '70%'\n\n result.appendChild(textBox)\n\n const sort1 = doc.createElement('span')\n sort1.appendChild(doc.createTextNode('\\u25BC'))\n sort1.addEventListener(\n 'click',\n function () {\n literalSort(rows, column, false)\n },\n false\n )\n result.appendChild(sort1)\n\n const sort2 = doc.createElement('span')\n sort2.appendChild(doc.createTextNode('\\u25B2'))\n sort2.addEventListener(\n 'click',\n function () {\n literalSort(rows, column, true)\n },\n false\n )\n result.appendChild(sort2)\n\n let substring = null\n\n // Filter the table to show only rows that have a particular\n // substring in the specified column.\n\n column.filterFunction = function (colValue) {\n if (!substring) {\n return true\n } else if (!colValue) {\n return false\n } else {\n let literalValue\n\n if (colValue.termType === 'Literal') {\n literalValue = colValue.value\n } else if (colValue.termType === 'NamedNode') {\n literalValue = utils.label(colValue)\n } else {\n literalValue = ''\n }\n\n return literalValue.toLowerCase().indexOf(substring) >= 0\n }\n }\n\n textBox.addEventListener(\n 'keyup',\n function () {\n if (textBox.value !== '') {\n substring = textBox.value.toLowerCase()\n } else {\n substring = null\n }\n\n applyColumnFilters(rows, columns)\n },\n false\n )\n\n return result\n }\n\n // /////////////////////////////////// Enumeration\n\n // Generates a dropdown selector for enumeration types include\n //\n // @param rows,\n // @param columns, the mapping of predictae URIs to columns\n // @param column,\n // @param list, List of alternative terms\n //\n function renderEnumSelector (rows, columns, column, list) {\n const doMultiple = true\n const result = doc.createElement('div')\n const dropdown = doc.createElement('select')\n\n let searchValue = {} // Defualt to all enabled\n for (let i = 0; i < list.length; ++i) {\n const value = list[i]\n searchValue[value.uri] = true\n }\n\n const initialSelection = getHints(column).initialSelection\n if (initialSelection) searchValue = initialSelection\n\n if (doMultiple) dropdown.setAttribute('multiple', 'true')\n else dropdown.appendChild(optionElement('(All)', '-1'))\n\n for (let i = 0; i < list.length; ++i) {\n const value = list[i]\n const ele = optionElement(utils.label(value), i)\n if (searchValue[value.uri]) ele.selected = true\n dropdown.appendChild(ele)\n }\n result.appendChild(dropdown)\n\n // Select based on an enum value.\n\n column.filterFunction = function (colValue) {\n return !searchValue || (colValue && searchValue[colValue.uri])\n }\n\n dropdown.addEventListener(\n 'click',\n function () {\n if (doMultiple) {\n searchValue = {}\n const opt = dropdown.options\n for (let i = 0; i < opt.length; i++) {\n const option = opt[i]\n const index = Number(option.value)\n if (opt[i].selected) searchValue[list[index].uri] = true\n }\n } else {\n const index = Number(dropdown.value) // adjusted in Standard tweaks 2018-01\n if (index < 0) {\n searchValue = null\n } else {\n searchValue = {}\n searchValue[list[index].uri] = true\n }\n }\n applyColumnFilters(rows, columns)\n },\n true\n )\n\n return result\n }\n\n // //////////////////////////////////// Numeric\n //\n // Selector for XSD number types.\n\n function renderNumberSelector (rows, columns, column) {\n const result = doc.createElement('div')\n\n const minSelector = doc.createElement('input')\n minSelector.setAttribute('type', 'text')\n minSelector.style.width = '40px'\n result.appendChild(minSelector)\n\n const maxSelector = doc.createElement('input')\n maxSelector.setAttribute('type', 'text')\n maxSelector.style.width = '40px'\n result.appendChild(maxSelector)\n\n // Select based on minimum/maximum limits.\n\n let min = null\n let max = null\n\n column.filterFunction = function (colValue) {\n if (colValue) {\n colValue = Number(colValue)\n }\n\n if (min && (!colValue || colValue < min)) {\n return false\n }\n if (max && (!colValue || colValue > max)) {\n return false\n }\n\n return true\n }\n\n // When the values in the boxes are changed, update the\n // displayed columns.\n\n function eventListener () {\n if (minSelector.value === '') {\n min = null\n } else {\n min = Number(minSelector.value)\n }\n\n if (maxSelector.value === '') {\n max = null\n } else {\n max = Number(maxSelector.value)\n }\n\n applyColumnFilters(rows, columns)\n }\n\n minSelector.addEventListener('keyup', eventListener, false)\n maxSelector.addEventListener('keyup', eventListener, false)\n\n return result\n }\n\n // /////////////////////////////////////////////////////////////////\n\n // Fallback attempts at generating a selector if other attempts fail.\n\n function fallbackRenderTableSelector (rows, columns, column) {\n // Have all values matched as numbers?\n\n if (column.checkedAnyValues && column.possiblyNumber) {\n return renderNumberSelector(rows, columns, column)\n }\n\n // Have all values been literals?\n\n if (column.possiblyLiteral) {\n return renderLiteralSelector(rows, columns, column)\n }\n\n return null\n }\n\n // Render a selector for a given row.\n\n function renderTableSelector (rows, columns, column) {\n // What type of data is in this column? Check the constraints for\n // this predicate.\n\n // If this is a class which can be one of various sibling classes?\n if (column.superClass && column.alternatives.length > 0) {\n return renderEnumSelector(rows, columns, column, column.alternatives)\n }\n\n const cs = column.getConstraints()\n let range\n for (let i = 0; i < cs.length; i++) {\n range = cs[i]\n\n // Is this a number type?\n // Alternatively, is this an rdf:Literal type where all of\n // the values match as numbers?\n\n if (\n (column.checkedAnyValues && column.possiblyNumber) ||\n range.uri in XSD_NUMBER_TYPES\n ) {\n return renderNumberSelector(rows, columns, column)\n }\n\n // rdf:Literal? Assume a string at this point\n\n if (range.uri === RDFS_LITERAL) {\n return renderLiteralSelector(rows, columns, column)\n }\n\n // Is this an enumeration type?\n\n // Also ToDo: @@@ Handle membership of classes whcih are disjointUnions\n\n const choices = kb.each(range, UI.ns.owl('oneOf'))\n if (choices.length > 0) {\n return renderEnumSelector(rows, columns, column, choices.elements)\n }\n }\n return fallbackRenderTableSelector(rows, columns, column)\n }\n\n // Generate the search selectors for the table columns.\n\n function renderTableSelectors (rows, columns) {\n const tr = doc.createElement('tr')\n tr.className = 'selectors'\n\n // Empty link column\n\n tr.appendChild(doc.createElement('td'))\n\n // Generate selectors.\n\n for (let i = 0; i < columns.length; ++i) {\n const td = doc.createElement('td')\n\n const selector = renderTableSelector(rows, columns, columns[i])\n\n if (selector) {\n td.appendChild(selector)\n }\n /*\n // Useful debug: display URI of predicate in column header\n if (columns[i].predicate.uri) {\n td.appendChild(document.createTextNode(columns[i].predicate.uri))\n }\n */\n tr.appendChild(td)\n }\n\n return tr\n }\n\n function linkTo (uri, linkText, hints) {\n hints = hints || {}\n const result = doc.createElement('a')\n const linkFunction = hints.linkFunction\n result.setAttribute('href', uri)\n result.appendChild(doc.createTextNode(linkText))\n if (!linkFunction) {\n result.addEventListener('click', UI.widgets.openHrefInOutlineMode, true)\n } else {\n result.addEventListener(\n 'click',\n function (e) {\n e.preventDefault()\n e.stopPropagation()\n const target = utils.getTarget(e)\n const uri = target.getAttribute('href')\n if (!uri) debug.log('No href found \\n')\n linkFunction(uri)\n },\n true\n )\n }\n return result\n }\n\n function linkToObject (obj, hints) {\n let match = false\n\n if (obj.uri) {\n match = obj.uri.match(/^mailto:(.*)/)\n }\n\n if (match) {\n return linkTo(obj.uri, match[1], hints)\n } else {\n return linkTo(obj.uri, utils.label(obj), hints)\n }\n }\n\n // Render an image\n\n function renderImage (obj) {\n const result = doc.createElement('img')\n result.setAttribute('src', obj.uri)\n\n // Set the height, so it appears as a thumbnail.\n result.style.height = '40px'\n return result\n }\n\n // Render an individual RDF object to an HTML object displayed\n // in a table cell.\n\n function getHints (column) {\n if (\n options &&\n options.hints &&\n column.variable &&\n options.hints[column.variable.toNT()]\n ) {\n return options.hints[column.variable.toNT()]\n }\n return {}\n }\n\n function renderValue (obj, column) {\n // hint\n const hints = getHints(column)\n const cellFormat = hints.cellFormat\n if (cellFormat) {\n switch (cellFormat) {\n case 'shortDate':\n return doc.createTextNode(UI.widgets.shortDate(obj.value))\n // break\n default:\n // drop through\n }\n } else {\n if (obj.termType === 'Literal') {\n if (obj.datatype) {\n if (XSD_DATE_TYPES[obj.datatype.uri]) {\n return doc.createTextNode(UI.widgets.shortDate(obj.value))\n } else if (XSD_NUMBER_TYPES[obj.datatype.uri]) {\n const span = doc.createElement('span')\n span.textContent = obj.value\n span.setAttribute('style', 'text-align: right')\n return span\n }\n }\n return doc.createTextNode(obj.value)\n } else if (obj.termType === 'NamedNode' && column.isImageColumn()) {\n return renderImage(obj)\n } else if (obj.termType === 'NamedNode' || obj.termType === 'BlankNode') {\n return linkToObject(obj, hints)\n } else if (obj.termType === 'Collection') {\n const span = doc.createElement('span')\n span.appendChild(doc.createTextNode('['))\n obj.elements.forEach(function (x) {\n span.appendChild(renderValue(x, column))\n span.appendChild(doc.createTextNode(', '))\n })\n span.removeChild(span.lastChild)\n span.appendChild(doc.createTextNode(']'))\n return span\n } else {\n return doc.createTextNode(\"unknown termtype '\" + obj.termType + \"'!\")\n }\n }\n }\n\n // Render a row of the HTML table, from the given row structure.\n // Note that unlike other functions, this renders into a provided\n // row (<tr>) element.\n\n function renderTableRowInto (tr, row, columns, _downstream) {\n /* Link column, for linking to this subject. */\n\n const linkTd = doc.createElement('td')\n\n if (row._subject && 'uri' in row._subject) {\n linkTd.appendChild(linkTo(row._subject.uri, '\\u2192'))\n }\n\n tr.appendChild(linkTd)\n\n // Create a <td> for each column (whether the row has data for that\n // column or not).\n\n for (let i = 0; i < columns.length; ++i) {\n const column = columns[i]\n const td = doc.createElement('td')\n let orig\n\n const columnKey = column.getKey()\n\n if (columnKey in row.values) {\n const objects = row.values[columnKey]\n let different = false\n if (row.originalValues && row.originalValues[columnKey]) {\n if (objects.length !== row.originalValues[columnKey].length) {\n different = true\n }\n }\n for (let j = 0; j < objects.length; ++j) {\n const obj = objects[j]\n if (\n row.originalValues &&\n row.originalValues[columnKey] &&\n row.originalValues[columnKey].length > j\n ) {\n orig = row.originalValues[columnKey][j]\n if (obj.toString() !== orig.toString()) {\n different = true\n }\n }\n td.appendChild(renderValue(obj, column))\n\n if (j !== objects.length - 1) {\n td.appendChild(doc.createTextNode(',\\n'))\n }\n if (different) {\n td.style.background = '#efe' // green = new changed\n }\n }\n }\n\n tr.appendChild(td)\n }\n\n // Save a reference to the HTML row in the row object.\n\n row._htmlRow = tr\n\n return tr\n }\n\n // Check if a value is already stored in the list of values for\n // a cell (the query can sometimes find it multiple times)\n\n function valueInList (value, list) {\n let key = null\n\n if (value.termType === 'Literal') {\n key = 'value'\n } else if (value.termType === 'NamedNode') {\n key = 'uri'\n } else {\n return list.indexOf(value) >= 0\n }\n\n // Check the list and compare keys:\n\n let i\n\n for (i = 0; i < list.length; ++i) {\n if (list[i].termType === value.termType && list[i][key] === value[key]) {\n return true\n }\n }\n\n // Not found?\n\n return false\n }\n\n // Update a row, add new values, and regenerate the HTML element\n // containing the values.\n\n function updateRow (row, columns, values) {\n let key\n let needUpdate = false\n\n for (key in values) {\n const value = values[key]\n\n // If this key is not already in the row, create a new entry\n // for it:\n\n if (!(key in row.values)) {\n row.values[key] = []\n }\n\n // Possibly add this new value to the list, but don't\n // add it if we have already added it:\n\n if (!valueInList(value, row.values[key])) {\n row.values[key].push(value)\n needUpdate = true\n }\n }\n\n // Regenerate the HTML row?\n\n if (needUpdate) {\n clearElement(row._htmlRow)\n renderTableRowInto(row._htmlRow, row, columns)\n }\n applyColumnFiltersToRow(row, columns) // Hide immediately if nec\n }\n\n // Get a unique ID for the given subject. This is normally the\n // URI; if the subject has no URI, a unique ID is assigned.\n\n function getSubjectId (subject) {\n if ('uri' in subject) {\n return subject.uri\n } else if ('_subject_id' in subject) {\n return subject._subject_id\n } else {\n const result = '' + subjectIdCounter\n subject._subject_id = result\n ++subjectIdCounter\n return result\n }\n }\n\n // Run a query and populate the table.\n // Populates also an array of logical rows. This will be empty when the function\n // first returns (as the query is performed in the background)\n\n function runQuery (query, rows, columns, table) {\n query.running = true\n const startTime = Date.now()\n\n let progressMessage = doc.createElement('tr')\n table.appendChild(progressMessage)\n progressMessage.textContent = 'Loading ...'\n\n for (let i = 0; i < rows.length; i++) {\n rows[i].original = true\n if (!rows[i].originalValues) {\n // remember first set\n rows[i].originalValues = rows[i].values\n }\n rows[i].values = {}\n // oldStyle = rows[i]._htmlRow.getAttribute('style') || ''\n // rows[i]._htmlRow.style.background = '#ffe'; //setAttribute('style', ' background-color: #ffe;')// yellow\n }\n\n const onResult = function (values) {\n if (!query.running) {\n return\n }\n\n progressMessage.textContent += '.' // give a progress bar\n\n let row = null\n let rowKey = null\n let rowKeyId\n\n // If the query has a row key, use it to look up the row.\n\n if (keyVariable in values) {\n rowKey = values[keyVariable]\n rowKeyId = getSubjectId(rowKey)\n\n // Do we have a row for this already?\n // If so, reuse it; otherwise, we must create a new row.\n\n if (rowKeyId in rowsLookup) {\n row = rowsLookup[rowKeyId]\n }\n }\n\n // Create a new row?\n\n if (!row) {\n const tr = doc.createElement('tr')\n table.appendChild(tr)\n\n row = {\n _htmlRow: tr,\n _subject: rowKey,\n values: {}\n }\n rows.push(row)\n\n if (rowKey) {\n rowsLookup[rowKeyId] = row\n }\n }\n\n // Add the new values to this row.\n delete row.original // This is included in the new data\n updateRow(row, columns, values)\n }\n\n const onDone = function () {\n if (\n progressMessage &&\n progressMessage.parentNode &&\n progressMessage.parentNode.removeChild\n ) {\n progressMessage.parentNode.removeChild(progressMessage)\n progressMessage = null\n }\n\n const elapsedTimeMS = Date.now() - startTime\n debug.log(\n 'Query done: ' + rows.length + ' rows, ' + elapsedTimeMS + 'ms'\n )\n // Delete rows which were from old values not new\n for (let i = rows.length - 1; i >= 0; i--) {\n // backwards\n if (rows[i].original) {\n debug.log(' deleting row ' + rows[i]._subject)\n const tr = rows[i]._htmlRow\n tr.parentNode.removeChild(tr)\n delete rowsLookup[getSubjectId(rows[i]._subject)]\n rows.splice(i, 1)\n }\n }\n\n if (options.sortBy) { // @@ for each column check needs sorting\n const column = getColumnForVariable(columns, options.sortBy)\n literalSort(rows, column, options.sortReverse)\n }\n\n if (options.onDone) options.onDone(resultDiv) // return div makes testing easier\n }\n kb.query(query, onResult, undefined, onDone)\n }\n\n // Given the formula object which is the query pattern,\n // deduce from where the variable occurs constraints on\n // what values it can take.\n\n function inferColumnsFromFormula (columns, formula) {\n UI.log.debug('>> processing formula')\n\n for (let i = 0; i < formula.statements.length; ++i) {\n const statement = formula.statements[i]\n // UI.log.debug(\"processing statement \" + i)\n\n // Does it match this?:\n // <something> <predicate> ?var\n // If so, we can use the predicate as the predicate for the\n // column used for the specified variable.\n\n if (\n statement.predicate.termType === 'NamedNode' &&\n statement.object.termType === 'Variable'\n ) {\n const variable = statement.object.toString()\n if (variable in columns) {\n const column = columns[variable]\n column.setPredicate(statement.predicate, false, statement.subject)\n }\n }\n if (\n statement.predicate.termType === 'NamedNode' &&\n statement.subject.termType === 'Variable'\n ) {\n const variable = statement.subject.toString()\n if (variable in columns) {\n const column = columns[variable]\n column.setPredicate(statement.predicate, true, statement.object)\n }\n }\n }\n\n // Apply to OPTIONAL formulas:\n\n for (let i = 0; i < formula.optional.length; ++i) {\n UI.log.debug('recurse to optional subformula ' + i)\n inferColumnsFromFormula(columns, formula.optional[i])\n }\n\n UI.log.debug('<< finished processing formula')\n }\n\n // Generate a list of column structures and infer details about the\n // predicates based on the contents of the query\n\n function inferColumns (query) {\n // Generate the columns list:\n\n const result = []\n const columns = {}\n\n for (let i = 0; i < query.vars.length; ++i) {\n const column = new Column()\n const queryVar = query.vars[i]\n UI.log.debug('column ' + i + ' : ' + queryVar)\n\n column.setVariable(queryVar)\n columns[queryVar] = column\n result.push(column)\n }\n\n inferColumnsFromFormula(columns, query.pat)\n\n return result\n }\n\n // Generate a table from a query.\n\n function renderTableForQuery (query, type) {\n // infer columns from query, to allow generic queries\n let columns\n if (!givenQuery) {\n columns = type.getColumns()\n } else {\n columns = inferColumns(query)\n }\n\n // Start with an empty list of rows; this will be populated\n // by the query.\n\n const rows = []\n\n // Create table element and header.\n\n const table = doc.createElement('table')\n\n table.appendChild(renderTableHeader(columns, type))\n table.appendChild(renderTableSelectors(rows, columns))\n\n // Run query. Note that this is perform asynchronously; the\n // query runs in the background and this call does not block.\n\n table.logicalRows = rows // Save for refresh\n table.columns = columns\n table.query = query\n\n runQuery(query, rows, columns, table)\n\n return table\n }\n\n // Find the most common type of row\n\n function getMostCommonType (types) {\n let bestCount = -1\n let best = null\n\n let typeUri\n for (typeUri in types) {\n const type = types[typeUri]\n\n if (type.useCount > bestCount) {\n best = type\n bestCount = type.useCount\n }\n }\n\n return best\n }\n\n // Filter list of columns to only those columns used in the\n // specified rows.\n /*\n function filterColumns (columns, rows) {\n var filteredColumns = {}\n\n // Copy columns from \"columns\" -> \"filteredColumns\", but only\n // those columns that are used in the list of rows specified.\n\n for (let columnUri in columns) {\n for (let i = 0; i < rows.length; ++i) {\n if (columnUri in rows[i]) {\n filteredColumns[columnUri] = columns[columnUri]\n break\n }\n }\n }\n return filteredColumns\n }\n */\n}\n// ///////////////////////////////////////////////////////////////////\n\n// ENDS\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"table.js","names":["debug","_interopRequireWildcard","require","_iconBase","_solidLogic","log","ns","rdf","utils","widgets","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","_typeof","has","get","set","_t","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","UI","icons","renderTableViewPane","doc","options","sourceDocument","tableClass","givenQuery","query","RDFS_LITERAL","kb","store","rowsLookup","FORBIDDEN_COLUMNS","XSD_NUMBER_TYPES","XSD_DATE_TYPES","IMAGE_TYPES","keyVariable","subjectIdCounter","allType","types","typeSelectorDiv","addColumnDiv","lastQuery","mostCommonType","resultDiv","createElement","className","appendChild","generateControlBar","tableDiv","refresh","runQuery","table","logicalRows","columns","renderTableForQuery","s","calculateTable","generateTypeSelector","getMostCommonType","buildFilteredTable","result","setAttribute","tr","addSelectToQuery","type","selectedColumns","getColumns","length","variable","vars","push","setVariable","addWhereToQuery","rowVar","queryType","pat","add","addColumnsToQuery","column","formula","predicate","getVariable","optional","generateQuery","Query","slice","clearElement","generateColumnAddDropdown","updateTable","running","htmlTable","element","childNodes","removeChild","SubjectType","allColumns","useCount","getAllColumns","getUnusedColumns","indexOf","addColumn","removeColumn","filter","x","getLabel","label","addUse","Column","checkedAnyValues","possiblyLiteral","possiblyNumber","constraints","checkValue","term","termType","literalValue","value","match","getKey","toString","getHints","hints","toNT","sameTerm","superClass","setPredicate","inverse","other","concat","each","rdfs","alternatives","undefined","getConstraints","filterFunction","sortKey","toLowerCase","isImageColumn","uri","objectToArray","obj","property","optionElement","createTextNode","dropdown","addEventListener","typeSelectorChanged","selectedType","unusedColumns","sort","a","b","aLabel","bLabel","columnIndex","Number","getColumnForVariable","variableNT","predicateUri","Error","getColumnForPredicate","getTypeForObject","subjectType","discoverTypes","subjectList","statementsMatching","subjects","object","typeObj","subject","getSubjectProperties","properties","j","identifyColumnsForType","allColumnsList","sortColumns","typeUrl","sortFunction","renderColumnDeleteButton","button","renderTableHeader","linkTd","th","applyColumnSort","rows","reverse","columnKey","row1","row2","row1Value","row2Value","values","parentTable","_htmlRow","parentNode","applyColumnFiltersToRow","row","rowDisplayed","c","columnValue","htmlRow","style","display","applyColumnFilters","literalSort","literalToString","colValue","literalCompare","value1","value2","strValue1","strValue2","renderLiteralSelector","textBox","width","sort1","sort2","substring","renderEnumSelector","list","doMultiple","searchValue","initialSelection","ele","selected","opt","option","index","renderNumberSelector","minSelector","maxSelector","min","max","eventListener","fallbackRenderTableSelector","renderTableSelector","cs","range","choices","owl","elements","renderTableSelectors","td","selector","linkTo","linkText","linkFunction","openHrefInOutlineMode","preventDefault","stopPropagation","target","getTarget","getAttribute","linkToObject","renderImage","height","renderValue","cellFormat","shortDate","datatype","span","textContent","forEach","lastChild","renderTableRowInto","_downstream","_subject","orig","objects","different","originalValues","background","valueInList","key","updateRow","needUpdate","getSubjectId","_subject_id","startTime","Date","now","progressMessage","original","onResult","rowKey","rowKeyId","onDone","elapsedTimeMS","splice","sortBy","sortReverse","inferColumnsFromFormula","statements","statement","inferColumns","queryVar","bestCount","best","typeUri"],"sources":["../src/table.js"],"sourcesContent":["// Table Widget: Format an array of RDF statements as an HTML table.\n//\n// This can operate in one of three modes: when the class of object is given\n// or when the source document from whuch data is taken is given,\n// or if a prepared query object is given.\n// (In principle it could operate with neither class nor document\n// given but typically\n// there would be too much data.)\n// When the tableClass is not given, it looks for common classes in the data,\n// and gives the user the option.\n//\n// 2008 Written, Ilaria Liccardi as the tableViewPane.js\n// 2014 Core table widget moved into common/table.js - timbl\n//\n\nimport * as debug from './debug'\nimport { icons } from './iconBase'\nimport { store } from 'solid-logic'\nimport * as log from './log'\nimport * as ns from './ns'\nimport * as rdf from 'rdflib' // pull in first avoid cross-refs\nimport * as utils from './utils'\nimport * as widgets from './widgets'\n\nconst UI = { icons, log, ns, utils, widgets }\n\n// UI.widgets.renderTableViewPane\nexport function renderTableViewPane (doc, options) {\n const sourceDocument = options.sourceDocument\n const tableClass = options.tableClass\n const givenQuery = options.query\n\n const RDFS_LITERAL = 'http://www.w3.org/2000/01/rdf-schema#Literal'\n const ns = UI.ns\n const kb = store\n const rowsLookup = {} // Persistent mapping of subject URI to dom TR\n\n // Predicates that are never made into columns:\n\n const FORBIDDEN_COLUMNS = {\n 'http://www.w3.org/2002/07/owl#sameAs': true,\n 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type': true\n }\n\n // Number types defined in the XML schema:\n\n const XSD_NUMBER_TYPES = {\n 'http://www.w3.org/2001/XMLSchema#decimal': true,\n 'http://www.w3.org/2001/XMLSchema#float': true,\n 'http://www.w3.org/2001/XMLSchema#double': true,\n 'http://www.w3.org/2001/XMLSchema#integer': true,\n 'http://www.w3.org/2001/XMLSchema#nonNegativeInteger': true,\n 'http://www.w3.org/2001/XMLSchema#positiveInteger': true,\n 'http://www.w3.org/2001/XMLSchema#nonPositiveInteger': true,\n 'http://www.w3.org/2001/XMLSchema#negativeInteger': true,\n 'http://www.w3.org/2001/XMLSchema#long': true,\n 'http://www.w3.org/2001/XMLSchema#int': true,\n 'http://www.w3.org/2001/XMLSchema#short': true,\n 'http://www.w3.org/2001/XMLSchema#byte': true,\n 'http://www.w3.org/2001/XMLSchema#unsignedLong': true,\n 'http://www.w3.org/2001/XMLSchema#unsignedInt': true,\n 'http://www.w3.org/2001/XMLSchema#unsignedShort': true,\n 'http://www.w3.org/2001/XMLSchema#unsignedByte': true\n }\n\n const XSD_DATE_TYPES = {\n 'http://www.w3.org/2001/XMLSchema#dateTime': true,\n 'http://www.w3.org/2001/XMLSchema#date': true\n }\n\n // Classes that indicate an image:\n\n const IMAGE_TYPES = {\n 'http://xmlns.com/foaf/0.1/Image': true,\n 'http://purl.org/dc/terms/Image': true\n }\n\n // Name of the column used as a \"key\" value to look up the row.\n // This is necessary because in the normal view, the columns are\n // all \"optional\" values, meaning that we will get a result set\n // for every individual value that is found. The row key acts\n // as an anchor that can be used to combine this information\n // back into the same row.\n\n const keyVariable = options.keyVariable || '?_row'\n\n let subjectIdCounter = 0\n let allType, types\n let typeSelectorDiv, addColumnDiv\n\n // The last SPARQL query used:\n let lastQuery = null\n let mostCommonType = null\n\n const resultDiv = doc.createElement('div')\n resultDiv.className = 'tableViewPane'\n\n resultDiv.appendChild(generateControlBar()) // sets typeSelectorDiv\n\n const tableDiv = doc.createElement('div')\n resultDiv.appendChild(tableDiv)\n\n // Save a refresh function for use by caller\n resultDiv.refresh = function () {\n runQuery(table.query, table.logicalRows, table.columns, table)\n // updateTable(givenQuery, mostCommonType) // This could be a lot more incremental and efficient\n }\n\n // A specifically asked-for query\n let table\n if (givenQuery) {\n table = renderTableForQuery(givenQuery)\n // lastQuery = givenQuery\n tableDiv.appendChild(table)\n } else {\n // Find the most common type and select it by default\n\n const s = calculateTable()\n allType = s[0]\n types = s[1]\n if (!tableClass) {\n typeSelectorDiv.appendChild(generateTypeSelector(allType, types))\n }\n\n mostCommonType = getMostCommonType(types)\n\n if (mostCommonType) {\n buildFilteredTable(mostCommonType)\n } else {\n buildFilteredTable(allType)\n }\n }\n return resultDiv\n\n // /////////////////////////////////////////////////////////////////\n /*\n function closeDialog (dialog) {\n dialog.parentNode.removeChild(dialog)\n }\n\n function createActionButton (label, callback) {\n var button = doc.createElement('input')\n button.setAttribute('type', 'submit')\n button.setAttribute('value', label)\n button.addEventListener('click', callback, false)\n return button\n }\n// @@ Tdo: put these buttonsback in,\n// to allow user to see and edit and save the sparql query for the table they are looking at\n//\n\n function createSparqlWindow () {\n var dialog = doc.createElement('div')\n\n dialog.setAttribute('class', 'sparqlDialog')\n\n var title = doc.createElement('h3')\n title.appendChild(doc.createTextNode('Edit SPARQL query'))\n\n var inputbox = doc.createElement('textarea')\n inputbox.value = rdf.queryToSPARQL(lastQuery)\n\n dialog.appendChild(title)\n dialog.appendChild(inputbox)\n\n dialog.appendChild(createActionButton('Query', function () {\n var query = rdf.SPARQLToQuery(inputbox.value)\n updateTable(query)\n closeDialog(dialog)\n }))\n\n dialog.appendChild(createActionButton('Close', function () {\n closeDialog(dialog)\n }))\n\n return dialog\n }\n\n function sparqlButtonPressed () {\n var dialog = createSparqlWindow()\n\n resultDiv.appendChild(dialog)\n }\n\n function generateSparqlButton () {\n var image = doc.createElement('img')\n image.setAttribute('class', 'sparqlButton')\n image.setAttribute('src', UI.iconBase + 'icons/1pt5a.gif')\n image.setAttribute('alt', 'Edit SPARQL query')\n\n image.addEventListener('click', sparqlButtonPressed, false)\n\n return image\n }\n*/\n // Generate the control bar displayed at the top of the screen.\n\n function generateControlBar () {\n const result = doc.createElement('table')\n result.setAttribute('class', 'toolbar')\n\n const tr = doc.createElement('tr')\n\n /* @@ Add in later -- not debugged yet\n var sparqlButtonDiv = doc.createElement(\"td\")\n sparqlButtonDiv.appendChild(generateSparqlButton())\n tr.appendChild(sparqlButtonDiv)\n */\n typeSelectorDiv = doc.createElement('td')\n tr.appendChild(typeSelectorDiv)\n\n addColumnDiv = doc.createElement('td')\n tr.appendChild(addColumnDiv)\n\n result.appendChild(tr)\n\n return result\n }\n\n // Add the SELECT details to the query being built.\n\n function addSelectToQuery (query, type) {\n const selectedColumns = type.getColumns()\n\n for (let i = 0; i < selectedColumns.length; ++i) {\n // TODO: autogenerate nicer names for variables\n // variables have to be unambiguous\n\n const variable = kb.variable('_col' + i)\n\n query.vars.push(variable)\n selectedColumns[i].setVariable(variable)\n }\n }\n\n // Add WHERE details to the query being built.\n\n function addWhereToQuery (query, rowVar, type) {\n let queryType = type.type\n\n if (!queryType) {\n queryType = kb.variable('_any')\n }\n\n // _row a type\n query.pat.add(rowVar, UI.ns.rdf('type'), queryType)\n }\n\n // Generate OPTIONAL column selectors.\n\n function addColumnsToQuery (query, rowVar, type) {\n const selectedColumns = type.getColumns()\n\n for (let i = 0; i < selectedColumns.length; ++i) {\n const column = selectedColumns[i]\n\n const formula = kb.formula()\n\n formula.add(rowVar, column.predicate, column.getVariable())\n\n query.pat.optional.push(formula)\n }\n }\n\n // Generate a query object from the currently-selected type\n // object.\n\n function generateQuery (type) {\n const query = new rdf.Query()\n const rowVar = kb.variable(keyVariable.slice(1)) // don't pass '?'\n\n addSelectToQuery(query, type)\n addWhereToQuery(query, rowVar, type)\n addColumnsToQuery(query, rowVar, type)\n\n return query\n }\n\n // Build the contents of the tableDiv element, filtered according\n // to the specified type.\n\n function buildFilteredTable (type) {\n // Generate \"add column\" cell.\n\n clearElement(addColumnDiv)\n addColumnDiv.appendChild(generateColumnAddDropdown(type))\n\n const query = generateQuery(type)\n\n updateTable(query, type)\n }\n\n function updateTable (query, type) {\n // Stop the previous query from doing any updates.\n\n if (lastQuery) {\n lastQuery.running = false\n }\n\n // Render the HTML table.\n\n const htmlTable = renderTableForQuery(query, type)\n\n // Clear the tableDiv element, and replace with the new table.\n\n clearElement(tableDiv)\n tableDiv.appendChild(htmlTable)\n\n // Save the query for the edit dialog.\n\n lastQuery = query\n }\n\n // Remove all subelements of the specified element.\n\n function clearElement (element) {\n while (element.childNodes.length > 0) {\n element.removeChild(element.childNodes[0])\n }\n }\n\n // A SubjectType is created for each rdf:type discovered.\n\n function SubjectType (type) {\n this.type = type\n this.columns = null\n this.allColumns = []\n this.useCount = 0\n\n // Get a list of all columns used by this type.\n\n this.getAllColumns = function () {\n return this.allColumns\n }\n\n // Get a list of the current columns used by this type\n // (subset of allColumns)\n\n this.getColumns = function () {\n // The first time through, get a list of all the columns\n // and select only the six most popular columns.\n\n if (!this.columns) {\n const allColumns = this.getAllColumns()\n this.columns = allColumns.slice(0, 7)\n }\n\n return this.columns\n }\n\n // Get a list of unused columns\n\n this.getUnusedColumns = function () {\n const allColumns = this.getAllColumns()\n const columns = this.getColumns()\n\n const result = []\n\n for (let i = 0; i < allColumns.length; ++i) {\n if (columns.indexOf(allColumns[i]) === -1) {\n result.push(allColumns[i])\n }\n }\n\n return result\n }\n\n this.addColumn = function (column) {\n this.columns.push(column)\n }\n\n this.removeColumn = function (column) {\n this.columns = this.columns.filter(function (x) {\n return x !== column\n })\n }\n\n this.getLabel = function () {\n return utils.label(this.type)\n }\n\n this.addUse = function () {\n this.useCount += 1\n }\n }\n\n // Class representing a column in the table.\n\n function Column () {\n this.useCount = 0\n\n // Have we checked any values for this column yet?\n\n this.checkedAnyValues = false\n\n // If the range is unknown, but we just get literals in this\n // column, then we can generate a literal selector.\n\n this.possiblyLiteral = true\n\n // If the range is unknown, but we just get literals and they\n // match the regular expression for numbers, we can generate\n // a number selector.\n\n this.possiblyNumber = true\n\n // We accumulate classes which things in the column must be a member of\n\n this.constraints = []\n\n // Check values as they are read. If we don't know what the\n // range is, we might be able to infer that it is a literal\n // if all of the values are literals. Similarly, we might\n // be able to determine if the literal values are actually\n // numbers (using regexps).\n\n this.checkValue = function (term) {\n const termType = term.termType\n if (\n this.possiblyLiteral &&\n termType !== 'Literal' &&\n termType !== 'NamedNode'\n ) {\n this.possiblyNumber = false\n this.possiblyLiteral = false\n } else if (this.possiblyNumber) {\n if (termType !== 'Literal') {\n this.possiblyNumber = false\n } else {\n const literalValue = term.value\n\n if (!literalValue.match(/^-?\\d+(\\.\\d*)?$/)) {\n this.possiblyNumber = false\n }\n }\n }\n\n this.checkedAnyValues = true\n }\n\n this.getVariable = function () {\n return this.variable\n }\n\n this.setVariable = function (variable) {\n this.variable = variable\n }\n\n this.getKey = function () {\n return this.variable.toString()\n }\n\n this.addUse = function () {\n this.useCount += 1\n }\n\n this.getHints = function () {\n if (\n options &&\n options.hints &&\n this.variable &&\n options.hints[this.variable.toNT()]\n ) {\n return options.hints[this.variable.toNT()]\n }\n return {}\n }\n\n this.getLabel = function () {\n if (this.getHints().label) {\n return this.getHints().label\n }\n if (this.predicate) {\n if (this.predicate.sameTerm(ns.rdf('type')) && this.superClass) {\n return utils.label(this.superClass, true) // do initial cap\n }\n return utils.label(this.predicate)\n } else if (this.variable) {\n return this.variable.toString()\n } else {\n return 'unlabeled column?'\n }\n }\n\n this.setPredicate = function (predicate, inverse, other) {\n if (inverse) {\n // variable is in the subject pos\n this.inverse = predicate\n this.constraints = this.constraints.concat(\n kb.each(predicate, UI.ns.rdfs('domain'))\n )\n if (\n predicate.sameTerm(ns.rdfs('subClassOf')) &&\n other.termType === 'NamedNode'\n ) {\n this.superClass = other\n this.alternatives = kb.each(undefined, ns.rdfs('subClassOf'), other)\n }\n } else {\n // variable is the object\n this.predicate = predicate\n this.constraints = this.constraints.concat(\n kb.each(predicate, UI.ns.rdfs('range'))\n )\n }\n }\n\n this.getConstraints = function () {\n return this.constraints\n }\n\n this.filterFunction = function () {\n return true\n }\n\n this.sortKey = function () {\n return this.getLabel().toLowerCase()\n }\n\n this.isImageColumn = function () {\n for (let i = 0; i < this.constraints.length; i++) {\n if (this.constraints[i].uri in IMAGE_TYPES) return true\n }\n return false\n }\n }\n\n // Convert an object to an array.\n\n function objectToArray (obj, filter) {\n const result = []\n\n for (const property in obj) {\n // @@@ have to guard against methods\n const value = obj[property]\n\n if (!filter || filter(property, value)) {\n result.push(value)\n }\n }\n\n return result\n }\n\n // Generate an <option> in a drop-down list.\n\n function optionElement (label, value) {\n const result = doc.createElement('option')\n\n result.setAttribute('value', value)\n result.appendChild(doc.createTextNode(label))\n\n return result\n }\n\n // Generate drop-down list box for choosing type of data displayed\n\n function generateTypeSelector (allType, types) {\n const resultDiv = doc.createElement('div')\n\n resultDiv.appendChild(doc.createTextNode('Select type: '))\n\n const dropdown = doc.createElement('select')\n\n dropdown.appendChild(optionElement('All types', 'null'))\n\n for (const uri in types) {\n dropdown.appendChild(optionElement(types[uri].getLabel(), uri))\n }\n\n dropdown.addEventListener(\n 'click',\n function () {\n let type\n\n if (dropdown.value === 'null') {\n type = allType\n } else {\n type = types[dropdown.value]\n }\n\n typeSelectorChanged(type)\n },\n false\n )\n\n resultDiv.appendChild(dropdown)\n\n return resultDiv\n }\n\n // Callback invoked when the type selector drop-down list is changed.\n\n function typeSelectorChanged (selectedType) {\n buildFilteredTable(selectedType)\n }\n\n // Build drop-down list to add a new column\n\n function generateColumnAddDropdown (type) {\n const resultDiv = doc.createElement('div')\n\n const unusedColumns = type.getUnusedColumns()\n\n unusedColumns.sort(function (a, b) {\n const aLabel = a.sortKey()\n const bLabel = b.sortKey()\n return (aLabel > bLabel) - (aLabel < bLabel)\n })\n\n // If there are no unused columns, the div is empty.\n\n if (unusedColumns.length > 0) {\n resultDiv.appendChild(doc.createTextNode('Add column: '))\n\n // Build dropdown list of unused columns.\n\n const dropdown = doc.createElement('select')\n\n dropdown.appendChild(optionElement('', '-1'))\n\n for (let i = 0; i < unusedColumns.length; ++i) {\n const column = unusedColumns[i]\n dropdown.appendChild(optionElement(column.getLabel(), '' + i))\n }\n\n resultDiv.appendChild(dropdown)\n\n // Invoke callback when the dropdown is changed, to add\n // the column and reload the table.\n\n dropdown.addEventListener(\n 'click',\n function () {\n const columnIndex = Number(dropdown.value)\n\n if (columnIndex >= 0) {\n type.addColumn(unusedColumns[columnIndex])\n buildFilteredTable(type)\n }\n },\n false\n )\n }\n\n return resultDiv\n }\n\n // Find the column for a given variable\n\n function getColumnForVariable (columns, variableNT) {\n for (const predicateUri in columns) {\n const column = columns[predicateUri]\n if (column.variable.toNT() === variableNT) {\n return column\n }\n }\n throw new Error(`getColumnForVariable: no column for variable ${variableNT}`)\n // return null\n }\n\n // Find the column for a given predicate, creating a new column object\n // if necessary.\n\n function getColumnForPredicate (columns, predicate) {\n let column\n\n if (predicate.uri in columns) {\n column = columns[predicate.uri]\n } else {\n column = new Column()\n column.setPredicate(predicate)\n columns[predicate.uri] = column\n }\n\n return column\n }\n\n // Find a type by its URI, creating a new SubjectType object if\n // necessary.\n\n function getTypeForObject (types, type) {\n let subjectType\n\n if (type.uri in types) {\n subjectType = types[type.uri]\n } else {\n subjectType = new SubjectType(type)\n types[type.uri] = subjectType\n }\n\n return subjectType\n }\n\n // Discover types and subjects for search.\n\n function discoverTypes () {\n // rdf:type properties of subjects, indexed by URI for the type.\n\n const types = {}\n\n // Get a list of statements that match: ? rdfs:type ?\n // From this we can get a list of subjects and types.\n\n const subjectList = kb.statementsMatching(\n undefined,\n UI.ns.rdf('type'),\n tableClass, // can be undefined OR\n sourceDocument\n ) // can be undefined\n\n // Subjects for later lookup. This is a mapping of type URIs to\n // lists of subjects (it is necessary to record the type of\n // a subject).\n\n const subjects = {}\n\n for (let i = 0; i < subjectList.length; ++i) {\n const type = subjectList[i].object\n\n if (type.termType !== 'NamedNode') {\n // @@ no bnodes?\n continue\n }\n\n const typeObj = getTypeForObject(types, type)\n\n if (!(type.uri in subjects)) {\n subjects[type.uri] = []\n }\n\n subjects[type.uri].push(subjectList[i].subject)\n typeObj.addUse()\n }\n\n return [subjects, types]\n }\n\n // Get columns for the given subject.\n\n function getSubjectProperties (subject, columns) {\n // Get a list of properties of this subject.\n\n const properties = kb.statementsMatching(\n subject,\n undefined,\n undefined,\n sourceDocument\n )\n\n const result = {}\n\n for (let j = 0; j < properties.length; ++j) {\n const predicate = properties[j].predicate\n\n if (predicate.uri in FORBIDDEN_COLUMNS) {\n continue\n }\n\n // Find/create a column for this predicate.\n\n const column = getColumnForPredicate(columns, predicate)\n column.checkValue(properties[j].object)\n\n result[predicate.uri] = column\n }\n\n return result\n }\n\n // Identify the columns associated with a type.\n\n function identifyColumnsForType (type, subjects) {\n const allColumns = {}\n\n // Process each subject of this type to build up the\n // column list.\n\n for (let i = 0; i < subjects.length; ++i) {\n const columns = getSubjectProperties(subjects[i], allColumns)\n\n for (const predicateUri in columns) {\n const column = columns[predicateUri]\n\n column.addUse()\n }\n }\n\n // Generate the columns list\n\n const allColumnsList = objectToArray(allColumns)\n sortColumns(allColumnsList)\n type.allColumns = allColumnsList\n }\n\n // Build table information from parsing RDF statements.\n\n function calculateTable () {\n // Find the types that we will display in the dropdown\n // list box, and associated objects of those types.\n\n let subjects, types\n\n const s = discoverTypes()\n // eslint-disable-next-line prefer-const\n subjects = s[0]\n // eslint-disable-next-line prefer-const\n types = s[1] // no [ ] on LHS\n\n for (const typeUrl in subjects) {\n const subjectList = subjects[typeUrl]\n const type = types[typeUrl]\n\n identifyColumnsForType(type, subjectList)\n }\n\n // TODO: Special type that captures all rows.\n // Combine columns from all types\n\n const allType = new SubjectType(null)\n\n return [allType, objectToArray(types)]\n }\n\n // Sort the list of columns by the most common columns.\n\n function sortColumns (columns) {\n function sortFunction (a, b) {\n return (a.useCount < b.useCount) - (a.useCount > b.useCount)\n }\n\n columns.sort(sortFunction)\n }\n\n // Create the delete button for a column.\n\n function renderColumnDeleteButton (type, column) {\n const button = doc.createElement('a')\n\n button.appendChild(doc.createTextNode('[x]'))\n\n button.addEventListener(\n 'click',\n function () {\n type.removeColumn(column)\n buildFilteredTable(type)\n },\n false\n )\n\n return button\n }\n\n // Render the table header for the HTML table.\n\n function renderTableHeader (columns, type) {\n const tr = doc.createElement('tr')\n\n /* Empty header for link column */\n const linkTd = doc.createElement('th')\n tr.appendChild(linkTd)\n\n for (let i = 0; i < columns.length; ++i) {\n const th = doc.createElement('th')\n const column = columns[i]\n\n th.appendChild(doc.createTextNode(column.getLabel()))\n\n // We can only add a delete button if we are using the\n // proper interface and have a type to delete from:\n if (type) {\n th.appendChild(renderColumnDeleteButton(type, column))\n }\n\n tr.appendChild(th)\n }\n\n return tr\n }\n\n // Sort the rows in the rendered table by data from a specific\n // column, using the provided sort function to compare values.\n\n function applyColumnSort (rows, column, sortFunction, reverse) {\n const columnKey = column.getKey()\n\n // Sort the rows array.\n rows.sort(function (row1, row2) {\n let row1Value = null\n let row2Value = null\n\n if (columnKey in row1.values) {\n row1Value = row1.values[columnKey][0]\n }\n if (columnKey in row2.values) {\n row2Value = row2.values[columnKey][0]\n }\n\n const result = sortFunction(row1Value, row2Value)\n\n if (reverse) {\n return -result\n } else {\n return result\n }\n })\n\n // Remove all rows from the table:\n\n if (rows.length) {\n const parentTable = rows[0]._htmlRow.parentNode\n\n for (let i = 0; i < rows.length; ++i) {\n parentTable.removeChild(rows[i]._htmlRow)\n }\n\n // Add back the rows in the new sorted order:\n\n for (let i = 0; i < rows.length; ++i) {\n parentTable.appendChild(rows[i]._htmlRow)\n }\n }\n }\n\n // Filter the list of rows based on the selectors for the\n // columns.\n\n function applyColumnFiltersToRow (row, columns) {\n let rowDisplayed = true\n\n // Check the filter functions for every column.\n // The row should only be displayed if the filter functions\n // for all of the columns return true.\n\n for (let c = 0; c < columns.length; ++c) {\n const column = columns[c]\n const columnKey = column.getKey()\n\n let columnValue = null\n\n if (columnKey in row.values) {\n columnValue = row.values[columnKey][0]\n }\n\n if (!column.filterFunction(columnValue)) {\n rowDisplayed = false\n break\n }\n }\n\n // Show or hide the HTML row according to the result\n // from the filter function.\n\n const htmlRow = row._htmlRow\n\n if (rowDisplayed) {\n htmlRow.style.display = ''\n } else {\n htmlRow.style.display = 'none'\n }\n }\n\n // Filter the list of rows based on the selectors for the\n // columns.\n\n function applyColumnFilters (rows, columns) {\n // Apply filterFunction to each row.\n\n for (let r = 0; r < rows.length; ++r) {\n const row = rows[r]\n applyColumnFiltersToRow(row, columns)\n }\n }\n\n // /////////////////////////////////// Literal column handling\n\n // Sort by literal value\n\n function literalSort (rows, column, reverse) {\n function literalToString (colValue) {\n if (colValue) {\n if (colValue.termType === 'Literal') {\n return colValue.value.toLowerCase()\n } else if (colValue.termType === 'NamedNode') {\n return utils.label(colValue).toLowerCase()\n }\n return colValue.value.toLowerCase()\n } else {\n return ''\n }\n }\n\n function literalCompare (value1, value2) {\n const strValue1 = literalToString(value1)\n const strValue2 = literalToString(value2)\n\n if (strValue1 < strValue2) {\n return -1\n } else if (strValue1 > strValue2) {\n return 1\n } else {\n return 0\n }\n }\n\n applyColumnSort(rows, column, literalCompare, reverse)\n }\n\n // Generates a selector for an RDF literal column.\n\n function renderLiteralSelector (rows, columns, column) {\n const result = doc.createElement('div')\n\n const textBox = doc.createElement('input')\n textBox.setAttribute('type', 'text')\n textBox.style.width = '70%'\n\n result.appendChild(textBox)\n\n const sort1 = doc.createElement('span')\n sort1.appendChild(doc.createTextNode('\\u25BC'))\n sort1.addEventListener(\n 'click',\n function () {\n literalSort(rows, column, false)\n },\n false\n )\n result.appendChild(sort1)\n\n const sort2 = doc.createElement('span')\n sort2.appendChild(doc.createTextNode('\\u25B2'))\n sort2.addEventListener(\n 'click',\n function () {\n literalSort(rows, column, true)\n },\n false\n )\n result.appendChild(sort2)\n\n let substring = null\n\n // Filter the table to show only rows that have a particular\n // substring in the specified column.\n\n column.filterFunction = function (colValue) {\n if (!substring) {\n return true\n } else if (!colValue) {\n return false\n } else {\n let literalValue\n\n if (colValue.termType === 'Literal') {\n literalValue = colValue.value\n } else if (colValue.termType === 'NamedNode') {\n literalValue = utils.label(colValue)\n } else {\n literalValue = ''\n }\n\n return literalValue.toLowerCase().indexOf(substring) >= 0\n }\n }\n\n textBox.addEventListener(\n 'keyup',\n function () {\n if (textBox.value !== '') {\n substring = textBox.value.toLowerCase()\n } else {\n substring = null\n }\n\n applyColumnFilters(rows, columns)\n },\n false\n )\n\n return result\n }\n\n // /////////////////////////////////// Enumeration\n\n // Generates a dropdown selector for enumeration types include\n //\n // @param rows,\n // @param columns, the mapping of predictae URIs to columns\n // @param column,\n // @param list, List of alternative terms\n //\n function renderEnumSelector (rows, columns, column, list) {\n const doMultiple = true\n const result = doc.createElement('div')\n const dropdown = doc.createElement('select')\n\n let searchValue = {} // Defualt to all enabled\n for (let i = 0; i < list.length; ++i) {\n const value = list[i]\n searchValue[value.uri] = true\n }\n\n const initialSelection = getHints(column).initialSelection\n if (initialSelection) searchValue = initialSelection\n\n if (doMultiple) dropdown.setAttribute('multiple', 'true')\n else dropdown.appendChild(optionElement('(All)', '-1'))\n\n for (let i = 0; i < list.length; ++i) {\n const value = list[i]\n const ele = optionElement(utils.label(value), i)\n if (searchValue[value.uri]) ele.selected = true\n dropdown.appendChild(ele)\n }\n result.appendChild(dropdown)\n\n // Select based on an enum value.\n\n column.filterFunction = function (colValue) {\n return !searchValue || (colValue && searchValue[colValue.uri])\n }\n\n dropdown.addEventListener(\n 'click',\n function () {\n if (doMultiple) {\n searchValue = {}\n const opt = dropdown.options\n for (let i = 0; i < opt.length; i++) {\n const option = opt[i]\n const index = Number(option.value)\n if (opt[i].selected) searchValue[list[index].uri] = true\n }\n } else {\n const index = Number(dropdown.value) // adjusted in Standard tweaks 2018-01\n if (index < 0) {\n searchValue = null\n } else {\n searchValue = {}\n searchValue[list[index].uri] = true\n }\n }\n applyColumnFilters(rows, columns)\n },\n true\n )\n\n return result\n }\n\n // //////////////////////////////////// Numeric\n //\n // Selector for XSD number types.\n\n function renderNumberSelector (rows, columns, column) {\n const result = doc.createElement('div')\n\n const minSelector = doc.createElement('input')\n minSelector.setAttribute('type', 'text')\n minSelector.style.width = '40px'\n result.appendChild(minSelector)\n\n const maxSelector = doc.createElement('input')\n maxSelector.setAttribute('type', 'text')\n maxSelector.style.width = '40px'\n result.appendChild(maxSelector)\n\n // Select based on minimum/maximum limits.\n\n let min = null\n let max = null\n\n column.filterFunction = function (colValue) {\n if (colValue) {\n colValue = Number(colValue)\n }\n\n if (min && (!colValue || colValue < min)) {\n return false\n }\n if (max && (!colValue || colValue > max)) {\n return false\n }\n\n return true\n }\n\n // When the values in the boxes are changed, update the\n // displayed columns.\n\n function eventListener () {\n if (minSelector.value === '') {\n min = null\n } else {\n min = Number(minSelector.value)\n }\n\n if (maxSelector.value === '') {\n max = null\n } else {\n max = Number(maxSelector.value)\n }\n\n applyColumnFilters(rows, columns)\n }\n\n minSelector.addEventListener('keyup', eventListener, false)\n maxSelector.addEventListener('keyup', eventListener, false)\n\n return result\n }\n\n // /////////////////////////////////////////////////////////////////\n\n // Fallback attempts at generating a selector if other attempts fail.\n\n function fallbackRenderTableSelector (rows, columns, column) {\n // Have all values matched as numbers?\n\n if (column.checkedAnyValues && column.possiblyNumber) {\n return renderNumberSelector(rows, columns, column)\n }\n\n // Have all values been literals?\n\n if (column.possiblyLiteral) {\n return renderLiteralSelector(rows, columns, column)\n }\n\n return null\n }\n\n // Render a selector for a given row.\n\n function renderTableSelector (rows, columns, column) {\n // What type of data is in this column? Check the constraints for\n // this predicate.\n\n // If this is a class which can be one of various sibling classes?\n if (column.superClass && column.alternatives.length > 0) {\n return renderEnumSelector(rows, columns, column, column.alternatives)\n }\n\n const cs = column.getConstraints()\n let range\n for (let i = 0; i < cs.length; i++) {\n range = cs[i]\n\n // Is this a number type?\n // Alternatively, is this an rdf:Literal type where all of\n // the values match as numbers?\n\n if (\n (column.checkedAnyValues && column.possiblyNumber) ||\n range.uri in XSD_NUMBER_TYPES\n ) {\n return renderNumberSelector(rows, columns, column)\n }\n\n // rdf:Literal? Assume a string at this point\n\n if (range.uri === RDFS_LITERAL) {\n return renderLiteralSelector(rows, columns, column)\n }\n\n // Is this an enumeration type?\n\n // Also ToDo: @@@ Handle membership of classes whcih are disjointUnions\n\n const choices = kb.each(range, UI.ns.owl('oneOf'))\n if (choices.length > 0) {\n return renderEnumSelector(rows, columns, column, choices.elements)\n }\n }\n return fallbackRenderTableSelector(rows, columns, column)\n }\n\n // Generate the search selectors for the table columns.\n\n function renderTableSelectors (rows, columns) {\n const tr = doc.createElement('tr')\n tr.className = 'selectors'\n\n // Empty link column\n\n tr.appendChild(doc.createElement('td'))\n\n // Generate selectors.\n\n for (let i = 0; i < columns.length; ++i) {\n const td = doc.createElement('td')\n\n const selector = renderTableSelector(rows, columns, columns[i])\n\n if (selector) {\n td.appendChild(selector)\n }\n /*\n // Useful debug: display URI of predicate in column header\n if (columns[i].predicate.uri) {\n td.appendChild(document.createTextNode(columns[i].predicate.uri))\n }\n */\n tr.appendChild(td)\n }\n\n return tr\n }\n\n function linkTo (uri, linkText, hints) {\n hints = hints || {}\n const result = doc.createElement('a')\n const linkFunction = hints.linkFunction\n result.setAttribute('href', uri)\n result.appendChild(doc.createTextNode(linkText))\n if (!linkFunction) {\n result.addEventListener('click', UI.widgets.openHrefInOutlineMode, true)\n } else {\n result.addEventListener(\n 'click',\n function (e) {\n e.preventDefault()\n e.stopPropagation()\n const target = utils.getTarget(e)\n const uri = target.getAttribute('href')\n if (!uri) debug.log('No href found \\n')\n linkFunction(uri)\n },\n true\n )\n }\n return result\n }\n\n function linkToObject (obj, hints) {\n let match = false\n\n if (obj.uri) {\n match = obj.uri.match(/^mailto:(.*)/)\n }\n\n if (match) {\n return linkTo(obj.uri, match[1], hints)\n } else {\n return linkTo(obj.uri, utils.label(obj), hints)\n }\n }\n\n // Render an image\n\n function renderImage (obj) {\n const result = doc.createElement('img')\n result.setAttribute('src', obj.uri)\n\n // Set the height, so it appears as a thumbnail.\n result.style.height = '40px'\n return result\n }\n\n // Render an individual RDF object to an HTML object displayed\n // in a table cell.\n\n function getHints (column) {\n if (\n options &&\n options.hints &&\n column.variable &&\n options.hints[column.variable.toNT()]\n ) {\n return options.hints[column.variable.toNT()]\n }\n return {}\n }\n\n function renderValue (obj, column) {\n // hint\n const hints = getHints(column)\n const cellFormat = hints.cellFormat\n if (cellFormat) {\n switch (cellFormat) {\n case 'shortDate':\n return doc.createTextNode(UI.widgets.shortDate(obj.value))\n // break\n default:\n // drop through\n }\n } else {\n if (obj.termType === 'Literal') {\n if (obj.datatype) {\n if (XSD_DATE_TYPES[obj.datatype.uri]) {\n return doc.createTextNode(UI.widgets.shortDate(obj.value))\n } else if (XSD_NUMBER_TYPES[obj.datatype.uri]) {\n const span = doc.createElement('span')\n span.textContent = obj.value\n span.setAttribute('style', 'text-align: right')\n return span\n }\n }\n return doc.createTextNode(obj.value)\n } else if (obj.termType === 'NamedNode' && column.isImageColumn()) {\n return renderImage(obj)\n } else if (obj.termType === 'NamedNode' || obj.termType === 'BlankNode') {\n return linkToObject(obj, hints)\n } else if (obj.termType === 'Collection') {\n const span = doc.createElement('span')\n span.appendChild(doc.createTextNode('['))\n obj.elements.forEach(function (x) {\n span.appendChild(renderValue(x, column))\n span.appendChild(doc.createTextNode(', '))\n })\n span.removeChild(span.lastChild)\n span.appendChild(doc.createTextNode(']'))\n return span\n } else {\n return doc.createTextNode(\"unknown termtype '\" + obj.termType + \"'!\")\n }\n }\n }\n\n // Render a row of the HTML table, from the given row structure.\n // Note that unlike other functions, this renders into a provided\n // row (<tr>) element.\n\n function renderTableRowInto (tr, row, columns, _downstream) {\n /* Link column, for linking to this subject. */\n\n const linkTd = doc.createElement('td')\n\n if (row._subject && 'uri' in row._subject) {\n linkTd.appendChild(linkTo(row._subject.uri, '\\u2192'))\n }\n\n tr.appendChild(linkTd)\n\n // Create a <td> for each column (whether the row has data for that\n // column or not).\n\n for (let i = 0; i < columns.length; ++i) {\n const column = columns[i]\n const td = doc.createElement('td')\n let orig\n\n const columnKey = column.getKey()\n\n if (columnKey in row.values) {\n const objects = row.values[columnKey]\n let different = false\n if (row.originalValues && row.originalValues[columnKey]) {\n if (objects.length !== row.originalValues[columnKey].length) {\n different = true\n }\n }\n for (let j = 0; j < objects.length; ++j) {\n const obj = objects[j]\n if (\n row.originalValues &&\n row.originalValues[columnKey] &&\n row.originalValues[columnKey].length > j\n ) {\n orig = row.originalValues[columnKey][j]\n if (obj.toString() !== orig.toString()) {\n different = true\n }\n }\n td.appendChild(renderValue(obj, column))\n\n if (j !== objects.length - 1) {\n td.appendChild(doc.createTextNode(',\\n'))\n }\n if (different) {\n td.style.background = '#efe' // green = new changed\n }\n }\n }\n\n tr.appendChild(td)\n }\n\n // Save a reference to the HTML row in the row object.\n\n row._htmlRow = tr\n\n return tr\n }\n\n // Check if a value is already stored in the list of values for\n // a cell (the query can sometimes find it multiple times)\n\n function valueInList (value, list) {\n let key = null\n\n if (value.termType === 'Literal') {\n key = 'value'\n } else if (value.termType === 'NamedNode') {\n key = 'uri'\n } else {\n return list.indexOf(value) >= 0\n }\n\n // Check the list and compare keys:\n\n let i\n\n for (i = 0; i < list.length; ++i) {\n if (list[i].termType === value.termType && list[i][key] === value[key]) {\n return true\n }\n }\n\n // Not found?\n\n return false\n }\n\n // Update a row, add new values, and regenerate the HTML element\n // containing the values.\n\n function updateRow (row, columns, values) {\n let key\n let needUpdate = false\n\n for (key in values) {\n const value = values[key]\n\n // If this key is not already in the row, create a new entry\n // for it:\n\n if (!(key in row.values)) {\n row.values[key] = []\n }\n\n // Possibly add this new value to the list, but don't\n // add it if we have already added it:\n\n if (!valueInList(value, row.values[key])) {\n row.values[key].push(value)\n needUpdate = true\n }\n }\n\n // Regenerate the HTML row?\n\n if (needUpdate) {\n clearElement(row._htmlRow)\n renderTableRowInto(row._htmlRow, row, columns)\n }\n applyColumnFiltersToRow(row, columns) // Hide immediately if nec\n }\n\n // Get a unique ID for the given subject. This is normally the\n // URI; if the subject has no URI, a unique ID is assigned.\n\n function getSubjectId (subject) {\n if ('uri' in subject) {\n return subject.uri\n } else if ('_subject_id' in subject) {\n return subject._subject_id\n } else {\n const result = '' + subjectIdCounter\n subject._subject_id = result\n ++subjectIdCounter\n return result\n }\n }\n\n // Run a query and populate the table.\n // Populates also an array of logical rows. This will be empty when the function\n // first returns (as the query is performed in the background)\n\n function runQuery (query, rows, columns, table) {\n query.running = true\n const startTime = Date.now()\n\n let progressMessage = doc.createElement('tr')\n table.appendChild(progressMessage)\n progressMessage.textContent = 'Loading ...'\n\n for (let i = 0; i < rows.length; i++) {\n rows[i].original = true\n if (!rows[i].originalValues) {\n // remember first set\n rows[i].originalValues = rows[i].values\n }\n rows[i].values = {}\n // oldStyle = rows[i]._htmlRow.getAttribute('style') || ''\n // rows[i]._htmlRow.style.background = '#ffe'; //setAttribute('style', ' background-color: #ffe;')// yellow\n }\n\n const onResult = function (values) {\n if (!query.running) {\n return\n }\n\n progressMessage.textContent += '.' // give a progress bar\n\n let row = null\n let rowKey = null\n let rowKeyId\n\n // If the query has a row key, use it to look up the row.\n\n if (keyVariable in values) {\n rowKey = values[keyVariable]\n rowKeyId = getSubjectId(rowKey)\n\n // Do we have a row for this already?\n // If so, reuse it; otherwise, we must create a new row.\n\n if (rowKeyId in rowsLookup) {\n row = rowsLookup[rowKeyId]\n }\n }\n\n // Create a new row?\n\n if (!row) {\n const tr = doc.createElement('tr')\n table.appendChild(tr)\n\n row = {\n _htmlRow: tr,\n _subject: rowKey,\n values: {}\n }\n rows.push(row)\n\n if (rowKey) {\n rowsLookup[rowKeyId] = row\n }\n }\n\n // Add the new values to this row.\n delete row.original // This is included in the new data\n updateRow(row, columns, values)\n }\n\n const onDone = function () {\n if (\n progressMessage &&\n progressMessage.parentNode &&\n progressMessage.parentNode.removeChild\n ) {\n progressMessage.parentNode.removeChild(progressMessage)\n progressMessage = null\n }\n\n const elapsedTimeMS = Date.now() - startTime\n debug.log(\n 'Query done: ' + rows.length + ' rows, ' + elapsedTimeMS + 'ms'\n )\n // Delete rows which were from old values not new\n for (let i = rows.length - 1; i >= 0; i--) {\n // backwards\n if (rows[i].original) {\n debug.log(' deleting row ' + rows[i]._subject)\n const tr = rows[i]._htmlRow\n tr.parentNode.removeChild(tr)\n delete rowsLookup[getSubjectId(rows[i]._subject)]\n rows.splice(i, 1)\n }\n }\n\n if (options.sortBy) { // @@ for each column check needs sorting\n const column = getColumnForVariable(columns, options.sortBy)\n literalSort(rows, column, options.sortReverse)\n }\n\n if (options.onDone) options.onDone(resultDiv) // return div makes testing easier\n }\n kb.query(query, onResult, undefined, onDone)\n }\n\n // Given the formula object which is the query pattern,\n // deduce from where the variable occurs constraints on\n // what values it can take.\n\n function inferColumnsFromFormula (columns, formula) {\n UI.log.debug('>> processing formula')\n\n for (let i = 0; i < formula.statements.length; ++i) {\n const statement = formula.statements[i]\n // UI.log.debug(\"processing statement \" + i)\n\n // Does it match this?:\n // <something> <predicate> ?var\n // If so, we can use the predicate as the predicate for the\n // column used for the specified variable.\n\n if (\n statement.predicate.termType === 'NamedNode' &&\n statement.object.termType === 'Variable'\n ) {\n const variable = statement.object.toString()\n if (variable in columns) {\n const column = columns[variable]\n column.setPredicate(statement.predicate, false, statement.subject)\n }\n }\n if (\n statement.predicate.termType === 'NamedNode' &&\n statement.subject.termType === 'Variable'\n ) {\n const variable = statement.subject.toString()\n if (variable in columns) {\n const column = columns[variable]\n column.setPredicate(statement.predicate, true, statement.object)\n }\n }\n }\n\n // Apply to OPTIONAL formulas:\n\n for (let i = 0; i < formula.optional.length; ++i) {\n UI.log.debug('recurse to optional subformula ' + i)\n inferColumnsFromFormula(columns, formula.optional[i])\n }\n\n UI.log.debug('<< finished processing formula')\n }\n\n // Generate a list of column structures and infer details about the\n // predicates based on the contents of the query\n\n function inferColumns (query) {\n // Generate the columns list:\n\n const result = []\n const columns = {}\n\n for (let i = 0; i < query.vars.length; ++i) {\n const column = new Column()\n const queryVar = query.vars[i]\n UI.log.debug('column ' + i + ' : ' + queryVar)\n\n column.setVariable(queryVar)\n columns[queryVar] = column\n result.push(column)\n }\n\n inferColumnsFromFormula(columns, query.pat)\n\n return result\n }\n\n // Generate a table from a query.\n\n function renderTableForQuery (query, type) {\n // infer columns from query, to allow generic queries\n let columns\n if (!givenQuery) {\n columns = type.getColumns()\n } else {\n columns = inferColumns(query)\n }\n\n // Start with an empty list of rows; this will be populated\n // by the query.\n\n const rows = []\n\n // Create table element and header.\n\n const table = doc.createElement('table')\n\n table.appendChild(renderTableHeader(columns, type))\n table.appendChild(renderTableSelectors(rows, columns))\n\n // Run query. Note that this is perform asynchronously; the\n // query runs in the background and this call does not block.\n\n table.logicalRows = rows // Save for refresh\n table.columns = columns\n table.query = query\n\n runQuery(query, rows, columns, table)\n\n return table\n }\n\n // Find the most common type of row\n\n function getMostCommonType (types) {\n let bestCount = -1\n let best = null\n\n let typeUri\n for (typeUri in types) {\n const type = types[typeUri]\n\n if (type.useCount > bestCount) {\n best = type\n bestCount = type.useCount\n }\n }\n\n return best\n }\n\n // Filter list of columns to only those columns used in the\n // specified rows.\n /*\n function filterColumns (columns, rows) {\n var filteredColumns = {}\n\n // Copy columns from \"columns\" -> \"filteredColumns\", but only\n // those columns that are used in the list of rows specified.\n\n for (let columnUri in columns) {\n for (let i = 0; i < rows.length; ++i) {\n if (columnUri in rows[i]) {\n filteredColumns[columnUri] = columns[columnUri]\n break\n }\n }\n }\n return filteredColumns\n }\n */\n}\n// ///////////////////////////////////////////////////////////////////\n\n// ENDS\n"],"mappings":"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","ignoreList":[]}
|
package/lib/tabs.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tabs.d.ts","sourceRoot":"","sources":["../src/tabs.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAA;AAIlC;;GAEG;AACH,cAAM,gBAAiB,SAAQ,WAAW;IACxC,UAAU,CAAC,EAAE,OAAO,CAAA;CACrB;AAED,KAAK,gBAAgB,GAAG;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,GAAG,CAAC,EAAE,YAAY,CAAC;IACnB,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;IACzB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACjC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;IACpC,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,KAAK,IAAI,CAAC;IACjE,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,iBAAiB,EAAE,OAAO,EAAE,SAAS,KAAK,IAAI,CAAC;IACpE,iBAAiB,CAAC,EAAE,CAAC,QAAQ,EAAE,gBAAgB,EAAE,OAAO,EAAE,SAAS,KAAK,IAAI,CAAC;IAC7E,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,OAAO,CAAC,EAAE,SAAS,CAAC;CACrB,
|
|
1
|
+
{"version":3,"file":"tabs.d.ts","sourceRoot":"","sources":["../src/tabs.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAA;AAIlC;;GAEG;AACH,cAAM,gBAAiB,SAAQ,WAAW;IACxC,UAAU,CAAC,EAAE,OAAO,CAAA;CACrB;AAED,KAAK,gBAAgB,GAAG;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,GAAG,CAAC,EAAE,YAAY,CAAC;IACnB,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;IACzB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACjC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;IACpC,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,KAAK,IAAI,CAAC;IACjE,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,iBAAiB,EAAE,OAAO,EAAE,SAAS,KAAK,IAAI,CAAC;IACpE,iBAAiB,CAAC,EAAE,CAAC,QAAQ,EAAE,gBAAgB,EAAE,OAAO,EAAE,SAAS,KAAK,IAAI,CAAC;IAC7E,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,OAAO,CAAC,EAAE,SAAS,CAAC;CACrB,CAAA;AAED,qBAAa,gBAAiB,SAAQ,WAAW;IAC/C,aAAa,CAAC,EAAE,WAAW,CAAA;IAC3B,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;IACpB,YAAY,CAAC,EAAE,WAAW,CAAA;CAC3B;AAyID,wBAAgB,SAAS,CAAE,OAAO,EAAE,gBAAgB,oBAmOnD"}
|
package/lib/tabs.js
CHANGED
|
@@ -19,8 +19,7 @@ var _widgets = require("./widgets");
|
|
|
19
19
|
var _utils = require("./utils");
|
|
20
20
|
var style = _interopRequireWildcard(require("./style"));
|
|
21
21
|
var _solidLogic = require("solid-logic");
|
|
22
|
-
function
|
|
23
|
-
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; }
|
|
22
|
+
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
|
|
24
23
|
function _callSuper(t, o, e) { return o = (0, _getPrototypeOf2["default"])(o), (0, _possibleConstructorReturn2["default"])(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], (0, _getPrototypeOf2["default"])(t).constructor) : o.apply(t, e)); }
|
|
25
24
|
function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
|
|
26
25
|
/**
|