Dateiverwaltung für die WebBox
ulrich
2017-02-23 bef5c6d6beadf50e8c938653fa7881b94bcd1344
commit | author | age
a4d3b5 1 var cm;
5dfab6 2 var pfad = '';
10d3d3 3 var modus = 'kacheln';
5ebb8e 4 var openFileName = '';
c7c502 5
U 6 function fm_init() {
a4d3b5 7   $('.codeeditor-space').hide();
U 8   $('.code-editor-container').hide();
bef5c6 9   //$('.ost').attr('flex-basis', 0);
a4d3b5 10   $('#newTextFile').on('click', fm_menu_neue_textdatei);
adf812 11   $('#newFolder').on('click', fm_get_new_folder);
3ad4db 12   $('#editTextFile').on('click', fm_get_file_content);
e5ff42 13   $('#saveFile').on('click', fm_menu_datei_speichern);
5ebb8e 14   $('#saveFileAs').on('click', fm_menu_datei_speichern_unter);
a4d3b5 15   $('#closeFile').on('click', fm_menu_datei_schliessen);
bef5c6 16   $('#m-test').on('click', fm_menu_test);
c509a0 17   $('#saveModal').on('hidden.bs.modal', function (e) {
915927 18     $('#modal_ok').attr('onclick','').unbind('click');
b7475d 19   });
U 20   $('#logout').click(fm_logout);  
e5ff42 21   fm_get_login();
7342b1 22   fm_get_list('');
10d3d3 23 }
U 24
bef5c6 25 function fm_menu_test() {
U 26   var w = $('.ost').width();
27   console.log('.ost.width: ' + w);
28   if(w == 0) {
29     $('.ost').width('20%');
30     $('.ost').text('Hallo Welt!');
31   } else {
32     $('.ost').empty();
33     $('.ost').width(0);
34   }
35 }
36
10d3d3 37 function fm_ansicht_umschalten() {
U 38   if($('#ansicht').children(0).hasClass('fa-th-list')) {
39     $('#ansicht').children(0).addClass('fa-th-large');
40     $('#ansicht').children(0).removeClass('fa-th-list');
41     modus = 'liste';
42   } else {
43     $('#ansicht').children(0).addClass('fa-th-list');    
44     $('#ansicht').children(0).removeClass('fa-th-large');
45     modus = 'kacheln';
46   }
47   fm_get_list(pfad);
48 }
49
50 function fm_set_modus() {
51   if(modus == 'kacheln') {
52     $('#ansicht').children(0).addClass('fa-th-list');    
53     $('#ansicht').children(0).removeClass('fa-th-large');  
54   } else {
55     $('#ansicht').children(0).addClass('fa-th-large');
56     $('#ansicht').children(0).removeClass('fa-th-list');    
57   }
a4d3b5 58 }
U 59
60 function fm_menu_neue_textdatei() {
adf812 61   fm_text_edit('Neue Datei');
a4d3b5 62 }
U 63
64 function fm_menu_datei_schliessen() {
65   $('.codeeditor-space').hide();
66   $('.code-editor-container').hide();
67   cm.toTextArea();
f5505f 68   $('#bcnav').show();
U 69   $('#dateien').show();
5ebb8e 70   openFileName = '';
adf812 71   fm_get_list(pfad);
e5ff42 72 }
U 73
5dfab6 74 function fm_dateiwahl() {
U 75   var elem = this;
10d3d3 76   if(modus == 'kacheln') {
U 77     if($(elem).children(0).hasClass('fa-folder')) {
78       var ordner = $(elem).text().trim();
79       if(pfad.length > 0) {
80         pfad = pfad + '/' + ordner;
81       } else {
82         pfad = ordner;
83       }
84       fm_get_list(pfad);
85     } else if($(elem).children(0).hasClass('fa-file')) {
86       $('.datei-gewaehlt').removeClass('datei-gewaehlt');
87       $(elem).children(0).addClass('datei-gewaehlt');
5dfab6 88     } else {
10d3d3 89       //console.log('kein folder oder file...');
5dfab6 90     }
U 91   } else {
10d3d3 92     if($(elem).find('.datei-elem').children(0).hasClass('fa-file-o')) {
U 93       $('.table-info').removeClass('table-info');
94       $(elem).addClass('table-info');
95       $('.datei-gewaehlt').removeClass('datei-gewaehlt');
96       $(elem).find('.dateiname').addClass('datei-gewaehlt');
97     } else {
98       var ordner = $(elem).find('.dateiname').text();
99       if(pfad.length > 0) {
100         pfad = pfad + '/' + ordner;
101       } else {
102         pfad = ordner;
103       }
104       fm_get_list(pfad);
105     }   
5dfab6 106   }
c509a0 107 }
U 108
a94216 109 function fm_bc_click() {
U 110   var elem = this;
111   var bcPfad = $(elem).attr('rpath');
112   if(bcPfad !== undefined) {
c509a0 113     pfad = bcPfad;
a94216 114     fm_get_list(bcPfad);
U 115   } else {
116     pfad = '';
117     fm_get_list('');
118   }
119 }
120
3ad4db 121 function fm_text_edit(content) {
f5505f 122   $('#bcnav').hide();
U 123   $('#dateien').hide();
3ad4db 124   $('.codeeditor-space').show();
U 125   $('.code-editor-container').show();
126   fm_code_edit(content);  
127 }
128
b7475d 129 /* ----- API Calls ------------- */
U 130
e5ff42 131 function fm_get_login() {
3ad4db 132   var m = '?c=de.uhilger.filecms.pub.SessionManager&m=getSessionUser';
U 133   var u = '../pub' + m;
134   fm_get(u, "text", function(resp) {
135     $('#userMenu').text(resp);
7342b1 136   });  
c509a0 137 }
U 138
139 function fm_get_new_folder() {
140   $('#modal_ok').click(function() {
141     // hier speichern
142     var m = '?c=de.uhilger.filecms.api.FileMgr&m=newFolder&p=' + pfad + '&p=' + $('#dateiname').val();
143     var u = '../svc' + m;
144     fm_get(u, "json", function(resp) {
adf812 145       fm_get_list(pfad);
c509a0 146     });
U 147   });
148   $('.modal-title').text('Neuer Ordner');
149   $('#dialogfrage').text("Name?");
150   $('#dateiname').val('');
151   $('#dateiname').attr('placeholder', 'Ordnername');
152   $('#saveModal').modal({
153     keyboard: false,
154     show: true
155   });
7342b1 156 }
U 157
2121cc 158 function fm_get_file_content() {
U 159   var fname = $('.datei-gewaehlt').text();
5ebb8e 160   openFileName = fname;
3ad4db 161   var m = '?c=de.uhilger.filecms.api.FileMgr&m=getCode&p=' + pfad + '&p=' + fname;
2121cc 162   var u = '../svc' + m;
3ad4db 163   fm_get(u, "text", function(resp) {
U 164     fm_text_edit(resp);
2121cc 165   });
3ad4db 166   
2121cc 167 }
U 168
10d3d3 169 function fm_render_list(fl) {
U 170   if(modus == 'kacheln') {
171     // Kachelansicht
172     var template = $('#tpl-kacheln').html();
173     Mustache.parse(template);   // optional, speeds up future uses
174     $('.datei-zeile').attr('onclick','').unbind('click');
175     $('#dateien').empty();
176     $('#dateien').html(Mustache.render(template, fl));
177     $('.figure').click(fm_dateiwahl);
178   } else {
179     // Listenansicht
180     var template = $('#tpl-liste').html();
181     Mustache.parse(template);   // optional, speeds up future uses
182     $('.figure').attr('onclick','').unbind('click');
183     $('#dateien').empty();
184     $('#dateien').html(Mustache.render(template, fl));
185     $('.datei-zeile').click(fm_dateiwahl);
186   }
187 }
188
7342b1 189 // http://localhost:8079/file-cms/svc?c=de.uhilger.filecms.api.FileMgr&f=JSONNICE&m=list&p=
a94216 190 function fm_get_list(relPfad) {
10d3d3 191   $('#ansicht').attr('onclick','').unbind('click');
a94216 192   var m = '?c=de.uhilger.filecms.api.FileMgr&m=list&p=' + relPfad;
7342b1 193   var u = '../svc' + m;
U 194   fm_get(u, "json", function(resp) {
10d3d3 195     
2121cc 196     if(resp.List[0].FileRef !== undefined) {
U 197       var files = new Array();
c509a0 198       if(resp.List[0].FileRef instanceof Array) {
U 199         for(var i = 0; i < resp.List[0].FileRef.length; i++) {
200           files.push(new FileRef(resp.List[0].FileRef[i]));
201         }
202       } else {
203         files.push(new FileRef(resp.List[0].FileRef));
2121cc 204       }
U 205       var fl = new FileList(files);
10d3d3 206       fm_render_list(fl);
2121cc 207     } else {
U 208       $('#dateien').empty();
7342b1 209     }
5dfab6 210     
10d3d3 211     // Breadcrumb-Ansicht
2315a0 212     var template;
a94216 213     $('.breadcrumb-item').attr('onclick','').unbind('click');
2315a0 214     $('#bcnav').empty();
5dfab6 215     var dirList = new Array();
U 216     var rp = '';
a94216 217     //console.log("'" + relPfad + "'");
U 218     var dirs = relPfad.split('/');
219     //console.log(dirs.length);
2121cc 220     dirList.push(new BcrFile(rp, 'Home'));
a94216 221     if(relPfad.length > 0) {
2315a0 222       for(var i = 0; i < dirs.length - 1; i++) {
5dfab6 223         if(rp.length > 0 ) {
U 224           dirList.push(new BcrFile(rp + '/' + dirs[i], dirs[i]));
2315a0 225           rp = rp + '/' + dirs[i];
5dfab6 226         } else {
U 227           dirList.push(new BcrFile(dirs[i], dirs[i]));
2315a0 228           rp = dirs[i];
5dfab6 229         }
U 230       }
231       var bl = new BcrFiles(dirList);
2315a0 232
U 233       if(dirList.length > 0) {
234         template = $('#tpl-bcr').html();
235         Mustache.parse(template);   // optional, speeds up future uses
236         $('#bcnav').html(Mustache.render(template, bl));
237       }
238       
239       if(dirs.length > 0) {
240         dirList.push(new BcrFile(rp + '/' + dirs[dirs.length-1], dirs[dirs.length-1]));
241         template = $('#tpl-bcr2').html();
242         Mustache.parse(template);   // optional, speeds up future uses
243         $('#bcnav').append(Mustache.render(template, dirList[dirList.length-1]));        
244       } else {
245         template = $('#tpl-bcr2').html();
246         Mustache.parse(template);   // optional, speeds up future uses
247         $('#bcnav').append(Mustache.render(template, dirList[0]));        
248       }
249       
5dfab6 250       $('#bcnav').append($('#tpl-bcr3').html());
2315a0 251     } else {
a94216 252       pfad = '';
2315a0 253       template = $('#tpl-bcr2').html();
U 254       Mustache.parse(template);   // optional, speeds up future uses
10d3d3 255       $('#bcnav').append(Mustache.render(template, dirList[0]));   
U 256       $('#bcnav').append($('#tpl-bcr3').html());
5dfab6 257     }
a94216 258     $('.breadcrumb-item').click(fm_bc_click);
10d3d3 259     $('#ansicht').click(fm_ansicht_umschalten);
U 260     fm_set_modus();
e5ff42 261   });  
U 262 }
263
264 function fm_menu_datei_speichern() {
5ebb8e 265   //var fname = $('.datei-gewaehlt').text();
U 266   var fname = openFileName;
267   if(fname !== undefined && fname !== '') {
268     fm_save_file(fname);
269   } else {
270     fm_menu_datei_speichern_unter();
271   }
272 }
273
274 function fm_save_file(saveFileName) {
275   var m = '?c=de.uhilger.filecms.api.FileMgr&m=saveTextFile';
276   var u = '../svc' + m;
277   fm_post(u, {p1: pfad, p2: saveFileName, p3: cm.getValue()}, function(resp) {
278     openFileName = saveFileName;
279   });
280 }
281
282 function fm_menu_datei_speichern_unter() {
e5ff42 283   
915927 284   $('#modal_ok').click(function() {
U 285     // hier speichern
5ebb8e 286     fm_save_file($('#dateiname').val());
U 287     /*
915927 288     var m = '?c=de.uhilger.filecms.api.FileMgr&m=saveTextFile';
U 289     var u = '../svc' + m;
2121cc 290     fm_post(u, {p1: pfad, p2: $('#dateiname').val(), p3: cm.getValue()}, function(resp) {
915927 291
U 292     });
5ebb8e 293     */
915927 294   });
c509a0 295   $('.modal-title').text('Datei speichern');
U 296   $('#dialogfrage').text("Dateiname?");
3ad4db 297   
U 298   var fname = $('.datei-gewaehlt').text();
299   if(fname !== undefined) {
300     $('#dateiname').val(fname);
301   } else {
302     $('#dateiname').val('');
303   }
c509a0 304   $('#dateiname').attr('placeholder', 'Dateiname');
915927 305   $('#saveModal').modal({
U 306     keyboard: false,
307     show: true
308   });
a4d3b5 309 }
U 310
b7475d 311 function fm_logout() {
U 312   var m = '?c=de.uhilger.filecms.pub.SessionManager&m=expireSession';
313   var u = '../pub' + m;
314   
315   fm_get(u, "text", function(resp) {
316     $('#userMenu').text('nicht angemeldet');
317     window.location.href = '../logout.html';
318   });
319 }
320
321
a4d3b5 322 /* ---- codemirror editor handling -------- */
U 323
324 function fm_code_edit(content) {
325   cm = CodeMirror.fromTextArea(document.getElementById("editspace"), {
326     lineNumbers: true,
327     mode: "xml",
328     viewportMargin : Infinity,
329     extraKeys: {
915927 330         "F9": function(cm) {
U 331         cm.setOption("fullScreen", !cm.getOption("fullScreen"));
332       },
333         "Esc": function(cm) {
334         if (cm.getOption("fullScreen")) cm.setOption("fullScreen", false);
335       }
a4d3b5 336     }
U 337   });
338   cm.setValue(content);
915927 339 }
a4d3b5 340
U 341
342
343 /* -------- helper functions ----------- */
344
b7475d 345 function fm_get(u, dtype, scallback) {
a4d3b5 346   $.ajax({
U 347     url: u,
348     type: "GET",
b7475d 349     dataType: dtype,
a4d3b5 350     success: scallback,
U 351     error: function (xhr, status, errorThrown) {
352       alert("Error: " + errorThrown + " Status: " + status + " URL: " + u);
353     },
354     complete: function (xhr, status) {
355       //console.log( "The request is complete!" );
356     }
357
358   });
915927 359 }
a4d3b5 360
U 361 function fm_post(u, d, scallback) {
362   $.ajax({
363     url: u,
364     data: d,
365     type: "POST",
366     dataType: "json",
367     success: scallback,
368     error: function (xhr, status, errorThrown) {
369       $('#fehler').html("Error: " + errorThrown + " Status: " + status);
370     },
371     complete: function (xhr, status) {
372       //alert( "The request is complete!" );
373     }
374   });
915927 375 }
a4d3b5 376
e5ff42 377 function fm_serialise(obj) {
U 378   return '{"' + obj.constructor.name + '":' + JSON.stringify(obj) + '}';
915927 379 }
e5ff42 380
7342b1 381 /* ----- Objekte ----- */
U 382
383 function FileList(fl) {
384   this.files = fl;
385 }
386
387 function FileRef(obj) {
388   var self = this;
389   this.fr = obj;
390   
391   this.typeClass = function() {
10d3d3 392     if(modus == 'kacheln') {
U 393       if(self.fr.isDirectory) {
394         return 'fa-folder';
395       } else {
396         return 'fa-file';
397       }
7342b1 398     } else {
10d3d3 399       if(self.fr.isDirectory) {
U 400         return 'fa-folder';
401       } else {
402         return 'fa-file-o';
403       }
7342b1 404     }
2121cc 405   };
U 406   
407   this.fileName = function() {
408     var namen = self.fr.absolutePath.split('/');
409     if(namen.length > 0) {
410       return namen[namen.length - 1];
411     } else {
412       return self.fr.absolutePath;
413     }
414   };
7342b1 415 }
5dfab6 416
U 417 function BcrFiles(fl) {
418   this.files = fl;
419 }
420
421 function BcrFile(rp, n) {
422   this.relPath = rp;
423   this.fName = n;
f5505f 424 }