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