Dateiverwaltung für die WebBox
ulrich
2017-03-21 6bd2c116db33972d971235120d9fa9107f2b4525
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;
be9b6d 27 var tmo2;
7165a1 28 var cutCopySrcDir;
U 29 var cutCopyFiles;
30 var cutCopyOperation;
fa012b 31 var loc;
cccd2b 32 var PERS_DIR = "Persoenlich";
U 33 var PUB_DIR = "Oeffentlich";
1f550a 34 var BASE_DIR = "$basis";
U 35 var DATA_DIR = "$daten";
11536c 36 var WWW_DIR = "www";
e3043f 37 var compilerIssues;
c7c502 38
U 39 function fm_init() {
305573 40   $("#mce-editor").hide();
a4d3b5 41   $('.codeeditor-space').hide();
U 42   $('.code-editor-container').hide();
a450f2 43   $('.sued').hide();
bef5c6 44   //$('.ost').attr('flex-basis', 0);
a4d3b5 45   $('#newTextFile').on('click', fm_menu_neue_textdatei);
305573 46   $('#newDoc').on('click', fm_menu_neues_dokument);
adf812 47   $('#newFolder').on('click', fm_get_new_folder);
fc8db1 48   $('#viewFile').on('click', fm_view_file);
7d8ef6 49   $('#editTextFile').on('click', function() {
U 50     fm_get_file_content('text');
51   });
52   $('#editDocFile').on('click', function() {
53     fm_get_file_content('dok');
54   });
e5ff42 55   $('#saveFile').on('click', fm_menu_datei_speichern);
5ebb8e 56   $('#saveFileAs').on('click', fm_menu_datei_speichern_unter);
a4d3b5 57   $('#closeFile').on('click', fm_menu_datei_schliessen);
8446c2 58   $('#renameFile').on('click', fm_menu_datei_umbenennen);
6bd2c1 59   $('#m-unzip').on('click', fm_menu_datei_entpacken);
fc1897 60   $('#m-del').on('click', fm_menu_delete);
7165a1 61   $('#m-cut').on('click', fm_menu_cut);
U 62   $('#m-copy').on('click', fm_menu_copy);
63   $('#m-paste').on('click', fm_menu_paste);
438b16 64   $('#m-shrink').on('click', fm_menu_shrink);
bef5c6 65   $('#m-test').on('click', fm_menu_test);
72e43d 66   $('#m-test-2').on('click', fm_menu_compile);
U 67   $('#m-test-3').on('click', fm_menu_compile_all);
a450f2 68   $('#m-compile-results').on('click', fm_fusszeile_zeigen);
7b3372 69   $('#m-build-app').on('click', fm_menu_build_app);
c509a0 70   $('#saveModal').on('hidden.bs.modal', function (e) {
915927 71     $('#modal_ok').attr('onclick','').unbind('click');
b7475d 72   });
U 73   $('#logout').click(fm_logout);  
a450f2 74   $('#fusszeile-schliessen').on('click', fm_fusszeile_schliessen);
05cfa7 75   fm_get_login();
7342b1 76   fm_get_list('');
7aa566 77   fm_init_uploader();
fa012b 78   /*
U 79   console.log('href: ' + window.location.href);
80   console.log('host: ' + window.location.host);
81   console.log('hostname: ' + window.location.hostname);
82   console.log('port: ' + window.location.port);
83   console.log('protocol: ' + window.location.protocol);
84   */
85   loc = window.location.protocol + '//' + window.location.host;
fc8db1 86 }
U 87
0c1d5b 88 function fm_resize_editor() {
U 89   window.clearTimeout(tmo);
90   tmo = window.setTimeout(function () {
91     try {
92       var myHeight = $('.zentrum').height() - $('.nord').height() - 4;
93       ed.theme.resizeTo('100%', myHeight);  // sets the dimensions of the editable area
94     } catch (err) {
95     }
96   }, 200);
a450f2 97 }
U 98
99 function fm_fusszeile_schliessen() {
100   $('.sued').hide();
101 }
102
103 function fm_fusszeile_zeigen() {
104   $('.sued').show();
fc8db1 105 }
U 106
0c1d5b 107 function fm_get_path(uid) {
U 108   //console.log('pfad: ' + pfad);
109   var restdir;
cccd2b 110   if(pfad.indexOf(PUB_DIR) > -1) {
U 111     restdir = pfad.substr(PUB_DIR.length);
112   } else if(pfad.indexOf(PERS_DIR) > -1) {
113     restdir = pfad.substr(PERS_DIR.length);
1f550a 114   } else if(pfad.indexOf(BASE_DIR) > -1) {
U 115     restdir = pfad.substr(BASE_DIR.length);
116   } else if(pfad.indexOf(DATA_DIR) > -1) {
117     restdir = pfad.substr(DATA_DIR.length);
0c1d5b 118   }
U 119   if(restdir !== undefined && restdir.startsWith('/')) {
120     restdir = restdir.substr(1);
11536c 121     if(restdir.indexOf(WWW_DIR) > -1) {
U 122       restdir = restdir.replace(WWW_DIR, 'data');
123     }
0c1d5b 124   }
U 125   var pdir = fm_get_base(uid);
11536c 126   // console.log('fm_get_path path: ' + pdir + "/" + restdir);
0c1d5b 127   if(restdir.length > 1) {
U 128     return pdir + "/" + restdir;
129   } else {
130     return pdir;
131   }
132 }
133
134 function fm_get_base(uid) {
135   //console.log('pfad: ' + pfad);
136   var pdir;
cccd2b 137   if(pfad.indexOf(PUB_DIR) > -1) {
11536c 138     pdir = '/data/' + uid;
cccd2b 139   } else if(pfad.indexOf(PERS_DIR) > -1) {
11536c 140     pdir = '/home/' + uid;
U 141   } else if(pfad.indexOf(BASE_DIR) > -1) {
142     pdir = '';
143   } else if(pfad.indexOf(DATA_DIR) > -1) {
144     pdir = '';
0c1d5b 145   }
11536c 146   //console.log('fm_get_base base: ' + pdir + uid);
U 147   return pdir;
0c1d5b 148 }
05cfa7 149
0c1d5b 150 function fm_dok_editor_init(uid) {
U 151   var base = fm_get_path(uid);
a75859 152   edCount = 0;
11536c 153   //console.log("fm_dok_editor_init calling tinymce.init with base: " + base + "/");
fc8db1 154   
0c1d5b 155   /*
U 156    * vgl.
157    * http://stackoverflow.com/questions/4651676/how-do-i-remove-tinymce-and-then-re-add-it
158    */
159   //tinymce.EditorManager.execCommand('mceRemoveControl',true, 'textarea.text-editor');
160   //tinymce.EditorManager.execCommand('mceAddControl',true, editor_id);
161   if(ed !== undefined) {
162     ed.destroy();
163   }
164   tinymce.remove('textarea.text-editor');
165   tinymce.EditorManager.editors = []; 
305573 166   
U 167   /*
168    * Konfiguration TinyMCE
169    */
170   tinymce.init({
547755 171     content_css : "/file-cms/ui/mce.css",
7b7627 172     //content_css: "/jslib/bootstrap/css/bootstrap.min.css",
7d8ef6 173     selector: "textarea.text-editor",
305573 174     statusbar: false,
U 175     menubar: false,
ea1ae0 176     plugins: 'advlist charmap code image link lists media print preview save table textcolor importcss',
7d8ef6 177     toolbar: 'undo redo | styleselect | image | link unlink | bullist numlist | outdent indent | code',
305573 178     /*
U 179     menu: {
180       file: {title: 'File', items: 'savevers | exit'},
181       edit: {title: 'Edit', items: 'undo redo | cut copy paste pastetext | selectall'},
182       view: {title: 'View', items: 'visualaid | code | link image media | template hr'},
183     },
184     */
0c1d5b 185     resize: 'both',
ea1ae0 186     importcss_append: true,
305573 187     width: "100%",
U 188     height: '100%',
11536c 189     relative_urls : true, 
U 190     convert_urls : false, 
0c1d5b 191     document_base_url : base + "/",
305573 192     setup: function (editor) {
U 193       ed = editor;
194     }
195   });
0c1d5b 196   
U 197   $(window).on('resize', fm_resize_editor);
198   fm_resize_editor();
10d3d3 199 }
7aa566 200
U 201 /* ----- Uploader Anfang ----------*/
202
203 var dateien = new Array();
204
205 function fm_init_uploader() {
206   var dropzone = document.getElementById("dateien");  
207   dropzone.ondragover = dropzone.ondragenter = function(event) {  
208     event.stopPropagation();  
209     event.preventDefault();  
210   };
211
212   dropzone.ondrop = function(event) {  
213     event.stopPropagation();  
214     event.preventDefault();  
7ebde1 215     var fileList = event.dataTransfer.files;  
U 216     for (var i=0; i<fileList.length; i++) {  
217       dateien.push(fileList[i]);
218     }
219     sendFile(dateien.pop());
7aa566 220   };
U 221 }
222
223 function sendFile(datei) {
7ebde1 224   var uri = "../api/upload";
7aa566 225   var xhr = new XMLHttpRequest();  
U 226   var fd = new FormData();  
227   xhr.open("POST", uri, true);  
228   xhr.onreadystatechange = function() {  
229     if (xhr.readyState == 4 && xhr.status == 200) {  
230       fm_get_list(pfad);
7ebde1 231       if(dateien.length > 0) {
U 232         sendFile(dateien.pop());
233       }
7aa566 234     }  
U 235   };  
7ebde1 236   fd.append('dateiauswahlfeld', datei);  
42fece 237   fd.append('pfad', pfad);
7aa566 238   xhr.send(fd);          
U 239 }
240
241 /* ----- Uploader Ende --------------- */
10d3d3 242
7165a1 243 /* ------- Dateifunktionen Start ----------- */
U 244
245 function fm_menu_cut() {
98f088 246   //alert('fm_menu_cut');
U 247   fm_cut_files();
7165a1 248 }
U 249 function fm_menu_copy() {
98f088 250   //alert('fm_menu_copy');
U 251   fm_copy_files();
7165a1 252 }
U 253 function fm_menu_paste() {
98f088 254   //alert('fm_menu_paste');
U 255   fm_paste_files();
7165a1 256 }
fc1897 257 function fm_menu_delete() {
U 258   $('#confirmOk').click(function() {
a75859 259     $('#confirmOk').attr('onclick','').unbind('click');
fc1897 260     fm_del_files();
U 261   });
a75859 262   $('#confirmOk').text("Loeschen");
U 263   $('#confirmOk').removeClass('btn-primary');
264   $('#confirmOk').addClass('btn-danger');
265   $('#confirmClose').hide();
957b51 266   $('#confirmModalTitle').text("Löschen");
U 267   $('#confirmModalBody').text("Wirklich löschen?");
fc1897 268   $('#confirmModal').modal({
U 269     keyboard: false,
270     show: true
271   });
272 }
7165a1 273
U 274 /*
275  * Gewaehlte Dateien feststellen
276  * 
277  * @returns {String} eine per JSON.stringify schon vorbereitete List zum 
278  * Absenden als Parameter an den Server
279  */
280 function fm_gewaehlte_dateien() {
281   var gewaehlte = $('.datei-gewaehlt');
a450f2 282   /*
7165a1 283   //console.log('anzahl: ' + gewaehlte.length);
U 284   var fnames = new Array();
285   var i = 0;
286   while(i < gewaehlte.length) {
287     var str = { "java.lang.String": $(gewaehlte[i]).text()};
288     fnames.push(str);
289     //console.log('loeschen ' + pfad + ' ' + $(gewaehlte[i]).text());
290     //i += 2;
291     i++;
292   }
293   var liste = '{"List":' + JSON.stringify(fnames) + '}';
294   // 'liste' enthaelt:
295   // {"List":[{"java.lang.String":"test3.txt"},{"java.lang.String":"Test1.txt"},{"java.lang.String":"Test2.txt"}]}
296   // und wird auf dem Server zu einer List[ArrayList<String>] bei der jede ArrayList<String> nur ein Element hat 
297   return liste;
a450f2 298   */
U 299   return fm_dateiliste_bilden(gewaehlte);
7165a1 300 }
a450f2 301
U 302 function fm_dateiliste_bilden(gewaehlte) {
303   var fnames = new Array();
304   var i = 0;
305   while(i < gewaehlte.length) {
306     var str = { "java.lang.String": $(gewaehlte[i]).text()};
307     fnames.push(str);
308     //console.log('loeschen ' + pfad + ' ' + $(gewaehlte[i]).text());
309     //i += 2;
310     i++;
311   }
312   var liste = '{"List":' + JSON.stringify(fnames) + '}';
313   // 'liste' enthaelt:
314   // {"List":[{"java.lang.String":"test3.txt"},{"java.lang.String":"Test1.txt"},{"java.lang.String":"Test2.txt"}]}
315   // und wird auf dem Server zu einer List[ArrayList<String>] bei der jede ArrayList<String> nur ein Element hat 
316   return liste;
317 }
318
7165a1 319 /* --------- Dateifunktionen Ende ---------- */
fc1897 320
bef5c6 321 function fm_menu_test() {
U 322   var w = $('.ost').width();
323   if(w == 0) {
324     $('.ost').width('20%');
325     $('.ost').text('Hallo Welt!');
326   } else {
327     $('.ost').empty();
328     $('.ost').width(0);
329   }
330 }
331
72e43d 332 function fm_menu_compile() {
fd0b4c 333   fm_compile('0', fm_mark_compile_results_in_editor);
72e43d 334 }
U 335 function fm_menu_compile_all() {
336   fm_compile_all();
fd0b4c 337 }
U 338
7b3372 339 function fm_menu_build_app() {
U 340   fm_build_app();
341 }
342
fd0b4c 343 function fm_mark_compile_results_in_editor(resp) {
U 344   cm.clearGutter("breakpoints");
345
346   if(resp.List[0].CompilerIssue !== undefined) {
d9d37b 347     cm.setGutterMarker(0, "breakpoints", makeMarker("Code hat Fehler"));
fd0b4c 348     var lno;
U 349     var eMsg;
350     if(resp.List[0].CompilerIssue instanceof Array) {
351       var issueNo = 0;
352       while(issueNo < resp.List[0].CompilerIssue.length) {
353         // console.log(resp.List[0].CompilerIssue[issueNo].kind);
354         // console.log(resp.List[0].CompilerIssue[issueNo].lineNumber);
355         // console.log(resp.List[0].CompilerIssue[issueNo].sourceName);
356         // console.log(resp.List[0].CompilerIssue[issueNo].message);
357         lno = resp.List[0].CompilerIssue[issueNo].lineNumber;
358         eMsg = resp.List[0].CompilerIssue[issueNo].kind + ' ' + resp.List[0].CompilerIssue[issueNo].message;
359         cm.setGutterMarker(lno-1, "breakpoints", makeMarker(eMsg));
360         issueNo++;
361       }
362     } else {
363       lno = resp.List[0].CompilerIssue.lineNumber;
364       eMsg = resp.List[0].CompilerIssue.kind + ' ' + resp.List[0].CompilerIssue.message;
365       cm.setGutterMarker(lno-1, "breakpoints", makeMarker(eMsg));
366     }
367   }
368 }
369
7b3372 370 function fm_build_app() {
U 371   var m = '?c=de.uhilger.filecms.api.CompileService&m=buildApp&p=' + pfad;
372   var u = '../svc' + m;
373   fm_get(u, "text", function(resp) {
374     $('.system-out').empty();
375     $('.system-out').append('Ergebnis von Build app: ' + resp);
376     fm_fusszeile_zeigen();
377   });
378 }
379
72e43d 380 function fm_compile_all() {
U 381   var m = '?c=de.uhilger.filecms.api.CompileService&m=compileAll&p=' + pfad;
382   var u = '../svc' + m;
383   fm_get(u, "json", function(resp) {
384     if(resp.List[0].CompilerIssue !== undefined) {
385       var lno;
386       var eMsg;
a450f2 387       var issueList = new Array();
72e43d 388       if(resp.List[0].CompilerIssue instanceof Array) {
U 389         var issueNo = 0;
390         while(issueNo < resp.List[0].CompilerIssue.length) {
a450f2 391           /*
U 392           $('.system-out').append('   +++ ---- +++   ');
393           $('.system-out').append(resp.List[0].CompilerIssue[issueNo].kind);
394           $('.system-out').append(resp.List[0].CompilerIssue[issueNo].lineNumber);
395           $('.system-out').append(resp.List[0].CompilerIssue[issueNo].sourceName);
396           $('.system-out').append(resp.List[0].CompilerIssue[issueNo].message);
397           */
398           var issue = new CompilerIssue(
399             resp.List[0].CompilerIssue[issueNo].sourceName,
400             resp.List[0].CompilerIssue[issueNo].message,
401             resp.List[0].CompilerIssue[issueNo].kind,
402             resp.List[0].CompilerIssue[issueNo].lineNumber
403           );
404           issueList.push(issue);
405
406           /*
72e43d 407           console.log('   +++ ---- +++   ');
U 408           console.log(resp.List[0].CompilerIssue[issueNo].kind);
409           console.log(resp.List[0].CompilerIssue[issueNo].lineNumber);
410           console.log(resp.List[0].CompilerIssue[issueNo].sourceName);
411           console.log(resp.List[0].CompilerIssue[issueNo].message);
a450f2 412           */
72e43d 413           issueNo++;
U 414         }
415       } else {
a450f2 416         //lno = resp.List[0].CompilerIssue.lineNumber;
U 417         //eMsg = resp.List[0].CompilerIssue.kind + ' ' + resp.List[0].CompilerIssue.message;
418         //$('.system-out').append(lno + ' ' + eMsg);
419         //console.log(lno + ' ' + eMsg);
420         var issue = new CompilerIssue(
421           resp.List[0].CompilerIssue.sourceName,
422           resp.List[0].CompilerIssue.message,
423           resp.List[0].CompilerIssue.kind,
424           resp.List[0].CompilerIssue.lineNumber
425         );
426         issueList.push(issue);        
72e43d 427       }
a450f2 428       var theList = new IssueList(issueList);
U 429       var template = $('#tpl-ci').html();
430       Mustache.parse(template);   // optional, speeds up future uses
431       $('.system-out').empty();
432       $('.system-out').html(Mustache.render(template, theList));
433       $('.sued').show();
72e43d 434     }
U 435   });
436 }
437
fd0b4c 438 function fm_compile(modeStr, callback) {
0ac262 439   var liste = fm_gewaehlte_dateien();
fd0b4c 440   var m = '?c=de.uhilger.filecms.api.CompileService&m=compile&p=' + pfad + '&p=' + encodeURIComponent(liste) + 
U 441           '&p=' + modeStr;
0ac262 442   var u = '../svc' + m;
e3043f 443   fm_get(u, "json", function(resp) {
fd0b4c 444     callback(resp);
0ac262 445   });
U 446 }
447
10d3d3 448 function fm_ansicht_umschalten() {
U 449   if($('#ansicht').children(0).hasClass('fa-th-list')) {
450     $('#ansicht').children(0).addClass('fa-th-large');
451     $('#ansicht').children(0).removeClass('fa-th-list');
452     modus = 'liste';
453   } else {
454     $('#ansicht').children(0).addClass('fa-th-list');    
455     $('#ansicht').children(0).removeClass('fa-th-large');
456     modus = 'kacheln';
457   }
458   fm_get_list(pfad);
459 }
460
461 function fm_set_modus() {
462   if(modus == 'kacheln') {
463     $('#ansicht').children(0).addClass('fa-th-list');    
464     $('#ansicht').children(0).removeClass('fa-th-large');  
465   } else {
466     $('#ansicht').children(0).addClass('fa-th-large');
467     $('#ansicht').children(0).removeClass('fa-th-list');    
468   }
a4d3b5 469 }
U 470
471 function fm_menu_neue_textdatei() {
adf812 472   fm_text_edit('Neue Datei');
a4d3b5 473 }
U 474
305573 475 function fm_menu_neues_dokument() {
7d8ef6 476   fm_dok_edit('');
305573 477 }
U 478
a4d3b5 479 function fm_menu_datei_schliessen() {
3003b2 480   if(openEditor === 'text') {
U 481     if(!cm.getDoc().isClean()) {
482       fm_ask_for_save();
483     } else {
484       fm_do_close();
485     }
486   } else {
487     if(tinymce.activeEditor.undoManager.hasUndo()) {
488       fm_ask_for_save();
489     } else {
490       fm_do_close();
491     }
492   }
493 }
494
495 function fm_ask_for_save() {
496   // hier Abfrage ob gespeichert werden soll    
497   $('#confirmOk').click(function() {
498     $('#confirmOk').attr('onclick','').unbind('click');
499     fm_menu_datei_speichern(function() {
a75859 500       fm_do_close();
U 501     });
3003b2 502   });
U 503   $('#confirmCancel').click(function() {
504     $('#confirmCancel').attr('onclick','').unbind('click');
505   });
506   $('#confirmClose').show();
507   $('#confirmClose').click(function() {
508     $('#confirmClose').attr('onclick','').unbind('click');
a75859 509     fm_do_close();
3003b2 510   });
U 511   $('#confirmOk').text("Speichern");
512   $('#confirmOk').addClass('btn-primary');
513   $('#confirmOk').removeClass('btn-danger');
514   $('#confirmModalTitle').text("Schliessen");
515   $('#confirmModalBody').text("Speichern vor dem Schliessen?");
516   $('#confirmModal').modal({
517     keyboard: false,
518     show: true
519   });
a75859 520 }
U 521
522 function fm_do_close() {
a4d3b5 523   $('.codeeditor-space').hide();
U 524   $('.code-editor-container').hide();
305573 525   $("#mce-editor").hide();
U 526   if(cm !== undefined) {
527     cm.toTextArea();
528   }
5ebb8e 529   openFileName = '';
7d8ef6 530   openEditor = '';
adf812 531   fm_get_list(pfad);
305573 532   fm_filectls_show();
e5ff42 533 }
U 534
17919c 535 function fm_dateiwahl(ev) {
5dfab6 536   var elem = this;
17919c 537   //console.log('dateiwahl nach click, event shift: ' + ev.shiftKey + ", event ctrl: " + ev.ctrlKey);
10d3d3 538   if(modus == 'kacheln') {
957b51 539     // Kacheln
10d3d3 540     if($(elem).children(0).hasClass('fa-folder')) {
957b51 541       if(/*ev.shiftKey || */ ev.ctrlKey) {
U 542         $(elem).find('.dateiname').addClass('datei-gewaehlt');
10d3d3 543       } else {
957b51 544         var ordner = $(elem).text().trim();
U 545         if(pfad.length > 0) {
546           pfad = pfad + '/' + ordner;
547         } else {
548           pfad = ordner;
549         }
550         fm_get_list(pfad);
10d3d3 551       }
7f2a41 552     } else if($(elem).children(0).hasClass('datei')) {
17919c 553       if(/*ev.shiftKey || */ ev.ctrlKey) {
U 554         // mehrere Dateien sollen gewaehlt werden
555       } else {
556         $('.datei-gewaehlt').removeClass('datei-gewaehlt');        
557       }
957b51 558       $(elem).find('.dateiname').addClass('datei-gewaehlt');
5dfab6 559     } else {
10d3d3 560       //console.log('kein folder oder file...');
5dfab6 561     }
U 562   } else {
957b51 563     // Liste
10d3d3 564     if($(elem).find('.datei-elem').children(0).hasClass('fa-file-o')) {
957b51 565       // Datei
17919c 566       if(/*ev.shiftKey || */ ev.ctrlKey) {
U 567         // mehrere Dateien sollen gewaehlt werden
568       } else {
569         $('.table-info').removeClass('table-info');
957b51 570         $('.datei-gewaehlt').removeClass('datei-gewaehlt');
17919c 571       }
10d3d3 572       $(elem).addClass('table-info');
U 573       $(elem).find('.dateiname').addClass('datei-gewaehlt');
574     } else {
957b51 575       // Ordner
U 576       if(/*ev.shiftKey || */ ev.ctrlKey) {
577         $(elem).children(0).addClass('datei-gewaehlt');
10d3d3 578       } else {
957b51 579         var ordner = $(elem).find('.dateiname').text();
U 580         if(pfad.length > 0) {
581           pfad = pfad + '/' + ordner;
582         } else {
583           pfad = ordner;
584         }
585         fm_get_list(pfad);
10d3d3 586       }
U 587     }   
5dfab6 588   }
c509a0 589 }
U 590
a94216 591 function fm_bc_click() {
U 592   var elem = this;
593   var bcPfad = $(elem).attr('rpath');
594   if(bcPfad !== undefined) {
c509a0 595     pfad = bcPfad;
a94216 596     fm_get_list(bcPfad);
U 597   } else {
598     pfad = '';
599     fm_get_list('');
600   }
601 }
602
42fece 603 function fm_text_edit(content, mode) {
305573 604   fm_filectls_hide();
3ad4db 605   $('.codeeditor-space').show();
U 606   $('.code-editor-container').show();
42fece 607   fm_code_edit(content, mode);  
7d8ef6 608   openEditor = 'text';
U 609 }
610
611 function fm_dok_edit(content) {
612   fm_filectls_hide();
0c1d5b 613   fm_dok_editor_init(userid);
7d8ef6 614   $("#mce-editor").show();
be9b6d 615   
U 616   window.clearTimeout(tmo2);
617   tmo2 = window.setTimeout(function () {
618     try {
619       ed.setContent(content);
620       openEditor = 'dok';  
621     } catch (err) {
622     }
623   }, 200);
3ad4db 624 }
U 625
305573 626 function fm_filectls_hide() {
U 627   $('#zentrum_bc').hide();
628   $('#dateien').hide();
547755 629   $('#editMenu').addClass('disabled');
305573 630 }
U 631
632 function fm_filectls_show() {
633   $('#zentrum_bc').show();
634   $('#dateien').show();  
547755 635   $('#editMenu').removeClass('disabled');
305573 636 }
b7475d 637 /* ----- API Calls ------------- */
U 638
0c1d5b 639 function fm_get_login() {
3ad4db 640   var m = '?c=de.uhilger.filecms.pub.SessionManager&m=getSessionUser';
U 641   var u = '../pub' + m;
642   fm_get(u, "text", function(resp) {
0c1d5b 643     userid = resp;
3ad4db 644     $('#userMenu').text(resp);
7342b1 645   });  
c509a0 646 }
U 647
648 function fm_get_new_folder() {
649   $('#modal_ok').click(function() {
650     // hier speichern
651     var m = '?c=de.uhilger.filecms.api.FileMgr&m=newFolder&p=' + pfad + '&p=' + $('#dateiname').val();
652     var u = '../svc' + m;
653     fm_get(u, "json", function(resp) {
adf812 654       fm_get_list(pfad);
c509a0 655     });
U 656   });
957b51 657   $('#saveModalTitle').text('Neuer Ordner');
c509a0 658   $('#dialogfrage').text("Name?");
U 659   $('#dateiname').val('');
660   $('#dateiname').attr('placeholder', 'Ordnername');
661   $('#saveModal').modal({
662     keyboard: false,
663     show: true
664   });
7342b1 665 }
U 666
7d8ef6 667 function fm_get_file_content(typ) {
fc1897 668   var gewaehlte = $('.datei-gewaehlt');
957b51 669   //var fname = $(gewaehlte).find('.dateiname').text();
U 670   
671   var fname = $(gewaehlte[0]).text();
5ebb8e 672   openFileName = fname;
3ad4db 673   var m = '?c=de.uhilger.filecms.api.FileMgr&m=getCode&p=' + pfad + '&p=' + fname;
2121cc 674   var u = '../svc' + m;
3ad4db 675   fm_get(u, "text", function(resp) {
7d8ef6 676     if(typ == 'text') {
42fece 677       var mode = "text/x-java";
U 678       if(fname.endsWith('js')) {
679         mode = 'javascript';
680       } else if(fname.endsWith('xml')) {
681         mode = 'xml';
682       } else if(fname.endsWith('properties')) {
683         mode = 'xml';
684       }
685       fm_text_edit(resp, mode);
7d8ef6 686     } else {
U 687       fm_dok_edit(resp);
688     }
2121cc 689   });
3ad4db 690   
2121cc 691 }
U 692
fc8db1 693 function fm_view_file() {
U 694   // http://localhost:8080/file-cms/ui/#  
695   // http://localhost:8080/file-cms/data/admin/usw.
696   
697   var userid = $('#userMenu').text();
698   var gewaehlte = $('.datei-gewaehlt');
699   var fname = $(gewaehlte[0]).text();
0c1d5b 700   
U 701   var path = fm_get_path(userid);
702   
703   window.open(path + '/' + fname, '_blank');
fc8db1 704 }
U 705
8446c2 706 function fm_menu_datei_umbenennen() {
U 707   var gewaehlte = $('.datei-gewaehlt');
708   var fname = $(gewaehlte[0]).text();
663ee9 709
U 710   $('#modal_ok').click(function() {
711     // hier umbenennen
50bb41 712     fm_rename_file(fname, pfad, $('#dateiname').val());
663ee9 713   });
U 714   $('#saveModalTitle').text('Datei umbenennen');
715   $('#dialogfrage').text("Neuer Dateiname?");  
716
717   if(fname !== undefined) {
718     $('#dateiname').val(fname);
719     $('#dateiname').attr('placeholder', 'Dateiname');
720     $('#saveModal').modal({
721       keyboard: false,
722       show: true
723     });
724   }
725 }
726
6bd2c1 727 function fm_menu_datei_entpacken() {
U 728   var gewaehlte = $('.datei-gewaehlt');
729   var fname = $(gewaehlte[0]).text();
730   fm_unzip_file(fname);
731 }
732
733 function fm_unzip_file(fn) {
734   var m = '?c=de.uhilger.filecms.api.FileMgr&m=extractZipfile';
735   m = m + '&p=' + pfad; 
736   m = m + '&p=' + fn; 
737   var u = '../svc' + m;
738   fm_get(u, "text", function(resp) {
739     $('.system-out').empty();
740     $('.system-out').append('Rueckmeldung vom Entpacken: ' + resp);
741     fm_fusszeile_zeigen();
742     fm_get_list(pfad);
743   });  
744 }
745
663ee9 746 function fm_rename_file(fn, p, neuerName) {
U 747   var m = '?c=de.uhilger.filecms.api.FileMgr&m=renameFile';
748   m = m + '&p=' + p; 
749   m = m + '&p=' + fn; 
750   m = m + '&p=' + neuerName; 
751   var u = '../svc' + m;
752   fm_get(u, "text", function(resp) {
753     fm_get_list(pfad);
754   });  
8446c2 755 }
U 756
438b16 757 function fm_menu_shrink() {
U 758   var gewaehlte = $('.datei-gewaehlt');
759   var fname = $(gewaehlte[0]).text();
760   var m = '?c=de.uhilger.filecms.api.FileMgr&m=bildVerkleinern';
761   m = m + '&p=' + pfad; 
762   m = m + '&p=' + fname; 
763   var u = '../svc' + m;
764   fm_get(u, "text", function(resp) {
765     fm_get_list(pfad);
766   });  
767 }
768
7165a1 769 /*
U 770  * Hier merkt sich die Dateiverwalting die markierten Dateien fuer 
771  * eine Dateioperation. Bei cut wird in der 'paste' Operation auf dem Server 
772  * fuer die 'gemerkten' Dateien ein Move gemacht. Die Dateien werden 
773  * vom gewaehlten Ort zum Zielort verschoben.
774  * 
775  * @returns {undefined}
776  */
777 function fm_cut_files() {
778   cutCopySrcDir = pfad;
779   cutCopyFiles = fm_gewaehlte_dateien();
780   cutCopyOperation = 'cut';
781 }
782
783 /*
784  * Hier merkt sich die Dateiverwalting die markierten Dateien fuer 
785  * eine Dateioperation. Bei copy wird in der 'paste' Operation auf dem Server 
786  * fuer die 'gemerkten' Dateien eine Kopie gemacht. Die Dateien werden 
787  * am gewaehlten Ort behalten und am Zielort wird eine Kopier der 
788  * gewaehlten DAteien erstellt
789  * 
790  * @returns {undefined}
791  */
792 function fm_copy_files() {
793   cutCopySrcDir = pfad;
794   cutCopyFiles = fm_gewaehlte_dateien();
9e2964 795   cutCopyOperation = 'copy';
7165a1 796 }
U 797
798 /*
799  * Hier wird fuer eine zuvor markierte Liste von Dateien, fuer die 
800  * Cut oder Copy gewaehlt wurde, die Operations ausgefuehrt (move oder copy)
801  * @returns {undefined}
802  */
803 function fm_paste_files() {
804   var m;
9e2964 805   if(cutCopyOperation === 'cut') {
U 806     //m = '?c=de.uhilger.filecms.api.FileMgr&m=moveFiles'; //&p=' + cutCopySrcDir + '&p=' + pfad + '&p=' + encodeURIComponent(liste);
807     m = '?c=de.uhilger.filecms.api.FileMgr&m=moveFiles&p=' + cutCopySrcDir + '&p=' + pfad + '&p=' + encodeURIComponent(cutCopyFiles);
7165a1 808   } else {
9e2964 809     //m = '?c=de.uhilger.filecms.api.FileMgr&m=copyFiles'; //&p=' + cutCopySrcDir + '&p=' + pfad + '&p=' + encodeURIComponent(liste);
U 810     m = '?c=de.uhilger.filecms.api.FileMgr&m=copyFiles&p=' + cutCopySrcDir + '&p=' + pfad + '&p=' + encodeURIComponent(cutCopyFiles);
fc1897 811   }
7165a1 812   var u = '../svc' + m;  
9e2964 813   fm_get(u, "text", function(resp) {
U 814     // console.log('deleteFiles gab folgendes zurueck: ' + resp);
815     fm_get_list(pfad);
816   });
817   /*
818   fm_post(u, {p1: encodeURIComponent(cutCopySrcDir), p2: encodeURIComponent(pfad), p3: encodeURIComponent(cutCopyFiles)},'text', function(resp) {
7165a1 819     // resp evtl. zeigen..
U 820     fm_get_list(pfad);
821   });
9e2964 822   */
7165a1 823 }
U 824
825 function fm_del_files() {
826   var liste = fm_gewaehlte_dateien();
fc1897 827   var m = '?c=de.uhilger.filecms.api.FileMgr&m=deleteFiles&p=' + pfad + '&p=' + encodeURIComponent(liste);
U 828   var u = '../svc' + m;
829   fm_get(u, "text", function(resp) {
830     // console.log('deleteFiles gab folgendes zurueck: ' + resp);
831     fm_get_list(pfad);
832   });
833 }
834
10d3d3 835 function fm_render_list(fl) {
U 836   if(modus == 'kacheln') {
837     // Kachelansicht
7d8ef6 838     var template = $('#tpl-kacheln').html();
U 839     Mustache.parse(template);   // optional, speeds up future uses
840     $('.datei-zeile').attr('onclick','').unbind('click');
841     $('#dateien').empty();
842     $('#dateien').html(Mustache.render(template, fl));
843     $('.figure').click(fm_dateiwahl);
844   } else {
845     // Listenansicht
846     var template = $('#tpl-liste').html();
847     Mustache.parse(template);   // optional, speeds up future uses
848     $('.figure').attr('onclick','').unbind('click');
849     $('#dateien').empty();
850     $('#dateien').html(Mustache.render(template, fl));
851     $('.datei-zeile').click(fm_dateiwahl);
852   }
853   /*
854   if(modus == 'kacheln') {
855     // Kachelansicht
a3d410 856     $.get('tpl-kacheln.txt', function(template) {
U 857       $('#dateien').empty();
858       $('#dateien').html(Mustache.render(template, fl));
859       $('.figure').click(fm_dateiwahl);
860     });
10d3d3 861     $('.datei-zeile').attr('onclick','').unbind('click');
U 862   } else {
863     // Listenansicht
a3d410 864     $.get('tpl-liste.txt', function(template) {
U 865       $('#dateien').empty();
866       $('#dateien').html(Mustache.render(template, fl));
867       $('.datei-zeile').click(fm_dateiwahl);
868     });
10d3d3 869     $('.figure').attr('onclick','').unbind('click');
U 870   }
7d8ef6 871   */
10d3d3 872 }
U 873
7342b1 874 // http://localhost:8079/file-cms/svc?c=de.uhilger.filecms.api.FileMgr&f=JSONNICE&m=list&p=
a94216 875 function fm_get_list(relPfad) {
10d3d3 876   $('#ansicht').attr('onclick','').unbind('click');
a94216 877   var m = '?c=de.uhilger.filecms.api.FileMgr&m=list&p=' + relPfad;
7342b1 878   var u = '../svc' + m;
U 879   fm_get(u, "json", function(resp) {
10d3d3 880     
2121cc 881     if(resp.List[0].FileRef !== undefined) {
U 882       var files = new Array();
c509a0 883       if(resp.List[0].FileRef instanceof Array) {
U 884         for(var i = 0; i < resp.List[0].FileRef.length; i++) {
885           files.push(new FileRef(resp.List[0].FileRef[i]));
886         }
887       } else {
888         files.push(new FileRef(resp.List[0].FileRef));
2121cc 889       }
U 890       var fl = new FileList(files);
10d3d3 891       fm_render_list(fl);
2121cc 892     } else {
U 893       $('#dateien').empty();
7342b1 894     }
5dfab6 895     
10d3d3 896     // Breadcrumb-Ansicht
7d8ef6 897     var template;
a94216 898     $('.breadcrumb-item').attr('onclick','').unbind('click');
2315a0 899     $('#bcnav').empty();
5dfab6 900     var dirList = new Array();
U 901     var rp = '';
a94216 902     //console.log("'" + relPfad + "'");
U 903     var dirs = relPfad.split('/');
904     //console.log(dirs.length);
2121cc 905     dirList.push(new BcrFile(rp, 'Home'));
a94216 906     if(relPfad.length > 0) {
2315a0 907       for(var i = 0; i < dirs.length - 1; i++) {
5dfab6 908         if(rp.length > 0 ) {
U 909           dirList.push(new BcrFile(rp + '/' + dirs[i], dirs[i]));
2315a0 910           rp = rp + '/' + dirs[i];
5dfab6 911         } else {
U 912           dirList.push(new BcrFile(dirs[i], dirs[i]));
2315a0 913           rp = dirs[i];
5dfab6 914         }
U 915       }
916       var bl = new BcrFiles(dirList);
7d8ef6 917  
U 918       if(dirList.length > 0) {
919         template = $('#tpl-bcr').html();
920         Mustache.parse(template);   // optional, speeds up future uses
921         $('#bcnav').html(Mustache.render(template, bl));
2315a0 922       }
7d8ef6 923       
U 924       if(dirs.length > 0) {
925         dirList.push(new BcrFile(rp + '/' + dirs[dirs.length-1], dirs[dirs.length-1]));
926         template = $('#tpl-bcr2').html();
927         Mustache.parse(template);   // optional, speeds up future uses
928         $('#bcnav').append(Mustache.render(template, dirList[dirList.length-1]));        
929       } else {
930         template = $('#tpl-bcr2').html();
931         Mustache.parse(template);   // optional, speeds up future uses
932         $('#bcnav').append(Mustache.render(template, dirList[0]));        
933       }
934       
935       $('#bcnav').append($('#tpl-bcr3').html());
2315a0 936     } else {
a94216 937       pfad = '';
7d8ef6 938       template = $('#tpl-bcr2').html();
U 939       Mustache.parse(template);   // optional, speeds up future uses
940       $('#bcnav').append(Mustache.render(template, dirList[0]));   
941       $('#bcnav').append($('#tpl-bcr3').html());
5dfab6 942     }
7d8ef6 943     $('.breadcrumb-item').click(fm_bc_click);
U 944     $('#ansicht').click(fm_ansicht_umschalten);
945     fm_set_modus();
946   });
e5ff42 947 }
U 948
a75859 949 function fm_menu_datei_speichern(callback) {
5ebb8e 950   //var fname = $('.datei-gewaehlt').text();
U 951   var fname = openFileName;
952   if(fname !== undefined && fname !== '') {
a75859 953     fm_save_file(fname, 'saveTextFile', callback);
5ebb8e 954   } else {
a75859 955     fm_menu_datei_speichern_unter(callback);
5ebb8e 956   }
U 957 }
958
a75859 959 function fm_save_file(saveFileName, method, callback) {
7d8ef6 960   var content;
U 961   if(openEditor === 'text') {
962     content = cm.getValue();
3003b2 963     cm.getDoc().markClean();
7d8ef6 964   } else {
U 965     content = ed.getContent();
3003b2 966     tinymce.activeEditor.undoManager.clear();
7d8ef6 967   }
47e9d4 968   var m = '?c=de.uhilger.filecms.api.FileMgr&m=' + method;
5ebb8e 969   var u = '../svc' + m;
7d8ef6 970   fm_post(u, {p1: pfad, p2: saveFileName, p3: content}, function(resp) {
a75859 971     // hier scheint nichts zurueckzukommen..
5ebb8e 972   });
a75859 973   openFileName = saveFileName;
3003b2 974   if(typeof (callback) !== 'function') {
U 975     
976   } else {
a75859 977     callback();
U 978   }
5ebb8e 979 }
U 980
a75859 981 function fm_menu_datei_speichern_unter(callback) {  
915927 982   $('#modal_ok').click(function() {
a75859 983     $('#modal_ok').attr('onclick','').unbind('click');
915927 984     // hier speichern
a75859 985     fm_save_file($('#dateiname').val(), 'saveTextFileAs', callback);
915927 986   });
957b51 987   $('#saveModalTitle').text('Datei speichern');
c509a0 988   $('#dialogfrage').text("Dateiname?");
3ad4db 989   
U 990   var fname = $('.datei-gewaehlt').text();
991   if(fname !== undefined) {
992     $('#dateiname').val(fname);
993   } else {
994     $('#dateiname').val('');
995   }
c509a0 996   $('#dateiname').attr('placeholder', 'Dateiname');
915927 997   $('#saveModal').modal({
U 998     keyboard: false,
999     show: true
1000   });
a4d3b5 1001 }
U 1002
b7475d 1003 function fm_logout() {
U 1004   var m = '?c=de.uhilger.filecms.pub.SessionManager&m=expireSession';
1005   var u = '../pub' + m;
1006   
1007   fm_get(u, "text", function(resp) {
1008     $('#userMenu').text('nicht angemeldet');
1009     window.location.href = '../logout.html';
1010   });
1011 }
1012
1013
a4d3b5 1014 /* ---- codemirror editor handling -------- */
U 1015
64d8b9 1016 /*
942d63 1017 function htmlDecode(value){ 
U 1018   return $('<div/>').html(value).text(); 
1019 }
64d8b9 1020 */
942d63 1021
42fece 1022 function fm_code_edit(content, m) {
a4d3b5 1023   cm = CodeMirror.fromTextArea(document.getElementById("editspace"), {
U 1024     lineNumbers: true,
e3043f 1025     gutters: ["CodeMirror-linenumbers", "breakpoints"],
42fece 1026     mode: m,
a4d3b5 1027     viewportMargin : Infinity,
d920b7 1028     tabSize: 2,
a4d3b5 1029     extraKeys: {
915927 1030         "F9": function(cm) {
U 1031         cm.setOption("fullScreen", !cm.getOption("fullScreen"));
1032       },
1033         "Esc": function(cm) {
1034         if (cm.getOption("fullScreen")) cm.setOption("fullScreen", false);
7ad1b7 1035       },
U 1036         ".": function(cm) {
1037         console.log('dot pressed: perhaps look up class or method name');
3b7c5b 1038         /*
U 1039          * Hier kann man eine Funktion ausloesen, die fuer das 
1040          * Wort vor dem Punkt (Name der Klasse) eine Liste mit 
1041          * Vorschlaegen fuer Methodennamen einblendet.
1042          */
1043         
1044         /*
1045          * CodeMirror.Pass laesst das Zeichen zum Editorinhalt durch, 
1046          * verhindert aber das Ausloesen von 'keyHandled'
1047          */
1048         return CodeMirror.Pass; 
915927 1049       }
a4d3b5 1050     }
U 1051   });
fab80c 1052   //cm.setValue(htmlDecode(content));
U 1053   //cm.setValue(content);
1054   cm.setValue(unescapeHtml(content));
3003b2 1055   cm.getDoc().markClean();
e3043f 1056   cm.on("gutterClick", function(theEditor, lineNumber) {
U 1057     var info = theEditor.lineInfo(lineNumber);
1058     //--lineNumber;
1059     //console.log(info.gutterMarkers.breakpoints.message);
1060     //var marker = info.gutterMarkers.breakpoints;
1061     //$(marker).tooltip('toggle');
1062   });
3b7c5b 1063   /*
7ad1b7 1064   cm.on("keyHandled", function(theEditor, keyName, event){
3b7c5b 1065     console.log('cm.keyHandled keyName: ' + keyName + ', event.type: ' + event.type);    
7ad1b7 1066   });
3b7c5b 1067   */
e3043f 1068 }
U 1069
1070 function makeMarker(msg) {
1071   var marker = document.createElement("div");
1072   marker.style.color = "#822";
1073   marker.innerHTML = "●";
1074   //marker.message = msg;
1075   $(marker).tooltip({
1076     placement: 'right',
1077     title: msg,
ed12de 1078     offset: '0 -30'
e3043f 1079   });
U 1080   return marker;
915927 1081 }
a4d3b5 1082
U 1083 /* -------- helper functions ----------- */
1084
b7475d 1085 function fm_get(u, dtype, scallback) {
a4d3b5 1086   $.ajax({
U 1087     url: u,
1088     type: "GET",
b7475d 1089     dataType: dtype,
a4d3b5 1090     success: scallback,
U 1091     error: function (xhr, status, errorThrown) {
1092       alert("Error: " + errorThrown + " Status: " + status + " URL: " + u);
1093     },
1094     complete: function (xhr, status) {
1095       //console.log( "The request is complete!" );
1096     }
1097
1098   });
915927 1099 }
a4d3b5 1100
9e2964 1101 function fm_post(u, d, dtype, scallback) {
a4d3b5 1102   $.ajax({
U 1103     url: u,
1104     data: d,
1105     type: "POST",
9e2964 1106     dataType: dtype,
a4d3b5 1107     success: scallback,
U 1108     error: function (xhr, status, errorThrown) {
1109       $('#fehler').html("Error: " + errorThrown + " Status: " + status);
1110     },
1111     complete: function (xhr, status) {
1112       //alert( "The request is complete!" );
1113     }
1114   });
915927 1115 }
a4d3b5 1116
e5ff42 1117 function fm_serialise(obj) {
U 1118   return '{"' + obj.constructor.name + '":' + JSON.stringify(obj) + '}';
915927 1119 }
e5ff42 1120
fab80c 1121 function escapeHtml(text) {
U 1122   text = text.replace(/\u228/g,'&auml;');
1123   text = text.replace(/\u246/g,'&ouml;');
1124   text = text.replace(/\u252/g,'&uuml;');
1125   text = text.replace(/\u196/g,'&Auml;');
1126   text = text.replace(/\u214/g,'&Ouml;');
1127   text = text.replace(/\u220/g,'&Uuml;');
1128   text = text.replace(/\u223/g,'&szlig;');
1129   text = text.replace(/\u26/g,'&amp;');
1130   return text;
1131 }
1132
1133 function unescapeHtml(text) {
1134   text = text.replace(/&auml;/g, String.fromCharCode(228));
1135   text = text.replace(/&ouml;/g, String.fromCharCode(246));
1136   text = text.replace(/&uuml;/g, String.fromCharCode(252));
1137   text = text.replace(/&Auml;/g, String.fromCharCode(196));
1138   text = text.replace(/&Ouml;/g, String.fromCharCode(214));
1139   text = text.replace(/&Uuml;/g, String.fromCharCode(220));
1140   text = text.replace(/&szlig;/g, String.fromCharCode(223));
1141   text = text.replace(/&amp;/g, String.fromCharCode(26));
1142   return text;
1143 }
1144
1145
7342b1 1146 /* ----- Objekte ----- */
U 1147
a450f2 1148 function IssueList(il) {
U 1149   this.issues = il;
1150 }
1151
1152 function CompilerIssue(sn, ms, ki, ln) {
1153   var self = this;
1154   this.sourceName = sn;
1155   this.message = ms;
1156   this.kind = ki;
1157   this.lineNumber = ln;
1158 }
1159
7342b1 1160 function FileList(fl) {
U 1161   this.files = fl;
1162 }
1163
1164 function FileRef(obj) {
1165   var self = this;
1166   this.fr = obj;
7f2a41 1167   this.fnx;
7342b1 1168   
U 1169   this.typeClass = function() {
10d3d3 1170     if(modus == 'kacheln') {
U 1171       if(self.fr.isDirectory) {
a3d410 1172         return 'fa-folder ordner';
10d3d3 1173       } else {
a3d410 1174         return 'fa-file datei';
10d3d3 1175       }
7342b1 1176     } else {
10d3d3 1177       if(self.fr.isDirectory) {
a3d410 1178         return 'fa-folder ordner';
10d3d3 1179       } else {
a3d410 1180         return 'fa-file-o datei';
10d3d3 1181       }
7342b1 1182     }
2121cc 1183   };
U 1184   
7f2a41 1185   this.mini = function() {
U 1186     var miniatur = false;
1187     var namen = self.fr.absolutePath.split('/');
1188     if(namen.length > 0) {
1189       self.fnx = decodeURIComponent(namen[namen.length - 1]);
1190     } else {
1191       self.fnx = decodeURIComponent(self.fr.absolutePath);
1192     }
1193     if(self.fnx.indexOf('.jpg') > -1 || self.fnx.indexOf('.png') > -1 || self.fnx.indexOf('.gif') > -1 || self.fnx.indexOf('.jpeg') > -1) {
1194       miniatur = true;
1195     }
1196     return miniatur;
1197   };
1198   
1199   this.miniurl = function() {
1200       var userid = $('#userMenu').text();
1201       var ext = '';
1202       var dotpos = self.fnx.indexOf('.');
1203       if(dotpos > -1) {
1204         var fny = self.fnx;
1205         self.fnx = self.fnx.substring(0, dotpos);
1206         ext = fny.substr(dotpos);
1207       }
1208       var path = fm_get_path(userid);
fa012b 1209       var imgurl = loc + path + '/' + self.fnx + '_tn' + ext;
7f2a41 1210       return imgurl;
U 1211     
1212   };
1213   
2121cc 1214   this.fileName = function() {
7f2a41 1215     
2121cc 1216     var namen = self.fr.absolutePath.split('/');
U 1217     if(namen.length > 0) {
f7d8bf 1218       return decodeURIComponent(namen[namen.length - 1]);
2121cc 1219     } else {
f7d8bf 1220       return decodeURIComponent(self.fr.absolutePath);
2121cc 1221     }
7f2a41 1222     
2121cc 1223   };
7342b1 1224 }
5dfab6 1225
U 1226 function BcrFiles(fl) {
1227   this.files = fl;
1228 }
1229
1230 function BcrFile(rp, n) {
1231   this.relPath = rp;
1232   this.fName = n;
7aa566 1233 }
U 1234