]> gitweb @ CieloNegro.org - Rakka.git/blobdiff - js/systemConfig.js
misc changes
[Rakka.git] / js / systemConfig.js
index 82abaeeb9dbfc587fbc5739121fc70fb6afa252b..ef3a2e8da9a4054dab2b15e7589ef6d4673b5c9a 100644 (file)
         var lines = src.split(/\n/);
 
         $.each(lines, function () {
-           var m = this.match(/^(\S+)\s+(\S+)$/);
+            var m = this.match(/^(\S+)\s+(\S+)$/);
 
-                   map[ m[1] ] = m[2];
-               });
+            if (m) {
+                map[ m[1] ] = m[2];
+            }
+        });
 
         return map;
     };
     };
 
     var appendConfigPanel = function ($area) {
-        var conf  = Rakka.getSystemConfig();
         $area.append($.H1({}, "Configuration"));
 
         var fldSiteName
-            = $.INPUT({type: "text", value: conf.siteName});
+            = $.INPUT({type: "text"});
 
         var fldBaseURI
-            = $.INPUT({type: "text", value: conf.baseURI});
+            = $.INPUT({type: "text"});
 
         var fldDefaultPage
-            = $.INPUT({type: "text", value: conf.defaultPage});
+            = $.INPUT({type: "text"});
 
         var fldStyleSheet
-            = $.INPUT({type: "text", value: conf.styleSheet});
+            = $.INPUT({type: "text"});
 
         var fldLanguages
-            = $.TEXTAREA({value: encoder_of.languages(conf.languages)});
+            = $.TEXTAREA({});
 
         var chkGlobalLock
-            = $.INPUT({type: "checkbox", checked: conf.globalLock});
+            = $.INPUT({type: "checkbox"});
 
         var btnSave
-            = $.INPUT({type: "button", value: "Save changes", disabled: "disabled"});
+            = $.INPUT({type: "button", value: "Save changes"});
+
+        var btnRevert
+            = $.INPUT({type: "button", value: "Revert changes"});
+
+        var makeClean = function () {
+            $(btnSave).attr({disabled: "disabled"});
+            $(btnRevert).attr({disabled: "disabled"});
+        };
+
+        var updateConfig = function () {
+            var conf  = Rakka.getSystemConfig();
+
+            fldSiteName.value     = conf.siteName;
+            fldBaseURI.value      = conf.baseURI;
+            fldDefaultPage.value  = conf.defaultPage;
+            fldStyleSheet.value   = conf.styleSheet;
+            fldLanguages.value    = encoder_of.languages(conf.languages);
+            chkGlobalLock.checked = conf.globalLock;
+
+            makeClean();
+        };
+        updateConfig();
+
+        var validate = function () {
+            var isValid = (function () {
+                               if (!isValidBaseURI(fldBaseURI.value)) {
+                                   return false;
+                               }
+
+                               if (fldDefaultPage.value.match(Rakka.rePageName) == null) {
+                                   return false;
+                               }
+
+                               if (fldStyleSheet.value.match(Rakka.rePageName) == null) {
+                                   return false;
+                               }
+
+                               if (!isValidMap(fldLanguages.value)) {
+                                   return false;
+                               }
+
+                               return true;
+                           })();
+
+            $(btnSave).attr({disabled: (isValid ? "" : "disabled")});
+        };
+
+        var makeDirty = function () {
+            $(btnRevert).attr({disabled: ""});
+            validate();
+        };
 
         $(btnSave).click(function () {
             var NS  = "http://cielonegro.org/schema/Rakka/Config/1.0";
                      success    : function () {
                          cachedConf = null;
                          Rakka.hideWaitingMessage();
-                         Rakka.restoreScreen();
+                         makeClean();
                      },
                      error      : function (req) {
                          Rakka.hideWaitingMessage();
 
+                         // FIXME: better error handling
                          var $area = Rakka.switchScreen();
                          $area.text("Error: " + req.status + " " + req.statusText);
                      }
             });
         });
 
-        var btnRevert
-            = $.INPUT({type: "button", value: "Revert changes", disabled: "disabled"});
-
         $(btnRevert).click(function () {
             if (window.confirm("Do you really want to discard changes?")) {
-                // FIXME: implement this
+                updateConfig();
             }
         });
 
                                    $.TH({}),
                                    $.TD({}, btnSave, btnRevert))));
 
-        var validate = function () {
-            var isValid = (function () {
-                               if (!isValidBaseURI(fldBaseURI.value)) {
-                                   return false;
-                               }
-
-                               if (fldDefaultPage.value.match(Rakka.rePageName) == null) {
-                                   return false;
-                               }
-
-                               if (fldStyleSheet.value.match(Rakka.rePageName) == null) {
-                                   return false;
-                               }
-
-                               if (!isValidMap(fldLanguages.value)) {
-                                   return false;
-                               }
-
-                               return true;
-                           })();
-
-             $(btnSave).attr({disabled: (isValid ? "" : "disabled")});
-         };
-
-         var isDirty = null;
-         var makeDirty = function () {
-             if (!isDirty) {
-                 $(btnRevert).attr({disabled: ""});
-                 isDirty = true;
-             }
-             validate();
-         };
-
          $(fldSiteName)
              .add(fldBaseURI)
              .add(fldDefaultPage)