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