From 5b5e236b38890f5c054c3e0ffd3504a3f662fa61 Mon Sep 17 00:00:00 2001 From: Veno Server Date: Tue, 11 Aug 2009 19:29:44 -0500 Subject: [PATCH] Added franz.clone(), which copies full objects via recursion. Localized into franz because various libraries already modify the Object prototype, and it ends up causing conflicts. (This works for deep copying as well) --- js/franz.js | 57 +++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 40 insertions(+), 17 deletions(-) diff --git a/js/franz.js b/js/franz.js index 37056cf..1a6c635 100644 --- a/js/franz.js +++ b/js/franz.js @@ -1,3 +1,19 @@ +/* Franz.js - Client side color swatches (awesomeness) + * + * @Author Ryan McGrath (http://twitter.com/ryanmcgrath) + * @Author Dominick Pham (http://twitter.com/enotionz) + */ + +/* Define some basic prototypes that we'll require later... */ + +Array.prototype.swap = function(a, b) { + var tmp = this[a]; + this[a] = this[b]; + this[b] = tmp; + return true; /* For the sake of being complete */ +} + +/* Franz - this is where the magic happens, pay close attention. ;) */ var franz = { canvas: {}, ctx: {}, @@ -18,6 +34,22 @@ var franz = { return false; }, + clone: function(obj) { + /* Recursively iterate through objects and clone them (Don't even try to put this on the Object prototype (recursion fail)) */ + var returnObj = (obj instanceof Array) ? [] : {}; + + for(i in obj) { + if(i == 'clone') continue; + if(obj[i] && typeof obj[i] == "object") { + returnObj[i] = obj[i].clone(); + } else { + returnObj[i] = obj[i]; + } + } + + return returnObj; + }, + loadImg: function(img_src) { franz.img = new Image(); franz.img.onload = function() { @@ -35,8 +67,6 @@ var franz = { extra_ctx.drawImage(franz.img, 0, 0, 19, 19); var imageData = extra_ctx.getImageData(1, 1, 18, 18).data; - console.log("Initial data array: " + imageData.length); - for(var i = 0; i*4 < imageData.length; i++) { franz.red[i] = imageData[i*4]; franz.green[i] = imageData[i*4 + 1]; @@ -79,10 +109,9 @@ var franz = { return false }, - getValHSV: function(red, green, blue) { - return Math.max(red,Math.max(green,blue)); - }, - getSatHSV: function(red, green, blue) { + getValHSV: function(red, green, blue) { return Math.max(red,Math.max(green,blue)); }, + + getSatHSV: function(red, green, blue) { var min, max, delta, sat; min = Math.min(red,Math.min(green,blue)); @@ -92,17 +121,19 @@ var franz = { return sat; }, + getHueHSV: function(red,green,blue) { var min, max, delta, hue; min = Math.min(red,Math.min(green,blue)); max = Math.max(red,Math.max(green,blue)); delta = max - min; - if (max == 0) + + if (max == 0) return -1; else { if (red == max) - hue = ( green - blue) / delta; //between yellow & magenta + hue = (green - blue) / delta; //between yellow & magenta else if (green == max) hue = 2 + (blue - red) / delta; //between cyan & yellow else @@ -110,7 +141,7 @@ var franz = { // hue degrees hue = hue * 60; - if (hue < 0) hue += 360; + if (hue < 0) hue += 360; } return hue; @@ -213,11 +244,3 @@ var franz = { } } - -/* define swap method for Array object */ -Array.prototype.swap=function(a, b) -{ - var tmp=this[a]; - this[a]=this[b]; - this[b]=tmp; -}