]> gitweb @ CieloNegro.org - Rakka.git/blob - js/systemConfig.js
configuration
[Rakka.git] / js / systemConfig.js
1 (function () {
2
3      var identityDecoder = function (src) {
4          return src;
5      };
6
7      var identityEncoder = function (src) {
8          return src;
9      };
10
11      var mapDecoder = function (src) {
12          var map   = {};
13          var lines = src.split(/\n/);
14
15          $.each(lines, function () {
16                     var m = this.match(/^(\S+)\s+(\S+)$/);
17
18                     map[ m[1] ] = m[2];
19                 });
20
21          return map;
22      };
23
24      var mapEncoder = function (map) {
25          var lines = [];
26
27          $.each(map, function (key) {
28                     lines.push(key + " " + this);
29                 });
30
31          return lines.join("\n");
32      };
33
34      var boolDecoder = function (src) {
35          return src == "*";
36      };
37
38      var boolEncoder = function (bool) {
39          return bool ? "*" : "";
40      };
41
42      var decoder_of = {
43          siteName   : identityDecoder,
44          baseURI    : identityDecoder,
45          defaultPage: identityDecoder,
46          styleSheet : identityDecoder,
47          languages  : mapDecoder,
48          globalLock : boolDecoder
49      };
50
51      var encoder_of = {
52          siteName   : identityEncoder,
53          baseURI    : identityEncoder,
54          defaultPage: identityEncoder,
55          styleSheet : identityEncoder,
56          languages  : mapEncoder,
57          globalLock : boolEncoder
58      };
59
60      var cachedConf = null;
61
62     Rakka.getSystemConfig = function () {
63         if (cachedConf != null) {
64             return cachedConf;
65         }
66
67         var conf = {};
68         cachedConf = conf;
69
70         $.ajax({
71             type   : "GET",
72             url    : Rakka.baseURI + "systemConfig",
73             async  : false,
74             success: function (xml) {
75                 $(xml).find("value").each(function () {
76                     var path    = this.getAttribute("path");
77                     var decoder = decoder_of[path];
78
79                     if (decoder == null) {
80                         throw new Error("unknown config path: " + path);
81                     }
82                     else {
83                         conf[path] = decoder($(this).text());
84                     }
85                 });
86             },
87             error  : function (req) {
88                 throw new Error(req.status + " " + req.statusText);
89             }
90         });
91
92         return conf;
93     };
94
95      Rakka.showConfigPanel = function () {
96          var conf  = Rakka.getSystemConfig();
97          var $area = Rakka.switchScreen();
98
99          $area.append($.H1({}, "Configuration"));
100
101          var fldSiteName
102              = $.INPUT({type: "text", value: conf.siteName});
103
104          var fldBaseURI
105              = $.INPUT({type: "text", value: conf.baseURI});
106
107          var fldDefaultPage
108              = $.INPUT({type: "text", value: conf.defaultPage});
109
110          var fldStyleSheet
111              = $.INPUT({type: "text", value: conf.styleSheet});
112
113          var fldLanguages
114              = $.TEXTAREA({value: encoder_of.languages(conf.languages)});
115
116          var chkGlobalLock
117              = $.INPUT({type: "checkbox", checked: conf.globalLock});
118
119          var btnSave
120              = $.INPUT({type: "button", value: "Save"});
121
122          var btnCancel
123              = $.INPUT({type: "button", value: "Cancel"});
124
125          var configPanel
126              = $.TABLE({className: "pageEditor"},
127                        $.TBODY({},
128                                $.TR({},
129                                     $.TH({}, "Site name"),
130                                     $.TD({}, fldSiteName)
131                                    ),
132                                $.TR({},
133                                     $.TH({}, "Base URI"),
134                                     $.TD({}, fldBaseURI)
135                                    ),
136                                $.TR({},
137                                     $.TH({}, "Default page"),
138                                     $.TD({}, fldDefaultPage)
139                                    ),
140                                $.TR({},
141                                     $.TH({}, "Style sheet"),
142                                     $.TD({}, fldStyleSheet)
143                                    ),
144                                $.TR({},
145                                     $.TH({}, "Languages"),
146                                     $.TD({}, fldLanguages)
147                                    ),
148                                $.TR({},
149                                     $.TH({}, "Global lock"),
150                                     $.TD({},
151                                          $.LABEL({},
152                                                  chkGlobalLock,
153                                                  "Disallow guest users to edit pages."))
154                                    ),
155                                $.TR({},
156                                     $.TH({}),
157                                     $.TD({}, btnSave, btnCancel)
158                                    )
159                               )
160                       );
161
162          $area.append(configPanel);
163      };
164
165     $(document).ready(function () {
166         $("input.configButton")
167             .click(function () {
168                        Rakka.showConfigPanel();
169                    });
170     });
171
172 })();