UNPKG

solid-panes

Version:

Solid-compatible Panes: applets and views for the mashlib and databrowser

184 lines (182 loc) 7.97 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = void 0; var _solidUi = require("solid-ui"); var _rdflib = require("rdflib"); /* Internal Pane ** ** This outline pane contains the properties which are ** internal to the user's interaction with the web, and are not normally displayed */ /* global alert confirm */ var pane = { icon: _solidUi.icons.originalIconBase + 'tango/22-emblem-system.png', name: 'internal', label: function label() { return 'under the hood'; // There is often a URI even of no statements }, render: function render(subject, context) { var dom = context.dom; var store = context.session.store; var canonizedSubject = store.canon(subject); var types = store.findTypeURIs(canonizedSubject); function filter(pred) { if (types['http://www.w3.org/2007/ont/link#ProtocolEvent']) return true; // display everything for them var view = context.session.paneRegistry.byName('internal'); return view && view.predicates && !!(typeof view.predicates[pred.uri] !== 'undefined'); } var div = dom.createElement('div'); div.setAttribute('class', 'internalPane'); div.setAttribute('style', 'background-color: #ddddff; padding: 0.5em; border-radius: 1em;'); function deleteRecursive(kb, folder) { var fetcher = kb.fetcher; if (!fetcher) { console.error('No fetcher available'); return; } return new Promise(function (resolve, reject) { fetcher.load(folder).then(function () { var promises = kb.each(folder, _solidUi.ns.ldp('contains')).map(function (file) { if (kb.holds(file, _solidUi.ns.rdf('type'), _solidUi.ns.ldp('BasicContainer'))) { return deleteRecursive(kb, file); } else { console.log('deleteRecursive leaf file: ' + file); return fetcher.webOperation('DELETE', file.uri); } }); Promise.all(promises).then(function () { console.log('deleteRecursive empty folder: ' + folder); fetcher.webOperation('DELETE', folder.uri).then(function () { console.log('Deleted Ok: ' + folder); resolve(undefined); })["catch"](function (err) { var str = 'Unable to delete ' + folder + ': ' + err; console.log(str); reject(new Error(str)); }); resolve(undefined); }, function (err) { alert(err); reject(err); }); }); }); } var isDocument = subject.uri && !subject.uri.includes('#'); if (isDocument) { var controls = div.appendChild(dom.createElement('table')); controls.style.width = '100%'; controls.style.margin = '1em'; var controlRow = controls.appendChild(dom.createElement('tr')); var deleteCell = controlRow.appendChild(dom.createElement('td')); var isFolder = subject.uri && subject.uri.endsWith('/') || store.holds(subject, _solidUi.ns.rdf('type'), _solidUi.ns.ldp('Container')); var noun = isFolder ? 'folder' : 'file'; if (!isProtectedUri(subject)) { console.log(subject); var deleteButton = _solidUi.widgets.deleteButtonWithCheck(dom, deleteCell, noun, function () { if (!confirm("Are you sure you want to delete ".concat(subject, "? This cannot be undone."))) { return; } // @@ TODO Remove casing of store.fetcher if (!store.fetcher) { throw new Error('Store has no fetcher'); } var promise = isFolder ? deleteRecursive(store, subject) || Promise.resolve() : store.fetcher.webOperation('DELETE', subject.uri) || Promise.resolve(); promise.then(function () { var str = 'Deleted: ' + subject; console.log(str); })["catch"](function (err) { var str = 'Unable to delete ' + subject + ': ' + err; console.log(str); alert(str); }); }); deleteButton.style = 'height: 2em;'; deleteButton["class"] = ''; // Remove hover hide deleteCell.appendChild(deleteButton); } var refreshCell = controlRow.appendChild(dom.createElement('td')); var refreshButton = _solidUi.widgets.button(dom, _solidUi.icons.iconBase + 'noun_479395.svg', 'refresh'); refreshCell.appendChild(refreshButton); refreshButton.addEventListener('click', function () { if (!store.fetcher) { throw new Error('Store has no fetcher'); } store.fetcher.refresh(subject, function (ok, errm) { var str; if (ok) { str = 'Refreshed OK: ' + subject; } else { str = 'Error refreshing: ' + subject + ': ' + errm; } console.log(str); alert(str); }); }); } var plist = store.statementsMatching(subject); var docURI = ''; if (!store.fetcher) { throw new Error('Store has no fetcher'); } if (subject.uri) { plist.push((0, _rdflib.st)(subject, (0, _rdflib.sym)('http://www.w3.org/2007/ont/link#uri'), subject.uri, // @@ TODO Remove casting store.fetcher.appNode)); if (subject.uri.indexOf('#') >= 0) { docURI = subject.uri.split('#')[0]; plist.push((0, _rdflib.st)(subject, (0, _rdflib.sym)('http://www.w3.org/2007/ont/link#documentURI'), subject.uri.split('#')[0], // @@ TODO Remove casting store.fetcher.appNode)); plist.push((0, _rdflib.st)(subject, (0, _rdflib.sym)('http://www.w3.org/2007/ont/link#document'), (0, _rdflib.sym)(subject.uri.split('#')[0]), store.fetcher.appNode)); } else { docURI = subject.uri; } } if (docURI) { if (!store.updater) { throw new Error('Store has no updater'); } var ed = store.updater.editable(docURI); if (ed) { plist.push((0, _rdflib.st)(subject, (0, _rdflib.sym)('http://www.w3.org/ns/rww#editable'), (0, _rdflib.literal)(ed.toString()), store.fetcher.appNode)); } } // @@ TODO get a proper type var outliner = context.getOutliner(dom); outliner.appendPropertyTRs(div, plist, false, filter); plist = store.statementsMatching(undefined, undefined, subject); outliner.appendPropertyTRs(div, plist, true, filter); return div; }, predicates: { // Predicates used for inner workings. Under the hood 'http://www.w3.org/2007/ont/link#request': 1, 'http://www.w3.org/2007/ont/link#requestedBy': 1, 'http://www.w3.org/2007/ont/link#source': 1, 'http://www.w3.org/2007/ont/link#session': 2, // 2= test neg but display 'http://www.w3.org/2007/ont/link#uri': 1, 'http://www.w3.org/2007/ont/link#documentURI': 1, 'http://www.w3.org/2007/ont/link#document': 1, 'http://www.w3.org/2007/ont/link#all': 1, // From userinput.js 'http://www.w3.org/2007/ont/link#Document': 1, 'http://www.w3.org/ns/rww#editable': 1, 'http://www.w3.org/2000/01/rdf-schema#seeAlso': 1, 'http://www.w3.org/2002/07/owl#': 1 }, classes: { // Things which are inherently already undercover 'http://www.w3.org/2007/ont/link#ProtocolEvent': 1 } }; function isProtectedUri(subject) { // TODO: Could make the code below smarter by removing some of the redundancy by creating a recursive function, but did not bother now var siteUri = subject.site().uri; return subject.uri === siteUri || subject.uri === siteUri + 'profile/' || subject.uri === siteUri + 'profile/card' || subject.uri === siteUri + 'settings/' || subject.uri === siteUri + 'settings/prefs.ttl' || subject.uri === siteUri + 'settings/privateTypeIndex.ttl' || subject.uri === siteUri + 'settings/publicTypeIndex.ttl' || subject.uri === siteUri + 'settings/serverSide.ttl'; } var _default = exports["default"] = pane; // ends //# sourceMappingURL=internalPane.js.map