ulrich@undisclosed
2020-05-08 b73bb6316337f00752b59850f4aa3fcde22de137
commit | author | age
002c44 1 function AppVorlage() {
U 2   var self = this;
3   var appMenu;
4   var vorlagen;
5   var api;
6   var userid;
7   var pfad = '';
8   var loc;
9   var modus = 'kacheln';
10   var PERS_DIR = "Persoenlich";
11   var PUB_DIR = "Oeffentlich";
12   var DAV_DIR = "Austausch";
13   var BASE_DIR = "$basis";
14   var DATA_DIR = "$daten";
15   var WWW_DIR = "www";
16
17   this.datei_neuer_text = function () {
18     self.meldung_mit_timeout("Neuer Text", 1500);
19   };
20
21   /* Funktionen aus App-Vorlage */
22
23   this.init = function () {
24     self.vorlagen = new Vorlagen();
25     self.appMenu = new AppMenu();
26     self.appMenu.init(
27             "data/menu/",
28             "hauptmenue.json",
29             "data/tpl/app-menu.tpl",
30             ".west",
31             "8em");
32     document.querySelector('.hamburger').addEventListener('click', function (e) {
33       self.menue_umschalten();
34     });
35     self.um_get_login();
36     self.um_get_user_list();
37     self.loc = window.location.protocol + '//' + window.location.host;
38   };
39
40   this.login_zeigen = function() {
41     self.meldung_mit_timeout("Benutzer: " + self.userid, 1500);
42   };
43   
44   this.menue_umschalten = function () {
45     var ham = document.querySelector(".hamburger");
46     ham.classList.toggle("is-active"); // hamburger-icon umschalten
47     self.appMenu.toggle(); // menue oeffnen/schliessen
48   };
49
50   this.info_dialog_zeigen = function () {
51     self.dialog_laden_und_zeigen('data/tpl/dlg-info.tpl', '');
52     self.menue_umschalten();
53   };
54
55   this.seitenleiste_umschalten = function () {
56     var ostDiv = document.querySelector('.ost');
57     if (ostDiv.classList.contains('ost-open')) {
58       ostDiv.classList.remove('ost-open');
59       ostDiv.style.flexBasis = '0em';
60     } else {
61       ostDiv.classList.add('ost-open');
62       ostDiv.style.flexBasis = '6em';
63     }
64     self.menue_umschalten();
65   };
66
67   this.fusszeile_umschalten = function () {
68     var suedDiv = document.querySelector('.sued');
69     if (suedDiv.classList.contains('sued-open')) {
70       suedDiv.classList.remove('sued-open');
71       suedDiv.style.height = '0';
72     } else {
73       suedDiv.classList.add('sued-open');
74       suedDiv.style.height = '1.5em';
75     }
76     self.menue_umschalten();
77   };
78
79   this.meldung_mit_timeout = function (meldung, timeout) {
80     var s = document.querySelector('.sued');
81     s.textContent = meldung;
82     setTimeout(function () {
83       s.textContent = 'Bereit.';
84       setTimeout(function () {
85         var suedDiv = document.querySelector('.sued');
86         if (suedDiv.classList.contains('sued-open')) {
87           suedDiv.classList.remove('sued-open');
88           suedDiv.style.height = '0';
89         }
90       }, 500);
91     }, timeout);
92   };
93
94   /* Dialog-Funktionen */
95
96   /*
97    Einen Dialog aus Vorlagen erzeugen
98    
99    vurl - URL zur Dialogvorlage
100    msgTpl - URL mit einer Vorlage eines Mitteilungstextes (optional)
101    */
102   this.dialog_laden_und_zeigen = function (vurl, msgTpl) {
103     if (msgTpl !== '') {
104       fetch(msgTpl)
105               .then(data => {
106                 // Handle data
107                 self.dialog_zeigen(vurl, data);
108               }).catch(error => {
109         // Handle error
110       });
111     } else {
112       self.dialog_zeigen(vurl, '');
113     }
114   };
115
116   this.dialog_zeigen = function (vurl, inhalt) {
117     var dlg = document.querySelector(".dialog");
118     self.vorlagen.html_erzeugen(
119             vurl,
120             inhalt,
121             function (html) {
122               //dlg.html(html);
123               dlg.style.height = '5em';
124               dlg.innerHTML = html;
125               document.querySelector('.close-btn').addEventListener('click', self.dialog_schliessen);
126               //dlg.slideDown(300);
127             });
128   };
129
130   this.dialog_schliessen = function () {
131     document.querySelector('.close-btn').removeEventListener('click', self.dialog_schliessen);
132     //$('.dialog').slideUp(300);
133     var dlg = document.querySelector('.dialog');
134     //dlg.style.display = "none";
135     dlg.style.height = '0';
136     dlg.innerHTML = '';
137   };
138
139   /* API functions */
140   
141   this.um_get_user_list = function() {
b73bb6 142     //var m = 'getUserNameList';
002c44 143     var m = 'getUserNameList';
U 144     var u = '../svc/' + m;
145     self.fm_get(u, "json", function (antwort) {
b73bb6 146     self.vorlagen.html_erzeugen(
U 147       'data/tpl/inhalt.tpl',
148       JSON.parse(antwort),
149       function (h) {
150         var elem = document.getElementById('nutzer');
151         elem.innerHTML = h;
152       });
002c44 153     });
b73bb6 154   };
002c44 155
U 156   /* -------- An- und Abmelden ------------- */
157
158   this.um_get_login = function() {
159     var m = '?c=de.uhilger.um.pub.SessionManager&m=getSessionUser';
160     var u = '../pub' + m;
161     self.fm_get(u, "text", function (resp) {
162       self.userid = resp;
163       self.login_zeigen();
164       //document.querySelector("#userMenu").textContent = resp;
165     });
166   };
167
168   this.um_logout = function() {
169     var m = '?c=de.uhilger.um.pub.SessionManager&m=expireSession';
170     var u = '../pub' + m;
171     self.fm_get(u, "text", function (resp) {
172       //$('#userMenu').text('nicht angemeldet');
173       window.location.href = '../logout.html';
174     });
175   };
176
177   /* -------- ajax helper functions ----------- */
178
179   this.fm_get = function (u, dtype, scallback) {    
180     var xmlhttp = new XMLHttpRequest();
181     var url = u;
182     xmlhttp.onreadystatechange = function() {
183       if (this.readyState == 4 && this.status == 200) {
184         scallback(this.responseText);
185       }
186     };
187     xmlhttp.open("GET", url, true);
188     xmlhttp.send();
189   };
190
191 }