ulrich@undisclosed
2020-05-14 c995b7aefb982338ad4bd82b57ccf9295363aff9
commit | author | age
002c44 1
U 2
3 function Vorlagen() {
4   var self = this;
5   this.cache = {}; // mustache templates
6
7   /*
8     Das HTML erzeugen, das entsteht, wenn eine Vorlage mit Inhalt
9     gefüllt wird
10
11     Das Füllen erfolgt asynchron, d.h. der Programmlauf geht nach dem
12     Aufruf weiter ohne auf das Laden und Füllen der Vorlage zu warten.
13     Das fertige HTML wird der Callback-Funktion übergeben
14     sobald die Vorlage geladen und gefüllt ist, unabhängig davon, wo der
15     Programmlauf zu diesem Zeitpunkt mittlerweile ist.
16
17     vurl - URL zur Vorlagendatei
18     inhalt - die JSON-Struktur, deren Inhalt in die
19               Vorlage gefüllt werden soll
20     cb - Callback-Funktion, die gerufen wird, wenn die Vorlage gefüllt ist.
21           Dieser Callback-Funktion wird das fertige HTML übergeben
22   */
23   this.html_erzeugen = function(vurl, inhalt, cb) {
24     var vorlage = self.cache[vurl];
25     if(vorlage === undefined) {
26       self.vorlage_laden_und_fuellen(vurl, inhalt, cb);
27     } else {
28       self.vorlage_fuellen(vurl, inhalt, cb);
29     }
30   };
31
32   this.vorlage_fuellen = function(vurl, inhalt, cb) {
33     cb(Mustache.render(self.cache[vurl], inhalt));
34   };
35
36   /*
37     Eine Vorlage vom Server in den lokalen Speicher laden
38     vurl - der URL unter dem die Vorlage zu finden ist
39     inhalt - die JSON-Struktur, deren Inhalt in die
40               Vorlage gefüllt werden soll
41     cb - callback: Diese Funktion wird gerufen, wenn die Vorlage mit dem
42             Inhalt gefüllt ist
43   */
44   this.vorlage_laden_und_fuellen = function(vurl, inhalt, cb) {
45     /*
46     $.ajax({
47       url: vurl,
48       type: "GET",
49       dataType : "text"
50     }).done(function( vorlage ) {
51       self.cache[vurl] = vorlage;
52       self.vorlage_fuellen(vurl, inhalt, cb);
53     });
54     */
55     var xmlhttp = new XMLHttpRequest();
56     xmlhttp.onreadystatechange = function() {
57       if (this.readyState == 4 && this.status == 200) {
58         self.cache[vurl] = this.responseText;
59         self.vorlage_fuellen(vurl, inhalt, cb);
60       }
61     };
62     xmlhttp.open("GET", vurl, true);
63     xmlhttp.send();
64   };
65
66 }