Dateiverwaltung für die WebBox
ulrich
2017-02-24 17919cf428a29f5382a62dc500de34d15cc87e94
commit | author | age
a4d3b5 1 var cm;
5dfab6 2 var pfad = '';
10d3d3 3 var modus = 'kacheln';
5ebb8e 4 var openFileName = '';
c7c502 5
U 6 function fm_init() {
a4d3b5 7   $('.codeeditor-space').hide();
U 8   $('.code-editor-container').hide();
bef5c6 9   //$('.ost').attr('flex-basis', 0);
a4d3b5 10   $('#newTextFile').on('click', fm_menu_neue_textdatei);
adf812 11   $('#newFolder').on('click', fm_get_new_folder);
3ad4db 12   $('#editTextFile').on('click', fm_get_file_content);
e5ff42 13   $('#saveFile').on('click', fm_menu_datei_speichern);
5ebb8e 14   $('#saveFileAs').on('click', fm_menu_datei_speichern_unter);
a4d3b5 15   $('#closeFile').on('click', fm_menu_datei_schliessen);
bef5c6 16   $('#m-test').on('click', fm_menu_test);
c509a0 17   $('#saveModal').on('hidden.bs.modal', function (e) {
915927 18     $('#modal_ok').attr('onclick','').unbind('click');
b7475d 19   });
U 20   $('#logout').click(fm_logout);  
e5ff42 21   fm_get_login();
7342b1 22   fm_get_list('');
7aa566 23   fm_init_uploader();
10d3d3 24 }
7aa566 25
U 26 /* ----- Uploader Anfang ----------*/
27
28 var dateien = new Array();
29
30 function fm_init_uploader() {
31   var dropzone = document.getElementById("dateien");  
32   dropzone.ondragover = dropzone.ondragenter = function(event) {  
33     event.stopPropagation();  
34     event.preventDefault();  
35   };
36
37   dropzone.ondrop = function(event) {  
38     event.stopPropagation();  
39     event.preventDefault();  
7ebde1 40     var fileList = event.dataTransfer.files;  
U 41     for (var i=0; i<fileList.length; i++) {  
42       dateien.push(fileList[i]);
43     }
44     sendFile(dateien.pop());
7aa566 45   };
U 46 }
47
48 function sendFile(datei) {
7ebde1 49   var uri = "../api/upload";
7aa566 50   var xhr = new XMLHttpRequest();  
U 51   var fd = new FormData();  
52   xhr.open("POST", uri, true);  
53   xhr.onreadystatechange = function() {  
54     if (xhr.readyState == 4 && xhr.status == 200) {  
55       fm_get_list(pfad);
7ebde1 56       if(dateien.length > 0) {
U 57         sendFile(dateien.pop());
58       }
7aa566 59     }  
U 60   };  
7ebde1 61   fd.append('dateiauswahlfeld', datei);  
7aa566 62   xhr.send(fd);          
U 63 }
64
65 /* ----- Uploader Ende --------------- */
10d3d3 66
bef5c6 67 function fm_menu_test() {
U 68   var w = $('.ost').width();
69   console.log('.ost.width: ' + w);
70   if(w == 0) {
71     $('.ost').width('20%');
72     $('.ost').text('Hallo Welt!');
73   } else {
74     $('.ost').empty();
75     $('.ost').width(0);
76   }
77 }
78
10d3d3 79 function fm_ansicht_umschalten() {
U 80   if($('#ansicht').children(0).hasClass('fa-th-list')) {
81     $('#ansicht').children(0).addClass('fa-th-large');
82     $('#ansicht').children(0).removeClass('fa-th-list');
83     modus = 'liste';
84   } else {
85     $('#ansicht').children(0).addClass('fa-th-list');    
86     $('#ansicht').children(0).removeClass('fa-th-large');
87     modus = 'kacheln';
88   }
89   fm_get_list(pfad);
90 }
91
92 function fm_set_modus() {
93   if(modus == 'kacheln') {
94     $('#ansicht').children(0).addClass('fa-th-list');    
95     $('#ansicht').children(0).removeClass('fa-th-large');  
96   } else {
97     $('#ansicht').children(0).addClass('fa-th-large');
98     $('#ansicht').children(0).removeClass('fa-th-list');    
99   }
a4d3b5 100 }
U 101
102 function fm_menu_neue_textdatei() {
adf812 103   fm_text_edit('Neue Datei');
a4d3b5 104 }
U 105
106 function fm_menu_datei_schliessen() {
107   $('.codeeditor-space').hide();
108   $('.code-editor-container').hide();
109   cm.toTextArea();
f5505f 110   $('#bcnav').show();
U 111   $('#dateien').show();
5ebb8e 112   openFileName = '';
adf812 113   fm_get_list(pfad);
e5ff42 114 }
U 115
17919c 116 function fm_dateiwahl(ev) {
5dfab6 117   var elem = this;
17919c 118   //console.log('dateiwahl nach click, event shift: ' + ev.shiftKey + ", event ctrl: " + ev.ctrlKey);
10d3d3 119   if(modus == 'kacheln') {
U 120     if($(elem).children(0).hasClass('fa-folder')) {
121       var ordner = $(elem).text().trim();
122       if(pfad.length > 0) {
123         pfad = pfad + '/' + ordner;
124       } else {
125         pfad = ordner;
126       }
127       fm_get_list(pfad);
128     } else if($(elem).children(0).hasClass('fa-file')) {
17919c 129       if(/*ev.shiftKey || */ ev.ctrlKey) {
U 130         // mehrere Dateien sollen gewaehlt werden
131       } else {
132         $('.datei-gewaehlt').removeClass('datei-gewaehlt');        
133       }
10d3d3 134       $(elem).children(0).addClass('datei-gewaehlt');
5dfab6 135     } else {
10d3d3 136       //console.log('kein folder oder file...');
5dfab6 137     }
U 138   } else {
10d3d3 139     if($(elem).find('.datei-elem').children(0).hasClass('fa-file-o')) {
17919c 140       if(/*ev.shiftKey || */ ev.ctrlKey) {
U 141         // mehrere Dateien sollen gewaehlt werden
142       } else {
143         $('.table-info').removeClass('table-info');
144       }
10d3d3 145       $(elem).addClass('table-info');
U 146       $('.datei-gewaehlt').removeClass('datei-gewaehlt');
147       $(elem).find('.dateiname').addClass('datei-gewaehlt');
148     } else {
149       var ordner = $(elem).find('.dateiname').text();
150       if(pfad.length > 0) {
151         pfad = pfad + '/' + ordner;
152       } else {
153         pfad = ordner;
154       }
155       fm_get_list(pfad);
156     }   
5dfab6 157   }
c509a0 158 }
U 159
a94216 160 function fm_bc_click() {
U 161   var elem = this;
162   var bcPfad = $(elem).attr('rpath');
163   if(bcPfad !== undefined) {
c509a0 164     pfad = bcPfad;
a94216 165     fm_get_list(bcPfad);
U 166   } else {
167     pfad = '';
168     fm_get_list('');
169   }
170 }
171
3ad4db 172 function fm_text_edit(content) {
f5505f 173   $('#bcnav').hide();
U 174   $('#dateien').hide();
3ad4db 175   $('.codeeditor-space').show();
U 176   $('.code-editor-container').show();
177   fm_code_edit(content);  
178 }
179
b7475d 180 /* ----- API Calls ------------- */
U 181
e5ff42 182 function fm_get_login() {
3ad4db 183   var m = '?c=de.uhilger.filecms.pub.SessionManager&m=getSessionUser';
U 184   var u = '../pub' + m;
185   fm_get(u, "text", function(resp) {
186     $('#userMenu').text(resp);
7342b1 187   });  
c509a0 188 }
U 189
190 function fm_get_new_folder() {
191   $('#modal_ok').click(function() {
192     // hier speichern
193     var m = '?c=de.uhilger.filecms.api.FileMgr&m=newFolder&p=' + pfad + '&p=' + $('#dateiname').val();
194     var u = '../svc' + m;
195     fm_get(u, "json", function(resp) {
adf812 196       fm_get_list(pfad);
c509a0 197     });
U 198   });
199   $('.modal-title').text('Neuer Ordner');
200   $('#dialogfrage').text("Name?");
201   $('#dateiname').val('');
202   $('#dateiname').attr('placeholder', 'Ordnername');
203   $('#saveModal').modal({
204     keyboard: false,
205     show: true
206   });
7342b1 207 }
U 208
2121cc 209 function fm_get_file_content() {
U 210   var fname = $('.datei-gewaehlt').text();
5ebb8e 211   openFileName = fname;
3ad4db 212   var m = '?c=de.uhilger.filecms.api.FileMgr&m=getCode&p=' + pfad + '&p=' + fname;
2121cc 213   var u = '../svc' + m;
3ad4db 214   fm_get(u, "text", function(resp) {
U 215     fm_text_edit(resp);
2121cc 216   });
3ad4db 217   
2121cc 218 }
U 219
10d3d3 220 function fm_render_list(fl) {
U 221   if(modus == 'kacheln') {
222     // Kachelansicht
223     var template = $('#tpl-kacheln').html();
224     Mustache.parse(template);   // optional, speeds up future uses
225     $('.datei-zeile').attr('onclick','').unbind('click');
226     $('#dateien').empty();
227     $('#dateien').html(Mustache.render(template, fl));
228     $('.figure').click(fm_dateiwahl);
229   } else {
230     // Listenansicht
231     var template = $('#tpl-liste').html();
232     Mustache.parse(template);   // optional, speeds up future uses
233     $('.figure').attr('onclick','').unbind('click');
234     $('#dateien').empty();
235     $('#dateien').html(Mustache.render(template, fl));
236     $('.datei-zeile').click(fm_dateiwahl);
237   }
238 }
239
7342b1 240 // http://localhost:8079/file-cms/svc?c=de.uhilger.filecms.api.FileMgr&f=JSONNICE&m=list&p=
a94216 241 function fm_get_list(relPfad) {
10d3d3 242   $('#ansicht').attr('onclick','').unbind('click');
a94216 243   var m = '?c=de.uhilger.filecms.api.FileMgr&m=list&p=' + relPfad;
7342b1 244   var u = '../svc' + m;
U 245   fm_get(u, "json", function(resp) {
10d3d3 246     
2121cc 247     if(resp.List[0].FileRef !== undefined) {
U 248       var files = new Array();
c509a0 249       if(resp.List[0].FileRef instanceof Array) {
U 250         for(var i = 0; i < resp.List[0].FileRef.length; i++) {
251           files.push(new FileRef(resp.List[0].FileRef[i]));
252         }
253       } else {
254         files.push(new FileRef(resp.List[0].FileRef));
2121cc 255       }
U 256       var fl = new FileList(files);
10d3d3 257       fm_render_list(fl);
2121cc 258     } else {
U 259       $('#dateien').empty();
7342b1 260     }
5dfab6 261     
10d3d3 262     // Breadcrumb-Ansicht
2315a0 263     var template;
a94216 264     $('.breadcrumb-item').attr('onclick','').unbind('click');
2315a0 265     $('#bcnav').empty();
5dfab6 266     var dirList = new Array();
U 267     var rp = '';
a94216 268     //console.log("'" + relPfad + "'");
U 269     var dirs = relPfad.split('/');
270     //console.log(dirs.length);
2121cc 271     dirList.push(new BcrFile(rp, 'Home'));
a94216 272     if(relPfad.length > 0) {
2315a0 273       for(var i = 0; i < dirs.length - 1; i++) {
5dfab6 274         if(rp.length > 0 ) {
U 275           dirList.push(new BcrFile(rp + '/' + dirs[i], dirs[i]));
2315a0 276           rp = rp + '/' + dirs[i];
5dfab6 277         } else {
U 278           dirList.push(new BcrFile(dirs[i], dirs[i]));
2315a0 279           rp = dirs[i];
5dfab6 280         }
U 281       }
282       var bl = new BcrFiles(dirList);
2315a0 283
U 284       if(dirList.length > 0) {
285         template = $('#tpl-bcr').html();
286         Mustache.parse(template);   // optional, speeds up future uses
287         $('#bcnav').html(Mustache.render(template, bl));
288       }
289       
290       if(dirs.length > 0) {
291         dirList.push(new BcrFile(rp + '/' + dirs[dirs.length-1], dirs[dirs.length-1]));
292         template = $('#tpl-bcr2').html();
293         Mustache.parse(template);   // optional, speeds up future uses
294         $('#bcnav').append(Mustache.render(template, dirList[dirList.length-1]));        
295       } else {
296         template = $('#tpl-bcr2').html();
297         Mustache.parse(template);   // optional, speeds up future uses
298         $('#bcnav').append(Mustache.render(template, dirList[0]));        
299       }
300       
5dfab6 301       $('#bcnav').append($('#tpl-bcr3').html());
2315a0 302     } else {
a94216 303       pfad = '';
2315a0 304       template = $('#tpl-bcr2').html();
U 305       Mustache.parse(template);   // optional, speeds up future uses
10d3d3 306       $('#bcnav').append(Mustache.render(template, dirList[0]));   
U 307       $('#bcnav').append($('#tpl-bcr3').html());
5dfab6 308     }
a94216 309     $('.breadcrumb-item').click(fm_bc_click);
10d3d3 310     $('#ansicht').click(fm_ansicht_umschalten);
U 311     fm_set_modus();
e5ff42 312   });  
U 313 }
314
315 function fm_menu_datei_speichern() {
5ebb8e 316   //var fname = $('.datei-gewaehlt').text();
U 317   var fname = openFileName;
318   if(fname !== undefined && fname !== '') {
319     fm_save_file(fname);
320   } else {
321     fm_menu_datei_speichern_unter();
322   }
323 }
324
325 function fm_save_file(saveFileName) {
326   var m = '?c=de.uhilger.filecms.api.FileMgr&m=saveTextFile';
327   var u = '../svc' + m;
328   fm_post(u, {p1: pfad, p2: saveFileName, p3: cm.getValue()}, function(resp) {
329     openFileName = saveFileName;
330   });
331 }
332
333 function fm_menu_datei_speichern_unter() {
e5ff42 334   
915927 335   $('#modal_ok').click(function() {
U 336     // hier speichern
5ebb8e 337     fm_save_file($('#dateiname').val());
U 338     /*
915927 339     var m = '?c=de.uhilger.filecms.api.FileMgr&m=saveTextFile';
U 340     var u = '../svc' + m;
2121cc 341     fm_post(u, {p1: pfad, p2: $('#dateiname').val(), p3: cm.getValue()}, function(resp) {
915927 342
U 343     });
5ebb8e 344     */
915927 345   });
c509a0 346   $('.modal-title').text('Datei speichern');
U 347   $('#dialogfrage').text("Dateiname?");
3ad4db 348   
U 349   var fname = $('.datei-gewaehlt').text();
350   if(fname !== undefined) {
351     $('#dateiname').val(fname);
352   } else {
353     $('#dateiname').val('');
354   }
c509a0 355   $('#dateiname').attr('placeholder', 'Dateiname');
915927 356   $('#saveModal').modal({
U 357     keyboard: false,
358     show: true
359   });
a4d3b5 360 }
U 361
b7475d 362 function fm_logout() {
U 363   var m = '?c=de.uhilger.filecms.pub.SessionManager&m=expireSession';
364   var u = '../pub' + m;
365   
366   fm_get(u, "text", function(resp) {
367     $('#userMenu').text('nicht angemeldet');
368     window.location.href = '../logout.html';
369   });
370 }
371
372
a4d3b5 373 /* ---- codemirror editor handling -------- */
U 374
375 function fm_code_edit(content) {
376   cm = CodeMirror.fromTextArea(document.getElementById("editspace"), {
377     lineNumbers: true,
378     mode: "xml",
379     viewportMargin : Infinity,
380     extraKeys: {
915927 381         "F9": function(cm) {
U 382         cm.setOption("fullScreen", !cm.getOption("fullScreen"));
383       },
384         "Esc": function(cm) {
385         if (cm.getOption("fullScreen")) cm.setOption("fullScreen", false);
386       }
a4d3b5 387     }
U 388   });
389   cm.setValue(content);
915927 390 }
a4d3b5 391
U 392
393
394 /* -------- helper functions ----------- */
395
b7475d 396 function fm_get(u, dtype, scallback) {
a4d3b5 397   $.ajax({
U 398     url: u,
399     type: "GET",
b7475d 400     dataType: dtype,
a4d3b5 401     success: scallback,
U 402     error: function (xhr, status, errorThrown) {
403       alert("Error: " + errorThrown + " Status: " + status + " URL: " + u);
404     },
405     complete: function (xhr, status) {
406       //console.log( "The request is complete!" );
407     }
408
409   });
915927 410 }
a4d3b5 411
U 412 function fm_post(u, d, scallback) {
413   $.ajax({
414     url: u,
415     data: d,
416     type: "POST",
417     dataType: "json",
418     success: scallback,
419     error: function (xhr, status, errorThrown) {
420       $('#fehler').html("Error: " + errorThrown + " Status: " + status);
421     },
422     complete: function (xhr, status) {
423       //alert( "The request is complete!" );
424     }
425   });
915927 426 }
a4d3b5 427
e5ff42 428 function fm_serialise(obj) {
U 429   return '{"' + obj.constructor.name + '":' + JSON.stringify(obj) + '}';
915927 430 }
e5ff42 431
7342b1 432 /* ----- Objekte ----- */
U 433
434 function FileList(fl) {
435   this.files = fl;
436 }
437
438 function FileRef(obj) {
439   var self = this;
440   this.fr = obj;
441   
442   this.typeClass = function() {
10d3d3 443     if(modus == 'kacheln') {
U 444       if(self.fr.isDirectory) {
445         return 'fa-folder';
446       } else {
447         return 'fa-file';
448       }
7342b1 449     } else {
10d3d3 450       if(self.fr.isDirectory) {
U 451         return 'fa-folder';
452       } else {
453         return 'fa-file-o';
454       }
7342b1 455     }
2121cc 456   };
U 457   
458   this.fileName = function() {
459     var namen = self.fr.absolutePath.split('/');
460     if(namen.length > 0) {
461       return namen[namen.length - 1];
462     } else {
463       return self.fr.absolutePath;
464     }
465   };
7342b1 466 }
5dfab6 467
U 468 function BcrFiles(fl) {
469   this.files = fl;
470 }
471
472 function BcrFile(rp, n) {
473   this.relPath = rp;
474   this.fName = n;
7aa566 475 }
U 476