Dateiverwaltung für die WebBox
Ulrich
2017-02-27 fc8db104e8c70f6a431827b17210a29934a232bf
commit | author | age
723bf7 1 /*
U 2     Dateiverwaltung - File management in your browser
3     Copyright (C) 2017 Ulrich Hilger, http://uhilger.de
4
5     This program is free software: you can redistribute it and/or modify
6     it under the terms of the GNU Affero General Public License as
7     published by the Free Software Foundation, either version 3 of the
8     License, or (at your option) any later version.
9
10     This program is distributed in the hope that it will be useful,
11     but WITHOUT ANY WARRANTY; without even the implied warranty of
12     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13     GNU Affero General Public License for more details.
14
15     You should have received a copy of the GNU Affero General Public License
16     along with this program.  If not, see <http://www.gnu.org/licenses/>.
17 */
18
a4d3b5 19 var cm;
5dfab6 20 var pfad = '';
10d3d3 21 var modus = 'kacheln';
5ebb8e 22 var openFileName = '';
305573 23 var ed;
7d8ef6 24 var openEditor;
c7c502 25
U 26 function fm_init() {
305573 27   $("#mce-editor").hide();
a4d3b5 28   $('.codeeditor-space').hide();
U 29   $('.code-editor-container').hide();
bef5c6 30   //$('.ost').attr('flex-basis', 0);
a4d3b5 31   $('#newTextFile').on('click', fm_menu_neue_textdatei);
305573 32   $('#newDoc').on('click', fm_menu_neues_dokument);
adf812 33   $('#newFolder').on('click', fm_get_new_folder);
fc8db1 34   $('#viewFile').on('click', fm_view_file);
7d8ef6 35   $('#editTextFile').on('click', function() {
U 36     fm_get_file_content('text');
37   });
38   $('#editDocFile').on('click', function() {
39     fm_get_file_content('dok');
40   });
e5ff42 41   $('#saveFile').on('click', fm_menu_datei_speichern);
5ebb8e 42   $('#saveFileAs').on('click', fm_menu_datei_speichern_unter);
a4d3b5 43   $('#closeFile').on('click', fm_menu_datei_schliessen);
fc1897 44   $('#m-del').on('click', fm_menu_delete);
bef5c6 45   $('#m-test').on('click', fm_menu_test);
c509a0 46   $('#saveModal').on('hidden.bs.modal', function (e) {
915927 47     $('#modal_ok').attr('onclick','').unbind('click');
b7475d 48   });
U 49   $('#logout').click(fm_logout);  
fc8db1 50   fm_get_login(dokEditorInit); // nach Ermittlung der Benutzerkennung wird TinyMCE initialisert
7342b1 51   fm_get_list('');
7aa566 52   fm_init_uploader();
fc8db1 53   
U 54   window.onresize = function() {
55     fm_resizeEditor();
56   };
57 }
58
59 function fm_resizeEditor() {
60   if (ed) {
61     try {
62       var myHeight = $('.zentrum').height() - $('.nord').height() - 4;
63       ed.theme.resizeTo('100%', myHeight);  // sets the dimensions of the editable area
64     } catch (err) {
65     }
66   }
67 }
68
69 /*
70  * Initialisierung von TinyMCE als separate Funktion, damit 
71  * die Benutzerkennung nach deren Ermittlung als Teil des 
72  * Basisverzeichnisses dienen kann
73  * 
74  * Pruefen: Kann man das vor jedem Editor-Aufruf machen oder aber 
75  * Teile wie z.B. das Basisverzeichnis spaeter wieder aendern?
76  * 
77  * @param {type} userid  die userid die auf das Basisverzeichnis verweist
78  * @returns {undefined}
79  */
80 function dokEditorInit(userid) {
81   
82   var base = "/data/" + userid + "/";
305573 83   
U 84   /*
85    * Konfiguration TinyMCE
86    */
87   tinymce.init({
88     content_css : "mce.css",
7d8ef6 89     selector: "textarea.text-editor",
305573 90     statusbar: false,
U 91     menubar: false,
7d8ef6 92     plugins: 'advlist charmap code image link lists media print preview save table textcolor',
U 93     toolbar: 'undo redo | styleselect | image | link unlink | bullist numlist | outdent indent | code',
305573 94     /*
U 95     menu: {
96       file: {title: 'File', items: 'savevers | exit'},
97       edit: {title: 'Edit', items: 'undo redo | cut copy paste pastetext | selectall'},
98       view: {title: 'View', items: 'visualaid | code | link image media | template hr'},
99     },
100     */
7d8ef6 101     /*resize: 'both',*/
305573 102     width: "100%",
U 103     height: '100%',
fc8db1 104     document_base_url : base,
7d8ef6 105     /*autoresize_bottom_margin : 1,*/
305573 106     setup: function (editor) {
U 107       ed = editor;
108     }
109   });
10d3d3 110 }
7aa566 111
U 112 /* ----- Uploader Anfang ----------*/
113
114 var dateien = new Array();
115
116 function fm_init_uploader() {
117   var dropzone = document.getElementById("dateien");  
118   dropzone.ondragover = dropzone.ondragenter = function(event) {  
119     event.stopPropagation();  
120     event.preventDefault();  
121   };
122
123   dropzone.ondrop = function(event) {  
124     event.stopPropagation();  
125     event.preventDefault();  
7ebde1 126     var fileList = event.dataTransfer.files;  
U 127     for (var i=0; i<fileList.length; i++) {  
128       dateien.push(fileList[i]);
129     }
130     sendFile(dateien.pop());
7aa566 131   };
U 132 }
133
134 function sendFile(datei) {
7ebde1 135   var uri = "../api/upload";
7aa566 136   var xhr = new XMLHttpRequest();  
U 137   var fd = new FormData();  
138   xhr.open("POST", uri, true);  
139   xhr.onreadystatechange = function() {  
140     if (xhr.readyState == 4 && xhr.status == 200) {  
141       fm_get_list(pfad);
7ebde1 142       if(dateien.length > 0) {
U 143         sendFile(dateien.pop());
144       }
7aa566 145     }  
U 146   };  
7ebde1 147   fd.append('dateiauswahlfeld', datei);  
7aa566 148   xhr.send(fd);          
U 149 }
150
151 /* ----- Uploader Ende --------------- */
10d3d3 152
fc1897 153 function fm_menu_delete() {
U 154   $('#confirmOk').click(function() {
155     // hier loeschen
156     fm_del_files();
157   });
957b51 158   $('#confirmModalTitle').text("Löschen");
U 159   $('#confirmModalBody').text("Wirklich löschen?");
fc1897 160   
U 161   /*var fname = $('.datei-gewaehlt').text();
162   if(fname !== undefined) {
163     $('#dateiname').val(fname);
164   } else {
165     $('#dateiname').val('');
166   }*/
167   //$('#dateiname').attr('placeholder', 'Dateiname');
168   $('#confirmModal').modal({
169     keyboard: false,
170     show: true
171   });
172 }
173
bef5c6 174 function fm_menu_test() {
U 175   var w = $('.ost').width();
176   if(w == 0) {
177     $('.ost').width('20%');
178     $('.ost').text('Hallo Welt!');
179   } else {
180     $('.ost').empty();
181     $('.ost').width(0);
182   }
183 }
184
10d3d3 185 function fm_ansicht_umschalten() {
U 186   if($('#ansicht').children(0).hasClass('fa-th-list')) {
187     $('#ansicht').children(0).addClass('fa-th-large');
188     $('#ansicht').children(0).removeClass('fa-th-list');
189     modus = 'liste';
190   } else {
191     $('#ansicht').children(0).addClass('fa-th-list');    
192     $('#ansicht').children(0).removeClass('fa-th-large');
193     modus = 'kacheln';
194   }
195   fm_get_list(pfad);
196 }
197
198 function fm_set_modus() {
199   if(modus == 'kacheln') {
200     $('#ansicht').children(0).addClass('fa-th-list');    
201     $('#ansicht').children(0).removeClass('fa-th-large');  
202   } else {
203     $('#ansicht').children(0).addClass('fa-th-large');
204     $('#ansicht').children(0).removeClass('fa-th-list');    
205   }
a4d3b5 206 }
U 207
208 function fm_menu_neue_textdatei() {
adf812 209   fm_text_edit('Neue Datei');
a4d3b5 210 }
U 211
305573 212 function fm_menu_neues_dokument() {
7d8ef6 213   /*
305573 214   fm_filectls_hide();
U 215   $("#mce-editor").show();
7d8ef6 216   fm_resizeEditor();
U 217   openEditor = 'dok';
305573 218   */
7d8ef6 219   fm_dok_edit('');
305573 220 }
U 221
a4d3b5 222 function fm_menu_datei_schliessen() {
U 223   $('.codeeditor-space').hide();
224   $('.code-editor-container').hide();
305573 225   $("#mce-editor").hide();
U 226   if(cm !== undefined) {
227     cm.toTextArea();
228   }
5ebb8e 229   openFileName = '';
7d8ef6 230   openEditor = '';
adf812 231   fm_get_list(pfad);
305573 232   fm_filectls_show();
e5ff42 233 }
U 234
17919c 235 function fm_dateiwahl(ev) {
5dfab6 236   var elem = this;
17919c 237   //console.log('dateiwahl nach click, event shift: ' + ev.shiftKey + ", event ctrl: " + ev.ctrlKey);
10d3d3 238   if(modus == 'kacheln') {
957b51 239     // Kacheln
10d3d3 240     if($(elem).children(0).hasClass('fa-folder')) {
957b51 241       if(/*ev.shiftKey || */ ev.ctrlKey) {
U 242         $(elem).find('.dateiname').addClass('datei-gewaehlt');
10d3d3 243       } else {
957b51 244         var ordner = $(elem).text().trim();
U 245         if(pfad.length > 0) {
246           pfad = pfad + '/' + ordner;
247         } else {
248           pfad = ordner;
249         }
250         fm_get_list(pfad);
10d3d3 251       }
U 252     } else if($(elem).children(0).hasClass('fa-file')) {
17919c 253       if(/*ev.shiftKey || */ ev.ctrlKey) {
U 254         // mehrere Dateien sollen gewaehlt werden
255       } else {
256         $('.datei-gewaehlt').removeClass('datei-gewaehlt');        
257       }
957b51 258       $(elem).find('.dateiname').addClass('datei-gewaehlt');
5dfab6 259     } else {
10d3d3 260       //console.log('kein folder oder file...');
5dfab6 261     }
U 262   } else {
957b51 263     // Liste
10d3d3 264     if($(elem).find('.datei-elem').children(0).hasClass('fa-file-o')) {
957b51 265       // Datei
17919c 266       if(/*ev.shiftKey || */ ev.ctrlKey) {
U 267         // mehrere Dateien sollen gewaehlt werden
268       } else {
269         $('.table-info').removeClass('table-info');
957b51 270         $('.datei-gewaehlt').removeClass('datei-gewaehlt');
17919c 271       }
10d3d3 272       $(elem).addClass('table-info');
U 273       $(elem).find('.dateiname').addClass('datei-gewaehlt');
274     } else {
957b51 275       // Ordner
U 276       if(/*ev.shiftKey || */ ev.ctrlKey) {
277         $(elem).children(0).addClass('datei-gewaehlt');
10d3d3 278       } else {
957b51 279         var ordner = $(elem).find('.dateiname').text();
U 280         if(pfad.length > 0) {
281           pfad = pfad + '/' + ordner;
282         } else {
283           pfad = ordner;
284         }
285         fm_get_list(pfad);
10d3d3 286       }
U 287     }   
5dfab6 288   }
c509a0 289 }
U 290
a94216 291 function fm_bc_click() {
U 292   var elem = this;
293   var bcPfad = $(elem).attr('rpath');
294   if(bcPfad !== undefined) {
c509a0 295     pfad = bcPfad;
a94216 296     fm_get_list(bcPfad);
U 297   } else {
298     pfad = '';
299     fm_get_list('');
300   }
301 }
302
3ad4db 303 function fm_text_edit(content) {
305573 304   fm_filectls_hide();
3ad4db 305   $('.codeeditor-space').show();
U 306   $('.code-editor-container').show();
307   fm_code_edit(content);  
7d8ef6 308   openEditor = 'text';
U 309 }
310
311 function fm_dok_edit(content) {
312   fm_filectls_hide();
313   $("#mce-editor").show();
314   ed.setContent(content);
315   fm_resizeEditor();
316   openEditor = 'dok';  
3ad4db 317 }
U 318
305573 319 function fm_filectls_hide() {
U 320   $('#zentrum_bc').hide();
321   $('#dateien').hide();
322 }
323
324 function fm_filectls_show() {
325   $('#zentrum_bc').show();
326   $('#dateien').show();  
327 }
b7475d 328 /* ----- API Calls ------------- */
U 329
fc8db1 330 function fm_get_login(callback) {
3ad4db 331   var m = '?c=de.uhilger.filecms.pub.SessionManager&m=getSessionUser';
U 332   var u = '../pub' + m;
333   fm_get(u, "text", function(resp) {
334     $('#userMenu').text(resp);
fc8db1 335     callback(resp);
7342b1 336   });  
c509a0 337 }
U 338
339 function fm_get_new_folder() {
340   $('#modal_ok').click(function() {
341     // hier speichern
342     var m = '?c=de.uhilger.filecms.api.FileMgr&m=newFolder&p=' + pfad + '&p=' + $('#dateiname').val();
343     var u = '../svc' + m;
344     fm_get(u, "json", function(resp) {
adf812 345       fm_get_list(pfad);
c509a0 346     });
U 347   });
957b51 348   $('#saveModalTitle').text('Neuer Ordner');
c509a0 349   $('#dialogfrage').text("Name?");
U 350   $('#dateiname').val('');
351   $('#dateiname').attr('placeholder', 'Ordnername');
352   $('#saveModal').modal({
353     keyboard: false,
354     show: true
355   });
7342b1 356 }
U 357
7d8ef6 358 function fm_get_file_content(typ) {
fc1897 359   var gewaehlte = $('.datei-gewaehlt');
957b51 360   //var fname = $(gewaehlte).find('.dateiname').text();
U 361   
362   var fname = $(gewaehlte[0]).text();
5ebb8e 363   openFileName = fname;
3ad4db 364   var m = '?c=de.uhilger.filecms.api.FileMgr&m=getCode&p=' + pfad + '&p=' + fname;
2121cc 365   var u = '../svc' + m;
3ad4db 366   fm_get(u, "text", function(resp) {
7d8ef6 367     if(typ == 'text') {
U 368       fm_text_edit(resp);
369     } else {
370       fm_dok_edit(resp);
371     }
2121cc 372   });
3ad4db 373   
2121cc 374 }
U 375
fc8db1 376 function fm_view_file() {
U 377   // http://localhost:8080/file-cms/ui/#  
378   // http://localhost:8080/file-cms/data/admin/usw.
379   
380   var userid = $('#userMenu').text();
381   var gewaehlte = $('.datei-gewaehlt');
382   var fname = $(gewaehlte[0]).text();
383   window.open("/data/" + userid + '/' + fname, '_blank');
384 }
385
fc1897 386 function fm_del_files() {
U 387   var gewaehlte = $('.datei-gewaehlt');
388   //console.log('anzahl: ' + gewaehlte.length);
389   var fnames = new Array();
957b51 390   var i = 0;
fc1897 391   while(i < gewaehlte.length) {
U 392     var str = { "java.lang.String": $(gewaehlte[i]).text()};
393     fnames.push(str);
394     //console.log('loeschen ' + pfad + ' ' + $(gewaehlte[i]).text());
957b51 395     //i += 2;
U 396     i++;
fc1897 397   }
U 398   
399   var liste = '{"List":' + JSON.stringify(fnames) + '}';
400   // 'liste' enthaelt:
401   // {"List":[{"java.lang.String":"test3.txt"},{"java.lang.String":"Test1.txt"},{"java.lang.String":"Test2.txt"}]}
957b51 402   // und wird auf dem Server zu einer List[ArrayList<String>] bei der jede ArrayList<String> nur ein Element hat 
fc1897 403   
U 404   var m = '?c=de.uhilger.filecms.api.FileMgr&m=deleteFiles&p=' + pfad + '&p=' + encodeURIComponent(liste);
405   var u = '../svc' + m;
406   fm_get(u, "text", function(resp) {
407     // console.log('deleteFiles gab folgendes zurueck: ' + resp);
408     fm_get_list(pfad);
409   });
410   
411 }
412
10d3d3 413 function fm_render_list(fl) {
U 414   if(modus == 'kacheln') {
415     // Kachelansicht
7d8ef6 416     var template = $('#tpl-kacheln').html();
U 417     Mustache.parse(template);   // optional, speeds up future uses
418     $('.datei-zeile').attr('onclick','').unbind('click');
419     $('#dateien').empty();
420     $('#dateien').html(Mustache.render(template, fl));
421     $('.figure').click(fm_dateiwahl);
422   } else {
423     // Listenansicht
424     var template = $('#tpl-liste').html();
425     Mustache.parse(template);   // optional, speeds up future uses
426     $('.figure').attr('onclick','').unbind('click');
427     $('#dateien').empty();
428     $('#dateien').html(Mustache.render(template, fl));
429     $('.datei-zeile').click(fm_dateiwahl);
430   }
431   /*
432   if(modus == 'kacheln') {
433     // Kachelansicht
a3d410 434     $.get('tpl-kacheln.txt', function(template) {
U 435       $('#dateien').empty();
436       $('#dateien').html(Mustache.render(template, fl));
437       $('.figure').click(fm_dateiwahl);
438     });
10d3d3 439     $('.datei-zeile').attr('onclick','').unbind('click');
U 440   } else {
441     // Listenansicht
a3d410 442     $.get('tpl-liste.txt', function(template) {
U 443       $('#dateien').empty();
444       $('#dateien').html(Mustache.render(template, fl));
445       $('.datei-zeile').click(fm_dateiwahl);
446     });
10d3d3 447     $('.figure').attr('onclick','').unbind('click');
U 448   }
7d8ef6 449   */
10d3d3 450 }
U 451
7342b1 452 // http://localhost:8079/file-cms/svc?c=de.uhilger.filecms.api.FileMgr&f=JSONNICE&m=list&p=
a94216 453 function fm_get_list(relPfad) {
10d3d3 454   $('#ansicht').attr('onclick','').unbind('click');
a94216 455   var m = '?c=de.uhilger.filecms.api.FileMgr&m=list&p=' + relPfad;
7342b1 456   var u = '../svc' + m;
U 457   fm_get(u, "json", function(resp) {
10d3d3 458     
2121cc 459     if(resp.List[0].FileRef !== undefined) {
U 460       var files = new Array();
c509a0 461       if(resp.List[0].FileRef instanceof Array) {
U 462         for(var i = 0; i < resp.List[0].FileRef.length; i++) {
463           files.push(new FileRef(resp.List[0].FileRef[i]));
464         }
465       } else {
466         files.push(new FileRef(resp.List[0].FileRef));
2121cc 467       }
U 468       var fl = new FileList(files);
10d3d3 469       fm_render_list(fl);
2121cc 470     } else {
U 471       $('#dateien').empty();
7342b1 472     }
5dfab6 473     
10d3d3 474     // Breadcrumb-Ansicht
7d8ef6 475     var template;
a94216 476     $('.breadcrumb-item').attr('onclick','').unbind('click');
2315a0 477     $('#bcnav').empty();
5dfab6 478     var dirList = new Array();
U 479     var rp = '';
a94216 480     //console.log("'" + relPfad + "'");
U 481     var dirs = relPfad.split('/');
482     //console.log(dirs.length);
2121cc 483     dirList.push(new BcrFile(rp, 'Home'));
a94216 484     if(relPfad.length > 0) {
2315a0 485       for(var i = 0; i < dirs.length - 1; i++) {
5dfab6 486         if(rp.length > 0 ) {
U 487           dirList.push(new BcrFile(rp + '/' + dirs[i], dirs[i]));
2315a0 488           rp = rp + '/' + dirs[i];
5dfab6 489         } else {
U 490           dirList.push(new BcrFile(dirs[i], dirs[i]));
2315a0 491           rp = dirs[i];
5dfab6 492         }
U 493       }
494       var bl = new BcrFiles(dirList);
7d8ef6 495  
U 496       if(dirList.length > 0) {
497         template = $('#tpl-bcr').html();
498         Mustache.parse(template);   // optional, speeds up future uses
499         $('#bcnav').html(Mustache.render(template, bl));
2315a0 500       }
7d8ef6 501       
U 502       if(dirs.length > 0) {
503         dirList.push(new BcrFile(rp + '/' + dirs[dirs.length-1], dirs[dirs.length-1]));
504         template = $('#tpl-bcr2').html();
505         Mustache.parse(template);   // optional, speeds up future uses
506         $('#bcnav').append(Mustache.render(template, dirList[dirList.length-1]));        
507       } else {
508         template = $('#tpl-bcr2').html();
509         Mustache.parse(template);   // optional, speeds up future uses
510         $('#bcnav').append(Mustache.render(template, dirList[0]));        
511       }
512       
513       $('#bcnav').append($('#tpl-bcr3').html());
2315a0 514     } else {
a94216 515       pfad = '';
7d8ef6 516       template = $('#tpl-bcr2').html();
U 517       Mustache.parse(template);   // optional, speeds up future uses
518       $('#bcnav').append(Mustache.render(template, dirList[0]));   
519       $('#bcnav').append($('#tpl-bcr3').html());
5dfab6 520     }
7d8ef6 521     $('.breadcrumb-item').click(fm_bc_click);
U 522     $('#ansicht').click(fm_ansicht_umschalten);
523     fm_set_modus();
524   });
a3d410 525 }
U 526
c980bb 527 /*
U 528 function fm_bcr_step2(dirs, dirList) {
529   if(dirs.length > 0) {
530     dirList.push(new BcrFile(rp + '/' + dirs[dirs.length-1], dirs[dirs.length-1]));
531     $.get('tpl-bcr2.txt', function(template) {
532       $('#bcnav').append(Mustache.render(template, dirList[dirList.length-1]));  
533       $('#bcnav').append($('#tpl-bcr3').html());
534       fm_bcr_end();
535     });
536     //template = $('#tpl-bcr2').html();
537     //Mustache.parse(template);   // optional, speeds up future uses
538     //$('#bcnav').append(Mustache.render(template, dirList[dirList.length-1]));        
539   } else {
540     $.get('tpl-bcr2.txt', function(template) {
541       $('#bcnav').append(Mustache.render(template, dirList[0]));
542       $('#bcnav').append($('#tpl-bcr3').html());
543       fm_bcr_end();
544     });
545     //template = $('#tpl-bcr2').html();
546     //Mustache.parse(template);   // optional, speeds up future uses
547     //$('#bcnav').append(Mustache.render(template, dirList[0]));        
548   }  
549 }
550 */
551
305573 552 function fm_bcr_3() {
U 553   $.get('tpl-bcr3.txt', function(template) {
554     $('#bcnav').append(template);
555   });  
556 }
557
a3d410 558 function fm_bcr_end() {
U 559   $('.breadcrumb-item').click(fm_bc_click);
560   $('#ansicht').click(fm_ansicht_umschalten);
561   fm_set_modus();
e5ff42 562 }
U 563
564 function fm_menu_datei_speichern() {
5ebb8e 565   //var fname = $('.datei-gewaehlt').text();
U 566   var fname = openFileName;
567   if(fname !== undefined && fname !== '') {
568     fm_save_file(fname);
569   } else {
570     fm_menu_datei_speichern_unter();
571   }
572 }
573
574 function fm_save_file(saveFileName) {
7d8ef6 575   var content;
U 576   if(openEditor === 'text') {
577     content = cm.getValue();
578   } else {
579     content = ed.getContent();
580   }
5ebb8e 581   var m = '?c=de.uhilger.filecms.api.FileMgr&m=saveTextFile';
U 582   var u = '../svc' + m;
7d8ef6 583   fm_post(u, {p1: pfad, p2: saveFileName, p3: content}, function(resp) {
5ebb8e 584     openFileName = saveFileName;
U 585   });
586 }
587
588 function fm_menu_datei_speichern_unter() {
e5ff42 589   
915927 590   $('#modal_ok').click(function() {
U 591     // hier speichern
5ebb8e 592     fm_save_file($('#dateiname').val());
U 593     /*
915927 594     var m = '?c=de.uhilger.filecms.api.FileMgr&m=saveTextFile';
U 595     var u = '../svc' + m;
2121cc 596     fm_post(u, {p1: pfad, p2: $('#dateiname').val(), p3: cm.getValue()}, function(resp) {
915927 597
U 598     });
5ebb8e 599     */
915927 600   });
957b51 601   $('#saveModalTitle').text('Datei speichern');
c509a0 602   $('#dialogfrage').text("Dateiname?");
3ad4db 603   
U 604   var fname = $('.datei-gewaehlt').text();
605   if(fname !== undefined) {
606     $('#dateiname').val(fname);
607   } else {
608     $('#dateiname').val('');
609   }
c509a0 610   $('#dateiname').attr('placeholder', 'Dateiname');
915927 611   $('#saveModal').modal({
U 612     keyboard: false,
613     show: true
614   });
a4d3b5 615 }
U 616
b7475d 617 function fm_logout() {
U 618   var m = '?c=de.uhilger.filecms.pub.SessionManager&m=expireSession';
619   var u = '../pub' + m;
620   
621   fm_get(u, "text", function(resp) {
622     $('#userMenu').text('nicht angemeldet');
623     window.location.href = '../logout.html';
624   });
625 }
626
627
a4d3b5 628 /* ---- codemirror editor handling -------- */
U 629
630 function fm_code_edit(content) {
631   cm = CodeMirror.fromTextArea(document.getElementById("editspace"), {
632     lineNumbers: true,
633     mode: "xml",
634     viewportMargin : Infinity,
635     extraKeys: {
915927 636         "F9": function(cm) {
U 637         cm.setOption("fullScreen", !cm.getOption("fullScreen"));
638       },
639         "Esc": function(cm) {
640         if (cm.getOption("fullScreen")) cm.setOption("fullScreen", false);
641       }
a4d3b5 642     }
U 643   });
644   cm.setValue(content);
915927 645 }
a4d3b5 646
U 647
648
649 /* -------- helper functions ----------- */
650
b7475d 651 function fm_get(u, dtype, scallback) {
a4d3b5 652   $.ajax({
U 653     url: u,
654     type: "GET",
b7475d 655     dataType: dtype,
a4d3b5 656     success: scallback,
U 657     error: function (xhr, status, errorThrown) {
658       alert("Error: " + errorThrown + " Status: " + status + " URL: " + u);
659     },
660     complete: function (xhr, status) {
661       //console.log( "The request is complete!" );
662     }
663
664   });
915927 665 }
a4d3b5 666
U 667 function fm_post(u, d, scallback) {
668   $.ajax({
669     url: u,
670     data: d,
671     type: "POST",
672     dataType: "json",
673     success: scallback,
674     error: function (xhr, status, errorThrown) {
675       $('#fehler').html("Error: " + errorThrown + " Status: " + status);
676     },
677     complete: function (xhr, status) {
678       //alert( "The request is complete!" );
679     }
680   });
915927 681 }
a4d3b5 682
e5ff42 683 function fm_serialise(obj) {
U 684   return '{"' + obj.constructor.name + '":' + JSON.stringify(obj) + '}';
915927 685 }
e5ff42 686
7342b1 687 /* ----- Objekte ----- */
U 688
689 function FileList(fl) {
690   this.files = fl;
691 }
692
693 function FileRef(obj) {
694   var self = this;
695   this.fr = obj;
696   
697   this.typeClass = function() {
10d3d3 698     if(modus == 'kacheln') {
U 699       if(self.fr.isDirectory) {
a3d410 700         return 'fa-folder ordner';
10d3d3 701       } else {
a3d410 702         return 'fa-file datei';
10d3d3 703       }
7342b1 704     } else {
10d3d3 705       if(self.fr.isDirectory) {
a3d410 706         return 'fa-folder ordner';
10d3d3 707       } else {
a3d410 708         return 'fa-file-o datei';
10d3d3 709       }
7342b1 710     }
2121cc 711   };
U 712   
713   this.fileName = function() {
714     var namen = self.fr.absolutePath.split('/');
715     if(namen.length > 0) {
716       return namen[namen.length - 1];
717     } else {
718       return self.fr.absolutePath;
719     }
720   };
7342b1 721 }
5dfab6 722
U 723 function BcrFiles(fl) {
724   this.files = fl;
725 }
726
727 function BcrFile(rp, n) {
728   this.relPath = rp;
729   this.fName = n;
7aa566 730 }
U 731