UNPKG

solid-ui

Version:

UI library for writing Solid read-write-web applications

164 lines (133 loc) • 5.93 kB
"use strict"; var _typeof = require("@babel/runtime/helpers/typeof"); Object.defineProperty(exports, "__esModule", { value: true }); exports.deleteRecursive = deleteRecursive; exports.deleteFolder = deleteFolder; var _index = require("./authn/index"); var debug = _interopRequireWildcard(require("./debug")); var _iconBase = require("./iconBase"); var _logic = require("./logic"); var ns = _interopRequireWildcard(require("./ns")); var rdf = _interopRequireWildcard(require("rdflib")); var style = _interopRequireWildcard(require("./style")); var utils = _interopRequireWildcard(require("./utils")); var widgets = _interopRequireWildcard(require("./widgets")); function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; } /** UI To Delete Folder and content * */ /* global confirm */ // pull in first avoid cross-refs var UI = { authn: _index.authn, icons: _iconBase.icons, ns: ns, rdf: rdf, store: _logic.store, style: style, widgets: widgets }; function deleteRecursive(kb, folder) { // eslint-disable-next-line promise/param-names return new Promise(function (resolve, _reject) { kb.fetcher.load(folder).then(function () { var promises = kb.each(folder, ns.ldp('contains')).map(function (file) { if (kb.holds(file, ns.rdf('type'), ns.ldp('BasicContainer'))) { return deleteRecursive(kb, file); } else { debug.log('deleteRecirsive file: ' + file); if (!confirm(' Really DELETE File ' + file)) { throw new Error('User aborted delete file'); } return kb.fetcher.webOperation('DELETE', file.uri); } }); debug.log('deleteRecirsive folder: ' + folder); if (!confirm(' Really DELETE folder ' + folder)) { throw new Error('User aborted delete file'); } promises.push(kb.fetcher.webOperation('DELETE', folder.uri)); Promise.all(promises).then(function (_res) { resolve(); }); }); }); } /** Iterate over files depth first * * @param folder - The folder whose contents we iterate over * @param store - The quadstore * @param action - returns a promise. All the promises must be resolved */ function forAllFiles(folder, kb, action) { // eslint-disable-next-line promise/param-names return new Promise(function (resolve, _reject) { kb.fetcher.load(folder).then(function () { var promises = kb.each(folder, ns.ldp('contains')).map(function (file) { if (kb.holds(file, ns.rdf('type'), ns.ldp('BasicContainer'))) { return forAllFiles(file, kb, action); } else { return action(file); } }); promises.push(action(folder)); Promise.all(promises).then(function (_res) { resolve(); }); }); }); } /** Delete Folder and contents * * @param {NamedNode} folder - The LDP container to be deleted * @param {DOMElement} containingElement - Where to put the user interface * @param {IndexedForumula} store - Quadstore (optional) * @param {Document} dom - The browser 'document' gloabl or equivalent (or iuse global) * @returns {DOMElement} - The control which has eben inserted in the */ /* global document */ function deleteFolder(folder, store, dom) { store = store || UI.store; if (typeof docuent !== 'undefined') { dom = dom || document; } var div = dom.createElement('div'); var table = div.appendChild(dom.createElement('table')); var mainTR = table.appendChild(dom.createElement('tr')); mainTR.appendChild(dom.createElement('td')); // mainTD var p = mainTR.appendChild(dom.createElement('p')); p.textContent = "Are you sure you want to delete the folder ".concat(folder, "? This cannot be undone."); var buttonsTR = table.appendChild(dom.createElement('tr')); var buttonsTD1 = buttonsTR.appendChild(dom.createElement('td')); buttonsTR.appendChild(dom.createElement('td')); // buttonsTD2 var buttonsTD3 = buttonsTR.appendChild(dom.createElement('td')); var cancel = buttonsTD1.appendChild(UI.widgets.cancelButton(dom)); cancel.addEventListener('click', function (_event) { div.parentNode.removeChild(div); }, false); var doit = buttonsTD3.appendChild(UI.widgets.button(dom, UI.icons.iconBase + 'noun_925021.svg', 'Yes, delete')); doit.addEventListener('click', function (_event) { deleteThem(folder).then(function () { debug.log('All deleted.'); }); }, false); function deleteThem(folder) { return forAllFiles(folder, function (file) { return store.fetcher.webOperation('DELETE', file.uri); }); } var count = 0; forAllFiles(folder, store, function () { count += 1; }) // Count files .then(function () { var msg = ' Files to delete: ' + count; debug.log(msg); p.textContent += msg; }); return div; } //# sourceMappingURL=folders.js.map