type 'fields' added to Fieldify class
[brisk.git] / web / fieldify.js
1
2 // fieldsdescr = { name: { type: 'typename' }, ... }
3 function Fieldify(ancestor, fieldsdescr)
4 {
5     this.ancestor = ancestor;
6
7     this.field = new Array();
8     for (k in fieldsdescr) {
9         this.field[k] = fieldsdescr[k];
10         if (this.field[k].type == 'fields') {
11             this.field[k].obj = new Fieldify(this.ancestor.getElementsByClassName(k + '_id')[0],
12                                              this.field[k].fields);
13         }
14     }
15 }
16
17 Fieldify.prototype = {
18     ancestor: null,
19     field: null,
20
21     visible: function(is_visible) {
22         this.ancestor.style.visibility = (is_visible ? "visible" : "hidden" );
23     },
24
25     // { 'name': 'value' }
26     json2dom: function(field_values)
27     {
28         for (k in this.field) {
29             if (this.field[k].type == 'value') {
30                 this.fld_value_set(k, field_values[k]);
31             }
32             else if (this.field[k].type == 'radio') {
33                 this.fld_radio_set(k, field_values[k]);
34             }
35             else if (this.field[k].type == 'fields') {
36                 this.field[k].obj.json2dom(field_values[k]);
37             }
38         }
39     },
40
41     dom2json: function()
42     {
43         var ret = {};
44         for (k in this.field) {
45             if (this.field[k].perms == 'ro')
46                 continue;
47             if (this.field[k].type == 'value') {
48                 ret[k] = this.fld_value_get(k);
49             }
50             else if (this.field[k].type == 'radio') {
51                 ret[k] = this.fld_radio_get(k);
52             }
53             else if (this.field[k].type == 'fields') {
54                 ret[k] = this.field[k].obj.dom2json();
55             }
56         }
57         return ret;
58     },
59
60     fld_value_set: function(name, value)
61     {
62         this.ancestor.getElementsByClassName(name + '_id')[0].innerHTML = value;
63     },
64
65     fld_value_get: function(name)
66     {
67         return this.ancestor.getElementsByClassName(name + '_id')[0].innerHTML;
68     },
69
70     fld_radio_set: function(name, value)
71     {
72         var arr = this.ancestor.getElementsByClassName(name + '_id');
73
74         for (k in arr) {
75             if (arr[k].value == value)
76                 arr[k].checked = true;
77             else
78                 arr[k].checked = false;
79         }
80     },
81
82     fld_radio_get: function(name)
83     {
84         var arr = this.ancestor.getElementsByClassName(name + '_id');
85         ret = null;
86
87         for (k in arr) {
88             if (arr[k].checked == true) {
89                 ret = arr[k].value;
90                 break;
91             }
92         }
93         return ret;
94     },
95
96     tap: null
97 }