Dateiverwaltung für die WebBox
ulrich
2017-02-24 7ebde1fb45e6ab30cadbf6deb2eb7b7b28c18660
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
5dfab6 116 function fm_dateiwahl() {
U 117   var elem = this;
10d3d3 118   if(modus == 'kacheln') {
U 119     if($(elem).children(0).hasClass('fa-folder')) {
120       var ordner = $(elem).text().trim();
121       if(pfad.length > 0) {
122         pfad = pfad + '/' + ordner;
123       } else {
124         pfad = ordner;
125       }
126       fm_get_list(pfad);
127     } else if($(elem).children(0).hasClass('fa-file')) {
128       $('.datei-gewaehlt').removeClass('datei-gewaehlt');
129       $(elem).children(0).addClass('datei-gewaehlt');
5dfab6 130     } else {
10d3d3 131       //console.log('kein folder oder file...');
5dfab6 132     }
U 133   } else {
10d3d3 134     if($(elem).find('.datei-elem').children(0).hasClass('fa-file-o')) {
U 135       $('.table-info').removeClass('table-info');
136       $(elem).addClass('table-info');
137       $('.datei-gewaehlt').removeClass('datei-gewaehlt');
138       $(elem).find('.dateiname').addClass('datei-gewaehlt');
139     } else {
140       var ordner = $(elem).find('.dateiname').text();
141       if(pfad.length > 0) {
142         pfad = pfad + '/' + ordner;
143       } else {
144         pfad = ordner;
145       }
146       fm_get_list(pfad);
147     }   
5dfab6 148   }
c509a0 149 }
U 150
a94216 151 function fm_bc_click() {
U 152   var elem = this;
153   var bcPfad = $(elem).attr('rpath');
154   if(bcPfad !== undefined) {
c509a0 155     pfad = bcPfad;
a94216 156     fm_get_list(bcPfad);
U 157   } else {
158     pfad = '';
159     fm_get_list('');
160   }
161 }
162
3ad4db 163 function fm_text_edit(content) {
f5505f 164   $('#bcnav').hide();
U 165   $('#dateien').hide();
3ad4db 166   $('.codeeditor-space').show();
U 167   $('.code-editor-container').show();
168   fm_code_edit(content);  
169 }
170
b7475d 171 /* ----- API Calls ------------- */
U 172
e5ff42 173 function fm_get_login() {
3ad4db 174   var m = '?c=de.uhilger.filecms.pub.SessionManager&m=getSessionUser';
U 175   var u = '../pub' + m;
176   fm_get(u, "text", function(resp) {
177     $('#userMenu').text(resp);
7342b1 178   });  
c509a0 179 }
U 180
181 function fm_get_new_folder() {
182   $('#modal_ok').click(function() {
183     // hier speichern
184     var m = '?c=de.uhilger.filecms.api.FileMgr&m=newFolder&p=' + pfad + '&p=' + $('#dateiname').val();
185     var u = '../svc' + m;
186     fm_get(u, "json", function(resp) {
adf812 187       fm_get_list(pfad);
c509a0 188     });
U 189   });
190   $('.modal-title').text('Neuer Ordner');
191   $('#dialogfrage').text("Name?");
192   $('#dateiname').val('');
193   $('#dateiname').attr('placeholder', 'Ordnername');
194   $('#saveModal').modal({
195     keyboard: false,
196     show: true
197   });
7342b1 198 }
U 199
2121cc 200 function fm_get_file_content() {
U 201   var fname = $('.datei-gewaehlt').text();
5ebb8e 202   openFileName = fname;
3ad4db 203   var m = '?c=de.uhilger.filecms.api.FileMgr&m=getCode&p=' + pfad + '&p=' + fname;
2121cc 204   var u = '../svc' + m;
3ad4db 205   fm_get(u, "text", function(resp) {
U 206     fm_text_edit(resp);
2121cc 207   });
3ad4db 208   
2121cc 209 }
U 210
10d3d3 211 function fm_render_list(fl) {
U 212   if(modus == 'kacheln') {
213     // Kachelansicht
214     var template = $('#tpl-kacheln').html();
215     Mustache.parse(template);   // optional, speeds up future uses
216     $('.datei-zeile').attr('onclick','').unbind('click');
217     $('#dateien').empty();
218     $('#dateien').html(Mustache.render(template, fl));
219     $('.figure').click(fm_dateiwahl);
220   } else {
221     // Listenansicht
222     var template = $('#tpl-liste').html();
223     Mustache.parse(template);   // optional, speeds up future uses
224     $('.figure').attr('onclick','').unbind('click');
225     $('#dateien').empty();
226     $('#dateien').html(Mustache.render(template, fl));
227     $('.datei-zeile').click(fm_dateiwahl);
228   }
229 }
230
7342b1 231 // http://localhost:8079/file-cms/svc?c=de.uhilger.filecms.api.FileMgr&f=JSONNICE&m=list&p=
a94216 232 function fm_get_list(relPfad) {
10d3d3 233   $('#ansicht').attr('onclick','').unbind('click');
a94216 234   var m = '?c=de.uhilger.filecms.api.FileMgr&m=list&p=' + relPfad;
7342b1 235   var u = '../svc' + m;
U 236   fm_get(u, "json", function(resp) {
10d3d3 237     
2121cc 238     if(resp.List[0].FileRef !== undefined) {
U 239       var files = new Array();
c509a0 240       if(resp.List[0].FileRef instanceof Array) {
U 241         for(var i = 0; i < resp.List[0].FileRef.length; i++) {
242           files.push(new FileRef(resp.List[0].FileRef[i]));
243         }
244       } else {
245         files.push(new FileRef(resp.List[0].FileRef));
2121cc 246       }
U 247       var fl = new FileList(files);
10d3d3 248       fm_render_list(fl);
2121cc 249     } else {
U 250       $('#dateien').empty();
7342b1 251     }
5dfab6 252     
10d3d3 253     // Breadcrumb-Ansicht
2315a0 254     var template;
a94216 255     $('.breadcrumb-item').attr('onclick','').unbind('click');
2315a0 256     $('#bcnav').empty();
5dfab6 257     var dirList = new Array();
U 258     var rp = '';
a94216 259     //console.log("'" + relPfad + "'");
U 260     var dirs = relPfad.split('/');
261     //console.log(dirs.length);
2121cc 262     dirList.push(new BcrFile(rp, 'Home'));
a94216 263     if(relPfad.length > 0) {
2315a0 264       for(var i = 0; i < dirs.length - 1; i++) {
5dfab6 265         if(rp.length > 0 ) {
U 266           dirList.push(new BcrFile(rp + '/' + dirs[i], dirs[i]));
2315a0 267           rp = rp + '/' + dirs[i];
5dfab6 268         } else {
U 269           dirList.push(new BcrFile(dirs[i], dirs[i]));
2315a0 270           rp = dirs[i];
5dfab6 271         }
U 272       }
273       var bl = new BcrFiles(dirList);
2315a0 274
U 275       if(dirList.length > 0) {
276         template = $('#tpl-bcr').html();
277         Mustache.parse(template);   // optional, speeds up future uses
278         $('#bcnav').html(Mustache.render(template, bl));
279       }
280       
281       if(dirs.length > 0) {
282         dirList.push(new BcrFile(rp + '/' + dirs[dirs.length-1], dirs[dirs.length-1]));
283         template = $('#tpl-bcr2').html();
284         Mustache.parse(template);   // optional, speeds up future uses
285         $('#bcnav').append(Mustache.render(template, dirList[dirList.length-1]));        
286       } else {
287         template = $('#tpl-bcr2').html();
288         Mustache.parse(template);   // optional, speeds up future uses
289         $('#bcnav').append(Mustache.render(template, dirList[0]));        
290       }
291       
5dfab6 292       $('#bcnav').append($('#tpl-bcr3').html());
2315a0 293     } else {
a94216 294       pfad = '';
2315a0 295       template = $('#tpl-bcr2').html();
U 296       Mustache.parse(template);   // optional, speeds up future uses
10d3d3 297       $('#bcnav').append(Mustache.render(template, dirList[0]));   
U 298       $('#bcnav').append($('#tpl-bcr3').html());
5dfab6 299     }
a94216 300     $('.breadcrumb-item').click(fm_bc_click);
10d3d3 301     $('#ansicht').click(fm_ansicht_umschalten);
U 302     fm_set_modus();
e5ff42 303   });  
U 304 }
305
306 function fm_menu_datei_speichern() {
5ebb8e 307   //var fname = $('.datei-gewaehlt').text();
U 308   var fname = openFileName;
309   if(fname !== undefined && fname !== '') {
310     fm_save_file(fname);
311   } else {
312     fm_menu_datei_speichern_unter();
313   }
314 }
315
316 function fm_save_file(saveFileName) {
317   var m = '?c=de.uhilger.filecms.api.FileMgr&m=saveTextFile';
318   var u = '../svc' + m;
319   fm_post(u, {p1: pfad, p2: saveFileName, p3: cm.getValue()}, function(resp) {
320     openFileName = saveFileName;
321   });
322 }
323
324 function fm_menu_datei_speichern_unter() {
e5ff42 325   
915927 326   $('#modal_ok').click(function() {
U 327     // hier speichern
5ebb8e 328     fm_save_file($('#dateiname').val());
U 329     /*
915927 330     var m = '?c=de.uhilger.filecms.api.FileMgr&m=saveTextFile';
U 331     var u = '../svc' + m;
2121cc 332     fm_post(u, {p1: pfad, p2: $('#dateiname').val(), p3: cm.getValue()}, function(resp) {
915927 333
U 334     });
5ebb8e 335     */
915927 336   });
c509a0 337   $('.modal-title').text('Datei speichern');
U 338   $('#dialogfrage').text("Dateiname?");
3ad4db 339   
U 340   var fname = $('.datei-gewaehlt').text();
341   if(fname !== undefined) {
342     $('#dateiname').val(fname);
343   } else {
344     $('#dateiname').val('');
345   }
c509a0 346   $('#dateiname').attr('placeholder', 'Dateiname');
915927 347   $('#saveModal').modal({
U 348     keyboard: false,
349     show: true
350   });
a4d3b5 351 }
U 352
b7475d 353 function fm_logout() {
U 354   var m = '?c=de.uhilger.filecms.pub.SessionManager&m=expireSession';
355   var u = '../pub' + m;
356   
357   fm_get(u, "text", function(resp) {
358     $('#userMenu').text('nicht angemeldet');
359     window.location.href = '../logout.html';
360   });
361 }
362
363
a4d3b5 364 /* ---- codemirror editor handling -------- */
U 365
366 function fm_code_edit(content) {
367   cm = CodeMirror.fromTextArea(document.getElementById("editspace"), {
368     lineNumbers: true,
369     mode: "xml",
370     viewportMargin : Infinity,
371     extraKeys: {
915927 372         "F9": function(cm) {
U 373         cm.setOption("fullScreen", !cm.getOption("fullScreen"));
374       },
375         "Esc": function(cm) {
376         if (cm.getOption("fullScreen")) cm.setOption("fullScreen", false);
377       }
a4d3b5 378     }
U 379   });
380   cm.setValue(content);
915927 381 }
a4d3b5 382
U 383
384
385 /* -------- helper functions ----------- */
386
b7475d 387 function fm_get(u, dtype, scallback) {
a4d3b5 388   $.ajax({
U 389     url: u,
390     type: "GET",
b7475d 391     dataType: dtype,
a4d3b5 392     success: scallback,
U 393     error: function (xhr, status, errorThrown) {
394       alert("Error: " + errorThrown + " Status: " + status + " URL: " + u);
395     },
396     complete: function (xhr, status) {
397       //console.log( "The request is complete!" );
398     }
399
400   });
915927 401 }
a4d3b5 402
U 403 function fm_post(u, d, scallback) {
404   $.ajax({
405     url: u,
406     data: d,
407     type: "POST",
408     dataType: "json",
409     success: scallback,
410     error: function (xhr, status, errorThrown) {
411       $('#fehler').html("Error: " + errorThrown + " Status: " + status);
412     },
413     complete: function (xhr, status) {
414       //alert( "The request is complete!" );
415     }
416   });
915927 417 }
a4d3b5 418
e5ff42 419 function fm_serialise(obj) {
U 420   return '{"' + obj.constructor.name + '":' + JSON.stringify(obj) + '}';
915927 421 }
e5ff42 422
7342b1 423 /* ----- Objekte ----- */
U 424
425 function FileList(fl) {
426   this.files = fl;
427 }
428
429 function FileRef(obj) {
430   var self = this;
431   this.fr = obj;
432   
433   this.typeClass = function() {
10d3d3 434     if(modus == 'kacheln') {
U 435       if(self.fr.isDirectory) {
436         return 'fa-folder';
437       } else {
438         return 'fa-file';
439       }
7342b1 440     } else {
10d3d3 441       if(self.fr.isDirectory) {
U 442         return 'fa-folder';
443       } else {
444         return 'fa-file-o';
445       }
7342b1 446     }
2121cc 447   };
U 448   
449   this.fileName = function() {
450     var namen = self.fr.absolutePath.split('/');
451     if(namen.length > 0) {
452       return namen[namen.length - 1];
453     } else {
454       return self.fr.absolutePath;
455     }
456   };
7342b1 457 }
5dfab6 458
U 459 function BcrFiles(fl) {
460   this.files = fl;
461 }
462
463 function BcrFile(rp, n) {
464   this.relPath = rp;
465   this.fName = n;
7aa566 466 }
U 467