X-Git-Url: http://mop.ddnsfree.com/gitweb/?a=blobdiff_plain;f=web%2Ffieldify.js;h=fdc9795cc49d4aaa06164539398344752fb8bcf2;hb=8c9fb4d0a68b62e3babd2a56d88059385deb3dd0;hp=254dd0d2de399cecd05b5ac03f4bc539c17d5452;hpb=29386faba01ac22d3d47e5f467412dc63b4e22cf;p=brisk.git diff --git a/web/fieldify.js b/web/fieldify.js index 254dd0d..fdc9795 100644 --- a/web/fieldify.js +++ b/web/fieldify.js @@ -1,25 +1,79 @@ +function ends_with(s, suffix) +{ + if (s.indexOf(suffix, s.length - suffix.length) !== -1) { + return true; + } + return false; +} + +function __ffa_nav(obj, ret, name) +{ + var arr; + + arr = obj.className.split(" "); + if (arr.indexOf(name + "_id") != -1) { + ret.push(obj); + return; + } + + // check if the current element is a leaf or a node + // if it is then return + for (var i = 0 ; i < arr.length ; i++) { + if (ends_with(arr[i], "_id")) { + return; + } + } + + for (var i = 0 ; i < obj.children.length ; i++) { + __ffa_nav(obj.children[i], ret, name); + } + return; +} + +function fieldify_get_dom_element(objarr, name) +{ + var obj, ret = []; + + for (var i = 0 ; i < objarr.length ; i++) { + obj = objarr[i]; + for (var e = 0 ; e < obj.children.length ; e++) { + __ffa_nav(obj.children[e], ret, name); + } + } + + if (ret.length > 0) { + return ret; + } + return false; +} // fieldsdescr = { name: { type: 'typename' }, ... } -function Fieldify(ancestor, fieldsdescr) +function Fieldify(dom_elements, fieldsdescr) { - this.ancestor = ancestor; - + var item; + + this.dom_elements = dom_elements; this.field = new Array(); for (k in fieldsdescr) { this.field[k] = fieldsdescr[k]; + if (this.field[k].type == 'fields') { + if (item = fieldify_get_dom_element(this.dom_elements, k)) { + this.field[k].obj = new Fieldify(item, this.field[k].fields); + } + } } } Fieldify.prototype = { - ancestor: null, + dom_elements: null, field: null, - + visible: function(is_visible) { - this.ancestor.style.visibility = (is_visible ? "visible" : "hidden" ); + this.dom_elements[0].style.visibility = (is_visible ? "visible" : "hidden" ); }, // { 'name': 'value' } - populate: function(field_values) + json2dom: function(field_values) { for (k in this.field) { if (this.field[k].type == 'value') { @@ -28,27 +82,75 @@ 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) { - console.log(name + "=" + value); - this.ancestor.getElementsByClassName(name + '_id')[0].innerHTML = value; + var item = fieldify_get_dom_element(this.dom_elements, name); + if (item) { + item[0].innerHTML = value; + } + }, + + fld_value_get: function(name) + { + var item = fieldify_get_dom_element(this.dom_elements, name); + if (item) { + return (item[0].innerHTML); + } + return false; }, - + fld_radio_set: function(name, value) { - var arr = this.ancestor.getElementsByClassName(name + '_id'); - - console.log(name + "=" + value); + var arr = fieldify_get_dom_element(this.dom_elements, name); + if (arr) { + for (k in arr) { + if (arr[k].value == value) + arr[k].checked = true; + else + arr[k].checked = false; + } + } + }, - for (k in arr) { - if (arr[k].value == value) - arr[k].checked = true; - else - arr[k].checked = false; + fld_radio_get: function(name) + { + var ret = null; + var arr = fieldify_get_dom_element(this.dom_elements, name); + if (arr) { + for (k in arr) { + if (arr[k].checked == true) { + ret = arr[k].value; + break; + } + } } + return ret; }, + tap: null }