/* global $rdf UI debug */ if (!window) { window.alert('Missing UI code - load mashlib first.') } window.$rdf = window.UI.rdf document.addEventListener('DOMContentLoaded', async function () { /// /////////////////////////////////////////// var kb = UI.store kb.updater.editable = // uri => true // Force modifyable UX // @@@ function (uri) { console.log(' @@ fudging editable for ' + uri) return 'SPARQL' } var dom = document var uri = window.location.href var base = (window.document.title = uri.slice(0, uri.lastIndexOf('/') + 1)) // var testDocURI = base + 'test.ttl' // imaginary doc - just use its URL // const testDocURI = 'https://timbl.com/timbl/Public/Test/Forms/exampleData.ttl' const testDocURI = 'https://solidos.solidcommunity.net/public/2021/solidUiFormTestData/dummyFormTestFile.ttl' var testDoc = $rdf.sym(testDocURI) const ex = $rdf.Namespace(testDocURI + "#") const defaultProlog = ` @prefix foaf: . @prefix sched: . @prefix cal: . @prefix dc: . @prefix rdfs: . @prefix ui: . @prefix trip: . @prefix vcard: . @prefix xsd: . @prefix ex: <#>. # Things in the examples @prefix : <#>. ` // var div = dom.getElementById('UITestArea') const getOptions = { credentials: 'omit', withCredentials: false } function output (row) { return row.children[1] } function renderForm (form, subject, container) { async function callback() { } const doc = subject.doc() var ele = UI.widgets.appendForm(dom, container, {}, subject, form, doc, callback) return ele } /* For loading eg ontologies from w3.org */ function addStoHTTP (str) { if (str.startsWith('http:')) { return 'https:' + str.slice(5) } return str } async function doRow (prolog, row) { async function loadTextIntoCell (cell) { const source = cell.getAttribute('source') if (!source) return const response = await kb.fetcher.webOperation('GET', addStoHTTP(source), getOptions) if (!response.ok) { // if HTTP-status is 200-299 const msg = "HTTP-Error: " + response.status cell.textContent = msg cell.style.backgroundColor = '#fee' alert(msg); return } const text = response.responseText; const pre = dom.createElement('pre') cell.appendChild(pre) pre.textContent = text } const cellForClass = [] kb.removeMany(null, null, null, testDoc) // Remove previous test data for (var cell of row.children) { await loadTextIntoCell(cell) if (cell.getAttribute('class')) { for (const c of cell.getAttribute('class').split(' ')) { cellForClass[c] = cell console.log(' cellForClass: ' + c) } } } const inputCell = cellForClass['input'] const targetCell = cellForClass['target'] const outputCell = cellForClass['output'] const inputText = inputCell.firstElementChild.textContent if (inputCell.getAttribute('source')) { form = $rdf.sym(inputCell.getAttribute('source')) } else { form = ex('form') } if (targetCell.getAttribute('source')) { subject = $rdf.sym(targetCell.getAttribute('source')) } else { subject = ex('this') } try { $rdf.parse(prolog + inputText, kb, form.doc().uri, 'text/turtle') // str, kb, base, contentType } catch (e) { outputCell.textContent = e console.log('>>>>>>>' + prolog + inputText + '<<<<<<\n') return } if (true) { const subjectText = targetCell.firstElementChild.textContent try { $rdf.parse(prolog + subjectText, kb, subject.doc().uri, 'text/turtle') // str, kb, base, contentType } catch (e) { outputCell.textContent = e console.log('>>>>>>>' + prolog + subjectText + '<<<<<<\n') return } } renderForm(form, subject, outputCell) } async function showResults () { var prologEle = dom.getElementById('Prolog') const prolog = defaultProlog + (prologEle ? prologEle.textContent : "") const testRows = dom.getElementsByClassName('form-demo') for (var row of testRows) { await doRow(prolog, row) } if (dom.getElementById('TestData')) { for (var row of dom.getElementById('TestData').children) { await doRow(prolog, row) } } } // showResults try { // await kb.fetcher.load(testDoc) // To fool the form syt } catch (err) { console.warn(err) } await showResults() })