pSBC Example
A quick example of the shading and blending capabilities. This example does not cover the conversions.
by PimpTrizkit
HTML
<br>
<table><tbody><tr><td>Shade From:</td><td><input type="text" value="rgb(114,93,20)" /></td><td><span class="myButton">Shade</span></td></tr><tr><td>Blend To:</td><td><input type="text" value="rgb(20,93,114)" /></td><td><span class="myButton">Blend</span></td></tr><tr><td>Blend Math:</td><td><input type="radio" name="math" id="math1" checked /><label for="math1">Log</label></td><td><input type="radio" name="math" id="math2" /><label for="math2">Linear</label></td></tr></tbody></table>
<br><br>
<table style="float:left">
<thead>
<tr>
<th>To White :</th>
<th>To Black :</th>
</tr>
</thead>
<tbody>
<tr><td></td><td></td></tr>
<tr><td></td><td></td></tr>
<tr><td></td><td></td></tr>
<tr><td></td><td></td></tr>
<tr><td></td><td></td></tr>
<tr><td></td><td></td></tr>
<tr><td></td><td></td></tr>
<tr><td></td><td></td></tr>
<tr><td></td><td></td></tr>
<tr><td></td><td></td></tr>
<tr><td></td><td></td></tr>
</tbody>
</table>
<table>
<thead>
<tr>
<th>Left to Right :</th>
<th>Right to Left :</th>
</tr>
</thead>
<tbody>
<tr><td></td><td></td></tr>
<tr><td></td><td></td></tr>
<tr><td></td><td></td></tr>
<tr><td></td><td></td></tr>
<tr><td></td><td></td></tr>
<tr><td></td><td></td></tr>
<tr><td></td><td></td></tr>
<tr><td></td><td></td></tr>
<tr><td></td><td></td></tr>
<tr><td></td><td></td></tr>
<tr><td></td><td></td></tr>
</tbody>
</table>
<br><hr><br>
Booyah!
CSS
.myButton:hover {color:#FFFF00;}
.myButton:active{color:#FF7777;}
.myButton {
margin:0;
padding:1px 4px 1px 3px;
border-width:1px;
border-style:outset;
border-color:#999999;
background:linear-gradient(to bottom, #1e5799 0%,#2989d8 50%,#207cca 51%,#7db9e8 100%);
border-radius:5px;
color:#FFFFFF;
cursor:pointer;
white-space:nowrap;
text-shadow: 0px 0px 3px #000000;
}
#table td {
height:30px;
width:200px;
padding:0px 0px 0px 5px;
}
#table td+td, th+th {
color:white;
background-color:black;
}
label {
cursor:pointer;
}
JavaScript
//Version 4.0
const pSBC=(p,c0,c1,l)=>{
let r,g,b,P,f,t,h,i=parseInt,m=Math.round,a=typeof(c1)=="string";
if(typeof(p)!="number"||p<-1||p>1||typeof(c0)!="string"||(c0[0]!='r'&&c0[0]!='#')||(c1&&!a))return null;
if(!this.pSBCr)this.pSBCr=(d)=>{
let n=d.length,x={};
if(n>9){
[r,g,b,a]=d=d.split(","),n=d.length;
if(n<3||n>4)return null;
x.r=i(r[3]=="a"?r.slice(5):r.slice(4)),x.g=i(g),x.b=i(b),x.a=a?parseFloat(a):-1
}else{
if(n==8||n==6||n<4)return null;
if(n<6)d="#"+d[1]+d[1]+d[2]+d[2]+d[3]+d[3]+(n>4?d[4]+d[4]:"");
d=i(d.slice(1),16);
if(n==9||n==5)x.r=d>>24&255,x.g=d>>16&255,x.b=d>>8&255,x.a=m((d&255)/0.255)/1000;
else x.r=d>>16,x.g=d>>8&255,x.b=d&255,x.a=-1
}return x};
h=c0.length>9,h=a?c1.length>9?true:c1=="c"?!h:false:h,f=pSBCr(c0),P=p<0,t=c1&&c1!="c"?pSBCr(c1):P?{r:0,g:0,b:0,a:-1}:{r:255,g:255,b:255,a:-1},p=P?p*-1:p,P=1-p;
if(!f||!t)return null;
if(l)r=m(P*f.r+p*t.r),g=m(P*f.g+p*t.g),b=m(P*f.b+p*t.b);
else r=m((P*f.r**2+p*t.r**2)**0.5),g=m((P*f.g**2+p*t.g**2)**0.5),b=m((P*f.b**2+p*t.b**2)**0.5);
a=f.a,t=t.a,f=a>=0||t>=0,a=f?a<0?t:t<0?a:a*P+t*p:0;
if(h)return"rgb"+(f?"a(":"(")+r+","+g+","+b+(f?","+m(a*1000)/1000:"")+")";
else return"#"+(4294967296+r*16777216+g*65536+b*256+(f?m(a*255):0)).toString(16).slice(1,f?undefined:-2)
}
const theShadeButton =(e)=> {
let t, i=0, l, tr, td, d = document.getElementsByTagName("tbody")[1], f = document.getElementsByTagName("input")[0].value, m = document.getElementById("math2").checked;
tr = d.getElementsByTagName("tr");
for ( l = tr.length ; i < l ; i++ ) {
td = tr[i].firstElementChild;
td.style.backgroundColor = pSBC(i/10,f,false,m);
td.innerHTML = (i/10) + " == " + pSBC(i/10,f,false,m);
td = td.nextSibling;
td.style.backgroundColor = pSBC(-i/10,f,false,m);
td.innerHTML = (-i/10) + " == " + pSBC(-i/10,f,false,m);
}
}
const theBlendButton =()=> {
let t, i=0, l, tr, td, d = document.getElementsByTagName("tbody")[2], f =...