forked from SolidOS/solid-ui
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathfolders.js
More file actions
116 lines (106 loc) · 3.85 KB
/
Copy pathfolders.js
File metadata and controls
116 lines (106 loc) · 3.85 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
/** UI To Delete Folder and content
*
*/
/* global confirm */
const UI = {
icons: require('./iconBase'),
log: require('./log'),
ns: require('./ns'),
pad: require('./'),
rdf: require('rdflib'),
store: require('./store'),
widgets: require('./widgets'),
utils: require('./utils')
}
const ns = UI.ns
function deleteRecursive (kb, folder) {
return new Promise(function (resolve, reject) {
kb.fetcher.load(folder).then(function () {
let promises = kb.each(folder, ns.ldp('contains')).map(file => {
if (kb.holds(file, ns.rdf('type'), ns.ldp('BasicContainer'))) {
return deleteRecursive(kb, file)
} else {
console.log('deleteRecirsive file: ' + file)
if (!confirm(' Really DELETE File ' + file)) {
throw new Error('User aborted delete file')
}
return kb.fetcher.webOperation('DELETE', file.uri)
}
})
console.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(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) {
return new Promise(function (resolve, reject) {
kb.fetcher.load(folder).then(function () {
let promises = kb.each(folder, ns.ldp('contains')).map(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(res => { resolve() })
})
})
}
module.exports.deleteRecursive = deleteRecursive
/** 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 */
module.exports.deleteFolder = function (folder, store, dom) {
store = store || UI.store
if (typeof docuent !== 'undefined') {
dom = dom || document
}
const div = dom.createElement('div')
const table = div.appendChild(dom.createElement('table'))
const mainTR = table.appendChild(dom.createElement('tr'))
mainTR.appendChild(dom.createElement('td')) // mainTD
const p = mainTR.appendChild(dom.createElement('p'))
p.textContent = `Are you sure you want to delete the folder ${folder}? This cannot be undone.`
const buttonsTR = table.appendChild(dom.createElement('tr'))
const buttonsTD1 = buttonsTR.appendChild(dom.createElement('td'))
buttonsTR.appendChild(dom.createElement('td')) // buttonsTD2
const buttonsTD3 = buttonsTR.appendChild(dom.createElement('td'))
let cancel = buttonsTD1.appendChild(UI.widgets.cancelButton(dom))
cancel.addEventListener('click', function (e) {
div.parentNode.removeChild(div)
}, false)
let doit = buttonsTD3.appendChild(UI.widgets.button(UI.icons.iconBase + 'noun_925021.svg', 'Yes, delete'))
doit.addEventListener('click', function (e) {
deleteThem(folder).then(() => {
console.log('All deleted.')
})
}, false)
function deleteThem (folder) {
return forAllFiles(folder, (file) => store.fetcher.webOperation('DELETE', file.uri))
}
var count = 0
forAllFiles(folder, store, () => { count += 1 }) // Count files
.then(() => {
let msg = ' Files to delete: ' + count
console.log(msg)
p.textContent += msg
})
return div
}