ColorPicker tool
by Ufuk Ozdemir
HTML
<!-- Learn about this code on MDN: https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Colors/Color_picker_tool -->
<div id="container">
<div id="palette" class="block">
<div id="color-palette"></div>
<div id="color-info">
<div class="title"> CSS Color </div>
</div>
</div>
<div id="picker" class="block">
<div class="ui-color-picker" data-topic="picker" data-mode="HSL"></div>
<div id="picker-samples" sample-id="master"></div>
<div id="controls">
<div id="delete">
<div id="trash-can"></div>
</div>
<div id="void-sample" class="icon"></div>
</div>
</div>
<div id="canvas" data-tutorial="drop">
<div id="zindex" class="ui-input-slider" data-topic="z-index" data-info="z-index"
data-max="20" data-sensivity="10"></div>
</div>
</div>
CSS
/*
* COLOR PICKER TOOL
*/
.ui-color-picker {
width: 420px;
margin: 0;
border: 1px solid #DDD;
background-color: #FFF;
display: table;
-moz-user-select: none;
-webkit-user-select: none;
-ms-user-select: none;
user-select: none;
}
.ui-color-picker .picking-area {
width: 198px;
height: 198px;
margin: 5px;
border: 1px solid #DDD;
position: relative;
float: left;
display: table;
}
.ui-color-picker .picking-area:hover {
cursor: default;
}
/* HSV format - Hue-Saturation-Value(Brightness) */
.ui-color-picker .picking-area {
background: url('https://mdn.mozillademos.org/files/5707/picker_mask_200.png') center center;
background: -moz-linear-gradient(bottom, #000 0%, rgba(0, 0, 0, 0) 100%),
-moz-linear-gradient(left, #FFF 0%, rgba(255, 255, 255, 0) 100%);
background: -webkit-linear-gradient(bottom, #000 0%, rgba(0, 0, 0, 0) 100%),
-webkit-linear-gradient(left, #FFF 0%, rgba(255, 255, 255, 0) 100%);
background: -ms-linear-gradient(bottom, #000 0%, rgba(0, 0, 0, 0) 100%),
-ms-linear-gradient(left, #FFF 0%, rgba(255, 255, 255, 0) 100%);
background: -o-linear-gradient(bottom, #000 0%, rgba(0, 0, 0, 0) 100%),
-o-linear-gradient(left, #FFF 0%, rgba(255, 255, 255, 0) 100%);
background-color: #F00;
}
/* HSL format - Hue-Saturation-Lightness */
.ui-color-picker[data-mode='HSL'] .picking-area {
background: -moz-linear-gradient(top, hsl(0, 0%, 100%) 0%, hsla(0, 0%, 100%, 0) 50%,
hsla(0, 0%, 0%, 0) 50%, hsl(0, 0%, 0%) 100%),
-moz-linear-gradient(left, hsl(0, 0%, 50%) 0%, hsla(0, 0%, 50%, 0) 100%);
background: -webkit-linear-gradient(top, hsl(0, 0%, 100%) 0%, hsla(0, 0%, 100%, 0) 50%,
hsla(0, 0%, 0%, 0) 50%, hsl(0, 0%, 0%) 100%),
-webkit-linear-gradient(left, hsl(0, 0%, 50%) 0%, hsla(0, 0%, 50%, 0) 100%);
background: -ms-linear-gradient(top, hsl(0, 0%, 100%) 0%, hsla(0, 0%, 100%, 0) 50%,
hsla(0, 0%, 0%, 0) 50%, hsl(0, 0%, 0%) 100%),
-ms-linear-gradient(left, hsl(0, 0%, 50%) 0%, hsla(0, 0%, 50%,...
JavaScript
'use strict';
var UIColorPicker = (function UIColorPicker() {
function getElemById(id) {
return document.getElementById(id);
}
var subscribers = [];
var pickers = [];
/**
* RGBA Color class
*
* HSV/HSB and HSL (hue, saturation, value / brightness, lightness)
* @param hue 0-360
* @param saturation 0-100
* @param value 0-100
* @param lightness 0-100
*/
function Color(color) {
if(color instanceof Color === true) {
this.copy(color);
return;
}
this.r = 0;
this.g = 0;
this.b = 0;
this.a = 1;
this.hue = 0;
this.saturation = 0;
this.value = 0;
this.lightness = 0;
this.format = 'HSV';
}
function RGBColor(r, g, b) {
var color = new Color();
color.setRGBA(r, g, b, 1);
return color;
}
function RGBAColor(r, g, b, a) {
var color = new Color();
color.setRGBA(r, g, b, a);
return color;
}
function HSVColor(h, s, v) {
var color = new Color();
color.setHSV(h, s, v);
return color;
}
function HSVAColor(h, s, v, a) {
var color = new Color();
color.setHSV(h, s, v);
color.a = a;
return color;
}
function HSLColor(h, s, l) {
var color = new Color();
color.setHSL(h, s, l);
return color;
}
function HSLAColor(h, s, l, a) {
var color = new Color();
color.setHSL(h, s, l);
color.a = a;
return color;
}
Color.prototype.copy = function copy(obj) {
if(obj instanceof Color !== true) {
console.log('Typeof parameter not Color');
return;
}
this.r = obj.r;
this.g = obj.g;
this.b = obj.b;
this.a = obj.a;
this.hue = obj.hue;
this.saturation = obj.saturation;
this.value = obj.value;
this.format = '' + obj.format;
this.lightness = obj.lightness;
};
Color.prototype.setFormat = function setFormat(format) {
if (format === 'HSV')
this.format = 'HSV';
if (format === 'HSL')
this.format = 'HSL';
};
/*========== Methods to set Color Properties ==========*/
Color.prototype.isValidRGBValue = function isValidRGBValue(value) {
return (typeof(value)...