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