reenabled all info items, and show calculated skills
[brisk.git] / web / fieldify.js
1 function __fieldify_find_ancestors(objarr, name)
2 {
3     var obj;
4
5     for (var i = 0 ; i < objarr.length ; i++) {
6         obj = objarr[i];
7         var item = obj.getElementsByClassName(name + '_id');
8         if (item.length > 0) {
9             return (item);
10         }
11     }
12     return false;
13 }
14
15 // fieldsdescr = { name: { type: 'typename' }, ... }
16 function Fieldify(ancestors, fieldsdescr)
17 {
18     var item;
19
20     this.ancestors = ancestors;
21     this.field = new Array();
22     for (k in fieldsdescr) {
23         this.field[k] = fieldsdescr[k];
24         if (this.field[k].type == 'fields') {
25             if (item = __fieldify_find_ancestors(this.ancestors, k)) {
26                 this.field[k].obj = new Fieldify(item, this.field[k].fields);
27             }
28         }
29     }
30 }
31
32 Fieldify.prototype = {
33     ancestors: null,
34     field: null,
35
36     visible: function(is_visible) {
37         this.ancestors[0].style.visibility = (is_visible ? "visible" : "hidden" );
38     },
39
40     // { 'name': 'value' }
41     json2dom: function(field_values)
42     {
43         for (k in this.field) {
44             if (this.field[k].type == 'value') {
45                 this.fld_value_set(k, field_values[k]);
46             }
47             else if (this.field[k].type == 'radio') {
48                 this.fld_radio_set(k, field_values[k]);
49             }
50             else if (this.field[k].type == 'fields') {
51                 this.field[k].obj.json2dom(field_values[k]);
52             }
53         }
54     },
55
56     dom2json: function()
57     {
58         var ret = {};
59         for (k in this.field) {
60             if (this.field[k].perms == 'ro')
61                 continue;
62             if (this.field[k].type == 'value') {
63                 ret[k] = this.fld_value_get(k);
64             }
65             else if (this.field[k].type == 'radio') {
66                 ret[k] = this.fld_radio_get(k);
67             }
68             else if (this.field[k].type == 'fields') {
69                 ret[k] = this.field[k].obj.dom2json();
70             }
71         }
72         return ret;
73     },
74
75     fld_value_set: function(name, value)
76     {
77         var item = __fieldify_find_ancestors(this.ancestors, name);
78         if (item) {
79             item[0].innerHTML = value;
80         }
81     },
82
83     fld_value_get: function(name)
84     {
85         var item = __fieldify_find_ancestors(this.ancestors, name);
86         if (item) {
87             return (item[0].innerHTML);
88         }
89         return false;
90     },
91
92     fld_radio_set: function(name, value)
93     {
94         var arr = __fieldify_find_ancestors(this.ancestors, name);
95         if (arr) {
96             for (k in arr) {
97                 if (arr[k].value == value)
98                     arr[k].checked = true;
99                 else
100                     arr[k].checked = false;
101             }
102         }
103     },
104
105     fld_radio_get: function(name)
106     {
107         var ret = null;
108         var arr = __fieldify_find_ancestors(this.ancestors, name);
109         if (arr) {
110             for (k in arr) {
111                 if (arr[k].checked == true) {
112                     ret = arr[k].value;
113                     break;
114                 }
115             }
116         }
117         return ret;
118     },
119
120     tap: null
121 }