Dateiverwaltung für die WebBox
ulrich
2021-01-17 f320427aedc5b1bd73da7e08c0e84cef9d7ec66f
commit | author | age
2f9e6f 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
19
20
21 /*
22  * In api.js finden sich die HTTP-Aufrufe vom Browser-Client 
23  * der Dateiverwaltung an deren Server-Kern
24  */
25
26
27
28
29 /* ---------- Dateien kopieren, verschieben --------------- */
30
31 /*
32  * Hier wird fuer eine zuvor markierte Liste von Dateien, fuer die 
33  * Cut oder Copy gewaehlt wurde, die Operations ausgefuehrt (move oder copy)
34  * @returns {undefined}
35  */
36 function fm_paste_files() {
37   var m;
38   if(cutCopyOperation === 'cut') {
39     //m = '?c=de.uhilger.filecms.api.FileMgr&m=moveFiles'; //&p=' + cutCopySrcDir + '&p=' + pfad + '&p=' + encodeURIComponent(liste);
40     m = '?c=de.uhilger.filecms.api.FileMgr&m=moveFiles&p=' + cutCopySrcDir + '&p=' + pfad + '&p=' + encodeURIComponent(cutCopyFiles);
41   } else {
42     //m = '?c=de.uhilger.filecms.api.FileMgr&m=copyFiles'; //&p=' + cutCopySrcDir + '&p=' + pfad + '&p=' + encodeURIComponent(liste);
43     m = '?c=de.uhilger.filecms.api.FileMgr&m=copyFiles&p=' + cutCopySrcDir + '&p=' + pfad + '&p=' + encodeURIComponent(cutCopyFiles);
44   }
45   var u = '../svc' + m;  
46   fm_get(u, "text", function(resp) {
47     // console.log('deleteFiles gab folgendes zurueck: ' + resp);
48     fm_get_list(pfad);
49   });
50   /*
51   fm_post(u, {p1: encodeURIComponent(cutCopySrcDir), p2: encodeURIComponent(pfad), p3: encodeURIComponent(cutCopyFiles)},'text', function(resp) {
52     // resp evtl. zeigen..
53     fm_get_list(pfad);
54   });
55   */
56 }
57
58 /* ---------- Dateien listen, loeschen, umbenennen --------------- */
59
60 // http://localhost:8079/file-cms/svc?c=de.uhilger.filecms.api.FileMgr&f=JSONNICE&m=list&p=
53119f 61
U 62 /*
9587ad 63  * Den Inhalt eines Ordners vom Server abrufen und rendern
U 64  * 
53119f 65  * standardmaessig aufgerufen von fm_dateiwahl, immer mit dem Inhalt von pfad
U 66  * 
67  * relPfad Persoenlich, Oeffentlich oder Austausch als Startwert
68  * dann der relative Pfad aus den angeklickten Ordnernamen
69  * 
9587ad 70  * @param {String} relPfad Persoenlich, Oeffentlich oder Austausch als 
U 71  * Startwert, dann der relative Pfad aus den angeklickten Ordnernamen
53119f 72  */
2f9e6f 73 function fm_get_list(relPfad) {
U 74   $('#ansicht').attr('onclick','').unbind('click');
75   var m = '?c=de.uhilger.filecms.api.FileMgr&m=list&p=' + relPfad;
76   var u = '../svc' + m;
77   fm_get(u, "json", function(resp) {
78     
79     if(resp.List[0].FileRef !== undefined) {
80       var files = new Array();
81       if(resp.List[0].FileRef instanceof Array) {
82         for(var i = 0; i < resp.List[0].FileRef.length; i++) {
83           files.push(new FileRef(resp.List[0].FileRef[i]));
84         }
85       } else {
86         files.push(new FileRef(resp.List[0].FileRef));
87       }
88       var fl = new FileList(files);
89       fm_render_list(fl);
90     } else {
91       $('#dateien').empty();
92     }
93     
94     // Breadcrumb-Ansicht
95     var template;
96     $('.breadcrumb-item').attr('onclick','').unbind('click');
97     $('#bcnav').empty();
98     var dirList = new Array();
99     var rp = '';
100     //console.log("'" + relPfad + "'");
101     var dirs = relPfad.split('/');
102     //console.log(dirs.length);
103     dirList.push(new BcrFile(rp, 'Home'));
104     if(relPfad.length > 0) {
105       for(var i = 0; i < dirs.length - 1; i++) {
106         if(rp.length > 0 ) {
107           dirList.push(new BcrFile(rp + '/' + dirs[i], dirs[i]));
108           rp = rp + '/' + dirs[i];
109         } else {
110           dirList.push(new BcrFile(dirs[i], dirs[i]));
111           rp = dirs[i];
112         }
113       }
114       var bl = new BcrFiles(dirList);
115  
116       if(dirList.length > 0) {
117         template = $('#tpl-bcr').html();
118         Mustache.parse(template);   // optional, speeds up future uses
119         $('#bcnav').html(Mustache.render(template, bl));
120       }
121       
122       if(dirs.length > 0) {
123         dirList.push(new BcrFile(rp + '/' + dirs[dirs.length-1], dirs[dirs.length-1]));
124         template = $('#tpl-bcr2').html();
125         Mustache.parse(template);   // optional, speeds up future uses
126         $('#bcnav').append(Mustache.render(template, dirList[dirList.length-1]));        
127       } else {
128         template = $('#tpl-bcr2').html();
129         Mustache.parse(template);   // optional, speeds up future uses
130         $('#bcnav').append(Mustache.render(template, dirList[0]));        
131       }
132       
133       $('#bcnav').append($('#tpl-bcr3').html());
134     } else {
135       pfad = '';
136       template = $('#tpl-bcr2').html();
137       Mustache.parse(template);   // optional, speeds up future uses
138       $('#bcnav').append(Mustache.render(template, dirList[0]));   
139       $('#bcnav').append($('#tpl-bcr3').html());
140     }
141     $('.breadcrumb-item').click(fm_bc_click);
142     $('#ansicht').click(fm_ansicht_umschalten);
143     fm_set_modus();
630c3f 144     
76660f 145     if(fm_slideshow) {
U 146       $("[data-fancybox]").fancybox({
147         loop: true,
148         idleTime: 2
149       });
150     }
2f9e6f 151   });
U 152 }
153
154 function fm_del_files() {
155   var liste = fm_gewaehlte_dateien();
156   var m = '?c=de.uhilger.filecms.api.FileMgr&m=deleteFiles&p=' + pfad + '&p=' + encodeURIComponent(liste);
157   var u = '../svc' + m;
158   fm_get(u, "text", function(resp) {
159     // console.log('deleteFiles gab folgendes zurueck: ' + resp);
160     fm_get_list(pfad);
161   });
162 }
163
af9930 164 function fm_pack_folder() {
U 165   //var liste = fm_gewaehlte_dateien();
166   var m = '?c=de.uhilger.filecms.api.FileMgr&m=packFolder&p=' + pfad;
167   var u = '../svc' + m;
168   fm_get(u, "text", function(resp) {
169     // console.log('deleteFiles gab folgendes zurueck: ' + resp);
170     fm_get_list(pfad);
171   });
172 }
173
2f9e6f 174 function fm_rename_file(fn, p, neuerName) {
U 175   var m = '?c=de.uhilger.filecms.api.FileMgr&m=renameFile';
176   m = m + '&p=' + p; 
177   m = m + '&p=' + fn; 
178   m = m + '&p=' + neuerName; 
179   var u = '../svc' + m;
180   fm_get(u, "text", function(resp) {
181     fm_get_list(pfad);
182   });  
183 }
184
185 /* -------------------- Ordner ---------------- */
186
187 function fm_get_new_folder() {
188   $('#modal_ok').click(function() {
189     // hier speichern
190     var m = '?c=de.uhilger.filecms.api.FileMgr&m=newFolder&p=' + pfad + '&p=' + $('#dateiname').val();
191     var u = '../svc' + m;
192     fm_get(u, "json", function(resp) {
193       fm_get_list(pfad);
194     });
195   });
196   $('#saveModalTitle').text('Neuer Ordner');
197   $('#dialogfrage').text("Name?");
198   $('#dateiname').val('');
199   $('#dateiname').attr('placeholder', 'Ordnername');
200   $('#saveModal').modal({
201     keyboard: false,
202     show: true
203   });
204 }
205
206 function fm_unzip_file(fn) {
207   var m = '?c=de.uhilger.filecms.api.FileMgr&m=extractZipfile';
208   m = m + '&p=' + pfad; 
209   m = m + '&p=' + fn; 
210   var u = '../svc' + m;
211   fm_get(u, "text", function(resp) {
212     $('.system-out').empty();
213     $('.system-out').append('Rueckmeldung vom Entpacken: ' + resp);
214     fm_fusszeile_zeigen();
215     fm_get_list(pfad);
216   });  
217 }
218
fad719 219 function fm_export_html() {
U 220   var m = '?c=de.uhilger.filecms.api.HtmlExportService&m=exportHtml';
221   m = m + '&p=' + pfad; 
222   var u = '../svc' + m;
223   fm_get(u, "text", function(resp) {
224     $('.system-out').empty();
225     $('.system-out').append('Rueckmeldung vom HTML-Export: ' + resp);
226     fm_fusszeile_zeigen();
227   });  
228 }
229
2f9e6f 230 /* ------------------- Dateiinhalte --------------------- */
U 231
232 function fm_save_file(saveFileName, method, callback) {
233   var content;
234   if(openEditor === 'text') {
235     content = cm.getValue();
236     cm.getDoc().markClean();
237   } else {
238     content = ed.getContent();
239     tinymce.activeEditor.undoManager.clear();
240   }
241   var m = '?c=de.uhilger.filecms.api.FileMgr&m=' + method;
242   var u = '../svc' + m;
243   fm_post(u, {p1: pfad, p2: saveFileName, p3: content}, function(resp) {
244     // hier scheint nichts zurueckzukommen..
245   });
246   openFileName = saveFileName;
247   if(typeof (callback) !== 'function') {
248     
249   } else {
250     callback();
251   }
252 }
253
254 function fm_get_file_content(typ) {
255   var gewaehlte = $('.datei-gewaehlt');
256   //var fname = $(gewaehlte).find('.dateiname').text();
257   
258   var fname = $(gewaehlte[0]).text();
259   openFileName = fname;
260   var m = '?c=de.uhilger.filecms.api.FileMgr&m=getCode&p=' + pfad + '&p=' + fname;
261   var u = '../svc' + m;
262   fm_get(u, "text", function(resp) {
263     if(typ == 'text') {
264       var mode = "text/x-java";
265       if(fname.endsWith('js')) {
266         mode = 'javascript';
267       } else if(fname.endsWith('xml')) {
268         mode = 'xml';
269       } else if(fname.endsWith('properties')) {
270         mode = 'xml';
d03015 271       } else if(fname.endsWith('adoc')) {
U 272         mode = 'text/x-markdown';
2f9e6f 273       }
U 274       fm_text_edit(resp, mode);
275     } else {
276       fm_dok_edit(resp);
277     }
278   });
279   
280 }
281
282 /* -------- An- und Abmelden ------------- */
283
284 function fm_get_login() {
285   var m = '?c=de.uhilger.filecms.pub.SessionManager&m=getSessionUser';
286   var u = '../pub' + m;
287   fm_get(u, "text", function(resp) {
288     userid = resp;
289     $('#userMenu').text(resp);
290   });  
291 }
292
293 function fm_logout() {
294   var m = '?c=de.uhilger.filecms.pub.SessionManager&m=expireSession';
295   var u = '../pub' + m;
296   
297   fm_get(u, "text", function(resp) {
298     $('#userMenu').text('nicht angemeldet');
299     window.location.href = '../logout.html';
300   });
301 }
302
303 /* -------- Compile / Build ------------- */
304
f59dce 305 function fm_ant_build() {
U 306   var m = '?c=de.uhilger.filecms.api.CompileService&m=antBuild&p=' + pfad;
307   var u = '../svc' + m;
308   fm_get(u, "text", function(resp) {
309     $('.system-out').empty();
310     $('.system-out').append('Ergebnis von Ant build: ' + resp);
311     fm_fusszeile_zeigen();
312   });
313 }
314
2f9e6f 315 function fm_build_app() {
U 316   var m = '?c=de.uhilger.filecms.api.CompileService&m=buildApp&p=' + pfad;
317   var u = '../svc' + m;
318   fm_get(u, "text", function(resp) {
319     $('.system-out').empty();
320     $('.system-out').append('Ergebnis von Build app: ' + resp);
321     fm_fusszeile_zeigen();
322   });
323 }
324
325 function fm_compile_all() {
326   var m = '?c=de.uhilger.filecms.api.CompileService&m=compileAll&p=' + pfad;
327   var u = '../svc' + m;
328   fm_get(u, "json", function(resp) {
329     if(resp.List[0].CompilerIssue !== undefined) {
330       var lno;
331       var eMsg;
332       var issueList = new Array();
333       if(resp.List[0].CompilerIssue instanceof Array) {
334         var issueNo = 0;
335         while(issueNo < resp.List[0].CompilerIssue.length) {
336           /*
337           $('.system-out').append('   +++ ---- +++   ');
338           $('.system-out').append(resp.List[0].CompilerIssue[issueNo].kind);
339           $('.system-out').append(resp.List[0].CompilerIssue[issueNo].lineNumber);
340           $('.system-out').append(resp.List[0].CompilerIssue[issueNo].sourceName);
341           $('.system-out').append(resp.List[0].CompilerIssue[issueNo].message);
342           */
343           var issue = new CompilerIssue(
344             resp.List[0].CompilerIssue[issueNo].sourceName,
345             resp.List[0].CompilerIssue[issueNo].message,
346             resp.List[0].CompilerIssue[issueNo].kind,
347             resp.List[0].CompilerIssue[issueNo].lineNumber
348           );
349           issueList.push(issue);
350
351           /*
352           console.log('   +++ ---- +++   ');
353           console.log(resp.List[0].CompilerIssue[issueNo].kind);
354           console.log(resp.List[0].CompilerIssue[issueNo].lineNumber);
355           console.log(resp.List[0].CompilerIssue[issueNo].sourceName);
356           console.log(resp.List[0].CompilerIssue[issueNo].message);
357           */
358           issueNo++;
359         }
360       } else {
361         //lno = resp.List[0].CompilerIssue.lineNumber;
362         //eMsg = resp.List[0].CompilerIssue.kind + ' ' + resp.List[0].CompilerIssue.message;
363         //$('.system-out').append(lno + ' ' + eMsg);
364         //console.log(lno + ' ' + eMsg);
365         var issue = new CompilerIssue(
366           resp.List[0].CompilerIssue.sourceName,
367           resp.List[0].CompilerIssue.message,
368           resp.List[0].CompilerIssue.kind,
369           resp.List[0].CompilerIssue.lineNumber
370         );
371         issueList.push(issue);        
372       }
373       var theList = new IssueList(issueList);
374       var template = $('#tpl-ci').html();
375       Mustache.parse(template);   // optional, speeds up future uses
376       $('.system-out').empty();
377       $('.system-out').html(Mustache.render(template, theList));
378       $('.sued').show();
379     }
380   });
381 }
382
383 function fm_compile(modeStr, callback) {
384   var liste = fm_gewaehlte_dateien();
3260ed 385   var m = '?c=de.uhilger.filecms.api.CompileService&m=compile';//&p=' + pfad + '&p=' + encodeURIComponent(liste) + 
U 386           //'&p=' + modeStr;
2f9e6f 387   var u = '../svc' + m;
3260ed 388   var data = 'p=' + pfad + '&p=' + encodeURIComponent(liste) + 
U 389           '&p=' + modeStr;
390   fm_post(u, data, "json", function(resp) {
391     callback(resp);
392   });
393   /*
2f9e6f 394   fm_get(u, "json", function(resp) {
U 395     callback(resp);
396   });
3260ed 397   */
2f9e6f 398 }
U 399
400 /* --------------- Bilder ------------------------- */
401
402 function fm_menu_shrink() {
403   var gewaehlte = $('.datei-gewaehlt');
404   var fname = $(gewaehlte[0]).text();
405   var m = '?c=de.uhilger.filecms.api.FileMgr&m=bildVerkleinern';
406   m = m + '&p=' + pfad; 
407   m = m + '&p=' + fname; 
408   var u = '../svc' + m;
409   fm_get(u, "text", function(resp) {
410     fm_get_list(pfad);
411   });  
412 }
413
bb9f8c 414 function fm_menu_rotate() {
U 415   var gewaehlte = $('.datei-gewaehlt');
416   var fname = $(gewaehlte[0]).text();
417   var m = '?c=de.uhilger.filecms.api.FileMgr&m=bildRotieren';
418   m = m + '&p=' + pfad; 
419   m = m + '&p=' + fname; 
420   var u = '../svc' + m;
421   fm_get(u, "text", function(resp) {
422     fm_get_list(pfad);
423   });  
424 }
425
2f9e6f 426 /* -------- upload ----------- */
U 427
428 function sendFile(datei) {
429   var uri = "../api/upload";
430   var xhr = new XMLHttpRequest();  
431   var fd = new FormData();  
432   xhr.open("POST", uri, true);  
433   xhr.onreadystatechange = function() {  
434     if (xhr.readyState == 4 && xhr.status == 200) {  
435       fm_get_list(pfad);
436       if(dateien.length > 0) {
437         sendFile(dateien.pop());
438       }
439     }  
440   };  
441   fd.append('dateiauswahlfeld', datei);  
442   fd.append('pfad', pfad);
443   xhr.send(fd);          
444 }
445
446 /* -------- helper functions ----------- */
447
448 function fm_get(u, dtype, scallback) {
449   $.ajax({
450     url: u,
451     type: "GET",
452     dataType: dtype,
453     success: scallback,
454     error: function (xhr, status, errorThrown) {
455       alert("Error: " + errorThrown + " Status: " + status + " URL: " + u);
456     },
457     complete: function (xhr, status) {
458       //console.log( "The request is complete!" );
459     }
460
461   });
462 }
463
464 function fm_post(u, d, dtype, scallback) {
465   $.ajax({
466     url: u,
467     data: d,
468     type: "POST",
469     dataType: dtype,
470     success: scallback,
471     error: function (xhr, status, errorThrown) {
472       $('#fehler').html("Error: " + errorThrown + " Status: " + status);
473     },
474     complete: function (xhr, status) {
475       //alert( "The request is complete!" );
476     }
477   });
478 }