X-Git-Url: http://mop.ddnsfree.com/gitweb/?a=blobdiff_plain;f=web%2Ffieldify.js;h=f6bfb58318d8bca0a74b98b5dcf449411b9bd98d;hb=22d489aa1f47bfaec201d561c773d4649bbdae84;hp=19bf23fdacc07046b0a4c372e60aaa27f634c0c0;hpb=5cf7309d9937fba5b9b97c3bf0d7c6ca2db1e4df;p=brisk.git diff --git a/web/fieldify.js b/web/fieldify.js index 19bf23f..f6bfb58 100644 --- a/web/fieldify.js +++ b/web/fieldify.js @@ -1,21 +1,40 @@ +function __fieldify_find_ancestors(objarr, name) +{ + var obj; + + for (var i = 0 ; i < objarr.length ; i++) { + obj = objarr[i]; + var item = obj.getElementsByClassName(name + '_id'); + if (item.length > 0) { + return (item); + } + } + return false; +} // fieldsdescr = { name: { type: 'typename' }, ... } -function Fieldify(ancestor, fieldsdescr) +function Fieldify(ancestors, fieldsdescr) { - this.ancestor = ancestor; + var item; + this.ancestors = ancestors; this.field = new Array(); for (k in fieldsdescr) { this.field[k] = fieldsdescr[k]; + if (this.field[k].type == 'fields') { + if (item = __fieldify_find_ancestors(this.ancestors, k)) { + this.field[k].obj = new Fieldify(item, this.field[k].fields); + } + } } } Fieldify.prototype = { - ancestor: null, + ancestors: null, field: null, visible: function(is_visible) { - this.ancestor.style.visibility = (is_visible ? "visible" : "hidden" ); + this.ancestors[0].style.visibility = (is_visible ? "visible" : "hidden" ); }, // { 'name': 'value' } @@ -28,6 +47,9 @@ 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]); + } } }, @@ -43,41 +65,53 @@ Fieldify.prototype = { 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) { - this.ancestor.getElementsByClassName(name + '_id')[0].innerHTML = value; + var item = __fieldify_find_ancestors(this.ancestors, name); + if (item) { + item[0].innerHTML = value; + } }, fld_value_get: function(name) { - return this.ancestor.getElementsByClassName(name + '_id')[0].innerHTML; + var item = __fieldify_find_ancestors(this.ancestors, name); + if (item) { + return (item[0].innerHTML); + } + return false; }, fld_radio_set: function(name, value) { - var arr = this.ancestor.getElementsByClassName(name + '_id'); - - for (k in arr) { - if (arr[k].value == value) - arr[k].checked = true; - else - arr[k].checked = false; + var arr = __fieldify_find_ancestors(this.ancestors, name); + if (arr) { + for (k in arr) { + if (arr[k].value == value) + arr[k].checked = true; + else + 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; + var ret = null; + var arr = __fieldify_find_ancestors(this.ancestors, name); + if (arr) { + for (k in arr) { + if (arr[k].checked == true) { + ret = arr[k].value; + break; + } } } return ret;