solid-ui
Version:
UI library for writing Solid read-write-web applications
164 lines (133 loc) • 5.93 kB
JavaScript
;
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