type 'fields' added to Fieldify class
[brisk.git] / web / fieldify.js
index 5be1dea..cb14c6e 100644 (file)
@@ -7,6 +7,10 @@ function Fieldify(ancestor, fieldsdescr)
     this.field = new Array();
     for (k in fieldsdescr) {
         this.field[k] = fieldsdescr[k];
+        if (this.field[k].type == 'fields') {
+            this.field[k].obj = new Fieldify(this.ancestor.getElementsByClassName(k + '_id')[0],
+                                             this.field[k].fields);
+        }
     }
 }
 
@@ -19,7 +23,7 @@ Fieldify.prototype = {
     },
 
     // { 'name': 'value' }
-    populate: function(field_values)
+    json2dom: function(field_values)
     {
         for (k in this.field) {
             if (this.field[k].type == 'value') {
@@ -28,7 +32,29 @@ Fieldify.prototype = {
             else if (this.field[k].type == 'radio') {
                 this.fld_radio_set(k, field_values[k]);
             }
+            else if (this.field[k].type == 'fields') {
+                this.field[k].obj.json2dom(field_values[k]);
+            }
+        }
+    },
+
+    dom2json: function()
+    {
+        var ret = {};
+        for (k in this.field) {
+            if (this.field[k].perms == 'ro')
+                continue;
+            if (this.field[k].type == 'value') {
+                ret[k] = this.fld_value_get(k);
+            }
+            else if (this.field[k].type == 'radio') {
+                ret[k] = this.fld_radio_get(k);
+            }
+            else if (this.field[k].type == 'fields') {
+                ret[k] = this.field[k].obj.dom2json();
+            }
         }
+        return ret;
     },
 
     fld_value_set: function(name, value)
@@ -36,6 +62,11 @@ Fieldify.prototype = {
         this.ancestor.getElementsByClassName(name + '_id')[0].innerHTML = value;
     },
 
+    fld_value_get: function(name)
+    {
+        return this.ancestor.getElementsByClassName(name + '_id')[0].innerHTML;
+    },
+
     fld_radio_set: function(name, value)
     {
         var arr = this.ancestor.getElementsByClassName(name + '_id');
@@ -47,5 +78,20 @@ Fieldify.prototype = {
                 arr[k].checked = false;
         }
     },
+
+    fld_radio_get: function(name)
+    {
+        var arr = this.ancestor.getElementsByClassName(name + '_id');
+        ret = null;
+
+        for (k in arr) {
+            if (arr[k].checked == true) {
+                ret = arr[k].value;
+                break;
+            }
+        }
+        return ret;
+    },
+
     tap: null
 }