Dateiverwaltung für die WebBox
ulrich
2017-02-27 42fecef285c712f2a8d9b1b6371edc6ea9d9fac6
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);  
42fece 182   fd.append('pfad', pfad);
7aa566 183   xhr.send(fd);          
U 184 }
185
186 /* ----- Uploader Ende --------------- */
10d3d3 187
fc1897 188 function fm_menu_delete() {
U 189   $('#confirmOk').click(function() {
190     // hier loeschen
191     fm_del_files();
192   });
957b51 193   $('#confirmModalTitle').text("Löschen");
U 194   $('#confirmModalBody').text("Wirklich löschen?");
fc1897 195   
U 196   /*var fname = $('.datei-gewaehlt').text();
197   if(fname !== undefined) {
198     $('#dateiname').val(fname);
199   } else {
200     $('#dateiname').val('');
201   }*/
202   //$('#dateiname').attr('placeholder', 'Dateiname');
203   $('#confirmModal').modal({
204     keyboard: false,
205     show: true
206   });
207 }
208
bef5c6 209 function fm_menu_test() {
U 210   var w = $('.ost').width();
211   if(w == 0) {
212     $('.ost').width('20%');
213     $('.ost').text('Hallo Welt!');
214   } else {
215     $('.ost').empty();
216     $('.ost').width(0);
217   }
218 }
219
10d3d3 220 function fm_ansicht_umschalten() {
U 221   if($('#ansicht').children(0).hasClass('fa-th-list')) {
222     $('#ansicht').children(0).addClass('fa-th-large');
223     $('#ansicht').children(0).removeClass('fa-th-list');
224     modus = 'liste';
225   } else {
226     $('#ansicht').children(0).addClass('fa-th-list');    
227     $('#ansicht').children(0).removeClass('fa-th-large');
228     modus = 'kacheln';
229   }
230   fm_get_list(pfad);
231 }
232
233 function fm_set_modus() {
234   if(modus == 'kacheln') {
235     $('#ansicht').children(0).addClass('fa-th-list');    
236     $('#ansicht').children(0).removeClass('fa-th-large');  
237   } else {
238     $('#ansicht').children(0).addClass('fa-th-large');
239     $('#ansicht').children(0).removeClass('fa-th-list');    
240   }
a4d3b5 241 }
U 242
243 function fm_menu_neue_textdatei() {
adf812 244   fm_text_edit('Neue Datei');
a4d3b5 245 }
U 246
305573 247 function fm_menu_neues_dokument() {
7d8ef6 248   fm_dok_edit('');
305573 249 }
U 250
a4d3b5 251 function fm_menu_datei_schliessen() {
U 252   $('.codeeditor-space').hide();
253   $('.code-editor-container').hide();
305573 254   $("#mce-editor").hide();
U 255   if(cm !== undefined) {
256     cm.toTextArea();
257   }
5ebb8e 258   openFileName = '';
7d8ef6 259   openEditor = '';
adf812 260   fm_get_list(pfad);
305573 261   fm_filectls_show();
e5ff42 262 }
U 263
17919c 264 function fm_dateiwahl(ev) {
5dfab6 265   var elem = this;
17919c 266   //console.log('dateiwahl nach click, event shift: ' + ev.shiftKey + ", event ctrl: " + ev.ctrlKey);
10d3d3 267   if(modus == 'kacheln') {
957b51 268     // Kacheln
10d3d3 269     if($(elem).children(0).hasClass('fa-folder')) {
957b51 270       if(/*ev.shiftKey || */ ev.ctrlKey) {
U 271         $(elem).find('.dateiname').addClass('datei-gewaehlt');
10d3d3 272       } else {
957b51 273         var ordner = $(elem).text().trim();
U 274         if(pfad.length > 0) {
275           pfad = pfad + '/' + ordner;
276         } else {
277           pfad = ordner;
278         }
279         fm_get_list(pfad);
10d3d3 280       }
U 281     } else if($(elem).children(0).hasClass('fa-file')) {
17919c 282       if(/*ev.shiftKey || */ ev.ctrlKey) {
U 283         // mehrere Dateien sollen gewaehlt werden
284       } else {
285         $('.datei-gewaehlt').removeClass('datei-gewaehlt');        
286       }
957b51 287       $(elem).find('.dateiname').addClass('datei-gewaehlt');
5dfab6 288     } else {
10d3d3 289       //console.log('kein folder oder file...');
5dfab6 290     }
U 291   } else {
957b51 292     // Liste
10d3d3 293     if($(elem).find('.datei-elem').children(0).hasClass('fa-file-o')) {
957b51 294       // Datei
17919c 295       if(/*ev.shiftKey || */ ev.ctrlKey) {
U 296         // mehrere Dateien sollen gewaehlt werden
297       } else {
298         $('.table-info').removeClass('table-info');
957b51 299         $('.datei-gewaehlt').removeClass('datei-gewaehlt');
17919c 300       }
10d3d3 301       $(elem).addClass('table-info');
U 302       $(elem).find('.dateiname').addClass('datei-gewaehlt');
303     } else {
957b51 304       // Ordner
U 305       if(/*ev.shiftKey || */ ev.ctrlKey) {
306         $(elem).children(0).addClass('datei-gewaehlt');
10d3d3 307       } else {
957b51 308         var ordner = $(elem).find('.dateiname').text();
U 309         if(pfad.length > 0) {
310           pfad = pfad + '/' + ordner;
311         } else {
312           pfad = ordner;
313         }
314         fm_get_list(pfad);
10d3d3 315       }
U 316     }   
5dfab6 317   }
c509a0 318 }
U 319
a94216 320 function fm_bc_click() {
U 321   var elem = this;
322   var bcPfad = $(elem).attr('rpath');
323   if(bcPfad !== undefined) {
c509a0 324     pfad = bcPfad;
a94216 325     fm_get_list(bcPfad);
U 326   } else {
327     pfad = '';
328     fm_get_list('');
329   }
330 }
331
42fece 332 function fm_text_edit(content, mode) {
305573 333   fm_filectls_hide();
3ad4db 334   $('.codeeditor-space').show();
U 335   $('.code-editor-container').show();
42fece 336   fm_code_edit(content, mode);  
7d8ef6 337   openEditor = 'text';
U 338 }
339
340 function fm_dok_edit(content) {
341   fm_filectls_hide();
0c1d5b 342   fm_dok_editor_init(userid);
7d8ef6 343   $("#mce-editor").show();
U 344   ed.setContent(content);
345   openEditor = 'dok';  
3ad4db 346 }
U 347
305573 348 function fm_filectls_hide() {
U 349   $('#zentrum_bc').hide();
350   $('#dateien').hide();
351 }
352
353 function fm_filectls_show() {
354   $('#zentrum_bc').show();
355   $('#dateien').show();  
356 }
b7475d 357 /* ----- API Calls ------------- */
U 358
0c1d5b 359 function fm_get_login() {
3ad4db 360   var m = '?c=de.uhilger.filecms.pub.SessionManager&m=getSessionUser';
U 361   var u = '../pub' + m;
362   fm_get(u, "text", function(resp) {
0c1d5b 363     userid = resp;
3ad4db 364     $('#userMenu').text(resp);
0c1d5b 365     //fm_dok_editor_init(resp);
7342b1 366   });  
c509a0 367 }
U 368
369 function fm_get_new_folder() {
370   $('#modal_ok').click(function() {
371     // hier speichern
372     var m = '?c=de.uhilger.filecms.api.FileMgr&m=newFolder&p=' + pfad + '&p=' + $('#dateiname').val();
373     var u = '../svc' + m;
374     fm_get(u, "json", function(resp) {
adf812 375       fm_get_list(pfad);
c509a0 376     });
U 377   });
957b51 378   $('#saveModalTitle').text('Neuer Ordner');
c509a0 379   $('#dialogfrage').text("Name?");
U 380   $('#dateiname').val('');
381   $('#dateiname').attr('placeholder', 'Ordnername');
382   $('#saveModal').modal({
383     keyboard: false,
384     show: true
385   });
7342b1 386 }
U 387
7d8ef6 388 function fm_get_file_content(typ) {
fc1897 389   var gewaehlte = $('.datei-gewaehlt');
957b51 390   //var fname = $(gewaehlte).find('.dateiname').text();
U 391   
392   var fname = $(gewaehlte[0]).text();
5ebb8e 393   openFileName = fname;
3ad4db 394   var m = '?c=de.uhilger.filecms.api.FileMgr&m=getCode&p=' + pfad + '&p=' + fname;
2121cc 395   var u = '../svc' + m;
3ad4db 396   fm_get(u, "text", function(resp) {
7d8ef6 397     if(typ == 'text') {
42fece 398       var mode = "text/x-java";
U 399       if(fname.endsWith('js')) {
400         mode = 'javascript';
401       } else if(fname.endsWith('xml')) {
402         mode = 'xml';
403       } else if(fname.endsWith('properties')) {
404         mode = 'xml';
405       }
406       fm_text_edit(resp, mode);
7d8ef6 407     } else {
U 408       fm_dok_edit(resp);
409     }
2121cc 410   });
3ad4db 411   
2121cc 412 }
U 413
fc8db1 414 function fm_view_file() {
U 415   // http://localhost:8080/file-cms/ui/#  
416   // http://localhost:8080/file-cms/data/admin/usw.
417   
418   var userid = $('#userMenu').text();
419   var gewaehlte = $('.datei-gewaehlt');
420   var fname = $(gewaehlte[0]).text();
0c1d5b 421   
U 422   var path = fm_get_path(userid);
423   
424   window.open(path + '/' + fname, '_blank');
fc8db1 425 }
U 426
fc1897 427 function fm_del_files() {
U 428   var gewaehlte = $('.datei-gewaehlt');
429   //console.log('anzahl: ' + gewaehlte.length);
430   var fnames = new Array();
957b51 431   var i = 0;
fc1897 432   while(i < gewaehlte.length) {
U 433     var str = { "java.lang.String": $(gewaehlte[i]).text()};
434     fnames.push(str);
435     //console.log('loeschen ' + pfad + ' ' + $(gewaehlte[i]).text());
957b51 436     //i += 2;
U 437     i++;
fc1897 438   }
U 439   
440   var liste = '{"List":' + JSON.stringify(fnames) + '}';
441   // 'liste' enthaelt:
442   // {"List":[{"java.lang.String":"test3.txt"},{"java.lang.String":"Test1.txt"},{"java.lang.String":"Test2.txt"}]}
957b51 443   // und wird auf dem Server zu einer List[ArrayList<String>] bei der jede ArrayList<String> nur ein Element hat 
fc1897 444   
U 445   var m = '?c=de.uhilger.filecms.api.FileMgr&m=deleteFiles&p=' + pfad + '&p=' + encodeURIComponent(liste);
446   var u = '../svc' + m;
447   fm_get(u, "text", function(resp) {
448     // console.log('deleteFiles gab folgendes zurueck: ' + resp);
449     fm_get_list(pfad);
450   });
451   
452 }
453
10d3d3 454 function fm_render_list(fl) {
U 455   if(modus == 'kacheln') {
456     // Kachelansicht
7d8ef6 457     var template = $('#tpl-kacheln').html();
U 458     Mustache.parse(template);   // optional, speeds up future uses
459     $('.datei-zeile').attr('onclick','').unbind('click');
460     $('#dateien').empty();
461     $('#dateien').html(Mustache.render(template, fl));
462     $('.figure').click(fm_dateiwahl);
463   } else {
464     // Listenansicht
465     var template = $('#tpl-liste').html();
466     Mustache.parse(template);   // optional, speeds up future uses
467     $('.figure').attr('onclick','').unbind('click');
468     $('#dateien').empty();
469     $('#dateien').html(Mustache.render(template, fl));
470     $('.datei-zeile').click(fm_dateiwahl);
471   }
472   /*
473   if(modus == 'kacheln') {
474     // Kachelansicht
a3d410 475     $.get('tpl-kacheln.txt', function(template) {
U 476       $('#dateien').empty();
477       $('#dateien').html(Mustache.render(template, fl));
478       $('.figure').click(fm_dateiwahl);
479     });
10d3d3 480     $('.datei-zeile').attr('onclick','').unbind('click');
U 481   } else {
482     // Listenansicht
a3d410 483     $.get('tpl-liste.txt', function(template) {
U 484       $('#dateien').empty();
485       $('#dateien').html(Mustache.render(template, fl));
486       $('.datei-zeile').click(fm_dateiwahl);
487     });
10d3d3 488     $('.figure').attr('onclick','').unbind('click');
U 489   }
7d8ef6 490   */
10d3d3 491 }
U 492
7342b1 493 // http://localhost:8079/file-cms/svc?c=de.uhilger.filecms.api.FileMgr&f=JSONNICE&m=list&p=
a94216 494 function fm_get_list(relPfad) {
10d3d3 495   $('#ansicht').attr('onclick','').unbind('click');
a94216 496   var m = '?c=de.uhilger.filecms.api.FileMgr&m=list&p=' + relPfad;
7342b1 497   var u = '../svc' + m;
U 498   fm_get(u, "json", function(resp) {
10d3d3 499     
2121cc 500     if(resp.List[0].FileRef !== undefined) {
U 501       var files = new Array();
c509a0 502       if(resp.List[0].FileRef instanceof Array) {
U 503         for(var i = 0; i < resp.List[0].FileRef.length; i++) {
504           files.push(new FileRef(resp.List[0].FileRef[i]));
505         }
506       } else {
507         files.push(new FileRef(resp.List[0].FileRef));
2121cc 508       }
U 509       var fl = new FileList(files);
10d3d3 510       fm_render_list(fl);
2121cc 511     } else {
U 512       $('#dateien').empty();
7342b1 513     }
5dfab6 514     
10d3d3 515     // Breadcrumb-Ansicht
7d8ef6 516     var template;
a94216 517     $('.breadcrumb-item').attr('onclick','').unbind('click');
2315a0 518     $('#bcnav').empty();
5dfab6 519     var dirList = new Array();
U 520     var rp = '';
a94216 521     //console.log("'" + relPfad + "'");
U 522     var dirs = relPfad.split('/');
523     //console.log(dirs.length);
2121cc 524     dirList.push(new BcrFile(rp, 'Home'));
a94216 525     if(relPfad.length > 0) {
2315a0 526       for(var i = 0; i < dirs.length - 1; i++) {
5dfab6 527         if(rp.length > 0 ) {
U 528           dirList.push(new BcrFile(rp + '/' + dirs[i], dirs[i]));
2315a0 529           rp = rp + '/' + dirs[i];
5dfab6 530         } else {
U 531           dirList.push(new BcrFile(dirs[i], dirs[i]));
2315a0 532           rp = dirs[i];
5dfab6 533         }
U 534       }
535       var bl = new BcrFiles(dirList);
7d8ef6 536  
U 537       if(dirList.length > 0) {
538         template = $('#tpl-bcr').html();
539         Mustache.parse(template);   // optional, speeds up future uses
540         $('#bcnav').html(Mustache.render(template, bl));
2315a0 541       }
7d8ef6 542       
U 543       if(dirs.length > 0) {
544         dirList.push(new BcrFile(rp + '/' + dirs[dirs.length-1], dirs[dirs.length-1]));
545         template = $('#tpl-bcr2').html();
546         Mustache.parse(template);   // optional, speeds up future uses
547         $('#bcnav').append(Mustache.render(template, dirList[dirList.length-1]));        
548       } else {
549         template = $('#tpl-bcr2').html();
550         Mustache.parse(template);   // optional, speeds up future uses
551         $('#bcnav').append(Mustache.render(template, dirList[0]));        
552       }
553       
554       $('#bcnav').append($('#tpl-bcr3').html());
2315a0 555     } else {
a94216 556       pfad = '';
7d8ef6 557       template = $('#tpl-bcr2').html();
U 558       Mustache.parse(template);   // optional, speeds up future uses
559       $('#bcnav').append(Mustache.render(template, dirList[0]));   
560       $('#bcnav').append($('#tpl-bcr3').html());
5dfab6 561     }
7d8ef6 562     $('.breadcrumb-item').click(fm_bc_click);
U 563     $('#ansicht').click(fm_ansicht_umschalten);
564     fm_set_modus();
565   });
e5ff42 566 }
U 567
568 function fm_menu_datei_speichern() {
5ebb8e 569   //var fname = $('.datei-gewaehlt').text();
U 570   var fname = openFileName;
571   if(fname !== undefined && fname !== '') {
572     fm_save_file(fname);
573   } else {
574     fm_menu_datei_speichern_unter();
575   }
576 }
577
578 function fm_save_file(saveFileName) {
7d8ef6 579   var content;
U 580   if(openEditor === 'text') {
581     content = cm.getValue();
582   } else {
583     content = ed.getContent();
584   }
5ebb8e 585   var m = '?c=de.uhilger.filecms.api.FileMgr&m=saveTextFile';
U 586   var u = '../svc' + m;
7d8ef6 587   fm_post(u, {p1: pfad, p2: saveFileName, p3: content}, function(resp) {
5ebb8e 588     openFileName = saveFileName;
U 589   });
590 }
591
592 function fm_menu_datei_speichern_unter() {
e5ff42 593   
915927 594   $('#modal_ok').click(function() {
U 595     // hier speichern
5ebb8e 596     fm_save_file($('#dateiname').val());
U 597     /*
915927 598     var m = '?c=de.uhilger.filecms.api.FileMgr&m=saveTextFile';
U 599     var u = '../svc' + m;
2121cc 600     fm_post(u, {p1: pfad, p2: $('#dateiname').val(), p3: cm.getValue()}, function(resp) {
915927 601
U 602     });
5ebb8e 603     */
915927 604   });
957b51 605   $('#saveModalTitle').text('Datei speichern');
c509a0 606   $('#dialogfrage').text("Dateiname?");
3ad4db 607   
U 608   var fname = $('.datei-gewaehlt').text();
609   if(fname !== undefined) {
610     $('#dateiname').val(fname);
611   } else {
612     $('#dateiname').val('');
613   }
c509a0 614   $('#dateiname').attr('placeholder', 'Dateiname');
915927 615   $('#saveModal').modal({
U 616     keyboard: false,
617     show: true
618   });
a4d3b5 619 }
U 620
b7475d 621 function fm_logout() {
U 622   var m = '?c=de.uhilger.filecms.pub.SessionManager&m=expireSession';
623   var u = '../pub' + m;
624   
625   fm_get(u, "text", function(resp) {
626     $('#userMenu').text('nicht angemeldet');
627     window.location.href = '../logout.html';
628   });
629 }
630
631
a4d3b5 632 /* ---- codemirror editor handling -------- */
U 633
42fece 634 function fm_code_edit(content, m) {
a4d3b5 635   cm = CodeMirror.fromTextArea(document.getElementById("editspace"), {
U 636     lineNumbers: true,
42fece 637     mode: m,
a4d3b5 638     viewportMargin : Infinity,
U 639     extraKeys: {
915927 640         "F9": function(cm) {
U 641         cm.setOption("fullScreen", !cm.getOption("fullScreen"));
642       },
643         "Esc": function(cm) {
644         if (cm.getOption("fullScreen")) cm.setOption("fullScreen", false);
645       }
a4d3b5 646     }
U 647   });
648   cm.setValue(content);
915927 649 }
a4d3b5 650
U 651
652
653 /* -------- helper functions ----------- */
654
b7475d 655 function fm_get(u, dtype, scallback) {
a4d3b5 656   $.ajax({
U 657     url: u,
658     type: "GET",
b7475d 659     dataType: dtype,
a4d3b5 660     success: scallback,
U 661     error: function (xhr, status, errorThrown) {
662       alert("Error: " + errorThrown + " Status: " + status + " URL: " + u);
663     },
664     complete: function (xhr, status) {
665       //console.log( "The request is complete!" );
666     }
667
668   });
915927 669 }
a4d3b5 670
U 671 function fm_post(u, d, scallback) {
672   $.ajax({
673     url: u,
674     data: d,
675     type: "POST",
676     dataType: "json",
677     success: scallback,
678     error: function (xhr, status, errorThrown) {
679       $('#fehler').html("Error: " + errorThrown + " Status: " + status);
680     },
681     complete: function (xhr, status) {
682       //alert( "The request is complete!" );
683     }
684   });
915927 685 }
a4d3b5 686
e5ff42 687 function fm_serialise(obj) {
U 688   return '{"' + obj.constructor.name + '":' + JSON.stringify(obj) + '}';
915927 689 }
e5ff42 690
7342b1 691 /* ----- Objekte ----- */
U 692
693 function FileList(fl) {
694   this.files = fl;
695 }
696
697 function FileRef(obj) {
698   var self = this;
699   this.fr = obj;
700   
701   this.typeClass = function() {
10d3d3 702     if(modus == 'kacheln') {
U 703       if(self.fr.isDirectory) {
a3d410 704         return 'fa-folder ordner';
10d3d3 705       } else {
a3d410 706         return 'fa-file datei';
10d3d3 707       }
7342b1 708     } else {
10d3d3 709       if(self.fr.isDirectory) {
a3d410 710         return 'fa-folder ordner';
10d3d3 711       } else {
a3d410 712         return 'fa-file-o datei';
10d3d3 713       }
7342b1 714     }
2121cc 715   };
U 716   
717   this.fileName = function() {
718     var namen = self.fr.absolutePath.split('/');
719     if(namen.length > 0) {
720       return namen[namen.length - 1];
721     } else {
722       return self.fr.absolutePath;
723     }
724   };
7342b1 725 }
5dfab6 726
U 727 function BcrFiles(fl) {
728   this.files = fl;
729 }
730
731 function BcrFile(rp, n) {
732   this.relPath = rp;
733   this.fName = n;
7aa566 734 }
U 735