From 2846628b700a116b8de45ea5489445d0ed195846 Mon Sep 17 00:00:00 2001 From: "Matteo Nastasi (mop)" Date: Sat, 21 Feb 2009 16:53:55 +0000 Subject: [PATCH] j_stand_cont refactored from scratch (inertial behavior) --- web/room.js | 308 ++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 285 insertions(+), 23 deletions(-) diff --git a/web/room.js b/web/room.js index 9e32b75..9cc2616 100644 --- a/web/room.js +++ b/web/room.js @@ -51,41 +51,303 @@ function state_add(flags) return content; } -function j_stand_cont(data) +var standup_data_old = null; + +// TODO !! +// appendChild , removeChild + +function table_add(curtag, td) +{ + var tbody = null, tr; + + do { + // console.log("wt: "+curtag.tagName); + + if (curtag.tagName.toLowerCase() == "div" || + curtag.tagName.toLowerCase() == "table") { + curtag = curtag.firstChild; + } + else if (curtag.tagName.toLowerCase() == "tbody") { + tbody = curtag; + break; + } + else + curtag = null; + } while (curtag != null); + + curtag = tbody.firstChild; + ct = 0; + do { + if (curtag.tagName.toLowerCase() == "tr") { + if (curtag.firstChild != null) { + curtag = curtag.firstChild; + ct++; + } + else { + curtag.appendChild(td); + return(true); + } + } + else if (curtag.tagName.toLowerCase() == "td") { + if (curtag.nextSibling != null) { + curtag = curtag.nextSibling; + ct++; + } + else { + if (ct < 4) { + curtag.parentNode.appendChild(td); + return (true); + } + else { + ct = 0; + curtag = curtag.parentNode.nextSibling; + } + } + } + else { + curtag = curtag.parentNode; + } + + } while (curtag != null); + + tr = document.createElement("tr"); + tr.appendChild(td); + tbody.appendChild(tr); + + return (true); +} + +function spcs(c1, c2, n) { + var ret = ""; var i; - var content; - var st, name = ""; - content = ''; - for (i = 0 ; i < data.length ; i++) { - if ((i % 4) == 0) - content += ''; - content += ''; + // walktable($("standup"), nextag); + // console.log($("standup").firstChild); + // console.log($("standup").firstChild.firstChild.firstChild.firstChild); + + // log_walk($("standup")); - if ((i % 4) == 3) - content += ''; + standup_data_old = data; } - content += ''; + else { + var idx_del, arr_add, idx_mod, arr_mod; + var idx_del_n = 0, idx_add_n = 0, idx_mod_n = 0; + var i, e; + var i_del, i_mod, i_add; + var td; + + idx_del = new Array(); + arr_add = new Array(); + map_add = new Array(); + idx_mod = new Array(); + arr_mod = new Array(); + map_cur = new Array(); + + // find removed entries + for (i = 0 ; i < standup_data_old.length ; i++) { + for (e = 0 ; e < data.length ; e++) { + if (standup_data_old[i][1] == data[e][1]) { + break; + } + } + if (e == data.length) { + idx_del[idx_del_n++] = i; + map_cur[i] = -1; + } + else { + /* modified entries */ + if (standup_data_old[i][0] != data[e][0]) { + arr_mod[idx_mod_n] = data[e]; + idx_mod[idx_mod_n++] = i; + } + map_cur[i] = e; + } + } + + // find new entries + for (e = 0 ; e < data.length ; e++) { + for (i = 0 ; i < standup_data_old.length ; i++) { + if (data[e][1] == standup_data_old[i][1] ) { + break; + } + } + if (i == standup_data_old.length) { + // console.log("ADD: "+data[e][1]); + arr_add[idx_add_n] = data[e]; + map_add[idx_add_n++] = e; + } + } + + // TODO: qui travaso add in del + + i_del = 0; + // alert("del: ["+j_stand_tdcont(standup_data_old[idx_del[i_del]])+"]"); + for (i = 0 , i_del = 0, i_mod = 0, i_add = 0, curtag = table_walk($("standup")) ; curtag != null ; curtag = table_walk(curtag), i++ ) { + // console.log("cur.id: "+curtag.id); + + // alert("i: "+i+" tagname: "+curtag.tagName+" innerHTML: ["+curtag.innerHTML+"]"); + // console.log("inloop["+i+"]: "+curtag.tagName+" ID: "+curtag.id); + if (curtag.innerHTML == "") { + // console.log("innerHTML == none"); + if (i_add < idx_add_n) { + // console.log(" to be new"); + // console.log(" add: CONT:"+j_stand_tdcont(arr_add[i_add])); + curtag.innerHTML = j_stand_tdcont(arr_add[i_add]); + curtag.id = map_add[i_add]; + i_add++ + } + } + + // else if (i_del < idx_del_n && curtag.innerHTML == j_stand_tdcont(standup_data_old[idx_del[i_del]])) { + else if (i_del < idx_del_n && curtag.id == idx_del[i_del]) { + // console.log("to be cancel["+i+"]: ID: "+curtag.id); + if (i_add < idx_add_n) { + // console.log(" to be new"); + // console.log(" add: CONT:"+j_stand_tdcont(arr_add[i_add])); + curtag.innerHTML = j_stand_tdcont(arr_add[i_add]); + curtag.id = map_add[i_add]; + i_add++ + } + else { + // console.log(" to be del"); + curtag.innerHTML = ""; + curtag.id = -1; + } + i_del++; + } + // else if (i_mod < idx_mod_n && curtag.innerHTML == j_stand_tdcont(standup_data_old[idx_mod[i_mod]])) { + else if (i_mod < idx_mod_n && curtag.id == idx_mod[i_mod]) { + // console.log(" to be mod"); + // console.log("mod: "+idx_mod[i_mod]+ " CONT:"+j_stand_tdcont(arr_mod[i_mod])); + curtag.innerHTML = j_stand_tdcont(arr_mod[i_mod]); + curtag.id = map_cur[curtag.id]; + i_mod++; + } + else + curtag.id = map_cur[curtag.id]; + } + // console.log("fineloop"); + + for (i ; i_add < idx_add_n ; i_add++, i++) { + // console.log("ADD: "+i+" arr_add: "+ arr_add[i_add][1]); + td = document.createElement("td"); + td.className = "room_standup"; + td.id = map_add[i_add]; + td.innerHTML = j_stand_tdcont(arr_add[i_add]); - $("standup").innerHTML = content; + table_add($("standup"), td); + } + standup_data_old = data; + return; + } // $("esco").innerHTML = ''; } -- 2.17.1
'; - if (data[i][0] & 0x01) - content += ''; + for (i = 0 ; i < n ; i++) { + if ((i % 2) == 0) + ret += c1; + else + ret += c2; + } - if (data[i][0] & 0x02) - content += ''; + return (ret); +} - content += data[i][1]; + +function table_walk(curtag) +{ + do { + // console.log("wt: "+curtag.tagName); + if (curtag.tagName.toLowerCase() == "div" || + curtag.tagName.toLowerCase() == "table" || + curtag.tagName.toLowerCase() == "tbody") { + curtag = curtag.firstChild; + } + else if (curtag.tagName.toLowerCase() == "tr") { + if (curtag.firstChild != null) + curtag = curtag.firstChild; + else if (curtag.tagName != '') + curtag = curtag.nextSibling; + else + curtag = null; + } + else if (curtag.tagName.toLowerCase() == "td") { + if (curtag.nextSibling != null) + curtag = curtag.nextSibling; + else { + if (curtag.parentNode.nextSibling != null && curtag.parentNode.nextSibling.tagName != '') + curtag = curtag.parentNode.nextSibling; + else + curtag = null; + } + } + else + curtag = null; + + } while (curtag != null && curtag.tagName.toLowerCase() != "td"); + + if (1 == 0) { + if (curtag == null) + alert("outtag == null"); + else + alert("outtag: "+curtag.tagName); + } + return (curtag); +} + +function j_stand_tdcont(el) +{ + var content = ""; + + if (el[0] & 0x01) + content += ''; + + if (el[0] & 0x02) + content += ''; + + content += el[1]; + + if (el[0] & 0x02) + content += ''; + + if (el[0] & 0x01) + content += ''; + + content += state_add(el[0]); + + return (content); +} + +function j_stand_cont(data) +{ + var i; + var content; + var st = 0, name = ""; + var curtag, nextag; + + if (standup_data_old == null || data.length < 4) { + // if (standup_data_old == null) { - if (data[i][0] & 0x02) - content += ''; + content = ''; + for (i = 0 ; i < data.length ; i++) { + if ((i % 4) == 0) + content += ''; + content += ''; + + if ((i % 4) == 3) + content += ''; + } + content += '
'; + content += j_stand_tdcont(data[i]); + content += '
'; + + $("standup").innerHTML = content; - if (data[i][0] & 0x01) - content += '
'; + // console.log("inizio"); + // for (i = 0 , curtag = table_walk($("standup")) ; curtag != null ; curtag = table_walk(curtag), i++ ) { + // console.log("inloop["+i+"]: "+curtag.tagName+" ID: "+curtag.id); + // } + // console.log("fine "+i); - content += state_add(data[i][0]); - content += '