HTML-Tested-JavaScript

 view release on metacpan or  search on metacpan

javascript/color_picker.js  view on Meta::CPAN

/* r, g, b are between 0-255. h is in [0-360]. v,s in [0-100] */
function htcp_rgb_to_hsv(r, g, b) {
	var h, s, v;
	var min, max, delta;

	r /= 255;
	g /= 255;
	b /= 255;

	min = Math.min(r, g, b);
	max = Math.max(r, g, b);
	v = max;

	delta = max - min;
	if (max != 0)
		s = delta / max;
	else 
		return [ 0, 0, 0 ];

	if( r == max )
		h = (g - b) / delta;
	else if(g == max)
		h = 2 + (b - r) / delta;
	else
		h = 4 + (r - g) / delta;

	h *= 60;
	if(h < 0)
		h += 360;
	else if (isNaN(h))
		h = 360;

	return [ Math.round(h), Math.round(s * 100), Math.round(v * 100) ];
}

function htcp_client_x(e) { return e.clientX + window.pageXOffset; }
function htcp_client_y(e) { return e.clientY + window.pageYOffset; }

function htcp_save_x_dimensions(el, e, ctx) {
	ctx.down_x = htcp_client_x(e);
	ctx.el_x = parseFloat(el.style.left);
}

function htcp_save_y_dimensions(el, e, ctx) {
	ctx.down_y = htcp_client_y(e);
	ctx.el_y = parseFloat(el.style.top);
}

function _htcp_half_height(el) { return (parseFloat(el.offsetHeight) / 2); }
function _htcp_half_width(el) { return (parseFloat(el.offsetWidth) / 2); }

function htcp_move_by_x(el, e, ctx) {
	var pos = htcp_client_x(e) - ctx.down_x + ctx.el_x;
	var hw = _htcp_half_width(el);
	var max = el.parentNode.offsetWidth - hw;
	if (pos > max)
		pos = max;
	else if (pos < -hw)
		pos = -hw;
	el.style.left = pos + "px";
}

function htcp_move_by_y(el, e, ctx) {
	var pos = htcp_client_y(e) - ctx.down_y + ctx.el_y;
	var hh = _htcp_half_height(el);
	var max = el.parentNode.offsetHeight - hh;
	if (pos > max)
		pos = max;
	else if (pos < -hh)
		pos = -hh;
	el.style.top = pos + "px";
}

function htcp_listen_for_mouse_events(el, mdown, mmove, mup) {
	var myup = function(e) {
		e.stopPropagation();
		e.preventDefault();
		document.removeEventListener("mousemove", mmove, true);
		document.removeEventListener("mouseup", myup, true);
		mup(e);
	}
	var mydown = function(e) {
		e.stopPropagation();
		e.preventDefault();
		document.addEventListener("mousemove", mmove, true);
		document.addEventListener("mouseup", myup, true);
		mdown(e);
	}
	el.addEventListener("mousedown", mydown, false);
	return mydown;



( run in 1.701 second using v1.01-cache-2.11-cpan-119454b85a5 )