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