Statistics
| Branch: | Revision:

root / src / pithos / content / operations.js @ 49:2e3dfa51cd67

History | View | Annotate | Download (22.3 kB)

1
// The Pithos File Manager Firefox Extension is funded by GRNET S.A.
2
// (http://www.grnet.gr)
3
//
4
// Copyright (c) 2009, Christos KK Loverdos, Vassilios Karakoidas.
5
// All rights reserved.
6
//
7
// Redistribution and use in source and binary forms, with or without
8
// modification, are permitted provided that the following conditions are
9
// met:
10
//
11
//   - Redistributions of source code must retain the above copyright
12
//     notice, this list of conditions and the following disclaimer.
13
//   - Redistributions in binary form must reproduce the above
14
//     copyright notice, this list of conditions and the following
15
//     disclaimer in the documentation and/or other materials provided
16
//     with the distribution.
17
//   - Neither the name of GRNET S.A. nor the names of its contributors
18
//     may be used to endorse or promote products derived from this
19
//     software without specific prior written permission.
20
//
21
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
24
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
25
// HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
26
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
27
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
28
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
29
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
30
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
31
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32

    
33
//////////////////////////////////// CREATE FOLDER //////////////////////////////////////////////////////////////
34

    
35
function create_folder_event() {
36
        var new_directory = window.prompt("Enter the directory name:", "");
37
        var source_directory = pithos_object.getSourceCurrentDirectory();
38
        if (new_directory == null) {
39
                promptAlert('Directory creation canceled');
40
                return;
41
        } else {
42
                if( create_folder(source_directory, new_directory) ) {
43
                        promptAlert(source_directory + new_directory + ' - created');
44
                        pithos_object.refreshLists();
45
                } else {
46
                        promptAlert(source_directory + new_directory + ' - Directory creation failed');
47
                }
48
        }
49
}
50

    
51
function create_folder(uri, new_directory) {
52
        if ( vfs.isRemoteResource(uri) ) {
53
                var req = connection_obj.rest_request_post(uri, '?new=' + encodeURIComponent(new_directory), '');
54
                return (connection_obj.success(req.status));
55
        } else if ( vfs.isLocalResource(uri) ) {
56
                try {
57
                        netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
58
                        var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
59
                        file.initWithPath(uri);
60
                        file.append(new_directory);
61
                        if( !file.exists() || !file.isDirectory() ) {   
62
                                // if it doesn't exist, create
63
                                   file.create(Components.interfaces.nsIFile.DIRECTORY_TYPE, 0777);
64
                                return true;
65
                        }
66
                } catch(error) {
67
                        return false;
68
                }
69
        }
70
}
71

    
72
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
73

    
74
/////////////////////////////////////////////// COPY ////////////////////////////////////////////////////////////////////
75

    
76
function copy_event() {
77
        var sources = pithos_object.getSelectedResources();
78
        var destination = pithos_object.getDestinationCurrentDirectory();
79
    var copied = 0;
80
        
81
        if (sources.length == 0) {
82
                promptAlert('No Files/Folders are selected');
83
                return;
84
        }
85
        
86
        if ( sources.length > 1 ) {
87
                promptAlert('Copy ' + sources.length + ' items to ' + destination);
88
        } else if (sources.length == 1) {
89
        promptAlert('Copy ' + sources[0] + ' to ' + destination);
90
    }
91
        
92
        for ( i = 0; i < sources.length; i++ ) {
93
        if ( vfs.isDirectory(sources[i]) ) {
94
            promptAlert('Copy of directories is not supported! Operation Canceled.');
95
            return;
96
        }
97
        }
98
        
99
        netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
100
        window.openDialog("dialogs/operation_dialog.xul", "Copy Files", "chrome,resizable,centerscreen,window", "copy", sources, destination, pithos_object);
101
        
102
    pithos_object.refreshLists();
103
}
104

    
105
function copy(source, destination,params) {
106
        var source_metadata = vfs.getResourceMetadata(source);
107

    
108
        // server side
109
        if ( vfs.isRemoteResource(source) && vfs.isRemoteResource(destination) ) {
110
                var destinationFile = destination + source_metadata.name;
111
                var req = connection_obj.rest_request_post(source, '?copy=' + destinationFile, '');
112
        if ( req == null ) {
113
            return false;
114
        }
115
        
116
                return connection_obj.success(req.status);
117
        } else if ( vfs.isLocalResource(source) && vfs.isRemoteResource(destination) ) {
118
                // Upload from local to remote
119
                data = '';
120
        var req = connection_obj.rest_request_put_upload_async(source, destination + source_metadata.name, data, mimes.getByExtension(source_metadata.name),params);
121
                current_request = req;
122
                // Do not return anything as this is an async event
123
        //return connection_obj.success(req.status);
124
        } else if ( vfs.isRemoteResource(source) && vfs.isLocalResource(destination) ) {
125
                // Download from remote to local
126
        if ( vfs.isRemoteResource(source) ) {
127
            var req = connection_obj.rest_request_get_inline_async(source,params,destination);
128
                        current_request = req;
129
                        // Do not return anything as this is an async event                
130
        } else if ( vfs.isLocalResource(source) ) {
131
            return loadBinaryFile(source);
132
        }
133
                
134
        } else if ( vfs.isLocalResource(source) && vfs.isLocalResource(destination) ) {
135
                try {
136
                        netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
137
                        var source_file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
138
                        source_file.initWithPath(source);
139
            
140
                        var destination_file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
141
                        destination_file.initWithPath(destination);
142
            
143
                        source_file.copyTo(destination_file, null);
144
                        
145
                        return true;
146
                } catch (e) {
147
                        return false;
148
                }                
149
        }
150
        
151
        return false;
152
}
153

    
154
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
155

    
156
////////////////////////////////////////////////////////// MOVE ////////////////////////////////////////////////////////////////
157

    
158
function move_event() {
159
        var sources = pithos_object.getSelectedResources();
160
        var destination = pithos_object.getDestinationCurrentDirectory();
161
        
162
        if (sources.length == 0) {
163
                promptAlert('No Files/Folders are selected');
164
                return;
165
        }
166
        
167
        for ( i = 0; i < sources.length; i++ ) {
168
        if ( vfs.isDirectory(sources[i]) ) {
169
            promptAlert('Moving directories is not supported!');
170
            continue;
171
        }
172

    
173
        }
174
        
175
        netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
176
        window.openDialog("dialogs/operation_dialog.xul", "Move Files", "chrome,resizable,centerscreen,window, window", "move", sources, destination,pithos_object);        
177

    
178
    pithos_object.refreshLists();
179
}
180

    
181
function move(source, destination) {
182
        if ( vfs.isRemoteResource(source) && vfs.isRemoteResource(destination)) {
183
                var destinationFile = destination + source_metadata.name;
184
                var req = connection_obj.rest_request_post(source, '?move=' + destinationFile, '');
185

    
186
                return connection_obj.success(req.status);        
187
        } else if ( vfs.isLocalResource(source) && vfs.isLocalResource(destination) ) {
188
        try {
189
            netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
190
            var source_file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
191
            source_file.initWithPath(source);
192

    
193
            var destination_file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
194
            destination_file.initWithPath(destination);
195

    
196
            source_file.moveTo(destination_file, null);
197

    
198
            return true;
199
        } catch (e) {
200
            return false;
201
        }
202
        } else if ( !copy(source, destination) ) {
203
                return false;
204
        }
205
        
206
        return delete_resource(source);
207
}
208

    
209
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
210

    
211
////////////////////////////////////////////////////// DELETE /////////////////////////////////////////////////////////////////////
212

    
213
function delete_all_async(uris) {
214
        netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
215
        window.openDialog("dialogs/operation_dialog.xul", "Delete Files", "chrome,resizable,centerscreen,window, modal", "delete_all", uris);
216
        pithos_object.refreshLists();    
217
}
218

    
219
function delete_context_menu(uri) {
220
        netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
221
        var prompt = Components.classes["@mozilla.org/embedcomp/prompt-service;1"].getService(Components.interfaces.nsIPromptService);
222
        var result = prompt.confirm(window, "Confirm action", "Delete " + uri + "?");
223
        if ( result ) {
224
                if ( !delete_resource(uri) ) {
225
                        promptAlert('Cannot delete ' + uri);
226
                        return;
227
                }
228
        } else {
229
                promptAlert('Action canceled');
230
                return;
231
        }
232
        pithos_object.refreshLists();
233
}
234

    
235
function delete_event() {
236
        var resources = pithos_object.getSelectedResources();
237
        
238
        if (resources.length == 0) {
239
                promptAlert('No File/Directory is selected');
240
                return;
241
        }
242
        netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
243
        var prompt = Components.classes["@mozilla.org/embedcomp/prompt-service;1"].getService(Components.interfaces.nsIPromptService);
244
        var result = prompt.confirm(window, "Confirm action", "You are going to delete the " + resources.length + " item(s). Proceed?");
245
        
246
        if (result) {
247
                for (i = 0; i < resources.length; i++) {
248
                        var b = delete_resource(resources[i]);
249
                        if (!b) {
250
                                b = prompt.confirm(window, "Failed!", "Deletion of " + resources[i] + " failed. Continue?");
251
                                if (!b) {
252
                                        promptAlert('Action canceled');
253
                                        return;
254
                                }
255
                        }
256
                }
257
        } else {
258
                promptAlert('Action canceled');
259
                return;
260
        }
261
        promptAlert('Removed ' + resources.length + ' items.');
262
        pithos_object.refreshLists();
263
}
264

    
265
function delete_context_menu_trash(uri) {
266
    if(promptBox('Realy delete ' + uri)) {
267
        if ( delete_resource(uri) ) {
268
            promptAlert(uri + ' purged');
269
        }
270
    } else {
271
        promptAlert('Purge canceled');
272
    }
273
        pithos_object.refreshLists();
274
}
275

    
276
function delete_resource(uri) {
277
        if ( vfs.isRemoteResource(uri) ) {
278
                var req = connection_obj.rest_request_delete(uri, '?trash=', '');
279
                return connection_obj.success(req.status);
280
        } else if ( vfs.isLocalResource(uri) ) {
281
                try {
282
                        netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
283
                        var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
284
                        file.initWithPath(uri);
285
                        file.remove(true);
286
            
287
                        return true;
288
                } catch (e) {
289
                        return false;
290
                }
291
        }
292
        
293
        return false;
294
}
295

    
296
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
297

    
298
//////////////////////////////////////////////////////////////// MOVE TO TRASH /////////////////////////////////////////////////////////////////
299

    
300
function movetotrash_context_menu_multiple(uris) {
301
    var result = promptBox("Delete " + uris.length + " item(s)?");
302
    if ( result ) {
303
        for (var i = 0; i < uris.length; i++) {
304
            if ( !movetotrash_resource(uris[i]) ) {
305
                if(!promptBox('Cannot move to trash ' + uris[i]) + '. Continue?') {
306
                    promptAlert('Action canceled');
307
                    break;
308
                }
309
            }
310
        }
311
    } else {
312
        promptAlert('Action canceled');
313
        return;
314
    }
315
    pithos_object.refreshLists();
316
}
317

    
318
function movetotrash_context_menu(uri) {
319
        netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
320
        var prompt = Components.classes["@mozilla.org/embedcomp/prompt-service;1"].getService(Components.interfaces.nsIPromptService);
321
        var result = prompt.confirm(window, "Confirm action", "Delete " + uri + "?");
322
        if ( result ) {
323
                if ( !movetotrash_resource(uri) ) {
324
                        promptAlert('Cannot delete ' + uri);
325
                        return;
326
                }
327
        } else {
328
                promptAlert('Action canceled');
329
                return;
330
        }
331
        pithos_object.refreshLists();
332
}
333

    
334
function movetotrash_resource(uri) {
335
        if ( vfs.isRemoteResource(uri) ) {
336
                var req = connection_obj.rest_request_post(uri, '?trash=', '');
337
                return connection_obj.success(req.status);
338
        } else if ( vfs.isLocalResource(uri) ) {
339
                try {
340
                        netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
341
                        var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
342
                        file.initWithPath(uri);
343
                        file.remove(true);
344
                                                
345
                        return true;
346
                } catch (e) {
347
                        return false;
348
                }
349
        }
350
        
351
        return false;        
352
}
353

    
354
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
355

    
356
//////////////////////////////////////////////////////////// HOME EVENT ////////////////////////////////////////////////////////////////////////////
357

    
358
function home_event() {
359
        pithos_object.reInitLists();
360
}
361

    
362
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
363

    
364
/////////////////////////////////////////////////////////// SHARE ////////////////////////////////////////////////////////////////////////////////////
365

    
366
function share_event(source) {
367
        netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
368

    
369
        // Create a parameter list
370
        var params = { inp: source, out: null };
371
        
372
        window.openDialog("share/addshare.xul", "Share item", "chrome,dialog,resizable,centerscreen",params);
373
    connection_obj.get_shared_data();
374
        pithos_object.refreshLists();
375
}
376

    
377
function share_resource(source, permissions) {
378
        netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
379
        var ret = connection_obj.rest_request_post(source, '?update=', jsonToString(permissions));
380

    
381
        // if status not acceptable, return the status code (false scenario)
382
        if( !connection_obj.success(ret.status) ) {
383
            return (ret.status);
384
        } else {
385
            // remember to refresh the data
386
            return true;
387
        }
388
}
389

    
390
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
391

    
392
////////////////////////////////////////////////////// UNSHARE //////////////////////////////////////////////////////////////////////////////////////
393

    
394
function unshare_event(source) {
395
        // Example of source: http://pithos.grnet.gr/pithos/rest/aaitest@grnet-hq.admin.grnet.gr/files/Documents/
396
        netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
397

    
398
        // Get the metadata of the source
399
        var source_metadata = vfs.getResourceMetadata(source);
400
        var prompt = Components.classes["@mozilla.org/embedcomp/prompt-service;1"].getService(Components.interfaces.nsIPromptService);
401

    
402
        // Get the file or folder name
403
        var itemname = source_metadata.name;
404
        var promptmessage = "Are you sure you want to unshare "+itemname+" from all users and groups?";
405
        var result = prompt.confirm(window, "Confirm action", promptmessage);
406
        
407
        if (result == true) {
408
                if ( unshare_resource(source) ) {
409
            connection_obj.get_shared_data();
410
            pithos_object.refreshLists();
411
        } else {
412
            promptAlert('Unshare failed');
413
        }
414
        } else {
415
                promptAlert('Unshare process canceled');
416
        }
417
}
418

    
419
function unshare_resource(source) {
420
        // trim the trailing slash ...
421
        source = source.replace(/\/$/,'');
422
        var ownFileObj = new Object();
423
        
424
        ownFileObj.readForAll = false;
425
        ownFileObj.permissions = new Array();
426
        
427
        var ownACL = new Object();
428
        
429
        ownACL.modifyACL = true;
430
        ownACL.write = true;
431
        ownACL.read = true;
432
        ownACL.user = connection_obj.username;
433

    
434
        ownFileObj.permissions.push(ownACL);
435

    
436
        var req = connection_obj.rest_request_post(source, '?update=', jsonToString(ownFileObj));
437
        return connection_obj.success(req.status);
438
}
439

    
440
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
441

    
442
////////////////////////////////////////////////////// TAGS //////////////////////////////////////////////////////////////////////////////////////
443

    
444
function modifytags_event(source){
445
        netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
446
        window.openDialog("tags/tags.xul", "Modify tags", "chrome,dialog,modal,resizable",source);
447
}
448

    
449
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
450

    
451
///////////////////////////////////////////////////////////////////// RENAME ///////////////////////////////////////////////////////////////////////////////
452

    
453
function rename_context_menu(uri) {
454
        netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
455
        var prompt = Components.classes["@mozilla.org/embedcomp/prompt-service;1"].getService(Components.interfaces.nsIPromptService);
456
        var new_name = window.prompt("Enter the new name:", "");
457
        if ( new_name != null ) {
458
                if ( !rename_resource(uri, new_name) ) {
459
                        promptAlert('Cannot rename ' + uri + ' to ' + new_name);
460
                        return;
461
                }
462
        } else {
463
                promptAlert('Action canceled');
464
        }
465
        pithos_object.refreshLists();
466
}
467

    
468
function rename_resource(uri, new_name) {
469
        if ( vfs.isRemoteResource(uri) ) {
470
                var update = new Object();
471
                if ( vfs.isFile(uri) ) {
472
                        update.name = new_name;
473
                } else {
474
                        update.directoryName = new_name;
475
                }
476
                var req = connection_obj.rest_request_post(uri, '?update=', jsonToString(update));
477
                return (connection_obj.success(req.status));
478
        } else if ( vfs.isLocalResource(uri) ) {
479
                try {
480
                        netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
481
                        var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
482
                        file.initWithPath(uri);
483
                        file.moveTo(file.parent, new_name);
484
                                                
485
                        return true;
486
                } catch (e) {
487
                        return false;
488
                }                
489
        }
490
        
491
        return false;
492
}
493

    
494
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
495

    
496
//////////////////////////////////////////////////////////// LAUNCH ///////////////////////////////////////////////////////////////////////////////////////////
497

    
498
function launch_local_resource(uri) {
499
        if (  vfs.isLocalResource(uri) ) {
500
                try {
501
                        netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
502
                        var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
503
                        file.initWithPath(uri);
504
                        file.launch();
505
                                                
506
                        return true;
507
                } catch (e) {
508
                        return false;
509
                }                
510
        } else {
511
                alert('Cannot execute remote file!');
512
        }
513
}
514

    
515
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
516

    
517
/////////////////////////////////////////////////////////// VERSION /////////////////////////////////////////////////////////////////////////////////////
518

    
519
function enable_version_event(uri) {
520
    if ( vfs.isLocalResource(uri) ) {
521
        promptAlert('Cannot enable versioning in local files');
522
        return;
523
    }
524
    if ( enable_version_resource(uri) ) {
525
        promptAlert('File versioning is enabled');
526
    } else {
527
        promptAlert('Could not enable file versioning for ' + uri);
528
    }
529
}
530

    
531
function enable_version_resource(uri) {
532
    if ( vfs.isRemoteResource(uri) ) {
533
        var ownFileObj = new Object();
534
        ownFileObj.versioned = true;
535

    
536
        var req = connection_obj.rest_request_post(uri, '?update=', jsonToString(ownFileObj));
537
        return connection_obj.success(req.status);
538
    }
539

    
540
    return false;
541
}
542

    
543
function download_version_event(uri, current_version) {
544
    //var version = window.prompt("Download version:", current_version);
545
    var versions = new Array();
546
    var outChoice = new Object();
547

    
548
    for ( i = 0; i < current_version; i++ ) {
549
        versions.push(i + 1);
550
    }
551

    
552
    if (promptSelect('Open Resource', 'Download version:', versions, outChoice)) {
553
        var version_number = new Number(versions[outChoice.value]);
554
        if ( (version_number >= 1) && (version_number <= current_version) ) {
555
            var local_url = connection_obj.create_request_get(uri) + '&version=' + version_number;
556
            window.open(local_url);
557
        } else {
558
            promptAlert('Invalid version number (' + version_number + '). Available versions: 1 ... ' + current_version);
559
        }            
560
    } else {
561
        promptAlert('Action canceled');
562
    }
563
}
564

    
565
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
566

    
567
////////////////////////////////////////////////// UNDELETE ///////////////////////////////////////////////////////////////////////////////
568

    
569
function restore_context_menu_trash(uri) {
570
    netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
571

    
572
    var theuri = uri;
573
    var theobj = vfs.getResourceMetadata(theuri);
574

    
575
    // Set the metadata delete property to false (i.e. not deleted)
576
    theobj.deleted = false;
577

    
578
    var prompts = Components.classes["@mozilla.org/embedcomp/prompt-service;1"].getService(Components.interfaces.nsIPromptService);
579
    var theitem_with_path = '';
580
    
581
    if (theobj.hasOwnProperty('directoryName')) {
582
        theitem_with_path = theobj.parentFolder + '/' + theobj.directoryName;
583
        theitem_with_path = theitem_with_path.replace(connection_obj.user_homepage().fileroot, "");
584
    } else {
585
        theitem_with_path = theobj.path + theobj.name;
586
    }
587

    
588
    if (prompts.confirm(window, "Confirm action", "Are you sure you want to restore " + theitem_with_path + ' ?')) {
589
        // trim the trailing slash ...
590
        theuri = theuri.replace(/\/$/,'');
591
        if (restore_resource(theuri)) {
592
            promptAlert(theuri + ' succesfully restored');
593
            pithos_object.refreshLists();
594
        } else {
595
            promptAlert('Restoration of ' + theuri + ' failed');
596
        }
597
    }
598
}
599

    
600
function restore_resource(uri) {
601
    var retcode = connection_obj.rest_request_post(uri,'?restore=', '');
602
    return connection_obj.success(retcode.status);
603
}
604

    
605

    
606
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////