11/** UI To Delete Folder and content
22*
33*/
4-
5- var UI = {
4+ /* global confirm */
5+ const UI = {
66 icons : require ( './iconBase' ) ,
77 log : require ( './log' ) ,
88 ns : require ( './ns' ) ,
@@ -13,21 +13,72 @@ var UI = {
1313 utils : require ( './utils' )
1414}
1515
16- /** Delete Folder and contents
16+ const ns = UI . ns
17+
18+ function deleteRecursive ( kb , folder ) {
19+ return new Promise ( function ( resolve , reject ) {
20+ kb . fetcher . load ( folder ) . then ( function ( ) {
21+ let promises = kb . each ( folder , ns . ldp ( 'contains' ) ) . map ( file => {
22+ if ( kb . holds ( file , ns . rdf ( 'type' ) , ns . ldp ( 'BasicContainer' ) ) ) {
23+ return deleteRecursive ( kb , file )
24+ } else {
25+ console . log ( 'deleteRecirsive file: ' + file )
26+ if ( ! confirm ( ' Really DELETE File ' + file ) ) {
27+ throw new Error ( 'User aborted delete file' )
28+ }
29+ return kb . fetcher . webOperation ( 'DELETE' , file . uri )
30+ }
31+ } )
32+ console . log ( 'deleteRecirsive folder: ' + folder )
33+ if ( ! confirm ( ' Really DELETE folder ' + folder ) ) {
34+ throw new Error ( 'User aborted delete file' )
35+ }
36+ promises . push ( kb . fetcher . webOperation ( 'DELETE' , folder . uri ) )
37+ Promise . all ( promises ) . then ( res => { resolve ( ) } )
38+ } )
39+ } )
40+ }
41+
42+ /** Iterate over files depth first
1743 *
18- * @param {NamedNode } folder - The LDP container to be deleted
19- * @param {DOMElement } containingElement - Where to put the user interface
20- * @param {IndexedForumula } store - Quadstore (optional)
21- * @param {Document } dom - The browser 'document' gloabl or equivalent (or iuse global)
22- * @returns {DOMElement } - The control which has eben inserted in the
44+ * @param folder - The folder whose contents we iterate over
45+ * @param store - The quadstore
46+ * @param action - returns a promise. All the promises must be resolved
2347 */
24- /* global document */
25- module . exports . deleteFolder ( folder , containingElement , store , dom ) {
48+ function forAllFiles ( folder , kb , action ) {
49+ return new Promise ( function ( resolve , reject ) {
50+ kb . fetcher . load ( folder ) . then ( function ( ) {
51+ let promises = kb . each ( folder , ns . ldp ( 'contains' ) ) . map ( file => {
52+ if ( kb . holds ( file , ns . rdf ( 'type' ) , ns . ldp ( 'BasicContainer' ) ) ) {
53+ return forAllFiles ( file , kb , action )
54+ } else {
55+ return action ( file )
56+ }
57+ } )
58+ promises . push ( action ( folder ) )
59+ Promise . all ( promises ) . then ( res => { resolve ( ) } )
60+ } )
61+ } )
62+ }
63+
64+ module . exports . deleteRecursive = deleteRecursive
65+
66+ /** Delete Folder and contents
67+ *
68+ * @param {NamedNode } folder - The LDP container to be deleted
69+ * @param {DOMElement } containingElement - Where to put the user interface
70+ * @param {IndexedForumula } store - Quadstore (optional)
71+ * @param {Document } dom - The browser 'document' gloabl or equivalent (or iuse global)
72+ * @returns {DOMElement } - The control which has eben inserted in the
73+ */
74+ /* global document */
75+ module . exports . deleteFolder = function ( folder , store , dom ) {
2676 store = store || UI . store
27- if ( typeof docuent !== = 'undefined' ) {
77+ if ( typeof docuent !== 'undefined' ) {
2878 dom = dom || document
2979 }
30- const table = dom . createElement ( 'table' )
80+ const div = dom . createElement ( 'div' )
81+ const table = div . appendChild ( dom . createElement ( 'table' ) )
3182 const mainTR = table . appendChild ( dom . createElement ( 'tr' ) )
3283 const mainTD = mainTR . appendChild ( dom . createElement ( 'td' ) )
3384
@@ -37,7 +88,29 @@ module.exports.deleteFolder(folder, containingElement, store, dom) {
3788 const buttonsTD1 = buttonsTR . appendChild ( dom . createElement ( 'td' ) )
3889 const buttonsTD2 = buttonsTR . appendChild ( dom . createElement ( 'td' ) )
3990 const buttonsTD3 = buttonsTR . appendChild ( dom . createElement ( 'td' ) )
40-
4191
42- return table
92+ let cancel = buttonsTD1 . appendChild ( UI . widgets . cancelButton )
93+ cancel . addEventListener ( 'click' , function ( e ) {
94+ div . parentNode . removeChild ( div )
95+ } , false )
96+
97+ let doit = buttonsTD3 . appendChild ( UI . widgets . button ( UI . icons . iconBase + 'noun_925021.svg' , 'Yes, delete' ) )
98+ doit . addEventListener ( 'click' , function ( e ) {
99+ deleteThem ( folder ) . then ( ( ) => {
100+ console . log ( 'All deleted.' )
101+ } )
102+ } , false )
103+
104+ function deleteThem ( folder ) {
105+ return forAllFiles ( folder , ( file ) => store . fetcher . webOperation ( 'DELETE' , file . uri ) )
106+ }
107+ var count = 0
108+ forAllFiles ( folder , store , ( ) => { count += 1 } ) // Count files
109+ . then ( ( ) => {
110+ let msg = ' Files to delete: ' + count
111+ console . log ( msg )
112+ p . textContent += msg
113+ } )
114+
115+ return div
43116}
0 commit comments