1 var YInputLinker = function(){ 2 this.___listener = new YListener(); 3 var _funk_ = function(evt,desc,dat){dat.own._change_element(desc,dat);}; 4 this._change_element = function(desc,dataz){ 5 var changed=true; 6 switch(dataz.type){ 7 case 'bool' : 8 dataz.obj[dataz.index]=dataz.dom.checked||dataz.dom.value=="true"; 9 break; 10 case 'list' : 11 case 'text' : 12 dataz.obj[dataz.index]=dataz.dom.value; 13 break; 14 case 'int' : 15 var num=parseInt(dataz.dom.value); 16 if(typeof(dataz.min)=="number")num=Math.max(dataz.min,num); 17 if(typeof(dataz.max)=="number")num=Math.min(dataz.max,num); 18 num=Math.round(num); 19 if(num+""!=dataz.dom.value)dataz.dom.value=num; 20 dataz.obj[dataz.index]=num; 21 break; 22 case 'float' : 23 var num=parseFloat(dataz.dom.value); 24 if(typeof(dataz.min)=="number")num=Math.max(dataz.min,num); 25 if(typeof(dataz.max)=="number")num=Math.min(dataz.max,num); 26 if(num+""!=dataz.dom.value)dataz.dom.value=num; 27 dataz.obj[dataz.index]=num; 28 break; 29 default:changed=false; 30 31 } 32 // Function(obj,index,dom,value,datas); 33 if(changed)this.___listener.fire('change',[dataz.obj,dataz.index,dataz.dom,dataz.obj[dataz.index]]); 34 }; 35 // Function(obj,index,dom,value,datas); 36 this.addListener = function(Function,datas){ 37 this.___listener.addListener('change',Function,datas); 38 }; 39 this.removeListener = function(Function,datas){ 40 this.___listener.removeListener('change',Function,datas); 41 }; 42 this._link_dataz = function(obj,index,dom,type,more){ 43 var dataz = {own:this,obj:obj,index:index,dom:YDom.get(dom),type:type}; 44 if(more)for(var i in more)dataz[i]=more[i]; 45 if(type=="bool")dataz.dom.checked=obj[index]; 46 else dataz.dom.value=obj[index]+""; 47 //alert(index+" '"+obj[index]+"' = '"+dataz.dom.value+"'"); 48 return dataz; 49 }; 50 this.linkList = function(obj,index,dom,list){ 51 var dataz = this._link_dataz(obj,index,dom,'list',{list:[]}); 52 YEvt.addCollection(dataz.dom,['change'],_funk_,dataz); 53 return dataz.dom; 54 }; 55 this.linkText = function(obj,index,dom,highLevel){ 56 var dataz = this._link_dataz(obj,index,dom,'text'); 57 YEvt.addCollection(dataz.dom,highLevel?['keyup','mouseup']:['change','focusout'],_funk_,dataz); 58 return dataz.dom; 59 }; 60 this.linkInt = function(obj,index,dom,min,max,highLevel){ 61 var dataz = this._link_dataz(obj,index,dom,'int',{min:min,max:max}); 62 YEvt.addCollection(dataz.dom,highLevel?['keyup','mouseup']:['change','focusout'],_funk_,dataz); 63 return dataz.dom; 64 }; 65 this.linkFloat = function(obj,index,dom,min,max,highLevel){ 66 var dataz = this._link_dataz(obj,index,dom,'float',{min:min,max:max}); 67 YEvt.addCollection(dataz.dom,highLevel?['keyup','mouseup']:['change','focusout'],_funk_,dataz); 68 return dataz.dom; 69 }; 70 this.linkBool = function(obj,index,dom){ 71 var dataz = this._link_dataz(obj,index,dom,'bool'); 72 YEvt.addCollection(dataz.dom,['change'],_funk_,dataz); 73 return dataz.dom; 74 }; 75 // 76 }; 77