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