//------------------------------------------------------------------- // Copyright 2002-2011 // Contact: p.thomas@inlive.info //------------------------------------------------------------------- // Public API //------------------------------------------------------------------- // T_colorSetCallback(pcbAction) set callback // T_colorMakeSelector(pcbAction,itab) // //------------------------------------------------------------------- // Sample: // T_colorMakeSelector() // T_colorSetCallback(cbAcceptColor) // // function cbAcceptColor(color){ // color=color.toUpperCase(); // } // // Sample 2: // // function cbAcceptColor(color) { alert(color); } // T_colorSelector(document.getElementById('test'), cbAcceptColor); // //------------------------------------------------------------------- // PUBLIC DECLARATION //------------------------------------------------------------------- var T_colorResolution=20; // nb of cells per cols & rows var T_colorLighning=1; // lighting enabled var T_colorSizer=0; //sizers (+/-) enabled var T_colorBlacky=0; // % of white (0 : not used) //------------------------------------------------------------------- // PRIVATE DECLARATION //------------------------------------------------------------------- var _t_colorcallback_default; //callback var _t_colorclosecallback_default; //callback var _t_colortristate=2; var _t_ttab= new Array(); var _t_colorcanautoclose=false; var _t_colorcanbeclosed=true; var _t0 = 0; var _t1 = 0; function T_color_canClose(bset) { _t_colorcanbeclosed=bset; if(_t_colorcanbeclosed) _t0++;else _t1++; window.status = (_t_colorcanbeclosed ? 'can':'can T') + ' : '+_t0 + ' / ' + _t1 ; } function T_color_canBeClosed() { window.status = (_t_colorcanbeclosed ? 'can':'can T') + ' : '+_t0 + ' / ' + _t1 ; return _t_colorcanbeclosed; } function _t_colorClose2() { if(_t_colorclosecallback_default) _t_colorclosecallback_default(); } function _t_colorClose() { if (!T_color_canBeClosed()) return; setTimeout("_t_colorClose2()", 100); } function _t_colorOut() { if(!_t_colorcanautoclose) return; T_color_canClose(true); setTimeout(" _t_colorClose()", 1050); } function _t_colorIn() { if(!_t_colorcanautoclose) return; T_color_canClose(false); } function T_colorCloseCallback(pcbAction) { _t_colorclosecallback_default=pcbAction; } function T_colorSetCallback(pcbAction) { _t_colorcallback_default=pcbAction; } function TActor(){ this.pcbAction= null; } function T_colorMakeSelector(pcbAction,iptab) { var itab; if(T_colorResolution<5)T_colorResolution=5; if (!iptab) { itab=_t_ttab.length; _t_ttab[itab] = new TActor(); _t_ttab[itab].pcbAction = pcbAction; _t_ttab[itab].colorResolution = T_colorResolution; _t_ttab[itab].colorLighning = T_colorLighning; _t_ttab[itab].colorBlacky = T_colorBlacky; } else itab = iptab; var x,y,t=""; for(y=0;y<=_t_ttab[itab].colorResolution;y++) { t+=""; for(x=0;x<=_t_ttab[itab].colorResolution;x++) t+="
"; if(_t_ttab[itab].colorLighning) t+=""; } t+="
Rotation"; if (T_colorSizer) { t+="-"; t+="+"; } t+="
"; return t; } function _t_color2hexa(v,n) { var t="0123456789ABCDEF",r=""; while(n-->0) { r= t.substr(v%16,1)+r; v=Math.floor(v/16); } return r; } function _t_colorSelect(itab,y,x) { if (_t_ttab[itab].pcbAction) _t_ttab[itab].pcbAction(_t_colorbuild(itab, y,x)); else if(_t_colorcallback_default)_t_colorcallback_default(_t_colorbuild(itab, y,x)); } function _t_colorRotate(itab, p) { if((++_t_colortristate)>2)_t_colortristate=0; _t_colorUpdate(itab, p); } function _t_colorRes(itab,p,step) { _t_ttab[itab].colorResolution+=step; _t_colorUpdate(itab, p); } function _t_colorUpdate(itab, p) { while(p && p.nodeName!="SPAN" && p.nodeName!="DIV")p=p.parentNode; if(p)p.innerHTML=T_colorMakeSelector(false,itab); } function _t_colorbuild(itab, y,x) { var r,g,b; r=((255*y)/_t_ttab[itab].colorResolution); g=((255*(x))/_t_ttab[itab].colorResolution); b=((255*(_t_ttab[itab].colorResolution-(x)))/_t_ttab[itab].colorResolution); if (_t_ttab[itab].colorLighning) { if (_t_ttab[itab].colorBlacky>0) { r=r+(255-r)/50*_t_ttab[itab].colorBlacky; g=g+(255-g)/50*_t_ttab[itab].colorBlacky; b=b+(255-b)/50*_t_ttab[itab].colorBlacky; } else { r=r+(r)/50*_t_ttab[itab].colorBlacky; g=g+(g)/50*_t_ttab[itab].colorBlacky; b=b+(b)/50*_t_ttab[itab].colorBlacky; } } g=_t_color2hexa(g,2); b=_t_color2hexa(b,2); r=_t_color2hexa(r,2); if (_t_colortristate==0)return (r+g+b); if (_t_colortristate==1)return (g+b+r); return (b+r+g); } function _t_colorBlackSelect(itab,p,perc) { _t_ttab[itab].colorBlacky=perc; _t_colorUpdate(itab, p); } function _t_colorblackpercent(itab,y) { return Math.floor((100*y)/_t_ttab[itab].colorResolution)-50; } function _t_colorblackbuild(itab,y) { var c=_t_color2hexa((128+127*_t_colorblackpercent(itab,y)/50),2); return c+c+c; } function T_colorSelector(pdiv, cbAcceptColor, nsteps) { if (nsteps) T_colorResolution=nsteps; T_colorLighning=true; pdiv.innerHTML = T_colorMakeSelector(); T_color_canClose(false); T_colorSetCallback(cbAcceptColor); } //