undisclosed
2020-05-11 d1b8b275ab33a0d38f2ac0ede6ae9fa4a6f798f8
commit | author | age
3d5fe0 1 function NutzerApp() {
002c44 2   var self = this;
U 3   var appMenu;
4   var vorlagen;
5   var api;
6   var userid;
7   var pfad = '';
8   var loc;
9   var modus = 'kacheln';
10
11   this.datei_neuer_text = function () {
12     self.meldung_mit_timeout("Neuer Text", 1500);
13   };
f9d0c4 14   
U 15   /* Nutzerverwaltung */
16   
17   this.nutzerliste_klick = function(event) {
18     var target = event.target;
19     var gewaehlterNutzer = document.querySelector(".nutzer-gewaehlt");
20     if(gewaehlterNutzer !== null) {
21       gewaehlterNutzer.classList.remove("nutzer-gewaehlt");
22     }
23     target.classList.add("nutzer-gewaehlt");
24   };
d1b8b2 25   
U 26   this.nutzer_speichern = function() {
27     var user = self.nutzer_dialog_lesen();
28     var kww = document.getElementById('nutzer-wkw').value;
29     if(user.pw !== kww) {
30       self.meldung_mit_timeout("Kennworte stimmen nicht ueberein.", 1500);
31     } else {
32       self.neuen_nutzer_speichern('p=' + self.serialisieren(user));
33     }
34   };
35   
36   this.nutzer_dialog_lesen = function() {
37     var id = document.getElementById('nutzer-id').value;
38     var vname = document.getElementById('nutzer-vorname').value;
39     var nname = document.getElementById('nutzer-name').value;
40     var email = document.getElementById('nutzer-email').value;
41     var kw = document.getElementById('nutzer-kw').value;
42     var user = new User(id, kw, vname, nname, email);
43     return user;
44   };
002c44 45
U 46   /* Funktionen aus App-Vorlage */
47
48   this.init = function () {
49     self.vorlagen = new Vorlagen();
50     self.appMenu = new AppMenu();
51     self.appMenu.init(
52             "data/menu/",
53             "hauptmenue.json",
54             "data/tpl/app-menu.tpl",
55             ".west",
56             "8em");
57     document.querySelector('.hamburger').addEventListener('click', function (e) {
58       self.menue_umschalten();
59     });
e86f3c 60     var dlg = document.querySelector(".dialog");
U 61     dlg.style.flexBasis = '0em';
62     self.seitenleiste_umschalten();
d1b8b2 63     self.get_login();
U 64     self.get_user_list();
002c44 65     self.loc = window.location.protocol + '//' + window.location.host;
U 66   };
67
68   this.login_zeigen = function() {
69     self.meldung_mit_timeout("Benutzer: " + self.userid, 1500);
70   };
71   
72   this.menue_umschalten = function () {
73     var ham = document.querySelector(".hamburger");
74     ham.classList.toggle("is-active"); // hamburger-icon umschalten
75     self.appMenu.toggle(); // menue oeffnen/schliessen
76   };
77
78   this.info_dialog_zeigen = function () {
79     self.dialog_laden_und_zeigen('data/tpl/dlg-info.tpl', '');
3d5fe0 80     self.menue_umschalten();
U 81   };
82
83   this.nutzer_neu_dialog_zeigen = function () {
84     self.dialog_laden_und_zeigen('data/tpl/dlg-nutzer-neu.tpl', '');
002c44 85     self.menue_umschalten();
U 86   };
87
88   this.seitenleiste_umschalten = function () {
89     var ostDiv = document.querySelector('.ost');
90     if (ostDiv.classList.contains('ost-open')) {
91       ostDiv.classList.remove('ost-open');
92       ostDiv.style.flexBasis = '0em';
93     } else {
94       ostDiv.classList.add('ost-open');
95       ostDiv.style.flexBasis = '6em';
96     }
97     self.menue_umschalten();
98   };
99
100   this.fusszeile_umschalten = function () {
101     var suedDiv = document.querySelector('.sued');
102     if (suedDiv.classList.contains('sued-open')) {
103       suedDiv.classList.remove('sued-open');
104       suedDiv.style.height = '0';
105     } else {
106       suedDiv.classList.add('sued-open');
107       suedDiv.style.height = '1.5em';
108     }
109     self.menue_umschalten();
110   };
111
112   this.meldung_mit_timeout = function (meldung, timeout) {
113     var s = document.querySelector('.sued');
114     s.textContent = meldung;
d1b8b2 115     if (!s.classList.contains('sued-open')) {
U 116       s.classList.add('sued-open');
117       s.style.height = '1.5em';
118     }
002c44 119     setTimeout(function () {
U 120       s.textContent = 'Bereit.';
121       setTimeout(function () {
122         var suedDiv = document.querySelector('.sued');
123         if (suedDiv.classList.contains('sued-open')) {
124           suedDiv.classList.remove('sued-open');
125           suedDiv.style.height = '0';
126         }
127       }, 500);
128     }, timeout);
129   };
130
131   /* Dialog-Funktionen */
132
133   /*
134    Einen Dialog aus Vorlagen erzeugen
135    
136    vurl - URL zur Dialogvorlage
137    msgTpl - URL mit einer Vorlage eines Mitteilungstextes (optional)
138    */
139   this.dialog_laden_und_zeigen = function (vurl, msgTpl) {
140     if (msgTpl !== '') {
141       fetch(msgTpl)
142               .then(data => {
143                 // Handle data
144                 self.dialog_zeigen(vurl, data);
145               }).catch(error => {
146         // Handle error
147       });
148     } else {
149       self.dialog_zeigen(vurl, '');
150     }
151   };
152
153   this.dialog_zeigen = function (vurl, inhalt) {
154     var dlg = document.querySelector(".dialog");
155     self.vorlagen.html_erzeugen(
156             vurl,
157             inhalt,
158             function (html) {
3d5fe0 159               dlg.style.flexBasis = '14em';
e86f3c 160               setTimeout(function () {
U 161                 dlg.innerHTML = html;
162                 document.querySelector('.close-btn').addEventListener('click', self.dialog_schliessen);
d1b8b2 163                 var btn = document.getElementById('nutzer-speichern-btn');
U 164                 if(btn !== null) {
165                   btn.addEventListener('click', self.nutzer_speichern);                         
166                 }                
e86f3c 167               }, 300);
002c44 168             });
U 169   };
170
171   this.dialog_schliessen = function () {
172     document.querySelector('.close-btn').removeEventListener('click', self.dialog_schliessen);
173     var dlg = document.querySelector('.dialog');
174     dlg.innerHTML = '';
e86f3c 175     dlg.style.flexBasis = '0em';
002c44 176   };
U 177
178   /* API functions */
179   
d1b8b2 180   this.get_user_list = function() {
b73bb6 181     //var m = 'getUserNameList';
002c44 182     var m = 'getUserNameList';
U 183     var u = '../svc/' + m;
d1b8b2 184     self.http_get(u, function (antwort) {
b73bb6 185     self.vorlagen.html_erzeugen(
U 186       'data/tpl/inhalt.tpl',
187       JSON.parse(antwort),
188       function (h) {
189         var elem = document.getElementById('nutzer');
190         elem.innerHTML = h;
f9d0c4 191         
U 192         var absaetze = document.querySelectorAll('p.nutzer-liste-eintrag');
193         var index;
194         for (index = 0; index < absaetze.length; index++) {
195           absaetze[index].addEventListener("click", self.nutzerliste_klick);
196         }
197         
b73bb6 198       });
002c44 199     });
b73bb6 200   };
d1b8b2 201   
U 202   this.neuen_nutzer_speichern = function(u) {
203     var url = '../svc/createUser';
204     self.http_post(url, u, function (antwort) {
205       self.get_user_list();
206       self.dialog_schliessen();
207     });
208   };
002c44 209
U 210   /* -------- An- und Abmelden ------------- */
211
d1b8b2 212   this.get_login = function() {
002c44 213     var m = '?c=de.uhilger.um.pub.SessionManager&m=getSessionUser';
U 214     var u = '../pub' + m;
d1b8b2 215     self.http_get(u, function (resp) {
002c44 216       self.userid = resp;
U 217       self.login_zeigen();
218       //document.querySelector("#userMenu").textContent = resp;
219     });
220   };
221
222   this.um_logout = function() {
223     var m = '?c=de.uhilger.um.pub.SessionManager&m=expireSession';
224     var u = '../pub' + m;
d1b8b2 225     self.http_get(u, function (resp) {
002c44 226       //$('#userMenu').text('nicht angemeldet');
U 227       window.location.href = '../logout.html';
228     });
229   };
230
231   /* -------- ajax helper functions ----------- */
232
d1b8b2 233   this.http_get = function (u, scallback) {    
002c44 234     var xmlhttp = new XMLHttpRequest();
U 235     var url = u;
236     xmlhttp.onreadystatechange = function() {
d1b8b2 237       if (this.readyState === 4 && this.status === 200) {
002c44 238         scallback(this.responseText);
U 239       }
240     };
241     xmlhttp.open("GET", url, true);
242     xmlhttp.send();
243   };
3d5fe0 244   
d1b8b2 245   this.http_post = function (url, data, callback) {
U 246     var xhr = new XMLHttpRequest();
247     xhr.onreadystatechange = function() {
248       if (this.readyState === 4 && this.status === 200) {
249         callback(this.responseText);
250       }
251     };
252     xhr.open("POST", url, true);
253     xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
254     xhr.send(data);
255   };
256   
3d5fe0 257 /* ----- Hilfsfunktionen ----- */
U 258
259   this.serialisieren = function(obj) {
260     return '{"' + obj.constructor.name + '":' + JSON.stringify(obj) + '}';
261   };
002c44 262
U 263 }
3d5fe0 264
U 265
266 /* ----- Objekte ----- */
267
268 function User(i, p, fn, ln, em) {
269   this.id = i;
270   this.pw = p;
271   this.firstName = fn;
272   this.lastName = ln;
273   this.email = em;
274 }
275