function sto_evh() { clog("sto_evh2",arguments,this) } // clog(getEventListeners()) // window.addEventListener('storage',sto_evh ) function replacer_(){ clog("r",arguments,this) } function reviver(){ clog("rv",arguments,this) } function replacer(key, value) { var {gk,gv,gthis,gthats,} = gr var bv = gr.gv==this var bt = gr.gthis==this // clog("r",bt,bv,arguments,this) var sq = "" if(!bt && !bv){ cx = 0 if (gr.cnt){ // clog("CNT!!!!!") while(gr.gkeys){ cx+=1 if(cx>10){ break } kx = gr.gkeys.pop() vx = gr.gthats.pop() if(vx == this){ break } clog(vx == this,kx,vx) } } // clog("FF") // clog("FF") sq = "FF" } else if (bt && !bv) { // clog("TF") sq = "TF" } else if (!bt && bv) { // clog("FT") // gr.gthats.push(this) // gr.gkeys.push(key) if (gr.cnt > 1){ gr.gthats.push(gr.gthis) gr.gkeys.push(gr.gk) } sq = "FT" } else { clog("We shouldn't be here") } // clog(sq,[gr.gk,gr.gv]) // Exclude the 'age' property from the JSON string // if (key === "age") { // return undefined; // } if (typeof(value) != "object"){ // clog("leaf",[...gr.gkeys,key],[...gr.gkeys,key].join("."),":",value,deep_prop_v0(gr.o,[...gr.gkeys,key])) var v3 = deep_prop_v3(gr.o,[...gr.gkeys,key]) deep_prop_v3(gr.r,[...gr.gkeys,key],v3.v) var v0 = deep_prop_v0(gr.o,[...gr.gkeys,key]) // clog("leaf",[...gr.gkeys,key],[...gr.gkeys,key].join("."),":",value,"!!!",deep_prop_v3(gr.o,[...gr.gkeys,key]),deep_prop_v0(gr.o,[...gr.gkeys,key])) clog("leaf",{"":[[...gr.gkeys,key],[...gr.gkeys,key].join("."),":"],value},"!!!",v3.v==v0,v3,v0) } else if (gr.cnt) { if (!value){/*null*/} else { var v3 = deep_prop_v3(gr.o,[...gr.gkeys,key]) if (Array.isArray(value)) { deep_prop_v3(gr.r,[...gr.gkeys,key],[]) } else { deep_prop_v3(gr.r,[...gr.gkeys,key],{}) } } } gr.cnt +=1 gr.gthis = this gr.gv = value gr.gk = key // clog("~",[value]) return value; } // const jsonString = '{"name": "Alice", "age": 25, "birthdate": "1998-02-11T00:00:00Z"}'; // Default reviver function to handle date strings function defaultReviver(key, value) { // clog() clog("rv",arguments,this) // Check if the value is a date string const dateFormat = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}Z$/; if (typeof value === 'string' && dateFormat.test(value)) { return new Date(value); } return value; } function deep_prop_v0(o,p){ try { var arr = jc(p) var ret = o while (arr.length){ ret = ret[arr.shift()] } return ret } catch(err){console.error("DEEP_PROP ERR:",err)} } function deep_prop_v3(o,p,set_val="DEFAULT_VAL"){ // clog("deep_prop_v3",{o,p,set_val}) try { var arr = jc(p) var ret = o var retm = {} var key if (typeof(arr)=="string"){ arr = arr.split(".") } retm.arr = arr retm.arr0 = p while (arr.length){ // clog("deep_prop",arr,ret) key = arr.shift() if (!arr.length){ retm.v_exist = key in ret } if (!arr.length && set_val!="DEFAULT_VAL" ){ retm.orig_val = ret[key] ret[key] = set_val } ret = ret[key] retm.v = ret // clog("arr_len:",arr.length) // set_val=="DEFAULT_VAL" } if (set_val!="DEFAULT_VAL"){ // ret[key] = set_val retm.valset=true } // clog("deep_prop ret",ret) // return retm } catch(err){ retm.err=err retm.key=key retm.v="ERR" // console.error("DEEP_PROP ERR:",err) } // clog("deep_prop_v3<",{o,p,set_val,retm}) return retm } function o3_jdb0(o){ // clo // gk = [] // gv = "???" // gthis = "" // gthats = [] y = {a:1,b:2,c:3,o:{arr:[1,2],z:{q:1}},"qqq":"///", o1:{a:"123"}, } x = {c:"s",o:"","c2":1,b:{q:{"A":"????","B":{"~~":"~~~"},C:":"},"a00":""},"a0":1,"a":null, o1:{a:"ooo"}, } // x = {c:"s",o:"","c2":1,b:{q:{"A":"????","B":{}}},"a0":1,"a":null} gr = { cnt:0, gkeys:[], gk:"init", gv:"init", gthis:"init", gthats:[], r:{}, // r:jc(y), o:y, } var k,v // for s=JSON.stringify(x,replacer) clog(":",s) clog("~") // ox=JSON.parse(s,defaultReviver) // clog("~",ox) return gr } function t3_info(){ var o,en,k,v,j,i for (o of z.scene.children){ clog(o) } } t3_info() function o3_jdb(){ var o3t = { uuid:"",id:"",type:"",name:"", geometry:{type:""}, material:{ color:{r:"",g:"",b:"",isColor:""} } } var o msto.o3 = [] var ret = {arr:[]} for (o of z.scene.children){ gr = { cnt:0, gkeys:[], gk:"init", gv:"init", gthis:"init", gthats:[], r:{}, o, // r:jc(y), } var k,v // for s=JSON.stringify(o3t,replacer) ret.arr.push(gr) msto.o3.push(gr.r) } return ret } // geometry:{type:""},